U ovom ćemo članku razgovarati o različitim vrstama temperaturnih senzora i o tome kako se oni mogu koristiti od slučaja do slučaja. Temperatura je fizički parametar koji se mjeri u stupnjevima. To je bitan dio svakog postupka mjerenja. Područja koja zahtijevaju precizna mjerenja temperature uključuju medicinu, biološka istraživanja, elektroniku, istraživanje materijala i toplinske performanse električnih proizvoda. Uređaj koji se koristi za mjerenje količine toplinske energije koji nam omogućuje otkrivanje fizičkih promjena temperature poznat je kao temperaturni senzor. Oni su digitalni i analogni.
Glavne vrste senzora
Općenito postoje dvije metode za dobivanje podataka:
1. Kontakt... Kontaktni temperaturni senzori su u fizičkom kontaktu s predmetom ili tvari. Mogu se koristiti za mjerenje temperature krutina, tekućina ili plinova.
2. Beskontaktno... Nekontaktni temperaturni senzori detektiraju temperaturu presretanjem dijela infracrvene energije koju emitira objekt ili tvar i osjetom njenog intenziteta. Mogu se koristiti samo za mjerenje temperature u krutim tvarima i tekućinama. Nisu u mogućnosti izmjeriti temperaturu plinova zbog svoje bezbojnosti (prozirnosti).
Pravila odabira senzora
Senzor temperature za podno grijanje odabire se uzimajući u obzir karakteristike kao što su snaga, vrsta gornje obloge, način ugradnje i oprema s dodatnom funkcionalnošću.
Vlast
Vrijednost svakako mora udovoljavati zahtjevima i opterećenju toplog poda. U suprotnom, senzor neće raditi ispravno. Kada je snaga grijaćeg elementa veća od snage samog regulatora, postaje potrebno između njih dodatno ugraditi magnetni pokretač - kako bi se spriječilo oštećenje uređaja zbog povećanog opterećenja.
Skup značajki
Topli pod kontrolira se električnom jedinicom koja vam omogućuje podešavanje rada grijaćih elemenata. Suvremeni kontroleri imaju takvu funkcionalnost kao što su pokretanje i isključivanje sustava, podešavanje temperaturnih uvjeta, kao i podešavanje učestalosti spajanja i odvajanja grijaćeg elementa.
Jednostavnost korištenja
Ako mislite da ne razumijete programiranje, ne biste trebali kupiti složeni uređaj. Čak i uzimajući u obzir svu njegovu funkcionalnost. Na primjer, starijim ljudima je prilično problematično baviti se programabilnim uređajima. Bolje da odaberu mehaničku opciju.
Jednostavno povezivanje
Prateća dokumentacija za termostat uvijek naznačuje kako spojiti senzor podnog grijanja. Stezaljke se nalaze na rubu s jedne strane upravljačke jedinice. Nakon spajanja električnih žica prema shemi, bit će potrebno provjeriti izvedbu sustava grijanja. Da biste to učinili, izmjerite otpor na stezaljkama osjetnika temperature i grijaćeg električnog kabela ili spojite topli pod i povećajte vrijednosti temperature od nule do indikatora koji preporučuje SNIP, odnosno do 30 ° C.
Izgled
Toplinski senzor ne bi trebao biti samo funkcionalno razumljiv, već i atraktivan u dizajnu. Moderni gumbi dolaze u raznim bojama i oblicima. Možete odabrati opciju koja je u skladu s unutrašnjošću sobe.
Vrste temperaturnih senzora
Postoji mnogo različitih vrsta temperaturnih senzora.Od jednostavnog upravljanja uključivanjem / isključivanjem termostatskog uređaja do složenih sustava upravljanja vodoopskrbom, s funkcijom zagrijavanja, koji se koriste u procesima uzgoja biljaka. Dvije glavne vrste senzora, kontaktni i beskontaktni, dalje se dijele na otporne, naponske i elektromehaničke senzore. Tri najčešće korištena temperaturna senzora su:
- Termistori
- Otporni termoelementi
- Termoelement
Ti se temperaturni senzori međusobno razlikuju u pogledu radnih parametara.
Uređaj
To je termoelement (ploča ili šipka) koji se sastoji od žica koje se spajaju na stezaljke osjetnog elementa.
Ovisno o informacijama o temperaturi, mijenja se otpor osjetljivog dijela, odnosno mijenja se električni signal koji se dovodi na termostat. Tako se određuje apsolutna vrijednost temperature medija.
Vanjski (vanjski temperaturni senzor za podno grijanje), u pravilu, nalazi se ispod završne podne obloge i mjeri svoje temperaturne pokazatelje. Unutarnji (ugrađeni), smješten unutar regulatora i određuje razinu zagrijavanja zraka.
Dizajn temperaturnih senzora odabire se ovisno o značajkama sustava:
Termistor
Termistor je osjetljivi otpornik koji mijenja svoj fizički otpor s temperaturom. Obično su termistori izrađeni od keramičkog poluvodičkog materijala poput kobalta, mangana ili nikal-oksida i presvučeni su staklom. To su mali ploski zatvoreni diskovi koji relativno brzo reagiraju na bilo koju promjenu temperature.
Zbog poluvodičkih svojstava materijala, termistori imaju negativni temperaturni koeficijent (NTC), tj. otpor opada s porastom temperature. Međutim, postoje i PTC termistori čiji se otpor povećava s porastom temperature.
Termistorski raspored
Prednosti termistora
- Velika brzina reakcije na promjene temperature, točnost.
- Niska cijena.
- Veći otpor u rasponu od 2.000 do 10.000 ohma.
- Mnogo veća osjetljivost (~ 200 ohm / ° C) u ograničenom temperaturnom rasponu do 300 ° C.
Ovisnosti otpora o temperaturi
Ovisnost otpora o temperaturi izražava se sljedećom jednadžbom:
Gdje A, B, C - to su konstante (predviđene uvjetima izračuna), R - otpor u Ohmima, T - temperatura u Kelvinima. Promjenu temperature možete lako izračunati iz promjene otpora ili obrnuto.
Kako se koristi termistor?
Termistori su ocijenjeni kao otporni na sobnoj temperaturi (25 ° C). Termistor je pasivni otporni uređaj, pa zahtijeva proizvodnju nadzora trenutnog izlaznog napona. U pravilu su povezani u seriju s prikladnim stabilizatorima koji čine mrežni razdjelnik napona.
Primjer: Uzmimo u obzir termistor s vrijednošću otpora od 2,2 K na 25 ° C i 50 ohma na 80 ° C. Termistor je serijski povezan s otpornikom od 1 kΩ kroz napajanje od 5 V.
Stoga se njegov izlazni napon može izračunati na sljedeći način:
Na 25 ° C, RNTC = 2200 ohma;
Na 80 ° C, RNTC = 50 ohma;
Međutim, važno je napomenuti da su na sobnoj temperaturi standardne vrijednosti otpora različite za različite termistore, jer su nelinearne. Termistor ima eksponencijalnu temperaturnu promjenu, a time i beta konstantu, koja se koristi za izračunavanje njegovog otpora za zadanu temperaturu. Izlazni napon i temperatura otpornika linearno su povezani.
Značajke dvožičnog strujnog sučelja u temperaturnim senzorima LMT01
Sl. 4. Organizacija trenutnog sučelja s LMT01
Kao što je gore spomenuto, za prijenos rezultata mjerenja, LMT01 generira sekvencu bitova u obliku impulsa za brojanje struje. Za to senzor trebaju samo dva kabela (slika 4). Da biste pretvorili trenutne impulse u oblik poznat digitalnim mikrovezama, u nekim slučajevima možete upotrijebiti jedan otpor (ali ne uvijek - o tome više u nastavku).
Nakon uključivanja, LMT01 započinje mjerni ciklus koji traje do 54 ms (slika 5). Za to vrijeme na izlazu senzora stvara se struja niske razine od 28 ... 39 μA. Nakon toga slijedi ciklus prijenosa rezultata mjerenja u obliku strujnih impulsa s amplitudom 112 ... 143 μA. Mikrokontroler koji prima mora brojati ove impulse, na primjer pomoću ugrađenog brojača / odbrojavanja. Budući da je frekvencija signala oko 82 ... 94 kHz, tada s maksimalnim brojem impulsa (4095), trajanje prijenosa može doseći 50 ms.
Sl. 5. Vremenski dijagrami LMT01 senzora
Brojem brojanih impulsa (PC), vrijednost temperature može se odrediti prema formuli 1:
, (1)
Dakle, na 0 ° C senzor će generirati oko 800 impulsa.
Nažalost, upotreba jednog vanjskog otpora nije uvijek moguća zbog ograničenja minimalnog pada napona na LMT01 osjetniku. Tijekom mjernog ciklusa pad na senzoru mora biti najmanje 2,15 V. Tijekom ciklusa prijenosa podataka pad napona može se smanjiti na 2 V. Nije teško napraviti neke grube izračune.
Razmotrimo uređaj s opskrbnim naponom Vdd = 3,3 V. Ako uzmemo minimalni dopušteni pad na senzoru jednak 2,15 V tijekom mjernog ciklusa, tada će se na otporu opaziti signal ne veći od 1,15 V. Za većinu digitalnih logička jedinica je 0, 7 ∙ Vdd, što će u našem slučaju biti 2,31 V. Kao rezultat, ispada da je upotreba jednostavnog otpora nemoguća, jer mikrokontroler jednostavno neće "vidjeti" signal logička jedinica. Izlaz iz ove situacije može biti upotreba mikrokontrolera s ugrađenom komparacijom ili krugova za pretvorbu razine.
Otporni temperaturni senzori
Senzori otpornosti na temperaturu (RTD) izrađeni su od rijetkih metala, poput platine, čiji električni otpor ovisi o temperaturi.
Otporni detektori temperature imaju pozitivan temperaturni koeficijent i, za razliku od termistora, pružaju visoku točnost mjerenja temperature. Međutim, imaju lošu osjetljivost. Pt100 je najrasprostranjeniji senzor sa standardnom vrijednošću otpora od 100 ohma pri 0 ° C. Glavni nedostatak je visoka cijena.
Prednosti takvih senzora
- Širok raspon temperatura od -200 do 650 ° C
- Omogućiti izlaz velike struje pada
- Linearniji u usporedbi s termoparovima i RTD-ima
Dodatne komponente i krug osjetnika
Pored glavnih diodnih uređaja, krug osjetnika temperature uključuje i niz dodatnih elemenata. Prije svega, to je kondenzator koji štiti uređaj od stranih utjecaja. Činjenica je da je operacijsko pojačalo vrlo osjetljivo na učinke izmjeničnih elektromagnetskih polja. Kondenzator uklanja ovu ovisnost ubrizgavanjem negativne povratne sprege.
Uz sudjelovanje tranzistora i cener diode nastaje stabilizirani referentni napon. Ovdje se koriste otpornici veće klase točnosti s niskom vrijednošću temperaturnog koeficijenta otpora. Time cijela shema dobiva dodatnu stabilnost. U slučaju mogućih značajnih promjena u temperaturnim uvjetima, precizni otpornici mogu se izostaviti. Koriste se samo za kontrolu malog pregrijavanja.
Termoelement
Termoelementi za temperaturu najčešće se koriste jer su precizni, rade u širokom temperaturnom rasponu od -200 ° C do 2000 ° C i relativno su jeftini. Termoelement sa žicom i utikačem na fotografiji ispod:
Rad termoelementa
Termoelement je napravljen od dva različita metala zavarena kako bi se stvorila potencijalna razlika u odnosu na temperaturu. Iz temperaturne razlike između dva spoja stvara se napon koji se koristi za mjerenje temperature. Razlika napona između dva spoja naziva se Seebeckov efekt.
Ako su oba spoja na istoj temperaturi, potencijal razlike u različitim spojevima je nula, tj. V1 = V2. Međutim, ako su spojevi na različitim temperaturama, izlazni napon u odnosu na temperaturnu razliku između dva spoja bit će jednak njihovoj razlici V1 - V2.
Vrste temperaturnih senzora
Elektroničko-mehanički
Najjednostavniji i najjeftiniji tip regulatora. Njegov glavni radni dio je posebna metalna ploča koja reagira na povišenje ili smanjenje temperature. Sustav se uključuje i isključuje promjenom zakrivljenosti ploče tijekom zagrijavanja i hlađenja. Postavljanje točne vrijednosti temperature na takvom regulatoru neće uspjeti.
Elektronički
Uređaj ima poseban element koji generira poseban signal. Snaga izravno ovisi o vrijednostima temperature okoline. Na takvim uređajima možete postaviti točna očitanja temperature grijanja do djelića stupnja. Sustavom upravljaju tipke i mali zaslon.
Programabilno
Najskuplji od termoelemenata. Na njemu možete postaviti određene vrijednosti nakon postizanja kojih regulator uključuje ili isključuje cijeli sustav. Zahvaljujući uređaju u sobi se stvara mikroklima koja odgovara određenoj osobi. Termostat je moguće konfigurirati tako da se sustav uključi u određeno vrijeme. Odnosno, podovi se zagrijavaju prije nego što vlasnik dođe kući, a istodobno se ne troši struja kad vlasnik nije.
Mnogi se modeli odlikuju svijetlim i modernim dizajnom te LCD zaslonima koji prikazuju informacije i olakšavaju fino podešavanje.
Rad s gotovim knjižnicama
Dakle, za rad s temperaturnim senzorima DS18B20 na mreži možete pronaći ogroman broj knjižnica, ali u pravilu se koriste dvije najpopularnije. To je knjižnica i knjižnica. Štoviše, druga je knjižnica prikladniji dodatak u odnosu na prvu i bez nje se ne može koristiti. Drugim riječima, prije povezivanja biblioteke DallasTemperature.h, morate povezati i OneWire.h. Moguće je instalirati određene knjižnice u Arduino IDE.
Biblioteka OneWire.h
Prvo razmotrimo rad s bibliotekom OneWire.h. Ispod je popis njegovih funkcija s kratkim opisom.
- Senzor temperature OneWire-a (uint8_t pinNumber)
Ova je funkcija konstruktor klase OneWire i stvara objekt temperatureSensor, tj. otvara komunikacijski kanal sa senzorom ili skupinom senzora na pinNumber pin. U našim primjerima (slike 3-5) ovo je pin "D2" Arduino Nano-a. Na nju smo povezali podatkovnu sabirnicu DQ DS18B20.
Primjer:
OneWire senzor temperature
(
D2
);
// Na pin D2 povezan je senzor ili skupina senzora
- uint8_t traži (addrArray)
Funkcija traži sljedeći uređaj na sabirnici 1-Wire i, kada se pronađe, unosi vrijednost adrese u polje addrArray, vraćajući true. Budući da je jedinstvena adresa svakog senzora 64-bitna, addrArray mora biti veličine 8 bajtova. Ako pretraživanje ne uspije, funkcija vraća false. Treba imati na umu da će se, kada je na jednu sabirnicu spojeno više temperaturnih senzora, svaki poziv funkcije pretraživanja uputiti na sljedeći, zatim sljedeći itd., Sve dok se ne popišu svi uređaji na sabirnici. Posebnost ove funkcije je pamćenje već obrađenih adresa. Da biste resetirali red čekanja, trebate pozvati funkciju reset_search (), o čemu će biti riječi u nastavku.
Primjer:
bajt addrArray
[
8
];
// Polje za pohranu 64-bitne adrese // Ako je uređaj uopće odsutan na sabirnici ili su svi uređaji pobrojani // prikažite odgovarajuće informacije na monitoru priključka
ako(!
senzor temperature
.
traži
(
addrArray
))
Serijski
.
println
(
"Nema više adresa."
);
// U suprotnom, ako je sljedeći uređaj odgovorio na zahtjev za prisutnošću, // prikažemo njegovu 64-bitnu adresu na monitoru priključka
drugo{za(
ja
=
0
;
ja
<
8
;
ja
++)
Serijski
.
ispis
(
addrArray
[
ja
],
ŠESTAKLE
);
}
- poništitireset_search ()
Kao što je gore spomenuto, ova funkcija resetira red glasovanja za uređaje na sabirnici 1-Wire do samog početka. Uvijek se treba koristiti zajedno s funkcijom pretraživanja kada ona vrati false. Na primjer, u našem slučaju s 5 senzora na magistrali, pozivanjem funkcije pretraživanja 5 puta možemo dobiti 5 adresa. Šesti put će nam funkcija pretraživanja vratiti false i to će raditi sa svakom sljedećom anketom dok se red ne isprazni. Na to biste trebali obratiti pažnju kako biste izbjegli nerazumljive situacije.
Primjer:
bajt addrArray
[
8
];
// Niz za pohranu 64-bitne adrese // Ako je uređaj uopće odsutan na sabirnici ili su svi uređaji pobrojani // resetiranje reda za glasanje kako bi se ponovio ciklus pretraživanja
ako(!
senzor temperature
.
traži
(
addrArray
))
senzor temperature
.
reset_search
();
- uint8_tresetirati ()
Funkcija resetiranja 1 žice pokreće postupak komunikacije. Pozvan je svaki put kad želimo komunicirati s temperaturnim senzorom. Povratne vrijednosti mogu biti istinite ili netačne. Dobit ćemo pravu vrijednost ako barem jedan senzor na sabirnici odgovori na resetiranje impulsom prisutnosti. U suprotnom postajemo lažni;
Primjer:
ako(!
senzor temperature
.
resetirati
())
Serijski
.
println
(
"Nema senzora u sabirnici"
);drugo
Serijski
.
println
(
"Otkriven je senzor"
);
- poništitiodaberite (addrArray)
Funkcija vam omogućuje odabir određenog uređaja s kojim trenutno želimo raditi. Izbor se vrši eksplicitnim navođenjem 64-bitne adrese unesene u polje addrArray. Adresa se može izričito postaviti zapisivanjem u niz ili upotrebom one koju je prethodno pročitala funkcija pretraživanja. Treba imati na umu da se funkcija pozivanja reseta mora pozvati prije pozivanja funkcije odabira. Sljedećim resetiranjem veza s odabranim senzorom prekida se do sljedećeg poziva za odabir.
Primjer:
bajt addrArray
[
8
];
// Polje za pohranu 64-bitne adrese // Ako je uređaj uopće odsutan na sabirnici ili su svi uređaji pobrojani // iznesite odgovarajuće informacije na monitor porta
ako(!
senzor temperature
.
traži
(
addrArray
))
Serijski
.
println
(
"Nema više adresa."
);
// Inače, ako je sljedeći uređaj odgovorio na zahtjev za prisutnošću, // odaberite ga za daljnji rad
drugo{
senzor temperature
.
resetirati ()
;
// Ne zaboravite izdati naredbu za resetiranje temperatureSensor
.
odaberite (addrArray)
;
// Navedite niz s adresom čitanja
}
- poništitipreskočiti ()
Funkcija je relevantna samo kada se radi s jednim senzorom na magistrali i jednostavno preskače odabir uređaja. Drugim riječima, ne možete koristiti funkciju pretraživanja i stoga brzo pristupiti svojim jedinim senzorom.
Primjer:
senzor temperature.
resetirati
();
// Resetirajte temperaturni senzor
.
preskočiti
();
// Odaberite jedini senzor za daljnji rad s njim
- poništitinapiši (uint8_tbajt, uint8_t powerType = 0)
Funkcija šalje bajt podataka odabranom uređaju na sabirnici. Argument powerType specificira vrstu napajanja senzora (0 - senzori se napajaju izravno iz vanjskog izvora; 1 - koristi se parazitski priključak). Drugi parametar može se izostaviti ako se koristi vanjsko napajanje, jer je prema zadanim postavkama 0.
Primjer:
senzor temperature
.
resetirati
();
// Resetirajte temperaturni senzor
.
preskočiti
();
// Odaberite jedan senzor za daljnji rad s njim // Pošaljite naredbu za pretvaranje temperature, // pomoću veze s parazitskom snagom iz podatkovne sabirnice temperatureSenzor
.
pisati
(
0x44
,
1
);
- uint8_tčitati ()
Ova funkcija čita jedan bajt podataka koje slave uređaj (senzor) šalje na sabirnicu 1-Wire.
Primjer:
// Pročitajte 9 bajtova podataka iz sabirnice 1-Wire i stavite rezultat u niz bajtova niza
[
9
];za(
uint8_t i
=
0
;
ja
<
9
;
ja
++){
niz
[
ja
]=
senzor temperature
.
čitati
();}
- statički uint8_t crc8 (const uint8_t * addr, uint8_t len);
Funkcija je dizajnirana za izračunavanje kontrolne sume. Dizajniran za provjeru ispravne komunikacije s osjetnikom temperature. Ovdje je addr pokazivač na niz podataka, a len je broj bajtova.
Primjer:
bajt addrArray
[
8
];
// Polje za pohranu 64-bitne adrese // Ako je uređaj uopće odsutan na sabirnici ili su svi uređaji pobrojani // iznesite odgovarajuće informacije na monitor porta
ako(!
senzor temperature
.
traži
(
addrArray
))
Serijski
.
println
(
"Nema više adresa."
);
// Inače, ako je sljedeći uređaj odgovorio na zahtjev za prisutnošću, // provjeri kontrolnu sumu svoje adrese
drugo{
// Ako se kontrolna suma ne podudara, prikazati poruku o pogrešci
ako(
OneWire
::
crc8
(
addrArray
,
7
)!=
addrArray
[
7
]){
Serijski
.
println
(
"CRC nije valjan!"
);}}
Ispitali smo svaku funkciju OneWire.h biblioteke zasebno, a kako bih popravio materijal, u nastavku ću dati skicu za očitavanje temperature iz skupine temperaturnih senzora DS18B20, koji će biti povezani na pin D2 pomoću parazitskog kruga napajanja. Skica će sadržavati detaljne komentare o svim potrebnim točkama.
#include // Povezujemo knjižnicu za rad s termalnim senzorima DS18B20OneWire ds
(
2
);
// Senzor ili grupa senzora spojena je na D2 pin Arduina // PRESET FUNCTION void setup
(
poništiti
){
Serijski
.
početi
(
9600
);
// Inicijalizacija rada sa Serial-port} // GLAVNI CIKLUS void loop
(
poništiti
){
bajt i
;
// Pomoćna varijabla za petlje prisutnih bajtova
=
0
;
// Varijabla za određivanje spremnosti senzora za komunikacijske bajtove type_s
;
// Varijabla za definiranje vrste toplinskog senzora na bajtnoj sabirnici podataka
[
12
];
// Niz za pohranu informacija primljenih od addr. Bajta senzora
[
8
];
// Niz za pohranu 64-bitne adrese plutajućeg Celzijevog senzora
,
fahrenheita
;
// Varijable za izračunavanje temperature // Ako uređaji na sabirnici nisu pronađeni ili su svi uređaji na sabirnici pobrojani // prikažite odgovarajuće informacije na monitoru priključaka, resetirajte red // i ponovo izvršite pretragu, čekajući 250 ms
ako(!
ds
.
traži
(
adr
)){
Serijski
.
println
(
"Nema više adresa."
);
Serijski
.
println
();
ds
.
reset_search
();
odgoditi
(
250
);povratak;}
// Ako se pronađe sljedeći uređaj na sabirnici, prikažite njegovu jedinstvenu adresu // u monitoru priključaka u heksadecimalnom obliku Serijski
.
ispis
(
"ROM ="
);za(
ja
=
0
;
ja
<
8
;
ja
++){
Serijski
.
pisati
(
‘ ‘
);
Serijski
.
ispis
(
adr
[
ja
],
ŠESTAKLE
);}
// Provjerite kontrolnu sumu adrese pronađenog uređaja // i ako se ne podudara, prikažite odgovarajuće podatke
ako(
OneWire
::
crc8
(
adr
,
7
)!=
adr
[
7
]){
Serijski
.
println
(
"CRC nije valjan!"
);povratak;}
Serijski
.
println
();
// Provjerite nulti bajt adrese koji sadrži informacije // o određenom tipu temperaturnog senzora. Ovisno o vrijednosti nulti // bajta, prikazujemo seriju čipa na monitoru priključka. Ako nulti bajt sadrži nepoznatu // vrijednost, prikažite poruku o nepoznatoj obitelji osjetnika temperature.
sklopka(
adr
[
0
]){slučaj
0x10
:
Serijski
.
println
(
"Čip = DS18S20"
);
vrsta_s
=
1
;pauza;slučaj
0x28
:
Serijski
.
println
(
"Čip = DS18B20"
);
vrsta_s
=
0
;pauza;slučaj
0x22
:
Serijski
.
println
(
"Čip = DS1822"
);
vrsta_s
=
0
;pauza;zadano:
Serijski
.
println
(
"Uređaj nije uređaj obitelji DS18x20."
);povratak;}
ds
.
resetirati
();
// Resetiranje sabirnice radi inicijalizacije razmjene podataka ds
.
Odaberi
(
adr
);
// Odaberite senzor s trenutnom adresom za rad // Pošaljite naredbu za pretvaranje temperature (prema dokumentaciji 0x44) // Ne zaboravite na drugi parametar "1", jer podatke prenosimo putem / / linija s parazitskim napajanjem. ds
.
pisati
(
0x44
,
1
);
// Senzor započinje pretvorbu, koja prema dokumentaciji traje max. 750 ms // Da bismo bili na sigurnoj strani, organizirat ćemo stanku od ë sekunde odgode
(
1000
);
// Vratite sabirnicu ponovo na čitanje podataka sa senzora // spremite odgovor funkcije reset () na prisutnu varijablu za daljnji rad s njom
=
ds
.
resetirati
();
ds
.
Odaberi
(
adr
);
// Ponovno odaberite senzor prema njegovoj adresi, jer je postojao impuls resetiranja // Naredba 0xBE, prema tehničkoj dokumentaciji, omogućuje očitavanje interne memorije // temperaturnog senzora (Scratchpad), koja se sastoji od 9 bajtova. ds
.
pisati
(
0xBE
);
// Očitavanje i prikaz 9 bajtova iz interne memorije senzora temperature Serijski na monitor priključka
.
ispis
(
"Podaci ="
);
Serijski
.
ispis
(
predstaviti
,
ŠESTAKLE
);
Serijski
.
ispis
(
» «
);za(
ja
=
0
;
ja
<
9
;
ja
++){
podaci
[
ja
]=
ds
.
čitati
();
Serijski
.
ispis
(
podaci
[
ja
],
ŠESTAKLE
);
Serijski
.
ispis
(
» «
);}
// Provjera i izlaz na port nadziru kontrolnu sumu primljenih podataka Serial
.
ispis
(
"CRC ="
);
Serijski
.
ispis
(
OneWire
::
crc8
(
podaci
,
8
),
ŠESTAKLE
);
Serijski
.
println
();
// Pokrenite postupak pretvaranja primljenih podataka u stvarnu temperaturu, // koja je pohranjena u 0 i 1 bajta memorije za čitanje. Da bismo to učinili, kombiniramo ova dva // bajta u jedan 16-bitni broj int16_t raw
=(
podaci
[
1
]<<
8
)|
podaci
[
0
];
// Prije daljnje pretvorbe, morate definirati obitelj kojoj // pripada ovaj senzor (ranije smo rezultat spremili u varijablu type_s). // Ovisno o obitelji, temperatura će se izračunavati drugačije, // budući da DS18B20 i DS1822 vraćaju 12-bitnu vrijednost, dok DS18S20 vraća 9-bitnu vrijednost
ako(
vrsta_s
){
// Ako senzor pripada DS18S20 sirovoj obitelji
=
sirovo
<<
3
;
// zadana razlučivost je 9 bita
ako(
podaci
[
7
]==
0x10
){
sirovo
=(
sirovo
&
0xFFF0
)+
12
—
podaci
[
6
];}}drugo{
// Odredimo na koju je točnost mjerenja ovaj senzor konfiguriran bajtom cfg
=(
podaci
[
4
]&
0x60
);
// Na nižim rezolucijama možete nula najmanje bitne bitove, jer nisu rano definirani
ako(
usp
==
0x00
)
sirovo
=
sirovo
&~
7
;
// 9 bitova (pretvorba traje 93,75 ms)
drugoako(
usp
==
0x20
)
sirovo
=
sirovo
&~
3
;
// 10 bita (pretvorba traje 187,5 ms)
drugoako(
usp
==
0x40
)
sirovo
=
sirovo
&~
1
;
// 11 bita (pretvorba traje 375 ms) // Zadana preciznost je 12 bita (pretvorba traje 750 ms)
}
// Izračunavanje i izlazak vrijednosti temperature na monitor Celzijevog priključka
=(
plutati
)
sirovo
/
16.0
;
fahrenheita
=
Celzija
*
1.8
+
32.0
;
Serijski
.
ispis
(
"Temperatura ="
);
Serijski
.
ispis
(
Celzija
);
Serijski
.
ispis
(
"Celzijus",
);
Serijski
.
ispis
(
fahrenheita
);
Serijski
.
println
(
"Fahrenheit"
);}
Ako je sve napravljeno ispravno, u prozoru monitora priključka trebali bismo vidjeti nešto poput sljedećeg (slika 6):
Slika 6 - rezultat rada s bibliotekom OneWire.h
Knjižnica DallasTemperature.h
Ova se knjižnica temelji na prethodnoj i malo pojednostavljuje postupak programiranja zbog razumljivijih funkcija. Nakon instalacije imat ćete pristup 14 primjera dobro dokumentiranog koda za sve prigode. U okviru ovog članka razmotrit će se primjer rada s jednim senzorom.
Rezultat programa prikazan je na slici 7
Slika №7 - rezultat očitavanja temperature pomoću biblioteke DallasTemperature.h
// Povezujemo potrebne biblioteke # include #include // Povezujemo podatkovnu sabirnicu na pin # 2 Arduina # define ONE_WIRE_BUS 2 // Stvorimo instancu klase za našu sabirnicu i vezu do nje OneWire oneWire
(
ONE_WIRE_BUS
);
DallasTemperaturni senzori
(&
oneWire
);
// PRESET FUNKCIJA void setup
(
poništiti
){
Serijski
.
početi
(
9600
);
// Inicijalizirajte senzore serijskog priključka
.
početi
();
// Inicijalizirajte sabirnicu
}
// GLAVNI CIKLUS
(
poništiti
){
Serijski
.
ispis
(
"Očitavanje temperature ..."
);
// Pošaljite naredbu za čitanje senzora
.
requestTemperatures
();
Serijski
.
println
(
"Čitati"
);
Serijski
.
ispis
(
"Temperatura senzora 1:"
);
// Prikazivanje vrijednosti temperature Serial
.
ispis
(
senzori
.
getTempCByIndex
(
0
));}
Senzor temperature KY-001 s 1-žičnim sučeljem
Ovaj senzor služi za precizno mjerenje temperature. Komunikacija sa senzorom provodi se putem 1-žičnog sučelja [1-2], što omogućuje povezivanje nekoliko sličnih uređaja na ploču Arduino pomoću jednog pina mikrokontrolera [3-4]. Modul se temelji na mikrosklopu ds18b20 [5].
Veličina modula 24 x 15 x 10 mm, težina 1,3 g. Za spajanje se koristi tropolni konektor. Središnji kontakt - napajanje + 5V, kontakt "-" - zajednički, kontakt "S" - informativni.
Ploča ima crvenu LED diodu koja svijetli prilikom razmjene informacija.
Potrošnja struje 0,6 mA tijekom razmjene informacija i 20 μA u stanju čekanja.
Povezivanje ove vrste senzora s Arduinom dobro je opisano u mnogim izvorima [6-8]. U ovom se slučaju ponovno očituju glavne prednosti Arduina - svestranost i prisutnost ogromne količine referentnih informacija. Za rad sa senzorom trebat će vam knjižnica OneWire [9]. Nakon učitavanja programa iz [8] (u prvoj verziji programa postoji pogreška - u zaglavlju koda nema veze #include library), u monitoru serijskog porta mogu se vidjeti sljedeće informacije.
Autor je također testirao kod iz [7], sve je odmah uspjelo, na monitoru serijskog porta možete pročitati informacije o vrsti spojenog senzora i stvarne podatke o temperaturi.
Općenito, vrlo koristan senzor koji omogućuje upoznavanje s 1-žičnim sučeljem u praksi. Senzor odmah daje točne podatke o temperaturi, korisnik ne treba kalibrirati.