Sadržaj:

Termometar za bilježenje uradi sam sa 2 senzora: 3 koraka (sa slikama)
Termometar za bilježenje uradi sam sa 2 senzora: 3 koraka (sa slikama)

Video: Termometar za bilježenje uradi sam sa 2 senzora: 3 koraka (sa slikama)

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

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

Promjene hardvera

Dodao sam senzor temperature DS18B20 modulu sata u realnom vremenu, gdje postoji mogućnost na štampanoj ploči za ovaj uređaj; i dodao odgovarajuću žicu sa "DS" pina RTC -a u D2 Arduina.

Promjene softvera

Zatim sam dodao i promijenio softver. Glavne promjene su:

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

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

Zbog dužeg zapisa na SD kartici, radni međuspremnici za EEPROM su bili veći i kao rezultat toga počeli su mi se javljati problemi u sukobu memorije. Napravio sam brojne izmjene usmjerene na smanjenje upotrebe dinamičke memorije, uključujući upotrebu nizova znakova za sve nizove umjesto objekta String.

Dio softvera koji postiže temperature ima velike izmjene, od kojih se većina odnosi na identifikaciju koja je sonda "unutra", a koja "van". Ova identifikacija je uglavnom automatska. Ako se iz nekog razloga sonde prebace, to se može ispraviti isključivanjem "vanjske" sonde i ponovnim uključivanjem. Nisam lično doživeo ovaj preokret. Programer ili korisnik ne moraju upisivati adrese senzora, softver sam otkriva adrese senzora 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 šta se dešava.

Korak 2: Rad s dva temperaturna senzora - detalji

Ovaj softver koristi biblioteku "OneWire". Ne koristi nikakve "DallasTemperature" ili slične biblioteke. Umjesto toga, naredbe i podaci sa temperaturnih senzora se izvršavaju prema skici i mogu se vidjeti i razumjeti prilično lako. Našao sam korisnu listu naredbi biblioteke OneWire na adresi

www.pjrc.com/teensy/td_libs_OneWire.html

Kada 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 ekrana koji je obično "unutra", a drugi senzor na kabelu tako da se može staviti s druge strane vanjskog zida i tako biti "van".

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

Moja namjera 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 postići automatsku identifikaciju sa senzorima na istoj sabirnici OneWire.

Radi ovako.

Biblioteka 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 želite. Moj se zove "ds". Kad izdate ovu naredbu "pretraživanje", biblioteka OneWire vrši određenu signalizaciju na jednožilnoj sabirnici. Ako pronađe senzor koji reagira, vraća logičku vrijednost "TRUE" i popunjava "address" niz sa 8 -bajtnim jedinstvenim identifikatorom senzora. Ovaj identifikator uključuje šifru porodice (na početku) i čekovni iznos (na kraju). Između je 6 bajtova koji jedinstveno identifikuju senzor u njegovoj porodici.

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", povratak je "FALSE", što znači da je svaki uređaj na sabirnici već odgovorio. Ako se "pretraživanje" ponovo izda, prvi uređaj će ponovno odgovoriti - 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 je prilično 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 proces pretraživanja sa 1 do 11 senzora na jednoj sabirnici i otkrio da je redoslijed odgovora za dati 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 sa dva senzora, jedan od njih je lemljen na modulu RTC; drugi je priključen pomoću muškog zaglavlja na ploči i ženskog zaglavlja na kablu. Lako se može odvojiti.

Kada se senzor na kablu ("out" senzor) odvoji, naredba "search" proizvodi naizmjenične povratne vrijednosti "TRUE" i "FALSE".

Kada je senzor na kablu priključen, naredba "search" proizvodi trostepeni ciklus, sa dva "TRUE" i jednim "FALSE" povratom.

Moja procedura je da izdajem 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" senzor. Identitet uređaja se snima i dodjeljuje senzoru "in".

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

Druga sporedna stvar je da se prikupljanje rezultata s dva senzora vrši slanjem "pokretanja konverzije" 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" (naredna naredba radi na oba senzora) ds.write (0xCC); // Preskoči naredbu ROM -a ds.write (0x44, 0); // pokretanje konverzije u obje sonde temperature_state = wait_convert; // idite na stanje odgode

Kada prođe potrebno vrijeme odgode, temperature se primaju sa svakog senzora ponaosob. Evo koda za drugi senzor (tj. OUT senzor).

if (flag2) {

present = ds.reset (); ds.select (DS18B20_addr_out); ds.write (0xBE); // Čitanje Scratchpada "out" podataka sonde [0] = ds.read (); data [1] = ds.read (); temperature_out = (podaci [1] << 8) + podaci [0]; temperatura_izlaz = (6 * temperatura_izlaz) + temperatura_izlaz / 4; // pomnožimo sa 6.25} else {// nije flag2 - tj. vanjski senzor nije povezan temperature_out = 30000; // popravlja 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čuje se: