Talaan ng mga Nilalaman:

Thermometer sa Pag-log ng DIY Na May 2 Mga Sensor: 3 Mga Hakbang (na may Mga Larawan)
Thermometer sa Pag-log ng DIY Na May 2 Mga Sensor: 3 Mga Hakbang (na may Mga Larawan)

Video: Thermometer sa Pag-log ng DIY Na May 2 Mga Sensor: 3 Mga Hakbang (na may Mga Larawan)

Video: Thermometer sa Pag-log ng DIY Na May 2 Mga Sensor: 3 Mga Hakbang (na may Mga Larawan)
Video: 【生放送】静岡県で土石流発生。直近のソーラー発電所との関係がネットで話題となる 2024, Nobyembre
Anonim
Thermometer sa Pag-log ng DIY Na May 2 Sensor
Thermometer sa Pag-log ng DIY Na May 2 Sensor
Thermometer sa Pag-log ng DIY Na May 2 Sensor
Thermometer sa Pag-log ng DIY Na May 2 Sensor

Ang proyektong ito ay isang pagpapahusay ng aking nakaraang proyekto na "DIY Logging Thermometer". Ini-log nito ang mga pagsukat ng tempearature sa isang micro SD card.

Nagbabago ang hardware

Nagdagdag ako ng sensor ng temperatura ng DS18B20 sa module ng real time na orasan, kung saan mayroong probisyon sa naka-print na circuit board para sa aparatong ito; at idinagdag ang naaangkop na kawad mula sa "DS" na pin ng RTC sa D2 ng Arduino.

Pagbabago ng software

Pagkatapos ay idinagdag ko at binago ang software. Ang mga pangunahing pagbabago ay:

Ipinapakita ng LCD display ang dalawang temperatura na "In" at "Out".

Ang mga log file na naitala sa SD card ay may dalawang mga patlang ng temperatura, "temperatura In" at "temperatura Out".

Dahil sa mas mahabang tala sa SD card, ang mga nagtatrabaho buffer para sa EEPROM ay mas malaki at bilang isang resulta nito nagsimula akong magkaroon ng mga problema sa salungatan sa memorya. Gumawa ako ng isang bilang ng mga pagbabago na naglalayong bawasan ang paggamit ng pabago-bagong memorya, kasama ang paggamit ng mga character arrays para sa lahat ng mga string sa halip na String object.

Ang bahagi ng software na nakakakuha ng temperatura ay may pangunahing pagbabago, na ang karamihan ay dapat gawin sa pagkilala sa aling probe na "nasa" at alin ang "lumabas". Ang pagkakakilanlan na ito ay kadalasang awtomatiko. Kung sa ilang kadahilanan ang mga probe ay inililipat, maaari itong maitama sa pamamagitan ng pag-unplug ng "out" na pagsisiyasat at pagkatapos ay i-plug ito muli. Hindi ko naranasan ang pagbabaliktad na ito sa aking sarili. Ang programmer o gumagamit ay hindi kailangang mag-type sa mga address ng sensor, nadiskubre ng software ang mga address ng sensor ng temperatura nang mag-isa.

Ayon sa nagawa kong pagsubok, ang pagkakakilanlan ng mga probe ng temperatura, at ang tugon sa pagtanggal at pagpapalit ng SD card, ay gumagana pa rin ng maayos.

Hakbang 1: Pag-unlad ng Software

Binibigyan ka ng hakbang na ito ng buong software para sa nakumpletong proyekto. Pinagsama ko ito gamit ang Arduino IDE 1.6.12. Gumagamit ito ng 21, 400 bytes ng program memory (69%) at 1, 278 bytes ng pabuong memorya (62%).

Naglagay ako ng mga komento sa code sa pag-asang malilinaw nito ang nangyayari.

Hakbang 2: Paggawa Sa Dalawang Mga Sensor ng Temperatura - Mga Detalye

Gumagamit ang software na ito ng librong "OneWire". Hindi ito gumagamit ng anumang "DallasTemperature" o mga katulad na aklatan. Sa halip ang mga utos sa at data mula sa mga sensor ng temperatura ay ginagawa ng sketch at maaaring makita at madaling maunawaan. Natagpuan ko ang isang kapaki-pakinabang na listahan ng mga utos ng library ng OneWire sa

www.pjrc.com/teensy/td_libs_OneWire.html

Kapag mayroong dalawa (o higit pang) mga sensor ng temperatura, kinakailangan upang makilala kung alin ang alin.

Tinawag ko ang aking dalawang sensor na "in" at "out", na tipikal ng mga komersyal na unit na mayroong sensor sa display module na karaniwang "nasa loob", at ang iba pang sensor sa isang cable upang mailagay ito sa kabilang panig ng isang panlabas na pader at sa gayon ay "labas".

Ang karaniwang diskarte sa pagkilala ng iba't ibang mga probe ay upang matuklasan ang mga address ng aparato at ilagay ang mga ito sa software kasama ang isang tatak ng pagkilala. Ang lahat ng iba pang mga proyekto na nakita ko ay gumagamit ng pamamaraang ito, kung ginagamit nila o hindi ang library ng DallasTemperature o hindi.

Nilayon ko na ang software ay dapat na awtomatikong makilala ang mga sensor at wastong ilalaan ang mga ito sa "in" at "out". Ito ay sapat na madaling gawin sa pamamagitan ng paglalagay sa kanila sa magkakahiwalay na mga pin ng Arduino. Sa proyektong ito, ang A0 hanggang A3 at A6 at A7 lahat ay hindi nagamit, kaya't ang isa sa mga ito ay maaaring magamit sa kasong ito. Gayunpaman nagtagumpay ako sa pagkakaroon ng awtomatikong pagkakakilanlan na gawain sa mga sensor pareho sa iisang OneWire bus.

Gumagana ito ng ganito.

Ang silid-aklatan ng OneWire ay may isang utos na "OneWireObject.search (address)" kung saan ang "address" ay isang hanay ng 8 bytes at ang "OneWireObject" ay ang pangalan ng isang halimbawa ng isang bagay na OneWire na dating nilikha. Maaari itong magkaroon ng anumang pangalan na gusto mo. Ang minahan ay tinawag na "ds". Kapag naisyu mo ang utos na "paghahanap" na ito, ang library ng OneWire ay gumagawa ng ilang senyas sa isang wire bus. Kung nakakahanap ito ng isang tumutugon na sensor, nagbabalik ito ng isang "TUNAY" na halaga ng boolean at pinunan ang "address" na array na may 8 byte na natatanging pagkakakilanlan ng sensor. Ang identifier na ito ay nagsasama ng isang code ng pamilya (sa simula) at isang check sum (sa dulo). Sa pagitan ay 6 na byte na natatanging makilala ang sensor sa loob ng pamilya nito.

Ang isang resulta (address at return TRUE) ay nakuha sa tuwing ibibigay ang utos na ito, pagbibisikleta sa lahat ng mga aparato sa OneWire bus. Kapag tumugon na ang bawat aparato, sa susunod na maglabas ng "paghahanap", ang pagbalik ay "MALI", na nagpapahiwatig na ang bawat aparato sa bus ay tumugon na. Kung ang "paghahanap" ay naibigay muli, ang unang aparato ay tumutugon muli - at iba pa nang walang katiyakan. Palaging tumutugon ang mga aparato sa parehong pagkakasunud-sunod. Ang pagkakasunud-sunod ng mga tugon ay batay sa mga pagkakakilanlan ng mga aparato sa OneWire bus. Lumilitaw na isang paghahanap sa binary na nagsisimula mula sa hindi gaanong makabuluhang mga piraso ng mga pagkakakilanlan ng aparato. Ang protokol na ginamit upang hanapin ang mga pagkakakilanlan na ito ay medyo kumplikado, at inilalarawan sa mga pahina 51 - 54 ng dokumentong "Aklat ng Mga Pamantayan sa iButton" na isang dokumentong pdf sa https://pdfserv.maximintegrated.com/en/an/AN937.pd …

Sinubukan ko ang proseso ng paghahanap na ito mula sa 1 hanggang 11 na mga sensor sa isang solong bus, at natagpuan ang order ng tugon para sa isang naibigay na hanay ng mga aparato ay laging pareho, ngunit kapag nagdagdag ako ng isang bagong aparato sa dulo ng bus, walang paraan Mahuhulaan ko kung saan lilitaw ang order ng paghahanap. Halimbawa, ang ika-11 na sensor na idinagdag ko ay dumating sa posisyon na No.5; at ang unang sensor na inilagay ko sa bus ay ang huli sa huli sa order ng paghahanap.

Sa proyektong ito na may dalawang sensor, ang isa sa kanila ay na-solder sa lugar sa module ng RTC; ang isa pa ay naka-plug in gamit ang isang male header sa board at isang babaeng header sa cable. Madali itong maalis.

Kapag ang sensor sa cable (ang "out" sensor) ay hiwalay, ang utos na "paghahanap" ay gumagawa ng alternating "TRUE" at "FALSE" na babalik.

Kapag ang sensor sa cable ay nakakabit, ang utos na "paghahanap" ay gumagawa ng isang 3-yugto na ikot, na may dalawang "TUNAY" at isang "MALI" na nagbabalik.

Ang aking pamamaraan ay upang mag-isyu ng mga utos na "paghahanap" ng 1, 2 o 3, hanggang sa ibalik ang isang MALI na resulta. Pagkatapos ay naglalabas ako ng 2 pang mga "paghahanap" na utos. Kung ang pangalawa ay nabigo (ibig sabihin FALSE) Alam kong may isang sensor lamang sa bus at ito ang "in" sensor. Ang pagkakakilanlan ng aparato ay naitala at inilalaan sa sensor na "in".

Sa ibang oras, kung pareho ang una at pangalawang pagbabalik ay TUNAY, alam kong may dalawang sensor sa bus. Sinusuri ko kung alin sa kanila ang may pagkakakilanlang katumbas ng "in" sensor, at inilalaan ang isa pa bilang "out" sensor.

Ang iba pang menor de edad na punto ay ang pagtitipon ng mga resulta mula sa dalawang sensor ay ginagawa sa pamamagitan ng pagpapadala ng "simulan ang conversion" ng kung ano ang kilala bilang isang "laktawan ang ROM" na utos. Mayroon kaming pagpipilian na magpadala ng mga utos sa isang solong aparato (gamit ang natatanging pagkakakilanlan nito) o sa lahat ng mga aparato sa bus (laktawan ang ROM). Ganito ang code:

ds.reset (); //

// send "skip ROM" command (kaya't ang susunod na utos ay gumagana sa parehong mga sensor) ds.write (0xCC); // Skip ROM command ds.write (0x44, 0); // start conversion in both probes temperatura_state = wait_convert; // pumunta sa pagkaantala ng estado

Kapag ang kinakailangang oras ng pagkaantala ay lumipas, ang mga temperatura ay natatanggap mula sa bawat sensor nang paisa-isa. Narito ang code para sa pangalawang sensor (ie ang OUT sensor).

kung (flag2) {

kasalukuyan = ds.reset (); ds.select (DS18B20_addr_out); ds.write (0xBE); // Basahin ang Scratchpad ng "out" data ng pagsisiyasat [0] = ds.read (); data [1] = ds.read (); temperatura_out = (data [1] << 8) + data [0]; temperatura_out = (6 * temperatura_out) + temperatura_out / 4; // multiply by 6.25} else {// not flag2 - ie Out sensor not connected temperatura_out = 30000; // fix at 300.00 C if temp sensor not working} // end of if (flag2)

Ginawa ko ang halos lahat ng software na ito sa isang sketch na may stand na nag-iisa ang mga sensor ng temperatura dito, nang walang mga komplikasyon ng suporta sa LCD, RTC at SD card. Ang sketch ng pagbuo na ito ay nasa file sa ibaba.

Hakbang 3: Paunang Mga Resulta

Paunang Resulta
Paunang Resulta

Ang tsart na ito ay isang kumbinasyon ng unang dalawang bahagi-araw ng mga pagbabasa.

Inirerekumendang: