Satura rādītājs:

DIY mežizstrādes termometrs ar 2 sensoriem: 3 soļi (ar attēliem)
DIY mežizstrādes termometrs ar 2 sensoriem: 3 soļi (ar attēliem)

Video: DIY mežizstrādes termometrs ar 2 sensoriem: 3 soļi (ar attēliem)

Video: DIY mežizstrādes termometrs ar 2 sensoriem: 3 soļi (ar attēliem)
Video: 40 полезных автотоваров с Aliexpress, которые упростят жизнь любому автовладельцу #3 2024, Jūlijs
Anonim
DIY mežizstrādes termometrs ar 2 sensoriem
DIY mežizstrādes termometrs ar 2 sensoriem
DIY mežizstrādes termometrs ar 2 sensoriem
DIY mežizstrādes termometrs ar 2 sensoriem

Šis projekts ir mana iepriekšējā projekta "DIY mežizstrādes termometrs" uzlabojums. Temperatūras mērījumus reģistrē micro SD kartē.

Aparatūras izmaiņas

Es pievienoju DS18B20 temperatūras sensoru reālā laika pulksteņa modulim, kur šīs ierīces iespiedshēmas plates ir paredzētas; un pievienoja atbilstošo vadu no RTC "DS" tapas Arduino D2.

Programmatūras izmaiņas

Tad es pievienoju un pārveidoju programmatūru. Galvenās izmaiņas ir šādas:

LCD displejā ir redzamas divas temperatūras "In" un "Out".

Žurnāla failiem, kas ierakstīti SD kartē, ir divi temperatūras lauki - "temperatūra iekšā" un "temperatūra ārā".

Ilgāka ieraksta dēļ SD kartē EEPROM darba buferi bija lielāki, un tāpēc man sākās atmiņas konfliktu problēmas. Es veicu vairākas izmaiņas, kuru mērķis bija samazināt dinamiskās atmiņas izmantošanu, ieskaitot rakstzīmju masīvu izmantošanu visām virknēm, nevis String objektu.

Programmatūras daļai, kas iegūst temperatūru, ir būtiskas izmaiņas, no kurām lielākā daļa ir saistīta ar to, lai noteiktu, kura zonde ir "iekšā" un kura - "ārā". Šī identifikācija lielākoties notiek automātiski. Ja kāda iemesla dēļ zondes tiek pārslēgtas, to var labot, atvienojot zondi no izejas un pēc tam atkal pievienojot to. Pati neesmu piedzīvojusi šo apgriezienu. Programmētājam vai lietotājam nav jāievada sensoru adreses, programmatūra pati atklāj temperatūras sensoru adreses.

Saskaņā ar manis veikto pārbaudi temperatūras zondes identificēšana un reakcija uz SD kartes izņemšanu un nomaiņu joprojām darbojas nevainojami.

1. solis: programmatūras izstrāde

Šis solis sniedz jums pilnu programmatūru pabeigtajam projektam. Es to apkopoju, izmantojot Arduino IDE 1.6.12. Tas izmanto 21 400 baitu programmas atmiņas (69%) un 1 278 baitus dinamiskās atmiņas (62%).

Esmu ievietojis komentārus kodā, cerot, ka tas skaidri parādīs notiekošo.

2. darbība. Darbs ar diviem temperatūras sensoriem - informācija

Šī programmatūra izmanto bibliotēku "OneWire". Tas neizmanto nekādas "DallasTemperature" vai līdzīgas bibliotēkas. Tā vietā komandas un dati no temperatūras sensoriem tiek izpildīti ar skici, un tos var redzēt un saprast diezgan viegli. Es atradu noderīgu OneWire bibliotēkas komandu sarakstu vietnē

www.pjrc.com/teensy/td_libs_OneWire.html

Ja ir divi (vai vairāki) temperatūras sensori, kļūst nepieciešams noteikt, kurš no tiem ir.

Es nosaucu savus divus sensorus "iekšā" un "ārā", kas ir raksturīgi komerciālām vienībām, kurām displeja modulī ir sensors, kas parasti ir "iekšpusē", un otru sensoru uz kabeļa, lai to varētu novietot otrā pusē. no ārējās sienas un tādējādi būt "ārpusē".

Parastā pieeja dažādu zondu identificēšanai ir atklāt ierīču adreses un ievietot tās programmatūrā kopā ar identifikācijas etiķeti. Visi citi projekti, kurus esmu redzējis, izmanto šo pieeju neatkarīgi no tā, vai viņi izmanto DallasTemperature bibliotēku vai nē.

Mans nolūks bija, lai programmatūra automātiski identificētu sensorus un pareizi tos sadalītu "iekšā" un "ārā". To ir pietiekami viegli izdarīt, novietojot tos uz atsevišķām Arduino tapām. Šajā projektā A0 līdz A3 un A6 un A7 ir neizmantoti, tāpēc šajā gadījumā varēja izmantot vienu no tiem. Tomēr man izdevās panākt, lai automātiskā identifikācija darbotos ar sensoriem vienā un tajā pašā OneWire kopnē.

Tas darbojas šādi.

OneWire bibliotēkai ir komanda "OneWireObject.search (adrese)", kur "adrese" ir 8 baitu masīvs, un "OneWireObject" ir iepriekš izveidotā OneWire objekta instances nosaukums. Tam var būt jebkurš vārds, kas jums patīk. Manējo sauc par "ds". Izsniedzot šo komandu "meklēt", OneWire bibliotēka signalizē vienā vadu kopnē. Ja tas atrod reaģējošu sensoru, tas atgriež “TRUE” Būla vērtību un aizpilda “adrešu” masīvu ar 8 baitu unikālo sensora identifikatoru. Šis identifikators ietver ģimenes kodu (sākumā) un pārbaudes summu (beigās). Starp tiem ir 6 baiti, kas unikāli identificē sensoru savā ģimenē.

Katru reizi, kad tiek dota šī komanda, tiek iegūts viens rezultāts (adrese un atgriešanās TRUE), pārvietojoties pa visām OneWire kopnes ierīcēm. Kad katra ierīce ir reaģējusi, nākamreiz, kad tiek izsniegta "meklēšana", atdeve ir "FALSE", norādot, ka katra kopnes ierīce jau ir atbildējusi. Ja "meklēšana" tiek izdota vēlreiz, pirmā ierīce atkal reaģē - un tā bezgalīgi. Ierīces vienmēr reaģē tādā pašā secībā. Atbilžu secība ir balstīta uz OneWire kopnes ierīču identifikatoriem. Šķiet, ka tā ir bināra meklēšana, kas sākas no vismazāk nozīmīgajiem ierīces identifikatoru bitiem. Šo identifikatoru atrašanai izmantotais protokols ir diezgan sarežģīts, un tas ir aprakstīts dokumenta "Book of iButton Standards" 51. - 54. lpp., Kas ir pdf dokuments vietnē https://pdfserv.maximintegrated.com/en/an/AN937.pd …

Es pārbaudīju šo meklēšanas procesu ar 1 līdz 11 sensoriem vienā kopnē un atklāju, ka atbildes secība noteiktam ierīču komplektam vienmēr bija vienāda, taču, pievienojot kopnes galam jaunu ierīci, nebija nekādas iespējas Es varētu paredzēt, kur meklēšanas secībā tas parādīsies. Piemēram, 11. sensors, ko es pievienoju, nonāca 5. vietā; un pirmais sensors, ko ievietoju autobusā, vienmēr bija pēdējais meklēšanas secībā.

Šajā projektā ar diviem sensoriem viens no tiem ir pielodēts RTC modulī; otra ir pievienota, izmantojot vīriešu galveni uz tāfeles un sieviešu galveni uz kabeļa. To var viegli atvienot.

Kad sensors uz kabeļa ("ārējais" sensors) ir atvienots, komanda "meklēt" rada pārmaiņus "TRUE" un "FALSE".

Kad sensors uz kabeļa ir pievienots, komanda "meklēt" rada 3 pakāpju ciklu ar diviem "TRUE" un vienu "FALSE".

Mana procedūra ir izdot 1, 2 vai 3 "meklēšanas" komandas, līdz tiek atgriezts FALSE rezultāts. Tad es izdodu vēl 2 "meklēšanas" komandas. Ja otrais neizdodas (ti, FALSE), es zinu, ka kopnē ir tikai viens sensors un ka tas ir "in" sensors. Ierīces identitāte tiek ierakstīta un piešķirta "in" sensoram.

Vēlāk, ja gan pirmā, gan otrā atgriešanās ir PATIESA, es zinu, ka autobusā ir divi sensori. Es pārbaudu, kura no tiem identitāte ir vienāda ar "in" sensoru, un otru piešķiru kā "out" sensoru.

Otrs mazsvarīgais ir tas, ka rezultātu apkopošana no diviem sensoriem tiek veikta, nosūtot “sākt konvertēšanu” ar komandu, kas pazīstama kā “izlaist ROM”. Mums ir iespēja nosūtīt komandas uz vienu ierīci (izmantojot tās unikālo identifikatoru) vai uz visām kopnes ierīcēm (izlaist ROM). Kods izskatās šādi:

ds.reset (); //

// nosūtīt komandu "izlaist ROM" (tātad nākamā komanda darbojas abos sensoros) ds.write (0xCC); // Izlaist ROM komandu ds.write (0x44, 0); // sākt konversiju abās zondēs temperatūra_state = gaidīt_konvertēt; // pāriet uz aizkavēšanās stāvokli

Kad vajadzīgais aizkaves laiks ir pagājis, temperatūra tiek saņemta no katra sensora atsevišķi. Šeit ir otrā sensora kods (ti, OUT sensors).

ja (karogs2) {

klāt = ds.reset (); ds.select (DS18B20_addr_out); ds.write (0xBE); // Lasīt zibatmiņas bloka "out" datu datus [0] = ds.read (); dati [1] = ds.read (); temperatūra_izturība = (dati [1] << 8) + dati [0]; Temperatūra_ (= 6 * Temperatūra) + Temperatūra / 4; // reizināt ar 6,25} cits {// nav karodziņš2 - ti, izejas sensors nav pievienots temperatūra_izrāde = 30000; // noteikt pie 300,00 C, ja temperatūras sensors nedarbojas} // if (beigas 2) beigas

Lielāko daļu šīs programmatūras es izstrādāju atsevišķā skicē, kurā bija tikai temperatūras sensori, bez LCD, RTC un SD karšu atbalsta sarežģījumiem. Šī izstrādes skice ir zemāk esošajā failā.

3. darbība: provizoriskie rezultāti

Provizoriskie rezultāti
Provizoriskie rezultāti

Šī diagramma ir divu pirmo rādījumu daļu kombinācija.

Ieteicams: