Obsah:

Teplomer na zapisovanie do domácnosti s 2 snímačmi: 3 kroky (s obrázkami)
Teplomer na zapisovanie do domácnosti s 2 snímačmi: 3 kroky (s obrázkami)

Video: Teplomer na zapisovanie do domácnosti s 2 snímačmi: 3 kroky (s obrázkami)

Video: Teplomer na zapisovanie do domácnosti s 2 snímačmi: 3 kroky (s obrázkami)
Video: Digitálny teplomer ACCURA, sklápací 2024, Júl
Anonim
DIY teplomer s 2 snímačmi
DIY teplomer s 2 snímačmi
DIY teplomer s 2 snímačmi
DIY teplomer s 2 snímačmi

Tento projekt je vylepšením môjho predchádzajúceho projektu „DIY zapisovací teplomer“. Zaznamenáva merania teploty na kartu micro SD.

Hardvérové zmeny

Do hodinového modulu v reálnom čase som pridal teplotný senzor DS18B20, kde je na doske s plošnými spojmi toto zariadenie; a pridal príslušný vodič z kolíka „DS“RTC do D2 Arduina.

Zmeny softvéru

Potom som pridal a upravil softvér. Hlavné zmeny sú tieto:

LCD displej zobrazuje dve teploty „In“a „Out“.

Protokoly zaznamenané na SD karte majú dve teplotné polia, „teplota In“a „teplota von“.

Vzhľadom na dlhší záznam na kartu SD boli pracovné vyrovnávacie pamäte pre EEPROM väčšie a v dôsledku toho som začal mať problémy s konfliktom pamäte. Vykonal som niekoľko zmien zameraných na zníženie používania dynamickej pamäte vrátane použitia znakových polí pre všetky reťazce namiesto objektu String.

Časť softvéru, ktorá meria teploty, má zásadné úpravy, z ktorých väčšina súvisí s identifikáciou sondy, ktorá je „in“a ktorá „out“. Táto identifikácia je väčšinou automatická. Ak sa z nejakého dôvodu sondy vypnú, dá sa to napraviť odpojením „von“sondy a následným opätovným zapojením. Sám som tento zvrat nezažil. Programátor alebo užívateľ nemusí zadávať adresy senzorov, softvér sám zistí adresy senzorov teploty.

Podľa testovania, ktoré som vykonal, identifikácia teplotných sond a reakcia na vybratie a výmenu karty SD stále fungujú bez problémov.

Krok 1: Vývoj softvéru

Tento krok vám poskytne úplný softvér pre dokončený projekt. Zostavil som ho pomocou Arduino IDE 1.6.12. Využíva 21 400 bajtov programovej pamäte (69%) a 1 278 bajtov dynamickej pamäte (62%).

Vložil som do kódu pripomienky v nádeji, že budú jasné, čo sa deje.

Krok 2: Práca s dvoma teplotnými snímačmi - detaily

Tento softvér používa knižnicu „OneWire“. Nepoužíva žiadne knižnice „DallasTemperature“ani podobné knižnice. Namiesto toho sú príkazy a údaje zo snímačov teploty vykonávané pomocou náčrtu a je ich možné ľahko vidieť a porozumieť im. Užitočný zoznam príkazov knižnice OneWire som našiel na

www.pjrc.com/teensy/td_libs_OneWire.html

Keď existujú dva (alebo viac) teplotných senzorov, je potrebné identifikovať, ktorý z nich je.

Moje dva senzory som nazval „in“a „out“, čo je typické pre komerčné jednotky, ktoré majú senzor v zobrazovacom module, ktorý je bežne „vo vnútri“, a druhý senzor na kábli, aby ho bolo možné umiestniť na druhú stranu. vonkajšej steny, a tak byť „mimo“.

Obvyklým prístupom k identifikácii rôznych sond je zistiť adresy zariadení a vložiť ich do softvéru spolu s identifikačným štítkom. Všetky ostatné projekty, ktoré som videl, používajú tento prístup, bez ohľadu na to, či používajú knižnicu DallasTemperature alebo nie.

Mojím zámerom bolo, aby softvér automaticky identifikoval senzory a správne ich rozdelil na „vstup“a „výstup“. To je dosť jednoduché, keď ich umiestnite na samostatné piny Arduino. V tomto projekte sú A0 až A3 a A6 a A7 všetky nepoužité, takže jeden z nich mohol byť v tomto prípade použitý. Podarilo sa mi však dosiahnuť automatickú identifikáciu senzorov na tej istej zbernici OneWire.

Funguje to takto.

Knižnica OneWire má príkaz „OneWireObject.search (adresa)“, kde „adresa“je pole s 8 bytmi a „OneWireObject“je názov inštancie objektu OneWire, ktorý bol predtým vytvorený. Môže mať akékoľvek meno, ktoré sa vám páči. Môj sa nazýva „ds“. Keď zadáte tento príkaz „hľadať“, knižnica OneWire vykoná určitú signalizáciu na jednožilovej zbernici. Ak nájde reagujúci senzor, vráti logickú hodnotu „TRUE“a do poľa „adresa“vyplní 8 -bajtový jedinečný identifikátor senzora. Tento identifikátor obsahuje rodinný kód (na začiatku) a kontrolný súčet (na konci). Medzi nimi je 6 bajtov, ktoré jednoznačne identifikujú snímač v rámci jeho rodiny.

Pri každom zadaní tohto príkazu sa získa jeden výsledok (adresa a návrat TRUE), pričom sa cyklicky prechádza všetkými zariadeniami na zbernici OneWire. Akonáhle každé zariadenie odpovie, nabudúce sa spustí „vyhľadávanie“a vráti sa „NEPRAVDA“, čo znamená, že každé zariadenie v zbernici už odpovedalo. Ak sa „hľadanie“spustí znova, prvé zariadenie odpovie znova - a tak donekonečna. Zariadenia reagujú vždy v rovnakom poradí. Poradie odpovedí je založené na identifikátoroch zariadení na zbernici OneWire. Zdá sa, že ide o binárne vyhľadávanie začínajúce od najmenej významných bitov identifikátorov zariadenia. Protokol používaný na nájdenie týchto identifikátorov je pomerne zložitý a je popísaný na stranách 51 - 54 dokumentu „Kniha štandardov iButton“, ktorý je dokumentom pdf na adrese https://pdfserv.maximintegrated.com/en/an/AN937.pd …

Testoval som tento proces vyhľadávania s 1 až 11 senzormi na jednej zbernici a zistil som, že poradie odozvy pre danú skupinu zariadení bolo vždy rovnaké, ale keď som na koniec zbernice pridal nové zariadenie, nebolo možné Vedel som predpovedať, kde v poradí vyhľadávania sa objaví. Napríklad 11. senzor, ktorý som pridal, vstúpil na pozíciu č. 5; a prvý senzor, ktorý som vložil do autobusu, bol posledný v poradí vyhľadávania.

V tomto projekte s dvoma snímačmi je jeden z nich spájkovaný na mieste v module RTC; druhý je zapojený pomocou konektora samca na doske a zásuvky samice na kábli. Dá sa ľahko odpojiť.

Keď je snímač na kábli (snímač „von“) odpojený, príkaz „hľadať“striedavo vráti hodnoty „TRUE“a „FALSE“.

Keď je snímač na kábli pripojený, príkaz „hľadať“vytvorí 3-stupňový cyklus s dvoma „TRUE“a jedným „FALSE“.

Mojím postupom je vydávať 1, 2 alebo 3 príkazy "hľadať", kým sa nevráti FALZÍVNY výsledok. Potom vydám ďalšie 2 príkazy „hľadať“. Ak zlyhá druhý (tj FALSE), viem, že na zbernici je iba jeden snímač a že je to snímač „in“. Identita zariadenia sa zaznamená a priradí senzoru "in".

Neskôr, ak sú prvý aj druhý návrat pravdivé, viem, že v autobuse sú dva snímače. Skontrolujem, ktorý z nich má identitu rovnajúcu sa senzoru „in“, a druhému priradím senzor „out“.

Ďalším drobným bodom je, že zhromažďovanie výsledkov z týchto dvoch senzorov sa vykonáva odoslaním príkazu „začať konverziu“pomocou príkazu „preskočiť ROM“. Máme možnosť odosielať príkazy na jedno zariadenie (pomocou jeho jedinečného identifikátora) alebo na všetky zariadenia na zbernici (preskočiť ROM). Kód vyzerá takto:

ds.reset (); //

// odoslanie príkazu „preskočiť ROM“(nasledujúci príkaz teda funguje v oboch snímačoch) ds.write (0xCC); // Preskočiť príkaz ROM ds.write (0x44, 0); // spustenie konverzie v obidvoch sondách temperature_state = wait_convert; // prejdi do stavu zdržania

Po uplynutí požadovaného času oneskorenia sa teploty prijmú z každého snímača jednotlivo. Tu je kód pre druhý snímač (tj. Snímač OUT).

if (flag2) {

prítomný = ds.reset (); ds.select (DS18B20_addr_out); ds.write (0xBE); // Prečítajte si zápisník údajov sondy „von“[0] = ds.read (); údaje [1] = ds.read (); teplota_výstup = (údaje [1] << 8) + údaje [0]; teplota_out = (6 * teplota_out) + teplota_out / 4; // vynásobenie 6,25} else {// nie príznak2 - tj výstupný snímač nie je pripojený teplota_out = 30 000; // oprava na 300,00 C, ak snímač teploty nefunguje} // koniec if (flag2)

Väčšinu tohto softvéru som vypracoval v samostatnom náčrte, ktorý obsahoval iba snímače teploty, bez komplikácií s podporou LCD, RTC a SD karty. Tento náčrt vývoja je v nižšie uvedenom súbore.

Krok 3: Predbežné výsledky

Predbežné výsledky
Predbežné výsledky

Tento graf je kombináciou prvých dvoch čiastkových dní čítania.

Odporúča: