Obsah:

DIY teploměr se 2 senzory: 3 kroky (s obrázky)
DIY teploměr se 2 senzory: 3 kroky (s obrázky)

Video: DIY teploměr se 2 senzory: 3 kroky (s obrázky)

Video: DIY teploměr se 2 senzory: 3 kroky (s obrázky)
Video: Infračervený teploměr (vše vám vysvětlím) 2024, Červenec
Anonim
DIY teploměr se 2 senzory
DIY teploměr se 2 senzory
DIY teploměr se 2 senzory
DIY teploměr se 2 senzory

Tento projekt je vylepšení mého předchozího projektu „DIY Logging Thermometer“. Zaznamenává měření teploty na kartu micro SD.

Změny hardwaru

Přidal jsem teplotní senzor DS18B20 do hodinového modulu reálného času, kde je na desce plošných spojů zajištěno toto zařízení; a přidal příslušný vodič z kolíku „DS“RTC do D2 Arduina.

Změny softwaru

Poté jsem přidal a upravil software. Hlavní změny jsou:

LCD displej zobrazuje dvě teploty „In“a „Out“.

Soubory protokolu zaznamenané na SD kartě mají dvě teplotní pole, „teplota In“a „teplota ven“.

Kvůli delšímu záznamu na SD kartu byly pracovní vyrovnávací paměti pro EEPROM větší a v důsledku toho jsem začal mít problémy s konfliktem paměti. Provedl jsem řadu změn zaměřených na snížení využití dynamické paměti, včetně použití znakových polí pro všechny řetězce místo objektu String.

Část softwaru, která dostává teploty, má zásadní úpravy, z nichž většina souvisí s identifikací, která sonda je „in“a která „out“. Tato identifikace je většinou automatická. Pokud se sondy z nějakého důvodu přepnou, lze to napravit odpojením sondy „out“a poté opětovným zapojením. Sám jsem tento zvrat nezažil. Programátor nebo uživatel nemusí zadávat adresy senzorů, software sám zjistí adresy teplotních senzorů.

Podle testů, které jsem provedl, identifikace teplotních sond a reakce na vyjmutí a výměnu karty SD stále fungují bez problémů.

Krok 1: Vývoj softwaru

Tento krok vám poskytne úplný software pro dokončený projekt. Zkompiloval jsem to pomocí Arduino IDE 1.6.12. Využívá 21 400 bajtů programové paměti (69%) a 1 278 bajtů dynamické paměti (62%).

Vložil jsem komentáře do kódu v naději, že bude jasné, co se děje.

Krok 2: Práce se dvěma teplotními senzory - detaily

Tento software používá knihovnu „OneWire“. Nepoužívá žádné knihovny „DallasTemperature“ani podobné knihovny. Místo toho jsou příkazy a data ze snímačů teploty prováděny náčrtem a lze je snadno vidět a pochopit. Našel jsem užitečný seznam příkazů knihovny OneWire na

www.pjrc.com/teensy/td_libs_OneWire.html

Pokud existují dva (nebo více) teplotních senzorů, je nutné identifikovat, který z nich je který.

Nazval jsem své dva senzory „in“a „out“, což je typické pro komerční jednotky, které mají senzor v zobrazovacím modulu, který je normálně „uvnitř“, a druhý senzor na kabelu, aby jej bylo možné umístit na druhou stranu vnější stěny a být tak „venku“.

Obvyklým přístupem k identifikaci různých sond je zjistit adresy zařízení a vložit je do softwaru spolu s identifikačním štítkem. Všechny ostatní projekty, které jsem viděl, používají tento přístup, bez ohledu na to, zda používají knihovnu DallasTemperature nebo ne.

Mým záměrem bylo, aby software automaticky identifikoval senzory a správně je přiřadil k "in" a "out". To lze snadno provést tak, že je umístíte na samostatné piny Arduino. V tomto projektu jsou A0 až A3 a A6 a A7 všechny nepoužité, takže jeden z nich mohl být v tomto případě použit. Podařilo se mi však nechat automatickou identifikaci pracovat se senzory na stejné sběrnici OneWire.

Funguje to takto.

Knihovna OneWire má příkaz „OneWireObject.search (adresa)“, kde „adresa“je pole 8 bajtů a „OneWireObject“je název instance objektu OneWire, který byl dříve vytvořen. Může mít libovolné jméno, které se vám líbí. Můj se nazývá „ds“. Když zadáte tento příkaz „hledat“, knihovna OneWire provede nějakou signalizaci na jednodrátové sběrnici. Pokud najde reagující senzor, vrátí logickou hodnotu „TRUE“a vyplní pole „adresa“jedinečným identifikátorem senzoru o velikosti 8 bajtů. Tento identifikátor obsahuje rodinný kód (na začátku) a kontrolní součet (na konci). Mezi nimi je 6 bajtů, které jednoznačně identifikují senzor v jeho rodině.

Při každém zadání tohoto příkazu se získá jeden výsledek (adresa a návrat TRUE), který prochází všechna zařízení na sběrnici OneWire. Jakmile každé zařízení zareaguje, při příštím spuštění „hledání“bude návrat „FALSE“, což znamená, že každé zařízení na sběrnici již odpovědělo. Pokud se znovu spustí „hledání“, první zařízení znovu odpoví - a tak dále neomezeně dlouho. Zařízení vždy reagují ve stejném pořadí. Pořadí odpovědí je založeno na identifikátorech zařízení na sběrnici OneWire. Zdá se, že jde o binární vyhledávání počínaje nejméně významnými bity identifikátorů zařízení. Protokol používaný k nalezení těchto identifikátorů je poměrně složitý a je popsán na stranách 51 - 54 dokumentu „Kniha standardů iButton“, což je dokument ve formátu PDF na adrese https://pdfserv.maximintegrated.com/en/an/AN937.pd …

Testoval jsem tento vyhledávací proces s 1 až 11 senzory na jedné sběrnici a zjistil jsem, že pořadí odezvy pro danou sadu zařízení bylo vždy stejné, ale když jsem přidal nové zařízení na konec sběrnice, nebylo možné Dokázal jsem předpovědět, kde v pořadí hledání se objeví. Například 11. senzor, který jsem přidal, přišel na pozici č. 5; a první senzor, který jsem do autobusu nasadil, byl poslední v pořadí hledání.

V tomto projektu se dvěma senzory je jeden z nich připájen na místo na modulu RTC; druhý je zapojen pomocí samčího konektoru na desce a samičího konektoru na kabelu. Lze jej snadno oddělit.

Když je snímač na kabelu (snímač „out“) odpojen, příkaz „search“vytvoří střídavě „TRUE“a „FALSE“.

Když je připojen senzor na kabelu, příkaz „hledat“vytvoří 3stupňový cyklus se dvěma „TRUE“a jedním „FALSE“.

Můj postup je vydávat 1, 2 nebo 3 příkazy „hledat“, dokud se nevrátí FALSE výsledek. Poté vydám další 2 příkazy „hledat“. Pokud druhý selže (tj. FALSE), vím, že na sběrnici je pouze jeden snímač a že je to snímač „in“. Identita zařízení je zaznamenána a přiřazena senzoru "in".

Později, pokud jsou první i druhé návraty PRAVDA, vím, že v autobusu jsou dva senzory. Zkontroluji, který z nich má identitu stejnou jako snímač „in“, a přidělím ten druhý jako snímač „out“.

Dalším drobným bodem je, že shromažďování výsledků ze dvou senzorů se provádí odesláním příkazu „spustit převod“příkazem „přeskočit ROM“. Máme možnost posílat příkazy na jedno zařízení (pomocí jeho jedinečného identifikátoru) nebo na všechna zařízení na sběrnici (přeskočit ROM). Kód vypadá takto:

ds.reset (); //

// odeslání příkazu „přeskočit ROM“(další příkaz tedy funguje v obou čidlech) ds.write (0xCC); // Přeskočit příkaz ROM ds.write (0x44, 0); // zahájení převodu v obou sondách temperature_state = wait_convert; // přejít do stavu zpoždění

Po uplynutí požadované doby zpoždění jsou teploty přijímány z každého snímače samostatně. Zde je kód pro druhý snímač (tj. Snímač OUT).

if (flag2) {

present = ds.reset (); ds.select (DS18B20_addr_out); ds.write (0xBE); // Přečíst Scratchpad z dat sondy "out" [0] = ds.read (); data [1] = ds.read (); teplota_out = (data [1] << 8) + data [0]; teplota_out = (6 * teplota_out) + teplota_out / 4; // vynásobení 6,25} else {// ne příznak2 - tj. čidlo výstupu není připojeno teplota_out = 30000; // oprava na 300,00 C, pokud teplotní čidlo nefunguje} // konec if (flag2)

Většinu tohoto softwaru jsem vypracoval v samostatném náčrtu, který obsahoval pouze teplotní senzory, bez komplikací podpory LCD, RTC a SD karet. Tato vývojová skica je v souboru níže.

Krok 3: Předběžné výsledky

Předběžné výsledky
Předběžné výsledky

Tento graf je kombinací prvních dvou dílčích dnů čtení.

Doporučuje: