Kazalo:

Naredi sam termometer za beleženje z 2 senzorjema: 3 koraki (s slikami)
Naredi sam termometer za beleženje z 2 senzorjema: 3 koraki (s slikami)

Video: Naredi sam termometer za beleženje z 2 senzorjema: 3 koraki (s slikami)

Video: Naredi sam termometer za beleženje z 2 senzorjema: 3 koraki (s slikami)
Video: Крутой ОБЗОР Беспроводной термометр для мяса Meater Plus Липован Grillex 2024, November
Anonim
Naredi sam merilni termometer z 2 senzorjema
Naredi sam merilni termometer z 2 senzorjema
Naredi sam merilni termometer z 2 senzorjema
Naredi sam merilni termometer z 2 senzorjema

Ta projekt je izboljšava mojega prejšnjega projekta "Termometer za zapisovanje sam". Meritve temperature beleži na kartico micro SD.

Spremembe strojne opreme

Modulu ure v realnem času sem dodal temperaturni senzor DS18B20, kjer je na tiskanem vezju za to napravo določeno; in dodal ustrezno žico iz "DS" zatiča RTC v D2 Arduina.

Spremembe programske opreme

Nato sem dodal in spremenil programsko opremo. Glavne spremembe so:

LCD zaslon prikazuje dve temperaturi "In" in "Out".

Datoteke dnevnika, posnete na kartici SD, imajo dve temperaturni polji, "temperature In" in "temperature Out".

Zaradi daljšega zapisa na kartici SD so bili delovni medpomnilniki za EEPROM večji, zaradi česar so se mi začele pojavljati težave s spominom. Naredil sem številne spremembe, namenjene zmanjšanju uporabe dinamičnega pomnilnika, vključno z uporabo nizov znakov za vse nize namesto predmeta String.

Del programske opreme, ki se segreje, ima velike spremembe, kar je v veliki meri posledica ugotavljanja, katera sonda je "notri" in katera "out". Ta identifikacija je večinoma samodejna. Če sonde iz nekega razloga preklopite, jih lahko odpravite tako, da izklopite "izhodno" sondo in jo nato znova priključite. Sam tega preobrata nisem doživel. Programerju ali uporabniku ni treba vnašati naslovov senzorjev, programska oprema sama odkrije naslove temperaturnih senzorjev.

Glede na testiranje, ki sem ga opravil, identifikacija temperaturnih sond in odziv na odstranitev in zamenjavo kartice SD še vedno nemoteno delujejo.

1. korak: Razvoj programske opreme

Ta korak vam daje celotno programsko opremo za dokončan projekt. Sestavil sem ga z uporabo Arduino IDE 1.6.12. Uporablja 21, 400 bajtov programskega pomnilnika (69%) in 1,278 bajtov dinamičnega pomnilnika (62%).

V kodo sem dal pripombe v upanju, da bo jasno razloženo, kaj se dogaja.

2. korak: Delo z dvema temperaturnima senzorjema - podrobnosti

Ta programska oprema uporablja knjižnico "OneWire". Ne uporablja nobene "DallasTemperature" ali podobnih knjižnic. Namesto tega ukaze in podatke iz temperaturnih senzorjev izvaja skica in jih je mogoče zlahka videti in razumeti. Na naslovu sem našel uporaben seznam ukazov knjižnice OneWire

www.pjrc.com/teensy/td_libs_OneWire.html

Ko sta dva (ali več) temperaturna senzorja, je treba ugotoviti, kateri je kateri.

Moja dva senzorja sem poklical "not" in "out", kar je značilno za poslovne enote, ki imajo v prikazovalnem modulu tipalo, ki je običajno "notri", drugi senzor pa na kabel, tako da ga lahko postavite na drugo stran zunanje stene in tako "zunaj".

Običajen pristop k identifikaciji različnih sond je odkrivanje naslovov naprav in njihovo vstavljanje v programsko opremo skupaj z identifikacijsko oznako. Vsi drugi projekti, ki sem jih videl, uporabljajo ta pristop, ne glede na to, ali uporabljajo knjižnico DallasTemperature ali ne.

Moj namen je bil, da bi programska oprema samodejno prepoznala senzorje in jih pravilno razporedila na "not" in "out". To je dovolj enostavno, če jih postavite na ločene zatiče Arduino. V tem projektu so vsi A0 do A3 ter A6 in A7 neuporabljeni, zato bi v tem primeru lahko uporabili enega od teh. Vendar mi je uspelo, da je samodejna identifikacija delovala s senzorji na istem vodilu OneWire.

Deluje takole.

Knjižnica OneWire ima ukaz "OneWireObject.search (naslov)", kjer je "naslov" niz 8 bajtov in "OneWireObject" je ime primerka predmeta OneWire, ki je bil prej ustvarjen. Lahko ima poljubno ime. Moj se imenuje "ds". Ko izdate ta ukaz "iskanje", knjižnica OneWire signalizira na enožičnem vodilu. Če najde odzivni senzor, vrne logično vrednost "TRUE" in polje "naslov" napolni z 8 -bajtnim edinstvenim identifikatorjem senzorja. Ta identifikator vključuje družinsko kodo (na začetku) in čekovni znesek (na koncu). Vmes je 6 bajtov, ki edinstveno identificirajo senzor v njegovi družini.

Vsakič, ko podate ta ukaz, dobite en rezultat (naslov in vrnitev TRUE), ki kroži po vseh napravah na vodilu OneWire. Ko se odzove vsaka naprava, se naslednjič, ko se izda "iskanje", vrne "FALSE", kar pomeni, da se je vsaka naprava na vodilu že odzvala. Če se "iskanje" znova izda, se prva naprava znova odzove - in tako v nedogled. Naprave se vedno odzivajo v istem vrstnem redu. Vrstni red odgovorov temelji na identifikatorjih naprav na vodilu OneWire. Zdi se, da gre za binarno iskanje, ki se začne od najmanj pomembnih bitov identifikatorjev naprav. Protokol, uporabljen za iskanje teh identifikatorjev, je precej zapleten in je opisan na straneh 51 - 54 dokumenta "Knjiga standardov iButton", ki je dokument v pdf obliki na naslovu https://pdfserv.maximintegrated.com/en/an/AN937.pd …

Ta iskalni postopek sem preizkusil z 1 do 11 senzorji na enem vodilu in ugotovil, da je odzivni vrstni red za določen nabor naprav vedno enak, ko pa sem na konec vodila dodal novo napravo, ni bilo možnosti Lahko bi predvidel, kje v vrstnem redu iskanja se bo pojavil. Na primer, 11. senzor, ki sem ga dodal, je prišel na položaj št. 5; in prvi senzor, ki sem ga dal na vodilo, je bil vedno zadnji v vrstnem redu iskanja.

Pri tem projektu z dvema senzorjema je eden spajen na modulu RTC; drugi je priključen z uporabo moške glave na plošči in ženske glave na kablu. Z lahkoto se lahko loči.

Ko je senzor na kablu (senzor "out") odklopljen, ukaz "search" ustvari izmenično vrnitev "TRUE" in "FALSE".

Ko je senzor na kablu priključen, ukaz "search" ustvari 3-stopenjski cikel z dvema vrednostma "TRUE" in enim "FALSE".

Moj postopek je, da izdam 1, 2 ali 3 ukaze za iskanje, dokler se ne vrne rezultat FALSE. Nato izdam še 2 ukaza "iskanje". Če drugi ne uspe (tj. LAŽNO), vem, da je na vodilu samo en senzor in da je to senzor "in". Identiteta naprave se zabeleži in dodeli senzorju "in".

Kasneje, če sta prva in druga vrnitev res, vem, da sta na vodilu dva senzorja. Preverim, kateri od njih ima isto identiteto senzorja "in", drugega pa dodelim kot "ven" senzor.

Druga manjša točka je, da se zbiranje rezultatov obeh senzorjev izvede tako, da se pošlje "začetek pretvorbe" z ukazom "preskoči ROM". Imamo možnost pošiljanja ukazov na eno napravo (z uporabo njenega edinstvenega identifikatorja) ali na vse naprave na vodilu (preskočite ROM). Koda izgleda takole:

ds.reset (); //

// pošljemo ukaz "skip ROM" (tako naslednji ukaz deluje v obeh senzorjih) ds.write (0xCC); // Preskoči ukaz ROM ds.write (0x44, 0); // pričnemo pretvorbo v obeh sondah temperature_state = wait_convert; // pojdi v stanje zakasnitve

Ko mine zahtevani čas zakasnitve, se temperature prejemajo od vsakega senzorja posebej. Tu je koda za drugi senzor (tj. OUT senzor).

if (flag2) {

sedanji = ds.reset (); ds.select (DS18B20_addr_out); ds.write (0xBE); // Branje Scratchpad -a "out" podatkov sonde [0] = ds.read (); podatki [1] = ds.read (); temperature_out = (podatki [1] << 8) + podatki [0]; temperature_out = (6 * temperature_out) + temperatura_out / 4; // pomnožimo s 6.25} else {// ni zastavica2 - tj. izhodni senzor ni priključen temperature_out = 30000; // popravi pri 300,00 C, če senzor temp ne deluje} // konec if (flag2)

Večino te programske opreme sem razvil v samostojni skici, v kateri so bili samo temperaturni senzorji, brez zapletov pri podpori LCD, RTC in SD kartic. Ta skica razvoja je v spodnji datoteki.

3. korak: Predhodni rezultati

Predhodni rezultati
Predhodni rezultati

Ta lestvica je kombinacija prvih dveh delnih dni branja.

Priporočena: