Sadržaj:

Uradi sam termometar za bilježenje s 2 senzora: 3 koraka (sa slikama)
Uradi sam termometar za bilježenje s 2 senzora: 3 koraka (sa slikama)

Video: Uradi sam termometar za bilježenje s 2 senzora: 3 koraka (sa slikama)

Video: Uradi sam termometar za bilježenje s 2 senzora: 3 koraka (sa slikama)
Video: Вкусная утка в ПИВЕ!! Рецепт сочной утки! Как приготовить утку на гриле 2024, Srpanj
Anonim
Uradi sam termometar za bilježenje s 2 senzora
Uradi sam termometar za bilježenje s 2 senzora
Uradi sam termometar za bilježenje s 2 senzora
Uradi sam termometar za bilježenje s 2 senzora

Ovaj projekt je poboljšanje mog prethodnog projekta "Uradi sam termometar za bilježenje". Mjerenja temperature bilježi na mikro SD karticu.

Promjene hardvera

Dodao sam senzor temperature DS18B20 modulu sata u stvarnom vremenu, gdje na ploči s tiskanim pločicama postoji odredba za ovaj uređaj; i dodao odgovarajuću žicu s "DS" pina RTC -a u D2 Arduina.

Promjene softvera

Zatim sam dodao i promijenio softver. Glavne promjene su:

LCD zaslon prikazuje dvije temperature "In" i "Out".

Datoteke zapisnika snimljene na SD kartici imaju dva temperaturna polja, "temperature In" i "temperature Out".

Zbog duljeg zapisa na SD kartici, radni međuspremnici za EEPROM bili su veći i zbog toga sam počeo imati problema s memorijskim sukobom. Napravio sam brojne izmjene usmjerene na smanjenje upotrebe dinamičke memorije, uključujući korištenje nizova znakova za sve nizove umjesto objekta String.

Dio softvera koji dobiva temperaturu ima velike izmjene, od kojih se velik dio odnosi na identificiranje koja je sonda "unutra", a koja "van". Ta je identifikacija uglavnom automatska. Ako se iz nekog razloga sonde prebace, to se može ispraviti tako da isključite "vanjsku" sondu, a zatim je ponovno uključite. Nisam osobno doživio ovaj preokret. Programer ili korisnik ne moraju upisivati adrese senzora, softver sam otkriva adrese osjetnika temperature.

Prema mojim testiranjima, identifikacija temperaturnih sondi i odgovor na uklanjanje i zamjenu SD kartice i dalje rade besprijekorno.

Korak 1: Razvoj softvera

Ovaj korak daje vam potpuni softver za dovršeni projekt. Sastavio sam ga koristeći Arduino IDE 1.6.12. Koristi 21, 400 bajtova programske memorije (69%) i 1,278 bajta dinamičke memorije (62%).

Stavio sam komentare u kôd u nadi da će mi biti jasno što se događa.

Korak 2: Rad s dva temperaturna senzora - detalji

Ovaj softver koristi biblioteku "OneWire". Ne koristi nikakve "DallasTemperature" ili slične knjižnice. Umjesto toga, naredbe i podaci s temperaturnih senzora rade se prema skici i mogu se vidjeti i razumjeti prilično lako. Našao sam koristan popis naredbi knjižnice OneWire na adresi

www.pjrc.com/teensy/td_libs_OneWire.html

Kad postoje dva (ili više) temperaturna senzora, postaje potrebno identificirati koji je koji.

Nazvao sam svoja dva senzora "unutra" i "van", što je tipično za poslovne jedinice koje imaju senzor u modulu zaslona koji je obično "unutra", a drugi senzor na kabelu tako da se može staviti s druge strane vanjskog zida i tako biti "vani".

Uobičajen pristup identificiranju različitih sondi je otkrivanje adresa uređaja i njihovo stavljanje u softver zajedno s identifikacijskom naljepnicom. Svi drugi projekti koje sam vidio koriste ovaj pristup, bez obzira koriste li biblioteku DallasTemperature ili ne.

Namjera mi je bila da softver treba automatski identificirati senzore i ispravno ih rasporediti na "unutra" i "van". To je dovoljno jednostavno učiniti stavljanjem na zasebne Arduino igle. U ovom projektu svi A0 do A3 i A6 i A7 su nekorišteni, pa se jedan od njih mogao koristiti u ovom slučaju. Međutim, uspio sam da automatska identifikacija radi sa senzorima na istoj sabirnici OneWire.

Radi ovako.

Knjižnica OneWire ima naredbu "OneWireObject.search (adresa)" gdje je "adresa" niz od 8 bajtova, a "OneWireObject" naziv instance prethodno stvorenog objekta OneWire. Može imati bilo koje ime koje vam se sviđa. Moj se zove "ds". Kad izdate ovu naredbu "pretraživanje", knjižnica OneWire daje određenu signalizaciju na sabirnici s jednom žicom. Ako pronađe senzor koji reagira, vraća logičku vrijednost "TRUE" i popunjava polje "adresa" s 8 -bitnim jedinstvenim identifikatorom senzora. Ovaj identifikator uključuje obiteljski kod (na početku) i čekovni iznos (na kraju). Između je 6 bajtova koji jedinstveno identificiraju senzor unutar njegove obitelji.

Svaki rezultat (adresa i povrat TRUE) dobiva se svaki put kada se ova naredba da, prolazeći kroz sve uređaje na sabirnici OneWire. Kad se svaki uređaj odazove, sljedeći put kada se izda "pretraživanje", povrat je "FALSE", što znači da je svaki uređaj na sabirnici već odgovorio. Ako se "pretraživanje" ponovno izda, prvi uređaj ponovno reagira - i tako u nedogled. Uređaji uvijek reagiraju istim redoslijedom. Redoslijed odgovora temelji se na identifikatorima uređaja na sabirnici OneWire. Čini se da je to binarno pretraživanje koje počinje od najmanje bitnih bitova identifikatora uređaja. Protokol koji se koristi za pronalaženje ovih identifikatora prilično je složen i opisan je na stranicama 51 - 54 dokumenta "Knjiga standarda iButton" koji je pdf dokument na https://pdfserv.maximintegrated.com/en/an/AN937.pd …

Testirao sam ovaj postupak pretraživanja s 1 do 11 senzora na jednoj sabirnici i otkrio da je redoslijed odgovora za određeni skup uređaja uvijek isti, ali kada sam dodao novi uređaj na kraj sabirnice, nije bilo načina Mogao sam predvidjeti gdje će se u redoslijedu pretraživanja pojaviti. Na primjer, 11. senzor koji sam dodao došao je na poziciju br.5; a prvi senzor koji sam stavio u autobus bio je uvijek zadnji u redoslijedu pretraživanja.

U ovom projektu s dva senzora, jedan od njih je lemljen na mjestu RTC modula; drugi je priključen pomoću muškog zaglavlja na ploči i ženskog zaglavlja na kabelu. Lako se može odvojiti.

Kad se senzor na kabelu ("vanjski" osjetnik) odvoji, naredba "traži" proizvodi naizmjenične povratne vrijednosti "TRUE" i "FALSE".

Kad je senzor na kabelu spojen, naredba "search" proizvodi trostepeni ciklus, s dva "TRUE" i jednim "FALSE" povratom.

Moj postupak je izdati 1, 2 ili 3 naredbe za "pretraživanje", sve dok se ne vrati FALSE rezultat. Zatim izdajem još 2 naredbe "traži". Ako drugi ne uspije (tj. FALSE) znam da postoji samo jedan senzor na sabirnici i da je to "in" osjetnik. Identitet uređaja se snima i dodjeljuje senzoru "in".

Kasnije, ako su i prvi i drugi povrat ISTINITI, znam da postoje dva senzora u sabirnici. Provjeravam koji od njih ima identitet jednak senzoru "in", a drugom dodjeljujem senzor "out".

Druga je važna točka to što se prikupljanje rezultata s dva senzora vrši slanjem "pokretanja pretvorbe" takozvanom naredbom "preskoči ROM". Imamo mogućnost slanja naredbi na jedan uređaj (koristeći njegov jedinstveni identifikator) ili na sve uređaje na sabirnici (preskočite ROM). Kod izgleda ovako:

ds.reset (); //

// šalje naredbu "skip ROM" (tako da sljedeća naredba radi u oba senzora) ds.write (0xCC); // Preskoči naredbu ROM -a ds.write (0x44, 0); // pokretanje pretvorbe u obje sonde temperature_state = wait_convert; // ići u stanje odgode

Kad prođe potrebno vrijeme odgode, temperature se primaju sa svakog senzora ponaosob. Ovdje je kôd za drugi senzor (tj. OUT osjetnik).

if (flag2) {

prisutan = ds.reset (); ds.select (DS18B20_addr_out); ds.write (0xBE); // Čitanje Scratchpada "out" podataka sonde [0] = ds.read (); podaci [1] = ds.read (); temperature_out = (podaci [1] << 8) + podaci [0]; temperatura_izlaz = (6 * temperatura_izlaz) + temperatura_izlaz / 4; // pomnožimo sa 6.25} else {// ne zastavica2 - tj. vanjski osjetnik nije spojen temperature_out = 30000; // popravljamo na 300,00 C ako senzor temperature ne radi} // kraj if (flag2)

Većinu ovog softvera razradio sam u samostalnoj skici u kojoj su bili samo senzori temperature, bez komplikacija s podrškom za LCD, RTC i SD karticu. Ova skica razvoja nalazi se u donjoj datoteci.

Korak 3: Preliminarni rezultati

Preliminarni rezultati
Preliminarni rezultati

Ovaj grafikon je kombinacija prva dva neradna čitanja.

Preporučeni: