Šiame straipsnyje aptarsime įvairius temperatūros jutiklių tipus ir tai, kaip juos galima naudoti kiekvienu atveju atskirai. Temperatūra yra fizinis parametras, matuojamas laipsniais. Tai yra esminė bet kokio matavimo proceso dalis. Sritys, kuriose reikalingi tikslūs temperatūros matavimai, yra medicina, biologiniai tyrimai, elektronika, medžiagų tyrimai ir elektros produktų šiluminė charakteristika. Šilumos energijos kiekiui matuoti naudojamas prietaisas, leidžiantis nustatyti fizinius temperatūros pokyčius, yra žinomas kaip temperatūros jutiklis. Jie yra skaitmeniniai ir analoginiai.
Pagrindiniai jutiklių tipai
Apskritai yra du duomenų gavimo būdai:
1. Susisiekite... Kontaktiniai temperatūros jutikliai fiziškai liečiasi su daiktu ar medžiaga. Jie gali būti naudojami kietųjų medžiagų, skysčių ar dujų temperatūrai matuoti.
2. Bekontaktis... Nekontaktiniai temperatūros jutikliai nustato temperatūrą, sulaikydami dalį objekto ar medžiagos skleidžiamos infraraudonųjų spindulių energijos ir nujausdami jos intensyvumą. Jie gali būti naudojami tik temperatūrai matuoti kietosiose medžiagose ir skysčiuose. Jie negali išmatuoti dujų temperatūros dėl savo bespalvio (skaidrumo).
Jutiklio parinkimo taisyklės
Temperatūros jutiklis grindų šildymui parenkamas atsižvelgiant į tokias charakteristikas kaip galia, viršutinio dangčio tipas, montavimo būdas ir papildomos funkcijos įranga.
Galia
Vertė tikrai turi atitikti šiltų grindų reikalavimus ir apkrovą. Priešingu atveju jutiklis neveiks tinkamai. Kai kaitinimo elemento galia yra didesnė nei paties reguliatoriaus, tarp jų reikia papildomai sumontuoti magnetinį starterį, kad būtų išvengta prietaiso pažeidimo dėl padidėjusios apkrovos.
Funkcijų rinkinys
Šiltas grindis valdo elektrinis blokas, kuris leidžia reguliuoti kaitinimo elementų veikimą. Šiuolaikiniai valdikliai turi tokią funkciją kaip sistemos paleidimas ir išjungimas, temperatūros sąlygų reguliavimas, taip pat nustatomas kaitinimo elemento prijungimo ir atjungimo dažnis.
Naudojimo paprastumas
Jei manote, kad nesuprasite programavimo, neturėtumėte įsigyti sudėtingo įrenginio. Net atsižvelgiant į visą jo funkcionalumą. Pavyzdžiui, vyresnio amžiaus žmonėms gana problemiška susidoroti su programuojamais įrenginiais. Jie geriau pasirinktų mechaninį variantą.
Lengva prijungti
Pridedamuose termostato dokumentuose visada nurodoma, kaip prijungti grindinio šildymo jutiklį. Gnybtai yra viename valdymo bloko krašte. Prijungus elektros laidus pagal schemą, reikės patikrinti šildymo sistemos veikimą. Norėdami tai padaryti, išmatuokite atsparumą temperatūros jutiklio gnybtuose ir šildymo elektros kabelyje arba prijunkite šiltas grindis ir padidinkite temperatūros vertes nuo nulio iki SNIP rekomenduojamo rodiklio, tai yra, iki 30 ° C.
Išvaizda
Terminis jutiklis turėtų būti ne tik funkciškai suprantamas, bet ir patrauklaus dizaino. Šiuolaikinės rankenėlės yra įvairių spalvų ir formų. Galite pasirinkti variantą, kuris derėtų su kambario interjeru.
Temperatūros jutiklių tipai
Yra daug skirtingų temperatūros jutiklių tipų.Nuo paprasto įjungimo / išjungimo termostatinio įtaiso valdymo iki kompleksinių vandens tiekimo valdymo sistemų su jo šildymo funkcija, naudojama augalų auginimo procesuose. Du pagrindiniai jutiklių tipai, kontaktiniai ir bekontakčiai, dar skirstomi į varžinius, įtampos ir elektromechaninius jutiklius. Trys dažniausiai naudojami temperatūros jutikliai:
- Termistoriai
- Atsparumo termoporos
- Termoelementas
Šie temperatūros jutikliai skiriasi vienas nuo kito pagal veikimo parametrus.
Įrenginys
Tai yra termoelementas (plokštė arba strypas), susidedantis iš laidų, sujungtų su jutiklio elemento gnybtais.
Priklausomai nuo informacijos apie temperatūrą, keičiasi jautrios dalies varža, atitinkamai, keičiasi termostatu tiekiamas elektrinis signalas. Taigi nustatoma absoliuti vidutinės temperatūros vertė.
Išorinis (išorinis temperatūros jutiklis grindų šildymui), kaip taisyklė, yra po apdailos grindų danga ir matuoja jo temperatūros rodiklius. Vidinis (įmontuotas), esantis reguliatoriaus viduje ir nustato oro šildymo lygį.
Temperatūros jutiklių konstrukcija parenkama atsižvelgiant į sistemos ypatybes:
Termistorius
Termistorius yra jautrus rezistorius, kuris keičia savo fizinį atsparumą priklausomai nuo temperatūros. Paprastai termistoriai gaminami iš keraminės puslaidininkinės medžiagos, tokios kaip kobaltas, manganas ar nikelio oksidas, ir yra padengti stiklu. Tai maži plokšti sandarūs diskai, kurie gana greitai reaguoja į bet kokius temperatūros pokyčius.
Dėl puslaidininkinių medžiagos savybių termistorių temperatūros koeficientas yra neigiamas (NTC), t. atsparumas mažėja didėjant temperatūrai. Tačiau yra ir PTC termistorių, kurių varža didėja didėjant temperatūrai.
Termistoriaus tvarkaraštis
Termistorių privalumai
- Didelis reakcijos į temperatūros pokyčius greitis, tikslumas.
- Žema kaina.
- Didesnis atsparumas nuo 2000 iki 10 000 omų.
- Daug didesnis jautrumas (~ 200 omų / ° C) esant ribotam temperatūros diapazonui iki 300 ° C.
Atsparumo temperatūros priklausomybė
Atsparumo priklausomybė nuo temperatūros išreiškiama tokia lygtimi:
Kur A, B, C - tai yra konstantos (numatytos skaičiavimo sąlygose), R - pasipriešinimas omais, T - temperatūra Kelvine. Temperatūros pokytį galite lengvai apskaičiuoti pagal atsparumo pokyčius arba atvirkščiai.
Kaip naudoti termistorių?
Termistoriai vertinami pagal jų varžinę vertę kambario temperatūroje (25 ° C). Termistorius yra pasyvus varžinis įtaisas, todėl jam reikia gaminti dabartinės išėjimo įtampos stebėjimą. Paprastai jie yra nuosekliai sujungti su tinkamais stabilizatoriais, formuojančiais tinklo įtampos daliklį.
Pavyzdys: Apsvarstykite termistorių, kurio atsparumo vertė esant 25 ° C temperatūrai yra 2,2 K, o 80 ° C - 50 omų. Termistorius nuosekliai sujungtas su 1 kΩ rezistoriumi per 5 V maitinimo šaltinį.
Todėl jo išėjimo įtampą galima apskaičiuoti taip:
Esant 25 ° C temperatūrai, RNTC = 2200 omų;
Esant 80 ° C temperatūrai, RNTC = 50 omų;
Tačiau svarbu pažymėti, kad kambario temperatūroje skirtingų termistorių standartinės varžos vertės yra skirtingos, nes jos yra nelinijinės. Termistorius turi eksponentinį temperatūros pokytį, taigi ir beta konstantą, kuris naudojamas apskaičiuojant jo atsparumą tam tikrai temperatūrai. Rezistoriaus išėjimo įtampa ir temperatūra yra tiesiškai susiję.
LMT01 temperatūros jutiklių dviejų laidų srovės sąsajos ypatybės
Pav. 4. Dabartinės sąsajos su LMT01 organizavimas
Kaip minėta pirmiau, norint perduoti matavimo rezultatą, LMT01 sukuria bitų seką srovės skaičiavimo impulsų pavidalu. Tam jutikliui reikia tik dviejų laidų (4 pav.). Norėdami konvertuoti srovės impulsus į skaitmeninėms mikroschemoms įprastą formą, kai kuriais atvejais galite naudoti vieną rezistorių (bet ne visada - daugiau apie tai žemiau).
Po įjungimo LMT01 pradeda matavimo ciklą, kuris trunka iki 54 ms (5 pav.). Per šį laiką jutiklio išėjime susidaro žemo lygio 28 ... 39 μA srovė. Po to seka matavimo rezultatų perdavimo ciklas srovės impulsų pavidalu, kurio amplitudė yra 112 ... 143 μA. Priimantis mikrovaldiklis turi suskaičiuoti šiuos impulsus, pavyzdžiui, naudodamas įmontuotą skaitiklį / laikmatį. Kadangi signalų dažnis yra apie 82 ... 94 kHz, tada esant maksimaliam impulsų skaičiui (4095), perdavimo trukmė gali siekti 50 ms.
Pav. 5. Jutiklio LMT01 laiko schemos
Pagal suskaičiuotų impulsų skaičių (PC) temperatūros reikšmę galima nustatyti pagal 1 formulę:
, (1)
Taigi 0 ° C temperatūroje jutiklis generuos apie 800 impulsų.
Deja, ne visada įmanoma naudoti vieną išorinį rezistorių dėl minimalaus įtampos kritimo LMT01 jutiklyje apribojimo. Matavimo ciklo metu jutiklio kritimas turi būti bent 2,15 V. Duomenų perdavimo ciklo metu įtampos kritimą galima sumažinti iki 2 V. Nesunku atlikti keletą apytikslių skaičiavimų.
Apsvarstykite prietaisą, kurio maitinimo įtampa Vdd = 3,3 V. Jei matavimo ciklo metu imsime mažiausią leistiną jutiklio kritimą, lygų 2,15 V, tada per rezistorių bus pastebimas ne didesnis kaip 1,15 V signalas. valdiklis, loginis vienetas yra 0, 7 ∙ Vdd, kuris mūsų atveju bus 2,31 V. Dėl to paprasto rezistoriaus naudojimas pasirodo neįmanomas, nes mikrovaldiklis paprasčiausiai „nematys“ loginis vienetas. Išeitis iš šios situacijos gali būti mikrovaldiklio naudojimas su įmontuotu lyginamuoju arba lygio keitimo grandinėmis.
Varžiniai temperatūros jutikliai
Atsparumo temperatūrai jutikliai (RTD) yra pagaminti iš retų metalų, tokių kaip platina, kurių elektrinė varža kinta priklausomai nuo temperatūros.
Varžiniai temperatūros detektoriai turi teigiamą temperatūros koeficientą ir, skirtingai nei termistoriai, užtikrina aukštą temperatūros matavimo tikslumą. Tačiau jie turi silpną jautrumą. Pt100 yra plačiausiai prieinamas jutiklis, kurio standartinė varžos vertė yra 100 omų esant 0 ° C temperatūrai. Pagrindinis trūkumas yra didelė kaina.
Tokių jutiklių privalumai
- Platus temperatūros diapazonas nuo -200 iki 650 ° C
- Užtikrinkite didelio kritimo srovės išėjimą
- Linijiškesnė, palyginti su termoporomis ir RTD
Papildomi komponentai ir jutiklio grandinė
Be pagrindinių diodų įtaisų, temperatūros jutiklio grandinėje yra daugybė papildomų elementų. Visų pirma, tai kondensatorius, apsaugantis prietaisą nuo pašalinių poveikių. Faktas yra tai, kad operacinis stiprintuvas yra labai jautrus kintančių elektromagnetinių laukų poveikiui. Kondensatorius pašalina šią priklausomybę įvesdamas neigiamą grįžtamąjį ryšį.
Dalyvaujant tranzistoriui ir zenerio diodui, susidaro stabilizuota atskaitos įtampa. Čia naudojami didesnės tikslumo klasės rezistoriai su maža atsparumo temperatūros koeficiento verte. Taigi visa schema įgyja papildomo stabilumo. Esant galimiems reikšmingiems temperatūros sąlygų pokyčiams, tiksliųjų varžų galima praleisti. Jie naudojami tik mažam perkaitimui kontroliuoti.
Termoelementas
Termoporos temperatūros jutikliai dažniausiai naudojami, nes jie yra tikslūs, veikia plačiame temperatūros diapazone nuo -200 ° C iki 2000 ° C ir yra palyginti nebrangūs. Termoelementas su viela ir kištuku žemiau esančioje nuotraukoje:
Termoporos veikimas
Termoporą sudaro du skirtingi metalai, suvirinti, kad susidarytų potencialus temperatūros skirtumas. Iš temperatūros skirtumo tarp dviejų sankryžų susidaro įtampa, kuri naudojama temperatūrai matuoti. Įtampos skirtumas tarp dviejų sankryžų vadinamas Seebecko efektu.
Jei abu junginiai yra toje pačioje temperatūroje, skirtingų junginių skirtumas gali būti lygus nuliui, t.y. V1 = V2. Tačiau, jei sandūros yra skirtingos temperatūros, išėjimo įtampa, palyginti su temperatūros skirtumu tarp dviejų sankryžų, bus lygi jų V1 - V2 skirtumui.
Temperatūros jutiklių tipai
Elektroninė-mechaninė
Paprasčiausias ir nebrangiausias reguliatoriaus tipas. Pagrindinė jo darbinė dalis yra speciali metalinė plokštė, reaguojanti į temperatūros padidėjimą ar sumažėjimą. Sistema įjungiama ir išjungiama keičiant plokštės kreivumą kaitinant ir vėsinant. Tikslios temperatūros vertės nustatymas tokiame reguliatoriuje neveiks.
Elektroninis
Prietaisas turi specialų elementą, kuris generuoja specialų signalą. Galia tiesiogiai priklauso nuo aplinkos temperatūros verčių. Tokiuose prietaisuose galite nustatyti tikslius šildymo temperatūros rodmenis iki laipsnio dalies. Sistema valdoma mygtukais ir mažu ekranu.
Programuojamas
Brangiausias iš termoelementų. Jame galite nustatyti tam tikras vertes, kurias pasiekus reguliatorius įjungia arba išjungia visą sistemą. Prietaiso dėka kambaryje sukuriamas mikroklimatas, kuris tinka konkrečiam asmeniui. Termostatą galima sukonfigūruoti taip, kad sistema būtų įjungta tam tikru laiku. Tai yra, grindys pašildomos prieš savininkui atvykstant namo, o tuo pačiu metu elektros energija nėra vartojama, kai savininkas to nedaro.
Daugelis modelių pasižymi ryškiu ir stilingu dizainu bei skystųjų kristalų ekranais, kuriuose pateikiama informacija ir palengvinamas tikslus derinimas.
Darbas su jau parengtomis bibliotekomis
Taigi, norėdami dirbti su DS18B20 temperatūros jutikliais tinkle, galite rasti daugybę bibliotekų, tačiau paprastai naudojamos dvi populiariausios. Tai biblioteka ir biblioteka. Be to, antroji biblioteka yra patogesnis priedas prieš pirmąją ir negali būti naudojama be jos. Kitaip tariant, prieš prijungdami „DallasTemperature.h“ biblioteką, taip pat turite prijungti „OneWire.h“. Galima įdiegti tam tikras bibliotekas „Arduino IDE“.
Biblioteka „OneWire.h“
Pirmiausia apsvarstykime galimybę dirbti su „OneWire.h“ biblioteka. Žemiau pateikiamas jo funkcijų sąrašas su trumpu aprašymu.
- „OneWire“ temperatūros jutiklis (uint8_t pinNumber)
Ši funkcija yra „OneWire“ klasės konstruktorius ir sukuria „temperatūros jutiklio“ objektą, t. atidaro ryšio kanalą su jutikliu arba jutiklių grupe ant pinNumber kaiščio. Mūsų pavyzdžiuose (3-5 paveikslai) tai „Arduino Nano“ kaištis „D2“. Būtent prie jo prijungėme duomenų magistralę DQ DS18B20.
Pavyzdys:
„OneWire“ temperatūros jutiklis
(
D2
);
Jutiklis arba jutiklių grupė yra prijungta prie kaiščio D2
- uint8_t ieškoti (addrArray)
Funkcija ieško kito „1-Wire“ magistralės įrenginio ir, radusi, įveda adreso vertę į masyvą „addrArray“, grąžinant tiesą. Kadangi kiekvieno jutiklio unikalus adresas yra 64 bitų, „addrArray“ turi būti 8 baitų dydžio. Jei paieška nepavyksta, funkcija pateikia klaidingą reikšmę. Reikėtų pažymėti, kad kai prie vienos magistralės yra prijungti keli temperatūros jutikliai, kiekvienas skambutis į paieškos funkciją bus nukreiptas į kitą jutiklį, paskui kitą ir t. T., Kol bus išvardyti visi magistralėje esantys įrenginiai. Šios funkcijos ypatumas yra prisiminti jau apdorotus adresus. Norėdami iš naujo nustatyti eilę, turite iškviesti funkciją reset_search (), kuri bus aptarta toliau.
Pavyzdys:
baitas addrArray
[
8
];
// 64 bitų adreso saugojimo masyvas // Jei įrenginio iš viso nėra magistralėje arba visi įrenginiai yra išvardyti // rodyti atitinkamą informaciją uosto monitoriuje
jei(!
temperatūros jutiklis
.
Paieška
(
addrArray
))
Serijinis
.
println
(
- Daugiau adresų nėra.
);
// Priešingu atveju, jei kitas įrenginys atsakė į buvimo užklausą, // rodykite jo 64 bitų adresą prievado monitoriuje
Kitas{dėl(
i
=
0
;
i
<
8
;
i
++)
Serijinis
.
spausdinti
(
addrArray
[
i
],
HEX
);
}
- tuštumareset_search ()
Kaip minėta aukščiau, ši funkcija nuo pat pradžių atstato prietaisų, esančių „1-Wire“, rinkimų eilę. Jis visada turėtų būti naudojamas kartu su paieškos funkcija, kai pastaroji pateikia klaidingą reikšmę. Pavyzdžiui, mūsų autobuse esant 5 jutikliams, 5 kartus iškvietus paieškos funkciją, galime gauti 5 adresus. Šeštą kartą paieškos funkcija grąžins mums klaidingą informaciją ir atliks tai su kiekviena kita apklausa, kol eilė bus išplauta. Turėtumėte į tai atkreipti dėmesį, kad išvengtumėte nesuprantamų situacijų.
Pavyzdys:
baitas addrArray
[
8
];
// 64 bitų adreso saugojimo masyvas // Jei įrenginyje autobuso apskritai nėra arba visi įrenginiai yra išvardyti // iš naujo nustatykite rinkimų eilę, kad pakartotumėte paieškos ciklą
jei(!
temperatūros jutiklis
.
Paieška
(
addrArray
))
temperatūros jutiklis
.
reset_search
();
- uint8_tnustatyti iš naujo ()
1 laido atstatymo funkcija pradeda ryšio procesą. Tai vadinama kiekvieną kartą, kai norime bendrauti su temperatūros jutikliu. Grąžinimo vertės gali būti teisingos arba klaidingos. Tikrąją vertę gausime, jei bent vienas magistralės jutiklis atsakys į atstatymą buvimo impulsu. Priešingu atveju mes gauname melagingą;
Pavyzdys:
jei(!
temperatūros jutiklis
.
atstatyti
())
Serijinis
.
println
(
„Autobuse nėra jutiklių“
);Kitas
Serijinis
.
println
(
„Aptiktas jutiklis“
);
- tuštumapasirinkti (addrArray)
Ši funkcija leidžia pasirinkti konkretų įrenginį, su kuriuo šiuo metu norime dirbti. Pasirinkimas atliekamas aiškiai nurodant 64 bitų adresą, įvestą masyve addrArray. Adresą galima nustatyti aiškiai įrašant jį į masyvą arba naudojant tą, kurį anksčiau perskaitė paieškos funkcija. Reikėtų pažymėti, kad prieš skambinant pasirinkimo funkcijai reikia iškviesti atstatymo funkciją. Po kito atstatymo ryšys su pasirinktu jutikliu nutrūksta iki kito pasirinkto skambučio.
Pavyzdys:
baitas addrArray
[
8
];
// 64 bitų adreso saugojimo masyvas // Jei įrenginyje magistralėje apskritai nėra arba visi įrenginiai yra išvardyti // atitinkamą informaciją pateikia uosto monitoriui
jei(!
temperatūros jutiklis
.
Paieška
(
addrArray
))
Serijinis
.
println
(
- Daugiau adresų nėra.
);
// Priešingu atveju, jei kitas įrenginys atsakė į dalyvavimo užklausą, // pasirinkite jį tolesniam darbui
Kitas{
temperatūros jutiklis
.
nustatyti iš naujo ()
;
Nepamirškite išleisti temperatūros jutiklio atstatymo komandos
.
pasirinkti (addrArray)
;
// Nurodykite masyvą su skaitytu adresu
}
- tuštumapraleisti ()
Funkcija aktuali tik dirbant su vienu jutikliu magistralėje ir paprasčiausiai praleidžiantį prietaiso pasirinkimą. Kitaip tariant, jūs negalite naudoti paieškos funkcijos, todėl greitai pasieksite naudodami vienintelį jutiklį.
Pavyzdys:
temperatūros jutiklis.
atstatyti
();
// Iš naujo nustatykite temperatūros jutiklio padangą
.
praleisti
();
// Pasirinkite vienintelį jutiklį tolesniam darbui su juo
- tuštumarašyti (uint8_tbaitas, uint8_t powerType = 0)
Funkcija siunčia duomenų baitą į pasirinktą magistralės įrenginį. Argumentas „powerType“ nurodo jutiklių maitinimo tipą (0 - jutikliai maitinami tiesiogiai iš išorinio šaltinio; 1 - naudojamas parazitinis maitinimas). Antrąjį parametrą galima praleisti, jei naudojama išorinė energija, nes jis pagal nutylėjimą yra 0.
Pavyzdys:
temperatūros jutiklis
.
atstatyti
();
// Iš naujo nustatykite temperatūros jutiklio padangą
.
praleisti
();
// Pasirinkite vieną jutiklį tolesniam darbui su juo // Siųskite komandą, kad konvertuotumėte temperatūrą, // naudodami ryšį su parazitine galia iš temperatūros jutiklio duomenų magistralės
.
rašyti
(
0x44
,
1
);
- uint8_tskaityti ()
Ši funkcija nuskaito vieną baitą duomenų, kuriuos vergo įrenginys (jutiklis) siuntė į 1 laido magistralę.
Pavyzdys:
// Perskaitykite 9 baitų duomenis iš „1-Wire“ magistralės ir įdėkite rezultatą į masyvo baitų masyvą
[
9
];dėl(
uint8_t i
=
0
;
i
<
9
;
i
++){
masyvas
[
i
]=
temperatūros jutiklis
.
skaityti
();}
- statinis uint8_t crc8 (const uint8_t * addr, uint8_t len);
Funkcija skirta kontrolinei sumai apskaičiuoti. Skirtas patikrinti, ar teisingai palaikomas ryšys su temperatūros jutikliu. Čia addr yra duomenų masyvo rodyklė, o len - baitų skaičius.
Pavyzdys:
baitas addrArray
[
8
];
// 64 bitų adreso saugojimo masyvas // Jei įrenginyje magistralėje apskritai nėra arba visi įrenginiai yra išvardyti // atitinkamą informaciją pateikia uosto monitoriui
jei(!
temperatūros jutiklis
.
Paieška
(
addrArray
))
Serijinis
.
println
(
- Daugiau adresų nėra.
);
// Priešingu atveju, jei kitas įrenginys atsakė į buvimo užklausą, // patikrinkite jo adreso kontrolinę sumą
Kitas{
// Jei kontrolinė suma nesutampa, pateikite klaidos pranešimą
jei(
„OneWire“
::
crc8
(
addrArray
,
7
)!=
addrArray
[
7
]){
Serijinis
.
println
(
"CRC negalioja!"
);}}
Mes ištyrėme kiekvieną „OneWire.h“ bibliotekos funkciją atskirai ir, norėdami pataisyti medžiagą, žemiau pateiksiu eskizą temperatūros nuskaitymui iš DS18B20 temperatūros jutiklių grupės, kuri bus sujungta su kaiščiu D2 naudojant parazitinę maitinimo grandinę. Eskize bus išsamūs komentarai apie visus reikalingus punktus.
#include // Prijungiame biblioteką darbui su DS18B20OneWire ds šilumos jutikliais
(
2
);
// Jutiklis arba jutiklių grupė yra prijungta prie „Arduino“ D2 kaiščio // PRESET FUNCTION negaliojanti sąranka
(
tuštuma
){
Serijinis
.
pradėti
(
9600
);
// Darbo su „Serial-port“ inicijavimas} // PAGRINDINIS CIKLAS void loop
(
tuštuma
){
baitas i
;
// Pagalbinis kintamasis baitų esamų kilpų
=
0
;
// Kintamasis nustato jutiklio pasirengimą komunikacijos baitų tipams_s
;
// Kintamasis norint nustatyti temperatūros jutiklio tipą baitų duomenų magistralėje
[
12
];
// Masyvas informacijai, gautai iš jutiklio baito adreso, saugoti
[
8
];
// Masyvas 64 bitų plūduriuojančio Celsijaus jutiklio adresui išsaugoti
,
Farenheitas
;
// Temperatūros apskaičiavimo kintamieji // Jei magistralėje esančių įrenginių nerandama arba visi magistralės įrenginiai yra išvardyti // rodyti atitinkamą informaciją prievado monitoriuje, iš naujo nustatyti eilę // ir vėl atlikti paiešką palaukus 250 ms
jei(!
ds
.
Paieška
(
adresas
)){
Serijinis
.
println
(
- Daugiau adresų nėra.
);
Serijinis
.
println
();
ds
.
reset_search
();
delsimas
(
250
);grįžti;}
// Jei randamas kitas įrenginys magistralėje, prievado monitoriuje rodykite jo unikalų adresą // šešioliktainės formos nuoseklia forma
.
spausdinti
(
"ROM ="
);dėl(
i
=
0
;
i
<
8
;
i
++){
Serijinis
.
rašyti
(
‘ ‘
);
Serijinis
.
spausdinti
(
adresas
[
i
],
HEX
);}
// Patikrinkite surasto įrenginio adreso kontrolinę sumą // ir, jei ji nesutampa, pateikite atitinkamą informaciją
jei(
„OneWire“
::
crc8
(
adresas
,
7
)!=
adresas
[
7
]){
Serijinis
.
println
(
"CRC negalioja!"
);grįžti;}
Serijinis
.
println
();
// Patikrinkite nulinį adreso baitą, kuriame yra informacija // apie konkretų temperatūros jutiklio tipą. Priklausomai nuo nulinio // baito vertės, lustų seriją išvedame į prievado monitorių. Jei nuliniame baite yra nežinoma // reikšmė, parodykite pranešimą apie nežinomą temperatūros jutiklio šeimą.
perjungti(
adresas
[
0
]){atveju
0x10
:
Serijinis
.
println
(
"Chip = DS18S20"
);
type_s
=
1
;pertrauka;atveju
0x28
:
Serijinis
.
println
(
"Lustas = DS18B20"
);
type_s
=
0
;pertrauka;atveju
0x22
:
Serijinis
.
println
(
"Chip = DS1822"
);
type_s
=
0
;pertrauka;numatytas:
Serijinis
.
println
(
"Įrenginys nėra DS18x20 šeimos įrenginys."
);grįžti;}
ds
.
atstatyti
();
// Iš naujo nustatykite magistralę, kad inicijuotumėte duomenų mainus
.
pasirinkite
(
adresas
);
// Pasirinkite jutiklį su dabartiniu adresu, kad dirbtumėte su juo // Siųskite komandą, kad konvertuotumėte temperatūrą (pagal dokumentaciją 0x44) // Nepamirškite apie antrąjį parametrą „1“, nes mes perduodame duomenis per / / linija su parazitine galia. ds
.
rašyti
(
0x44
,
1
);
// Jutiklis pradeda konversiją, kuri pagal dokumentaciją trunka maks. 750ms // Kad būtume saugūs, suorganizuosime ё antrojo uždelsimo pauzę
(
1000
);
// Dar kartą nustatykite magistralę, kad skaitytumėte informaciją iš jutiklio // išsaugokite funkcijos reset () atsaką į esamą kintamąjį, kad galėtumėte dirbti toliau
=
ds
.
atstatyti
();
ds
.
pasirinkite
(
adresas
);
// Iš naujo pasirinkite jutiklį pagal jo adresą, nes buvo atstatymo impulsas // Komanda 0xBE, remiantis technine dokumentacija, leidžia nuskaityti temperatūros jutiklio („Scratchpad“) vidinę atmintį //, kurią sudaro 9 baitai. ds
.
rašyti
(
0xBE
);
// Perskaitykite 9 baitų prievado monitoriaus išvestį iš vidinio nuosekliojo terminio jutiklio atminties
.
spausdinti
(
"Duomenys ="
);
Serijinis
.
spausdinti
(
pateikti
,
HEX
);
Serijinis
.
spausdinti
(
» «
);dėl(
i
=
0
;
i
<
9
;
i
++){
duomenis
[
i
]=
ds
.
skaityti
();
Serijinis
.
spausdinti
(
duomenis
[
i
],
HEX
);
Serijinis
.
spausdinti
(
» «
);}
// Patikrinkite ir išvesties į prievadą stebėkite gautų duomenų nuosekliąją kontrolinę sumą
.
spausdinti
(
"CRC ="
);
Serijinis
.
spausdinti
(
„OneWire“
::
crc8
(
duomenis
,
8
),
HEX
);
Serijinis
.
println
();
// Pradėkite gautų duomenų konvertavimą į faktinę temperatūrą, // kuri yra saugoma 0 ir 1 baituose skaitytoje atmintyje. Norėdami tai padaryti, sujungiame šiuos du // baitus į vieną 16 bitų skaičių int16_t raw
=(
duomenis
[
1
]<<
8
)|
duomenis
[
0
];
// Prieš tolesnį konversiją turite apibrėžti šeimą, kuriai // priklauso šis jutiklis (anksčiau rezultatą išsaugojome kintamajame type_s). // Priklausomai nuo šeimos, temperatūra bus apskaičiuojama kitaip, // kadangi DS18B20 ir DS1822 pateikia 12 bitų vertę, o DS18S20 - 9 bitų
jei(
type_s
){
// Jei jutiklis priklauso „DS18S20 raw“ šeimai
=
žalias
<<
3
;
// numatytoji skiriamoji geba yra 9 bitai
jei(
duomenis
[
7
]==
0x10
){
žalias
=(
žalias
&
0xFFF0
)+
12
—
duomenis
[
6
];}}Kitas{
// Nustatykite, kokiu matavimo tikslumu šis jutiklis sukonfigūruotas baitų CFG
=(
duomenis
[
4
]&
0x60
);
Mažesnėmis skiriamosiomis gebomis galite nulį sumažinti mažiausiai reikšmingiems bitams //, nes jie nėra apibrėžti anksčiau
jei(
plg
==
0x00
)
žalias
=
žalias
&~
7
;
9 bitai (konversija trunka 93,75 ms)
Kitasjei(
plg
==
0x20
)
žalias
=
žalias
&~
3
;
10 bitų (konversija trunka 187,5 ms)
Kitasjei(
plg
==
0x40
)
žalias
=
žalias
&~
1
;
11 bitų (konversija trunka 375 ms) // Numatytasis tikslumas yra 12 bitų (konversija trunka 750 ms)
}
// Apskaičiuokite ir išėjimo temperatūros vertes į Celsijaus prievado monitorių
=(
plūdė
)
žalias
/
16.0
;
Farenheitas
=
Celsijaus
*
1.8
+
32.0
;
Serijinis
.
spausdinti
(
"Temperatūra ="
);
Serijinis
.
spausdinti
(
Celsijaus
);
Serijinis
.
spausdinti
(
„Celsijaus“
);
Serijinis
.
spausdinti
(
Farenheitas
);
Serijinis
.
println
(
„Farenheitas“
);}
Jei viskas atlikta teisingai, tada prievado stebėjimo lange turėtume pamatyti kažką panašaus į tai (6 pav.):
6 paveikslas - darbo su „OneWire.h“ biblioteka rezultatas
DallasTemperature.h biblioteka
Ši biblioteka yra paremta ankstesne ir dėl suprantamesnių funkcijų šiek tiek supaprastina programavimo procesą. Įdiegę turėsite prieigą prie 14 gerai dokumentuoto kodo pavyzdžių visoms progoms. Šiame straipsnyje bus svarstomas veikimo su vienu jutikliu pavyzdys.
Programos rezultatas parodytas 7 paveiksle
7 paveikslas - temperatūros nuskaitymo naudojant „DallasTemperature.h“ biblioteką rezultatas
// Prijungiame reikiamas bibliotekas # include #include // Duomenų magistralę sujungiame su „Arduino“ # 2 PIN kodu # define ONE_WIRE_BUS 2 // Sukurkite mūsų magistralės klasės egzempliorių ir nuorodą į jį „OneWire oneWire“
(
ONE_WIRE_BUS
);
DalasasTemperatūros jutikliai
(&
„oneWire“
);
// IŠANKSTINĖ FUNKCIJA negaliojanti sąranka
(
tuštuma
){
Serijinis
.
pradėti
(
9600
);
// Inicializuokite nuoseklaus prievado jutiklius
.
pradėti
();
// Inicijuoti autobusą
}
// PAGRINDINIS CIKLAS
(
tuštuma
){
Serijinis
.
spausdinti
(
"Skaitymo temperatūra ..."
);
// Siųskite komandą skaityti jutiklius
.
užklausaTemperatūra
();
Serijinis
.
println
(
„Skaityti“
);
Serijinis
.
spausdinti
(
"1 jutiklio temperatūra:"
);
// Parodykite temperatūros reikšmę Serial
.
spausdinti
(
jutikliai
.
„getTempCByIndex“
(
0
));}
Temperatūros jutiklis KY-001 su 1 laido sąsaja
Šis jutiklis naudojamas tiksliam temperatūros matavimui. Ryšys su jutikliu vykdomas per 1-Wire sąsają [1-2], kuri leidžia prijungti kelis panašius įrenginius prie „Arduino“ plokštės naudojant vieną mikrovaldiklio kaištį [3-4]. Modulis yra pagrįstas ds18b20 mikroschema [5].
Modulio dydis 24 x 15 x 10 mm, svoris 1,3 g. Prijungimui naudojama trijų kontaktų jungtis. Centrinis kontaktas - maitinimas + 5V, kontaktas „-“ - įprastas, kontaktas „S“ - informacinis.
Lentoje yra raudonas šviesos diodas, kuris užsidega, kai keičiamasi informacija.
Srovės suvartojimas 0,6 mA keičiantis informacija ir 20 μA budėjimo režimu.
Šio tipo jutiklių prijungimas prie „Arduino“ yra gerai aprašytas daugelyje šaltinių [6–8]. Šiuo atveju vėl pasireiškia pagrindiniai „Arduino“ pranašumai - universalumas ir didžiulio kiekio informacinės informacijos buvimas. Norėdami dirbti su jutikliu, jums reikės „OneWire“ bibliotekos [9]. Įkėlę programą iš [8] (pirmojoje programos versijoje yra klaida - kodo antraštėje nėra #include bibliotekos ryšio), nuosekliojo prievado monitoriuje galite stebėti šią informaciją.
Autorius taip pat išbandė kodą iš [7], viskas veikė iš karto, nuoseklaus prievado monitoriuje galite perskaityti informaciją apie prijungto jutiklio tipą ir faktinius temperatūros duomenis.
Apskritai, labai naudingas jutiklis, leidžiantis praktiškai susipažinti su „1-Wire“ sąsaja. Jutiklis nedelsdamas pateikia teisingus temperatūros duomenis, vartotojui nereikia kalibruoti.