Sa artikulong ito, tatalakayin namin ang iba't ibang mga uri ng mga sensor ng temperatura at kung paano ito magagamit sa bawat kaso. Ang temperatura ay isang pisikal na parameter na sinusukat sa degree. Ito ay isang mahalagang bahagi ng anumang proseso ng pagsukat. Ang mga lugar na nangangailangan ng tumpak na mga sukat ng temperatura ay may kasamang gamot, biological na pagsasaliksik, electronics, materyal na pagsasaliksik, at pagganap ng thermal ng mga produktong elektrikal. Ang isang aparato na ginamit upang masukat ang dami ng enerhiya ng init na nagbibigay-daan sa amin upang makita ang mga pisikal na pagbabago sa temperatura ay kilala bilang isang sensor ng temperatura. Ang mga ito ay digital at analog.
Pangunahing uri ng mga sensor
Sa pangkalahatan, mayroong dalawang pamamaraan para sa pagkuha ng data:
1. Makipag-ugnay... Ang mga sensor ng temperatura ng contact ay nasa pisikal na pakikipag-ugnay sa isang bagay o sangkap. Maaari silang magamit upang masukat ang temperatura ng mga solido, likido o gas.
2. Walang contact... Ang mga sensor ng temperatura na hindi nakikipag-ugnay ay nakakakita ng temperatura sa pamamagitan ng pagharang sa ilan sa infrared na enerhiya na ibinubuga ng isang bagay o sangkap at nararamdaman ang tindi nito. Maaari lamang silang magamit upang masukat ang temperatura sa mga solido at likido. Hindi nila masusukat ang temperatura ng mga gas dahil sa kanilang walang kulay (transparency).
Mga panuntunan sa pagpili ng sensor
Ang sensor ng temperatura para sa pag-init sa ilalim ng lupa ay napili na isinasaalang-alang ang mga katangian ng account tulad ng lakas, uri ng tuktok na pantakip, pamamaraan ng pag-install at kagamitan na may karagdagang pag-andar.
Lakas
Ang halaga ay dapat tiyak na matugunan ang mga kinakailangan at pagkarga ng mainit na sahig. Kung hindi man, ang sensor ay hindi gagana nang tama. Kapag ang lakas ng elemento ng pag-init ay mas malaki kaysa sa regulator mismo, kinakailangan na karagdagan na mag-install ng isang magnetic starter sa pagitan nila - upang maiwasan ang pinsala sa aparato dahil sa nadagdagang pagkarga.
Ang tampok na set
Ang mainit na sahig ay kinokontrol ng isang yunit ng kuryente, na nagbibigay-daan sa iyo upang ayusin ang pagpapatakbo ng mga elemento ng pag-init. Ang mga modernong tagakontrol ay may tulad na pag-andar tulad ng pagsisimula at de-energizing ng system, pagsasaayos ng mga kondisyon ng temperatura, pati na rin ang pagtatakda ng dalas ng pagkonekta at pagdiskonekta ng elemento ng pag-init.
Dali ng paggamit
Kung sa palagay mo ay hindi mo maunawaan ang programa, hindi ka dapat bumili ng isang kumplikadong aparato. Kahit na isinasaalang-alang ang lahat ng mga pag-andar nito. Halimbawa, nahihirapan ang mga matatandang tao na makitungo sa mga nai-program na aparato. Mas pipiliin nilang piliin ang pagpipiliang mekanikal.
Madaling kumonekta
Ang kasamang dokumentasyon para sa termostat ay laging nagpapahiwatig kung paano ikonekta ang underfloor heating sensor. Ang mga terminal ay matatagpuan sa gilid sa isang gilid ng control unit. Ang pagkakaroon ng pagkonekta sa mga de-koryenteng mga wire alinsunod sa pamamaraan, kinakailangan upang suriin ang pagganap ng sistema ng pag-init. Upang magawa ito, sukatin ang paglaban sa mga terminal ng sensor ng temperatura at pag-init ng de-koryenteng cable, o ikonekta ang isang mainit na sahig at taasan ang mga halagang temperatura mula sa zero hanggang sa tagapagpahiwatig na inirekomenda ng SNIP, iyon ay, hanggang sa 30 ° C.
Hitsura
Ang isang thermal sensor ay hindi lamang dapat maintindihan nang functionally, ngunit kaakit-akit din sa disenyo. Ang mga modernong knob ay may iba't ibang mga kulay at hugis. Maaari kang pumili ng isang pagpipilian na naaayon sa loob ng silid.
Mga uri ng sensor ng temperatura
Mayroong maraming iba't ibang mga uri ng mga sensor ng temperatura.Mula sa simpleng pag-on / off na pagkontrol ng isang aparatong termostatikiko hanggang sa kumplikadong mga sistema ng kontrol ng suplay ng tubig, na may pagpapaandar ng pag-init nito, na ginagamit sa mga proseso ng lumalaking halaman. Ang dalawang pangunahing uri ng mga sensor, contact at non-contact, ay nahahati pa sa resistive, boltahe at electromekanical sensor. Ang tatlong pinaka-karaniwang ginagamit na mga sensor ng temperatura ay:
- Thermistors
- Mga thermocouples ng paglaban
- Thermocouple
Ang mga sensor ng temperatura na ito ay naiiba sa bawat isa sa mga tuntunin ng pagpapatakbo ng mga parameter.
Aparato
Ito ay isang thermocouple (plate o baras) na binubuo ng mga wire na konektado sa mga terminal ng elemento ng sensing.
Depende sa impormasyon ng temperatura, ang paglaban ng sensitibong bahagi ay nagbabago, ayon sa pagkakabanggit, ang signal ng elektrikal na ibinibigay sa mga pagbabago sa termostat. Sa gayon, natutukoy ang ganap na halaga ng katamtamang temperatura.
Panlabas (panlabas na sensor ng temperatura para sa pag-init sa ilalim ng lupa), bilang isang patakaran, ay matatagpuan sa ilalim ng pagtatapos ng takip ng sahig at sinusukat ang mga tagapagpahiwatig ng temperatura nito. Panloob (built-in), na matatagpuan sa loob ng regulator at tumutukoy sa antas ng pag-init ng hangin.
Ang disenyo ng mga sensor ng temperatura ay napili depende sa mga tampok ng system:
Thermistor
Ang isang thermistor ay isang sensitibong risistor na nagbabago ng pisikal na paglaban sa temperatura. Karaniwan, ang mga thermistor ay gawa sa isang ceramic semiconductor na materyal tulad ng cobalt, manganese, o nickel oxide at pinahiran ng baso. Ang mga ito ay maliit na flat selyadong mga disc na medyo mabilis na tumutugon sa anumang pagbabago ng temperatura.
Dahil sa mga katangian ng semiconducting ng materyal, ang mga thermistors ay may negatibong temperatura coefficient (NTC), ibig sabihin bumababa ang paglaban sa pagtaas ng temperatura. Gayunpaman, mayroon ding mga PTC thermistor na ang pagtutol ay tumataas sa pagtaas ng temperatura.
Iskedyul ng Thermistor
Mga kalamangan ng mga thermistor
- Mataas na bilis ng tugon sa mga pagbabago sa temperatura, kawastuhan.
- Mura.
- Mas mataas na paglaban sa saklaw na 2,000 hanggang 10,000 ohms.
- Mas mataas ang pagiging sensitibo (~ 200 ohm / ° C) sa loob ng isang limitadong saklaw ng temperatura ng hanggang sa 300 ° C.
Mga pag-asa sa temperatura ng paglaban
Ang pagtitiwala ng paglaban sa temperatura ay ipinahiwatig ng sumusunod na equation:
Kung saan A, B, C - ito ang mga pare-pareho (ibinigay ng mga tuntunin ng pagkalkula), R - paglaban sa Ohms, T - temperatura sa Kelvin. Madali mong makakalkula ang pagbabago sa temperatura mula sa isang pagbabago sa paglaban o kabaligtaran.
Paano gumamit ng isang thermistor?
Ang mga thermistor ay na-rate para sa kanilang resistive na halaga sa temperatura ng kuwarto (25 ° C). Ang thermistor ay isang passive resistive device, samakatuwid kinakailangan nito ang paggawa ng pagsubaybay sa kasalukuyang boltahe ng output. Bilang isang patakaran, nakakonekta ang mga ito sa serye na may angkop na mga stabilizer na bumubuo ng isang divider ng boltahe ng mains.
Halimbawa: Isaalang-alang ang isang thermistor na may halaga ng paglaban ng 2.2K sa 25 ° C at 50 ohms sa 80 ° C. Ang thermistor ay konektado sa serye na may isang 1 kΩ risistor sa pamamagitan ng isang supply ng 5 V.
Samakatuwid, ang boltahe ng output nito ay maaaring kalkulahin tulad ng sumusunod:
Sa 25 ° C, RNTC = 2200 ohms;
Sa 80 ° C, RNTC = 50 ohms;
Gayunpaman, mahalagang tandaan na sa temperatura ng kuwarto, ang karaniwang mga halaga ng paglaban ay naiiba para sa iba't ibang mga thermistor, dahil ang mga ito ay hindi linear. Ang isang thermistor ay may isang exponential pagbabago ng temperatura, at samakatuwid ay isang pare-pareho ang beta, na ginagamit upang makalkula ang paglaban nito para sa isang naibigay na temperatura. Ang boltahe ng output ng risistor at temperatura ay tuwirang nauugnay.
Mga tampok ng kasalukuyang interface ng dalawang kawad sa mga sensor ng temperatura ng LMT01
Fig. 4. Organisasyon ng kasalukuyang interface sa LMT01
Tulad ng nabanggit sa itaas, upang maipadala ang resulta ng pagsukat, ang LMT01 ay bumubuo ng isang maliit na pagkakasunud-sunod sa anyo ng kasalukuyang mga pulso sa pagbibilang. Para sa mga ito, ang sensor ay nangangailangan lamang ng dalawang mga lead (Larawan 4). Upang mai-convert ang mga kasalukuyang pulso sa form na pamilyar sa mga digital microcircuits, sa ilang mga kaso maaari kang gumamit ng isang solong risistor (ngunit hindi palaging - higit pa sa ibaba).
Pagkatapos ng power-up, nagsisimula ang LMT01 ng isang cycle ng pagsukat na aabot sa 54 ms (Larawan 5). Sa oras na ito, isang mababang antas ng kasalukuyang 28 ... 39 μA ay nabuo sa output ng sensor. Sinundan ito ng isang ikot ng paglilipat ng resulta ng pagsukat sa anyo ng kasalukuyang mga pulso na may amplitude na 112 ... 143 μA. Ang tumatanggap ng microcontroller ay dapat bilangin ang mga pulso na ito, halimbawa gamit ang built-in na counter / timer. Dahil ang dalas ng mga signal ay tungkol sa 82 ... 94 kHz, pagkatapos ay may maximum na bilang ng mga pulso (4095), ang tagal ng paghahatid ay maaaring umabot sa 50 ms.
Fig. 5. Mga diagram ng oras ng sensor ng LMT01
Sa bilang ng mga binibilang na pulso (PC), ang temperatura na halaga ay maaaring matukoy ayon sa pormula 1:
, (1)
Kaya, sa 0 ° C, ang sensor ay bubuo ng halos 800 pulso.
Sa kasamaang palad, ang paggamit ng isang panlabas na risistor ay hindi laging posible dahil sa limitasyon sa minimum na drop ng boltahe sa kabuuan ng sensor ng LMT01. Sa panahon ng cycle ng pagsukat, ang drop sa kabuuan ng sensor ay dapat na hindi bababa sa 2.15 V. Sa panahon ng cycle ng paghahatid ng data, ang pagbaba ng boltahe ay maaaring mabawasan sa 2 V. Hindi mahirap makagawa ng ilang magaspang na kalkulasyon.
Isaalang-alang ang isang aparato na may isang boltahe ng supply Vdd = 3.3 V. Kung kukuha kami ng minimum na pinapayagan na pagbaba sa kabuuan ng sensor na katumbas ng 2.15 V sa panahon ng siklo ng pagsukat, kung gayon ang isang senyas na hindi hihigit sa 1.15 V ay sinusunod sa buong resistor. Para sa karamihan sa digital mga kumokontrol, ang lohikal na yunit ay 0, 7 ∙ Vdd, na para sa aming kaso ay magiging 2.31 V. Bilang isang resulta, ang paggamit ng isang simpleng risistor ay magiging imposible, dahil ang microcontroller ay hindi "makikita" ang signal ng isang lohikal na yunit. Ang paraan sa labas ng sitwasyong ito ay maaaring ang paggamit ng isang microcontroller na may built-in na kumpara o antas ng mga circuit ng conversion.
Mga sensor ng resistive na temperatura
Ang mga sensor ng resistensya sa temperatura (RTDs) ay gawa sa mga bihirang riles, tulad ng platinum, na ang resistensya sa kuryente ay nag-iiba sa temperatura.
Ang mga detector ng resistive na temperatura ay may positibong koepisyent ng temperatura at, hindi katulad ng mga thermistor, nagbibigay ng kawastuhan sa pagsukat ng mataas na temperatura. Gayunpaman, mayroon silang mahinang pagkasensitibo. Ang Pt100 ang pinakalawak na magagamit na sensor na may pamantayan na halaga ng paglaban ng 100 ohm sa 0 ° C. Ang pangunahing kawalan ay ang mataas na gastos.
Ang mga kalamangan ng naturang mga sensor
- Malawak na saklaw ng temperatura mula -200 hanggang 650 ° C
- Magbigay ng mataas na kasalukuyang output
- Higit pang mga linear kumpara sa mga thermocouples at RTDs
Mga karagdagang bahagi at circuit ng sensor
Bilang karagdagan sa pangunahing mga aparato ng diode, ang circuit ng sensor ng temperatura ay nagsasama ng isang bilang ng mga karagdagang elemento. Una sa lahat, ito ay isang kapasitor na nagpoprotekta sa aparato mula sa mga sobrang impluwensya. Ang katotohanan ay ang pagpapatakbo ng amplifier ay lubos na sensitibo sa mga epekto ng alternating electromagnetic na patlang. Inaalis ng capacitor ang pagpapakandili na ito sa pamamagitan ng pag-iniksyon ng negatibong feedback.
Sa paglahok ng isang transistor at isang zener diode, nabuo ang isang nagpapatatag na boltahe ng sanggunian. Dito, ang mga resistors na may mas mataas na klase ng kawastuhan ay ginagamit na may isang mababang halaga ng temperatura coefficient ng paglaban. Sa gayon, ang buong pamamaraan ay nakakakuha ng karagdagang katatagan. Sa kaso ng mga posibleng makabuluhang pagbabago sa mga kondisyon ng temperatura, maaaring mawala ang mga eksaktong resistor. Ginagamit lamang ang mga ito upang makontrol ang maliit na overheating.
Thermocouple
Ang mga sensor ng temperatura ng thermocouple ay karaniwang ginagamit dahil ang mga ito ay tumpak, nagpapatakbo sa loob ng isang malawak na saklaw ng temperatura mula -200 ° C hanggang 2000 ° C, at medyo mura. Isang thermocouple na may kawad at isang plug sa larawan sa ibaba:
Pagpapatakbo ng thermocouple
Ang isang thermocouple ay gawa sa dalawang hindi magkatulad na metal na pinagsama upang makabuo ng isang potensyal na pagkakaiba sa temperatura. Mula sa pagkakaiba ng temperatura sa pagitan ng dalawang mga junction, isang boltahe ang nabuo na ginagamit upang masukat ang temperatura. Ang pagkakaiba-iba ng boltahe sa pagitan ng dalawang mga junction ay tinatawag na Seebeck effect.
Kung ang parehong mga compound ay nasa parehong temperatura, ang potensyal para sa pagkakaiba sa iba't ibang mga compound ay zero, ibig sabihin V1 = V2. Gayunpaman, kung ang mga junction ay nasa iba't ibang mga temperatura, ang output boltahe na kaugnay sa pagkakaiba ng temperatura sa pagitan ng dalawang mga junction ay katumbas ng kanilang pagkakaiba sa V1 - V2.
Mga uri ng sensor ng temperatura
Elektronikong-mekanikal
Ang pinakasimpleng at pinaka-murang uri ng regulator. Ang pangunahing bahagi ng pagtatrabaho nito ay isang espesyal na metal plate na tumutugon sa pagtaas o pagbaba ng temperatura. Ang system ay nakabukas at naka-off sa pamamagitan ng pagbabago ng kurbada ng plato sa panahon ng pag-init at paglamig. Ang pagtatakda ng eksaktong halaga ng temperatura sa naturang regulator ay hindi gagana.
Elektronik
Ang aparato ay may isang espesyal na elemento na bumubuo ng isang espesyal na signal. Direktang nakasalalay ang lakas sa mga halaga ng temperatura sa paligid. Sa mga naturang aparato, maaari kang magtakda ng tumpak na mga pagbabasa ng temperatura ng pag-init hanggang sa isang maliit na bahagi ng isang degree. Ang system ay kinokontrol ng mga pindutan at isang maliit na screen.
Programmable
Ang pinakamahal ng mga thermoelement. Dito, maaari mong itakda ang ilang mga halaga, sa pag-abot kung saan ang buong system ay naka-on o naka-off ng regulator. Salamat sa aparato, isang microclimate ang nilikha sa silid na nababagay sa isang partikular na tao. Posibleng i-configure ang termostat upang ang system ay nakabukas sa isang tukoy na oras. Iyon ay, ang mga sahig ay pinainit bago dumating ang may-ari sa bahay, at sa parehong oras, ang kuryente ay hindi natupok kapag ang may-ari ay hindi.
Maraming mga modelo ang nagtatampok ng maliwanag at naka-istilong mga disenyo at mga LCD screen na nagpapakita ng impormasyon at pinadali ang pinong pag-tune.
Paggawa gamit ang mga handa nang aklatan
Kaya, upang gumana sa mga sensor ng temperatura ng DS18B20 sa network, maaari kang makahanap ng isang malaking bilang ng mga aklatan, ngunit bilang isang panuntunan, dalawa sa pinakatanyag ang ginagamit. Ito ay isang silid-aklatan at aklatan. Bukod dito, ang pangalawang silid-aklatan ay isang mas maginhawang add-on sa una at hindi maaaring gamitin nang wala ito. Sa madaling salita, bago ikonekta ang library ng DallasTemperature.h, dapat mo ring ikonekta ang OneWire.h. Paano mag-install ng ilang mga aklatan sa Arduino IDE posible.
Library OneWire.h
Isaalang-alang muna natin ang pagtatrabaho sa OneWire.h library. Nasa ibaba ang isang listahan ng mga pagpapaandar nito na may isang maikling paglalarawan.
- OneWire temperaturaSensor (uint8_t pinNumber)
Ang pagpapaandar na ito ay isang tagapagbuo ng klase ng OneWire at lumilikha ng isang bagay na temperaturaSensor, ibig sabihin bubukas ang isang channel ng komunikasyon gamit ang isang sensor o isang pangkat ng mga sensor sa pinNumber pin. Sa aming mga halimbawa (Larawan 3-5) ito ang "D2" na pin ng Arduino Nano. Dito namin ikinonekta ang data bus ng DQ DS18B20.
Halimbawa:
OneWire temperaturaSensor
(
D2
);
// Ang isang sensor o isang pangkat ng mga sensor ay konektado sa pin D2
- uint8_t maghanap (addrArray)
Ang pag-andar ay naghahanap para sa susunod na aparato sa 1-Wire bus at, kapag ito ay natagpuan, ipinasok ang halaga ng address sa addrArray array, na nagbabalik totoo. Dahil ang natatanging address ng bawat sensor ay 64-bit, ang addrArray ay dapat na 8 bytes ang laki. Kung nabigo ang paghahanap, ang function ay magbabalik ng mali. Dapat pansinin na kapag maraming mga sensor ng temperatura ang nakakonekta sa isang bus, ang bawat tawag sa pag-andar sa paghahanap ay ididirekta sa susunod na sensor, pagkatapos ay ang susunod, atbp. Hanggang sa maisaalang ang lahat ng mga aparato sa bus. Ang kakaibang katangian ng pagpapaandar na ito ay upang matandaan ang mga naprosesong address. Upang i-reset ang pila, kailangan mong tawagan ang pag-andar ng reset_search (), na tatalakayin sa ibaba.
Halimbawa:
byte addrArray
[
8
];
// Array para sa pag-iimbak ng isang 64-bit na address // Kung ang aparato ay wala man lang sa bus o lahat ng mga aparato ay binibilang // ipakita ang kaukulang impormasyon sa monitor ng port
kung(!
temperaturaSensor
.
maghanap
(
addrArray
))
Serial
.
println
(
"Wala nang address."
);
// Kung hindi man, kung ang susunod na aparato ay tumugon sa kahilingan sa pagkakaroon, // ipakita ang 64-bit na address nito sa monitor ng port
iba pa{para sa(
ako
=
0
;
ako
<
8
;
ako
++)
Serial
.
mag-print
(
addrArray
[
ako
],
HEX
);
}
- walang bisareset_search ()
Tulad ng nabanggit sa itaas, i-reset ng pagpapaandar na ito ang pila sa botohan para sa mga aparato sa 1-Wire bus hanggang sa simula. Dapat itong laging gamitin kasabay ng pag-andar ng paghahanap kapag ang huli ay nagbabalik ng hindi totoo. Halimbawa, sa aming kaso na may 5 mga sensor sa bus, sa pamamagitan ng pagtawag sa pag-andar ng paghahanap ng 5 beses, makakakuha kami ng 5 mga address. Sa pang-anim na oras, ang function ng paghahanap ay babalik sa atin at gagawin ito sa bawat susunod na botohan hanggang mapula ang pila. Dapat mong bigyang pansin ito upang maiwasan ang hindi maunawaan na mga sitwasyon.
Halimbawa:
byte addrArray
[
8
];
// Array para sa pag-iimbak ng isang 64-bit na address // Kung ang aparato ay wala man lang sa bus o lahat ng mga aparato ay binibilang // i-reset ang pila ng botohan upang maulit ang pag-ikot ng paghahanap
kung(!
temperaturaSensor
.
maghanap
(
addrArray
))
temperaturaSensor
.
i-reset ang paghahanap
();
- uint8_ti-reset ()
Ang pagpapaandar ng 1-Wire reset ay nagpapasimula sa proseso ng komunikasyon. Ito ay tinatawag tuwing nais naming makipag-usap sa sensor ng temperatura. Ang mga halagang bumalik ay maaaring totoo o mali. Makukuha namin ang totoong halaga kung hindi bababa sa isang sensor sa bus ang tumugon upang i-reset gamit ang pagkakaroon ng pulso. Kung hindi man, nagkakamali tayo;
Halimbawa:
kung(!
temperaturaSensor
.
i-reset
())
Serial
.
println
(
"Walang sensor sa bus"
);iba pa
Serial
.
println
(
"Nakita ang sensor"
);
- walang bisapiliin ang (addrArray)
Pinapayagan ka ng pagpapaandar na pumili ng isang tukoy na aparato kung saan nais naming gumana sa ngayon. Ang pagpipilian ay ginawa sa pamamagitan ng malinaw na pagtukoy ng 64-bit na address na ipinasok sa addrArray array. Ang address ay maaaring itakda nang malinaw sa pamamagitan ng pagsulat nito sa isang array o paggamit ng dating nabasa ng pag-andar sa paghahanap. Dapat pansinin na ang pag-andar ng pag-reset ay dapat tawagan bago tawagan ang piling pagpapaandar. Sa susunod na pag-reset, ang koneksyon sa napiling sensor ay nasira hanggang sa susunod na tawag upang pumili.
Halimbawa:
byte addrArray
[
8
];
// Array para sa pag-iimbak ng isang 64-bit na address // Kung ang aparato ay wala man lang sa bus o lahat ng mga aparato ay binibilang // output ng kaukulang impormasyon sa monitor ng port
kung(!
temperaturaSensor
.
maghanap
(
addrArray
))
Serial
.
println
(
"Wala nang address."
);
// Kung hindi man, kung ang susunod na aparato ay tumugon sa kahilingan sa pagkakaroon, // piliin ito para sa kasunod na gawain
iba pa{
temperaturaSensor
.
i-reset ()
;
// Huwag kalimutang maglabas ng utos ng pag-reset ng temperaturaSensor
.
piliin ang (addrArray)
;
// Tukuyin ang isang array na may nabasang address
}
- walang bisalaktawan ()
Ang pagpapaandar ay nauugnay lamang kapag nagtatrabaho sa isang sensor sa bus at laktawan lamang ang pagpili ng aparato. Sa madaling salita, hindi mo magagamit ang pag-andar sa paghahanap, at samakatuwid ay mabilis na mag-access sa iyong tanging sensor.
Halimbawa:
temperaturaSensor.
i-reset
();
// I-reset ang temperaturaSensor gulong
.
laktawan
();
// Piliin ang nag-iisang sensor para sa karagdagang paggana kasama nito
- walang bisasumulat (uint8_tbyte, uint8_t powerType = 0)
Nagpapadala ang pagpapaandar ng isang byte ng data sa napiling aparato sa bus. Ang pagtatalo ng powerType ay tumutukoy sa uri ng supply ng kuryente para sa mga sensor (0 - ang mga sensor ay direktang pinalakas mula sa isang panlabas na mapagkukunan; 1 - ginagamit ang isang koneksyon na pinalakas ng parasitiko). Maaaring alisin ang pangalawang parameter kung ang panlabas na lakas ay ginamit, dahil ito ay 0 bilang default.
Halimbawa:
temperaturaSensor
.
i-reset
();
// I-reset ang temperaturaSensor gulong
.
laktawan
();
// Pumili ng isang solong sensor para sa kasunod na pagtatrabaho kasama nito // Magpadala ng isang utos upang i-convert ang temperatura, // gamit ang isang koneksyon na may lakas na parasitiko mula sa temperaturaSensor data bus
.
sumulat
(
0x44
,
1
);
- uint8_tbasahin ()
Binabasa ng pagpapaandar na ito ang isang byte ng data na ipinadala ng alipin aparato (sensor) sa 1-Wire bus.
Halimbawa:
// Basahin ang 9 bytes ng data mula sa 1-Wire bus at ilagay ang resulta sa array byte array
[
9
];para sa(
uint8_t i
=
0
;
ako
<
9
;
ako
++){
array
[
ako
]=
temperaturaSensor
.
basahin
();}
- static uint8_t crc8 (const uint8_t * addr, uint8_t len);
Ang pagpapaandar ay dinisenyo upang makalkula ang Checkum. Dinisenyo upang suriin ang tamang komunikasyon sa sensor ng temperatura. Narito ang addr ay isang pointer sa data array, at ang len ay ang bilang ng mga byte.
Halimbawa:
byte addrArray
[
8
];
// Array para sa pag-iimbak ng isang 64-bit na address // Kung ang aparato ay wala man lang sa bus o lahat ng mga aparato ay binibilang // output ng kaukulang impormasyon sa monitor ng port
kung(!
temperaturaSensor
.
maghanap
(
addrArray
))
Serial
.
println
(
"Wala nang address."
);
// Kung hindi man, kung ang susunod na aparato ay tumugon sa kahilingan sa pagkakaroon, // suriin ang checkum ng address nito
iba pa{
// Kung ang tsekum ay hindi tumutugma, magpakita ng isang mensahe ng error
kung(
OneWire
::
crc8
(
addrArray
,
7
)!=
addrArray
[
7
]){
Serial
.
println
(
"Hindi wasto ang CRC!"
);}}
Pinagmasdan namin ang bawat pag-andar ng OneWire.h library nang magkahiwalay at upang ayusin ang materyal, sa ibaba ay magbibigay ako ng isang sketch para sa pagbabasa ng temperatura mula sa isang pangkat ng mga sensor ng temperatura ng DS18B20, na konektado sa pin D2 gamit ang isang parasitiko circuit ng kuryente. Maglalaman ang sketch ng detalyadong mga komento sa lahat ng kinakailangang puntos.
#include // Ikonekta namin ang library para sa pagtatrabaho sa DS18B20OneWire ds thermal sensors
(
2
);
// Ang isang sensor o pangkat ng mga sensor ay konektado sa D2 pin ng Arduino // PRESET FUNCTION void setup
(
walang bisa
){
Serial
.
magsimula
(
9600
);
// Initialization of work with Serial-port} // MAIN CYCLE void loop
(
walang bisa
){
byte i
;
// Auxiliary variable para sa byte kasalukuyang mga loop
=
0
;
// Variable para sa pagtukoy ng kahandaan ng sensor para sa mga byte type_s ng komunikasyon
;
// Variable para sa pagtukoy ng uri ng thermal sensor sa byte data bus
[
12
];
// Array para sa pagtatago ng impormasyon na natanggap mula sa sensor byte addr
[
8
];
// Array para sa pagtatago ng 64-bit address ng float celsius sensor
,
fahrenheit
;
// Mga variable para sa pagkalkula ng temperatura // Kung ang mga aparato sa bus ay hindi natagpuan o lahat ng mga aparato sa bus ay binibilang // ipakita ang kaukulang impormasyon sa port monitor, i-reset ang pila // at magsagawa muli ng paghahanap, naghihintay ng 250ms
kung(!
ds
.
maghanap
(
addr
)){
Serial
.
println
(
"Wala nang address."
);
Serial
.
println
();
ds
.
i-reset ang paghahanap
();
antala
(
250
);bumalik ka;}
// Kung ang susunod na aparato sa bus ay natagpuan, ipakita ang natatanging address nito // sa port monitor sa hexadecimal form Serial
.
mag-print
(
"ROM ="
);para sa(
ako
=
0
;
ako
<
8
;
ako
++){
Serial
.
sumulat
(
‘ ‘
);
Serial
.
mag-print
(
addr
[
ako
],
HEX
);}
// Suriin ang checkum ng address ng nahanap na aparato // at kung hindi ito tumugma, ipakita ang kaukulang impormasyon
kung(
OneWire
::
crc8
(
addr
,
7
)!=
addr
[
7
]){
Serial
.
println
(
"Hindi wasto ang CRC!"
);bumalik ka;}
Serial
.
println
();
// Suriin ang zero byte ng address, na naglalaman ng impormasyon // tungkol sa isang tukoy na uri ng sensor ng temperatura. Depende sa halaga ng zero // byte, ipinapakita namin ang serye ng maliit na tilad sa monitor ng port. Kung ang zero byte ay naglalaman ng hindi kilalang // halaga, ipakita ang isang mensahe tungkol sa hindi kilalang pamilya ng sensor ng temperatura.
lumipat(
addr
[
0
]){kaso
0x10
:
Serial
.
println
(
"Chip = DS18S20"
);
mga uri
=
1
;pahinga;kaso
0x28
:
Serial
.
println
(
"Chip = DS18B20"
);
mga uri
=
0
;pahinga;kaso
0x22
:
Serial
.
println
(
"Chip = DS1822"
);
mga uri
=
0
;pahinga;default:
Serial
.
println
(
"Ang aparato ay hindi isang DS18x20 na aparato ng pamilya."
);bumalik ka;}
ds
.
i-reset
();
// I-reset ang bus upang mapasimulan ang data exchange ds
.
pumili ka
(
addr
);
// Piliin ang sensor na may kasalukuyang address upang gumana dito // Ipadala ang utos upang i-convert ang temperatura (ayon sa dokumentasyon 0x44) // Huwag kalimutan ang tungkol sa pangalawang parameter na "1", dahil nagpapadala kami ng data sa pamamagitan ng / / linya kasama ang suplay ng lakas na parasitiko. ds
.
sumulat
(
0x44
,
1
);
// Nagsisimula ang sensor ng conversion, na ayon sa dokumentasyon ay tumatagal ng max. 750ms // Upang maging ligtas, magsasaayos kami ng isang pag-pause ng ё pangalawang pagkaantala
(
1000
);
// I-reset muli ang bus upang basahin ang impormasyon mula sa sensor // i-save ang tugon ng pag-reset () na function sa kasalukuyang variable para sa karagdagang trabaho na kasalukuyan
=
ds
.
i-reset
();
ds
.
pumili ka
(
addr
);
// Muling piliin ang sensor sa pamamagitan ng address nito, dahil mayroong isang pag-reset ng pulso // Ang utos ng 0xBE, ayon sa teknikal na dokumentasyon, ay nagbibigay-daan sa pagbabasa ng panloob na memorya // ng temperatura sensor (Scratchpad), na binubuo ng 9 bytes. ds
.
sumulat
(
0xBE
);
// Basahin at ipakita ang 9 bytes mula sa panloob na memorya ng temperatura sensor Serial sa port monitor
.
mag-print
(
"Data ="
);
Serial
.
mag-print
(
kasalukuyan
,
HEX
);
Serial
.
mag-print
(
» «
);para sa(
ako
=
0
;
ako
<
9
;
ako
++){
data
[
ako
]=
ds
.
basahin
();
Serial
.
mag-print
(
data
[
ako
],
HEX
);
Serial
.
mag-print
(
» «
);}
// Suriin at output sa port subaybayan ang checkum ng natanggap na data Serial
.
mag-print
(
"CRC ="
);
Serial
.
mag-print
(
OneWire
::
crc8
(
data
,
8
),
HEX
);
Serial
.
println
();
// Simulan ang proseso ng pag-convert ng natanggap na data sa aktwal na temperatura, // na nakaimbak sa 0 at 1 bytes ng binasang memorya. Upang magawa ito, pinagsasama namin ang dalawang // bytes na ito sa isang 16-bit na numero na int16_t raw
=(
data
[
1
]<<
8
)|
data
[
0
];
// Bago ang karagdagang pag-convert, kailangan mong tukuyin ang pamilya kung saan // kabilang ang sensor na ito (mas maaga naming nai-save ang resulta sa variable na type_s). // Depende sa pamilya, ang temperatura ay makakalkula nang magkakaiba, // dahil ang DS18B20 at DS1822 ay nagbabalik ng isang 12-bit na halaga, habang ang DS18S20 ay nagbabalik ng isang 9-bit na halaga
kung(
mga uri
){
// Kung ang sensor ay kabilang sa DS18S20 raw na pamilya
=
hilaw
<<
3
;
// default resolution ay 9 bits
kung(
data
[
7
]==
0x10
){
hilaw
=(
hilaw
&
0xFFF0
)+
12
—
data
[
6
];}}iba pa{
// Tukuyin kung anong katumpakan ng pagsukat ang sensor na ito ay na-configure byte cfg
=(
data
[
4
]&
0x60
);
// Sa mas mababang mga resolusyon, maaari mong zero ang pinakamaliit na makabuluhang mga piraso, // dahil ang mga ito ay hindi natukoy nang maaga
kung(
cfg
==
0x00
)
hilaw
=
hilaw
&~
7
;
// 9 bits (tumatagal ang conversion ng 93.75 ms)
iba pakung(
cfg
==
0x20
)
hilaw
=
hilaw
&~
3
;
// 10 bits (tumatagal ang conversion ng 187.5 ms)
iba pakung(
cfg
==
0x40
)
hilaw
=
hilaw
&~
1
;
// 11 bits (ang conversion ay tumatagal ng 375 ms) // Ang default na katumpakan ay 12 bits (ang conversion ay tumatagal ng 750 ms)
}
// Kalkulahin at output ang mga halagang temperatura sa monitor ng celsius port
=(
lumutang
)
hilaw
/
16.0
;
fahrenheit
=
celsius
*
1.8
+
32.0
;
Serial
.
mag-print
(
"Temperatura ="
);
Serial
.
mag-print
(
celsius
);
Serial
.
mag-print
(
"Celsius,"
);
Serial
.
mag-print
(
fahrenheit
);
Serial
.
println
(
"Fahrenheit"
);}
Kung ang lahat ay tapos nang tama, pagkatapos ay sa port monitor window dapat nating makita ang isang bagay tulad ng sumusunod (Larawan 6):
Larawan 6 - ang resulta ng pagtatrabaho sa OneWire.h library
DallasTemperature.h Library
Ang silid-aklatan na ito ay batay sa naunang isa at pinapasimple ng kaunti ang proseso ng pag-program dahil sa mas nauunawaan na mga pagpapaandar. Pagkatapos ng pag-install, magkakaroon ka ng access sa 14 na mga halimbawa ng maayos na dokumentadong code para sa lahat ng mga okasyon. Sa loob ng balangkas ng artikulong ito, isang halimbawa ng pagpapatakbo na may isang sensor ang isasaalang-alang.
Ang resulta ng programa ay ipinapakita sa Larawan 7
Larawan №7 - ang resulta ng pagbabasa ng temperatura gamit ang DallasTemperature.h library
// Ikonekta namin ang mga kinakailangang aklatan # isama ang # isama // // Ikonekta namin ang data bus sa pin # 2 ng Arduino # tukuyin ang ONE_WIRE_BUS 2 // Lumikha ng isang halimbawa ng klase para sa aming bus at isang link dito OneWire oneWire
(
ONE_WIRE_BUS
);
Mga sensor ng DallasTemperature
(&
oneWire
);
// PRESET FUNCTION walang bisa ang pag-setup
(
walang bisa
){
Serial
.
magsimula
(
9600
);
// Initialize the serial port sensors
.
magsimula
();
// Initialize the bus
}
// MAIN CYCLE
(
walang bisa
){
Serial
.
mag-print
(
"Temperatura sa Pagbasa ..."
);
// Ipadala ang utos na magbasa ng mga sensor
.
requestTemperature
();
Serial
.
println
(
"Basahin"
);
Serial
.
mag-print
(
"Temperatura ng Sensor 1:"
);
// Ipakita ang halagang temperatura ng Serial
.
mag-print
(
mga sensor
.
getTempCByIndex
(
0
));}
Temperatura sensor KY-001 na may 1-Wire interface
Ginagamit ang sensor na ito para sa tumpak na pagsukat ng temperatura. Ang komunikasyon sa sensor ay isinasagawa sa pamamagitan ng interface ng 1-Wire [1-2], na nagbibigay-daan sa iyo upang ikonekta ang maraming mga katulad na aparato sa Arduino board gamit ang isang microcontroller pin [3-4]. Ang module ay batay sa ds18b20 microcircuit [5].
Laki ng module na 24 x 15 x 10 mm, bigat 1.3 g. Ginagamit ang isang konektor na tatlong-pin para sa koneksyon. Central contact - power supply + 5V, contact "-" - common, contact "S" - informational.
Ang board ay may pulang LED na nag-iilaw kapag ang impormasyon ay ipinagpapalit.
Kasalukuyang pagkonsumo ng 0.6 mA habang nagpapalitan ng impormasyon at 20 μA sa standby mode.
Ang pagkonekta ng ganitong uri ng mga sensor sa Arduino ay mahusay na inilarawan sa maraming mga mapagkukunan [6-8]. Sa kasong ito, ang pangunahing mga bentahe ng Arduino ay muling ipinakita - kagalingan sa maraming bagay at pagkakaroon ng isang malaking halaga ng impormasyon sa sanggunian. Upang gumana sa sensor, kakailanganin mo ang OneWire Library [9]. Na-load ang programa mula sa [8] (mayroong isang error sa unang bersyon ng programa - walang # isama ang koneksyon sa library sa header ng code), maaari mong obserbahan ang sumusunod na impormasyon sa serial port monitor.
Sinubukan din ng may-akda ang code mula sa [7], gumana kaagad ang lahat, sa monitor ng serial port maaari mong basahin ang impormasyon tungkol sa uri ng konektadong sensor at ang aktwal na data ng temperatura.
Sa pangkalahatan, isang napaka kapaki-pakinabang na sensor na ginagawang posible upang pamilyar sa interface ng 1-Wire sa pagsasanay. Nagbibigay agad ang sensor ng tamang data ng temperatura, hindi kailangang mag-calibrate ang gumagamit.