Termen: senzor termometru cu rezistență la 4 fire

În acest articol, vom discuta diferitele tipuri de senzori de temperatură și modul în care pot fi utilizați de la caz la caz. Temperatura este un parametru fizic care se măsoară în grade. Este o parte esențială a oricărui proces de măsurare. Domeniile care necesită măsurători exacte ale temperaturii includ medicină, cercetare biologică, electronică, cercetarea materialelor și performanța termică a produselor electrice. Un dispozitiv utilizat pentru măsurarea cantității de energie termică care ne permite să detectăm modificările fizice ale temperaturii este cunoscut sub numele de senzor de temperatură. Sunt digitale și analogice.

Principalele tipuri de senzori

În general, există două metode pentru obținerea datelor:

1. Contact... Senzorii de temperatură de contact sunt în contact fizic cu un obiect sau substanță. Ele pot fi utilizate pentru a măsura temperatura solidelor, lichidelor sau gazelor.

2. Fără contact... Senzorii de temperatură fără contact detectează temperatura interceptând o parte din energia infraroșie emisă de un obiect sau substanță și detectând intensitatea acesteia. Ele pot fi utilizate numai pentru măsurarea temperaturii în solide și lichide. Nu sunt în măsură să măsoare temperatura gazelor datorită incolorii lor (transparență).

Reguli de selectare a senzorilor

Senzorul de temperatură pentru încălzirea prin pardoseală este selectat luând în considerare caracteristici precum puterea, tipul de acoperire superioară, metoda de instalare și echipamentele cu funcționalitate suplimentară.

Putere

Valoarea trebuie să îndeplinească cu siguranță cerințele și sarcina podelei calde. În caz contrar, senzorul nu va funcționa corect. Când puterea elementului de încălzire este mai mare decât cea a regulatorului în sine, devine necesară instalarea suplimentară a unui demaror magnetic între ele - pentru a preveni ruperea dispozitivului din cauza sarcinii crescute.

Set de caracteristici

Podeaua caldă este controlată de o unitate electrică, care vă permite să reglați funcționarea elementelor de încălzire. Controlerele moderne au funcționalități precum pornirea și dezactivarea sistemului, reglarea condițiilor de temperatură, precum și setarea frecvenței de conectare și deconectare a elementului de încălzire.

Ușurință în utilizare

Dacă credeți că nu veți înțelege programarea, atunci nu ar trebui să cumpărați un dispozitiv complex. Chiar și luând în considerare toate funcționalitățile sale. De exemplu, persoanelor în vârstă li se pare destul de problematic să se ocupe de dispozitivele programabile. Mai bine ar alege opțiunea mecanică.

Ușor de conectat

Documentația însoțitoare pentru termostat indică întotdeauna modul de conectare a senzorului de încălzire prin pardoseală. Terminalele sunt situate la marginea de pe o parte a unității de control. După conectarea firelor electrice conform schemei, va fi necesar să verificați performanța sistemului de încălzire. Pentru a face acest lucru, măsurați rezistența la bornele senzorului de temperatură și a cablului electric de încălzire sau conectați o podea caldă și măriți valorile de temperatură de la zero la indicatorul recomandat de SNIP, adică până la 30 ° C.

Aspect

Un senzor termic nu trebuie doar să fie ușor de înțeles funcțional, ci și atractiv în design. Butoanele moderne vin într-o varietate de culori și forme. Puteți alege o opțiune care să fie în armonie cu interiorul camerei.

Tipuri de senzori de temperatură

Există multe tipuri diferite de senzori de temperatură.De la simpla comandă de pornire / oprire a unui dispozitiv termostatic la sisteme complexe de control al alimentării cu apă, cu funcția de încălzire a acesteia, utilizate în procesele de creștere a plantelor. Cele două tipuri principale de senzori, de contact și fără contact, se împart în continuare în senzori rezistenți, de tensiune și electromecanici. Cei mai utilizați trei senzori de temperatură sunt:

  • Termistori
  • Termocupluri de rezistență
  • Termocuplu

Acești senzori de temperatură diferă între ei în ceea ce privește parametrii operaționali.

Dispozitiv

Acesta este un termocuplu (placă sau tijă) format din fire care sunt conectate la bornele elementului senzitiv.

În funcție de informațiile de temperatură, se modifică rezistența părții sensibile, respectiv se modifică semnalul electric furnizat termostatului. Astfel, se determină valoarea absolută a temperaturii mediului.

Diagrama conexiunii senzorului de temperatură

Externe (senzor de temperatură extern pentru încălzirea prin pardoseală), de regulă, se află sub acoperirea podelei de finisare și măsoară indicatorii de temperatură. Intern (încorporat), situat în interiorul regulatorului și determină nivelul de încălzire a aerului.

Proiectarea senzorilor de temperatură este selectată în funcție de caracteristicile sistemului:

Termistor

Un termistor este un rezistor sensibil care își schimbă rezistența fizică cu temperatura. De obicei, termistoarele sunt fabricate dintr-un material semiconductor ceramic, cum ar fi cobalt, mangan sau oxid de nichel și sunt acoperite cu sticlă. Sunt discuri mici, sigilate plate, care reacționează relativ rapid la orice schimbare de temperatură.

Datorită proprietăților semiconductoare ale materialului, termistoarele au un coeficient de temperatură negativ (NTC), adică rezistența scade odată cu creșterea temperaturii. Cu toate acestea, există și termistori PTC a căror rezistență crește odată cu creșterea temperaturii.

Programul termistorului

Avantajele termistorilor

  • Viteză mare de răspuns la schimbările de temperatură, precizie.
  • Cost scăzut.
  • Rezistență mai mare în intervalul de la 2.000 la 10.000 ohmi.
  • Sensibilitate mult mai mare (~ 200 ohm / ° C) într-un interval limitat de temperatură de până la 300 ° C.

Dependențe de temperatură de rezistență

Dependența rezistenței de temperatură este exprimată prin următoarea ecuație:

Unde A, B, C - acestea sunt constante (furnizate de termenii de calcul), R - rezistență în ohmi, T - temperatura în Kelvin. Puteți calcula cu ușurință modificarea temperaturii dintr-o schimbare a rezistenței sau invers.

Cum se folosește un termistor?

Termistoarele sunt evaluate pentru valoarea lor rezistivă la temperatura camerei (25 ° C). Un termistor este un dispozitiv rezistiv pasiv, deci necesită producerea monitorizării tensiunii de ieșire curente. De regulă, acestea sunt conectate în serie cu stabilizatori adecvați formând un divizor de tensiune de rețea.

Exemplu: Luați în considerare un termistor cu o valoare a rezistenței de 2,2 K la 25 ° C și 50 ohmi la 80 ° C. Termistorul este conectat în serie cu un rezistor de 1 kΩ printr-o alimentare de 5 V.

Prin urmare, tensiunea sa de ieșire poate fi calculată după cum urmează:

La 25 ° C, RNTC = 2200 ohmi;

La 80 ° C, RNTC = 50 ohmi;

Cu toate acestea, este important să rețineți că la temperatura camerei, valorile de rezistență standard sunt diferite pentru termistori diferiți, deoarece sunt neliniari. Un termistor are o schimbare exponențială a temperaturii și, prin urmare, o constantă beta, care este utilizată pentru a calcula rezistența sa pentru o anumită temperatură. Tensiunea de ieșire a rezistorului și temperatura sunt legate liniar.

Caracteristicile interfeței de curent cu două fire în senzorii de temperatură LMT01

Smochin. 4. Organizarea interfeței curente cu LMT01

Așa cum s-a menționat mai sus, pentru a transmite rezultatul măsurătorii, LMT01 generează o secvență de biți sub forma impulsurilor de numărare a curentului. Pentru aceasta, senzorul necesită doar două conductoare (Figura 4). Pentru a converti impulsurile curente în forma familiară microcircuitelor digitale, în unele cazuri puteți utiliza un singur rezistor (dar nu întotdeauna - mai multe despre asta mai jos).

După pornire, LMT01 începe un ciclu de măsurare care durează până la 54 ms (Figura 5). În acest timp, la ieșirea senzorului se formează un curent de nivel scăzut de 28 ... 39 μA. Acesta este urmat de un ciclu de transfer al rezultatului măsurătorii sub formă de impulsuri de curent cu o amplitudine de 112 ... 143 μA. Microcontrolerul receptor trebuie să numere aceste impulsuri, de exemplu folosind contorul / cronometrul încorporat. Deoarece frecvența semnalelor este de aproximativ 82 ... 94 kHz, atunci cu numărul maxim de impulsuri (4095), durata transmisiei poate ajunge la 50 ms.

Smochin. 5. Diagramele de sincronizare ale senzorului LMT01

Numărul de impulsuri numărate (PC) poate fi utilizat pentru a determina valoarea temperaturii conform formulei 1:

, (1)

Astfel, la 0 ° C, senzorul va genera aproximativ 800 de impulsuri.

Din păcate, utilizarea unui rezistor extern nu este întotdeauna posibilă datorită limitării căderii minime de tensiune pe senzorul LMT01. În timpul ciclului de măsurare, căderea senzorului trebuie să fie de cel puțin 2,15 V. În timpul ciclului de transmitere a datelor, căderea de tensiune poate fi redusă la 2 V. Nu este dificil să se facă unele calcule aproximative.

Luați în considerare un dispozitiv cu o tensiune de alimentare Vdd = 3,3 V. Dacă luăm căderea minimă admisibilă pe senzor egală cu 2,15 V în timpul ciclului de măsurare, atunci se va observa un semnal de cel mult 1,15 V pe rezistor. controlerelor, unitatea logică este 0, 7 ∙ Vdd, care pentru cazul nostru va fi de 2,31 V. Ca rezultat, utilizarea unui rezistor simplu se dovedește a fi imposibilă, deoarece microcontrolerul pur și simplu nu va „vedea” semnalul unui unitate logică. Ieșirea din această situație poate fi utilizarea unui microcontroler cu un comparator încorporat sau circuite de conversie de nivel.

Senzori de temperatură rezistenți

Senzorii de rezistență la temperatură (RTD) sunt fabricați din metale rare, cum ar fi platina, a căror rezistență electrică variază în funcție de temperatură.

Detectoarele rezistive de temperatură au un coeficient de temperatură pozitiv și, spre deosebire de termistoare, asigură o precizie ridicată a măsurării temperaturii. Cu toate acestea, au o sensibilitate slabă. Pt100 este cel mai disponibil senzor cu o rezistență standard de 100 ohmi la 0 ° C. Principalul dezavantaj este costul ridicat.

Avantajele acestor senzori

  • Domeniu larg de temperatură de la -200 la 650 ° C
  • Furnizați o ieșire de curent de cădere mare
  • Mai liniară comparativ cu termocuplurile și RTD-urile

Componente suplimentare și circuit senzor

În plus față de dispozitivele cu diode principale, circuitul senzorului de temperatură include o serie de elemente suplimentare. În primul rând, este un condensator care protejează dispozitivul de influențe străine. Faptul este că amplificatorul operațional este extrem de sensibil la efectele alternării câmpurilor electromagnetice. Condensatorul elimină această dependență prin injectarea de feedback negativ.

Circuitul senzorului de temperatură

Cu participarea unui tranzistor și a unei diode zener, se formează o tensiune de referință stabilizată. Aici, rezistoarele cu o clasă de precizie mai mare sunt utilizate cu o valoare scăzută a coeficientului de rezistență la temperatură. Astfel, întreaga schemă câștigă stabilitate suplimentară. În cazul unor posibile modificări semnificative ale temperaturii, rezistențele de precizie pot fi omise. Sunt folosite doar pentru a controla supraîncălzirea mică.

Termocuplu

Senzorii de temperatură cu termocuplu sunt utilizați cel mai frecvent deoarece sunt exacți, funcționează pe o gamă largă de temperaturi de la -200 ° C la 2000 ° C și sunt relativ ieftini. Un termocuplu cu un fir și o priză în fotografia de mai jos:

Funcționarea termocuplului

Un termocuplu este format din două metale diferite, sudate împreună pentru a produce o diferență de potențial peste temperatură. Din diferența de temperatură dintre cele două joncțiuni, se generează o tensiune care este utilizată pentru a măsura temperatura. Diferența de tensiune dintre cele două joncțiuni se numește efect Seebeck.

Dacă ambii compuși sunt la aceeași temperatură, potențialul de diferență în diferiți compuși este zero, adică V1 = V2. Cu toate acestea, dacă joncțiunile sunt la temperaturi diferite, tensiunea de ieșire relativă la diferența de temperatură dintre cele două joncțiuni va fi egală cu diferența lor V1 - V2.

Tipuri de senzori de temperatură

Electronico-mecanic

Cel mai simplu și mai ieftin tip de regulator. Principala sa parte de lucru este o placă metalică specială care răspunde la creșterea sau scăderea temperaturii. Sistemul este pornit și oprit schimbând curbura plăcii în timpul încălzirii și răcirii. Setarea valorii exacte a temperaturii pe un astfel de regulator nu va funcționa.

Electronic

Dispozitivul are un element special care generează un semnal special. Puterea depinde direct de valorile temperaturii ambiante. Pe astfel de dispozitive, puteți seta citiri precise ale temperaturii de încălzire până la o fracțiune de grad. Sistemul este controlat de butoane și un ecran mic.

Programabil

Cel mai scump dintre termoelemente. Pe acesta, puteți seta anumite valori, la atingerea la care întregul sistem este pornit sau oprit de către regulator. Datorită dispozitivului, în cameră se creează un microclimat care se potrivește unei anumite persoane. Este posibil să configurați termostatul astfel încât sistemul să fie pornit la un anumit moment. Adică, pardoselile sunt încălzite înainte ca proprietarul să ajungă acasă și, în același timp, electricitatea nu se consumă atunci când proprietarul nu este.

Multe modele au modele luminoase și elegante și ecrane LCD care afișează informații și facilitează reglarea fină.

Lucrul cu bibliotecile gata făcute

Deci, pentru a lucra cu senzorii de temperatură DS18B20 din rețea, puteți găsi un număr mare de biblioteci, dar, de regulă, sunt utilizate două dintre cele mai populare. Este o bibliotecă și o bibliotecă. Mai mult, a doua bibliotecă este un supliment mai convenabil față de prima și nu poate fi utilizată fără ea. Cu alte cuvinte, înainte de a conecta biblioteca DallasTemperature.h, trebuie să conectați și OneWire.h. Este posibilă instalarea anumitor biblioteci în Arduino IDE.

Biblioteca OneWire.h

Să ne gândim mai întâi să lucrăm cu biblioteca OneWire.h. Mai jos este o listă a funcțiilor sale, cu o scurtă descriere.

  • Senzor de temperatură OneWire (uint8_t pinNumber)

Această funcție este un constructor al clasei OneWire și creează un obiect TemperatureSensor, adică deschide un canal de comunicare cu un senzor sau un grup de senzori pe pinul PIN pin. În exemplele noastre (Figurile 3-5) acesta este pinul „D2” al Arduino Nano. Am conectat magistrala de date DQ DS18B20.

Exemplu:

Senzor de temperatură OneWire
(
D2
);
// La pinul D2 este conectat un senzor sau un grup de senzori

  • uint8_t căutare (addrArray)

Funcția caută următorul dispozitiv pe magistrala 1-Wire și, atunci când este găsită, introduce valoarea adresei în matricea addrArray, returnând true. Deoarece adresa unică a fiecărui senzor este de 64 de biți, addrArray trebuie să aibă dimensiunea de 8 octeți. Dacă căutarea eșuează, funcția returnează false. Trebuie remarcat faptul că atunci când mai mulți senzori de temperatură sunt conectați la o magistrală, fiecare apel către funcția de căutare va fi adresat senzorului următor, apoi următorului etc., până când toate dispozitivele de pe magistrală sunt enumerate. Particularitatea acestei funcții este să ne amintim adresele deja procesate. Pentru a reseta coada, trebuie să apelați funcția reset_search (), care va fi discutată mai jos.

Exemplu:

octet addrArray
[
8
];
// Matrice pentru stocarea unei adrese pe 64 de biți // Dacă dispozitivul este absent deloc pe magistrală sau toate dispozitivele sunt enumerate // afișați informațiile corespunzătoare în monitorul portului
dacă(!
senzor de temperatura
.
căutare
(
addrArray
))
Serial
.
println
(
"Gata cu adresele."
);
// În caz contrar, dacă dispozitivul următor a răspuns la cererea de prezență, // afișează adresa sa pe 64 de biți pe monitorul portului
altceva{pentru(
eu
=
0
;
eu
<
8
;
eu
++)
Serial
.
imprimare
(
addrArray
[
eu
],
HEX
);
}

  • nulreset_search ()

După cum s-a menționat mai sus, această funcție resetează coada de interogare a dispozitivelor de pe magistrala cu 1 fir până la început. Ar trebui să fie întotdeauna utilizat împreună cu funcția de căutare atunci când aceasta din urmă returnează false. De exemplu, în cazul nostru cu 5 senzori pe autobuz, apelând funcția de căutare de 5 ori, putem obține 5 adrese. Pentru a șasea oară, funcția de căutare ne va reveni falsă și va face acest lucru cu fiecare sondaj următor până când coada este spălată. Ar trebui să acordați atenție acestui lucru pentru a evita situațiile de neînțeles.

Exemplu:

octet addrArray
[
8
];
// Matrice pentru stocarea unei adrese pe 64 de biți // Dacă dispozitivul este absent deloc pe autobuz sau toate dispozitivele sunt enumerate // resetați coada de interogare pentru a repeta ciclul de căutare
dacă(!
senzor de temperatura
.
căutare
(
addrArray
))
senzor de temperatura
.
reset_search
();

  • uint8_treset ()

Funcția 1-Wire reset inițiază procesul de comunicare. Se numește de fiecare dată când vrem să comunicăm cu senzorul de temperatură. Valorile returnate pot fi adevărate sau false. Vom obține adevărata valoare dacă cel puțin un senzor din autobuz răspunde la resetare cu un impuls de prezență. În caz contrar, devenim false;

Exemplu:
dacă(!
senzor de temperatura
.
resetați
())
Serial
.
println
(
„Nu există senzori pe autobuz”
);altceva
Serial
.
println
(
"Senzorul este detectat"
);

  • nulselectați (addrArray)

Funcția vă permite să selectați un anumit dispozitiv cu care dorim să lucrăm în acest moment. Alegerea se face prin specificarea explicită a adresei pe 64 de biți introdusă în matricea addrArray. Adresa poate fi setată în mod explicit scriind-o într-o matrice sau utilizând cea citită anterior de funcția de căutare. Trebuie remarcat faptul că funcția de resetare trebuie apelată înainte de a apela funcția de selectare. La următoarea resetare, conexiunea cu senzorul selectat este întreruptă până la următorul apel de selectat.
Exemplu:
octet addrArray
[
8
];
// Matrice pentru stocarea unei adrese pe 64 de biți // Dacă dispozitivul este absent deloc pe magistrală sau toate dispozitivele sunt enumerate // scoateți informațiile corespunzătoare pe monitorul portului
dacă(!
senzor de temperatura
.
căutare
(
addrArray
))
Serial
.
println
(
"Gata cu adresele."
);
// În caz contrar, dacă dispozitivul următor a răspuns cererii de prezență, // selectați-l pentru lucrări ulterioare
altceva{
senzor de temperatura
.
reset ()
;
// Nu uitați să lansați comanda de resetare a temperaturii senzorului
.
selectați (addrArray)
;
// Specificați o matrice cu adresa citită
}

  • nulocolire ()

Funcția este relevantă numai atunci când lucrați cu un senzor pe autobuz și omite pur și simplu selecția dispozitivului. Cu alte cuvinte, nu puteți utiliza funcția de căutare și, prin urmare, accesați rapid cu singurul senzor.

Exemplu:
senzor de temperatura.
resetați
();
// Resetați anvelopa senzorului de temperatură
.
ocolire
();
// Selectați singurul senzor pentru a lucra în continuare cu acesta

  • nulscrie (uint8_toctet, uint8_t powerType = 0)

Funcția trimite un octet de date către dispozitivul selectat de pe magistrală. Argumentul powerType specifică tipul sursei de alimentare pentru senzori (0 - senzorii sunt alimentați direct de la o sursă externă; 1 - se utilizează o conexiune alimentată parazitar). Al doilea parametru poate fi omis dacă se utilizează energie externă, deoarece este 0 în mod implicit.

Exemplu:

senzor de temperatura
.
resetați
();
// Resetați anvelopa senzorului de temperatură
.
ocolire
();
// Selectați un singur senzor pentru lucrările ulterioare cu acesta // Trimiteți o comandă pentru a converti temperatura, // folosind o conexiune cu sursă de alimentare parazită din magistrala de date senzor de temperatură
.
scrie
(
0x44
,
1
);

  • uint8_tcitit ()

Această funcție citește un octet de date trimise de dispozitivul slave (senzor) către magistrala cu 1 fir.

Exemplu:

// Citiți 9 octeți de date de pe magistrala 1-Wire și puneți rezultatul în matrice de octeți matrice
[
9
];pentru(
uint8_t i
=
0
;
eu
<
9
;
eu
++){
matrice
[
eu
]=
senzor de temperatura
.
citit
();}

  • static uint8_t crc8 (const uint8_t * addr, uint8_t len);

Funcția este concepută pentru a calcula suma de control. Proiectat pentru a verifica comunicarea corectă cu senzorul de temperatură. Aici addr este un pointer către matricea de date, iar len este numărul de octeți.

Exemplu:

octet addrArray
[
8
];
// Matrice pentru stocarea unei adrese pe 64 de biți // Dacă dispozitivul este absent deloc pe magistrală sau toate dispozitivele sunt enumerate // scoateți informațiile corespunzătoare pe monitorul portului
dacă(!
senzor de temperatura
.
căutare
(
addrArray
))
Serial
.
println
(
"Gata cu adresele."
);
// În caz contrar, dacă dispozitivul următor a răspuns cererii de prezență, // verificați suma de verificare a adresei sale
altceva{
// Dacă suma de control nu se potrivește, afișați un mesaj de eroare
dacă(
OneWire
::
crc8
(
addrArray
,
7
)!=
addrArray
[
7
]){
Serial
.
println
(
"CRC nu este valid!"
);}}
Am examinat fiecare funcție a bibliotecii OneWire.h separat și pentru a remedia materialul, mai jos voi oferi o schiță pentru citirea temperaturii dintr-un grup de senzori de temperatură DS18B20, care vor fi conectați la pinul D2 utilizând un circuit de alimentare parazitar. Schița va conține comentarii detaliate cu privire la toate punctele necesare.

#include // Conectăm biblioteca pentru a lucra cu senzorii termici DS18B20OneWire ds
(
2
);
// Un senzor sau un grup de senzori este conectat la pinul D2 al Arduino // PRESET FUNCTION void setup
(
nul
){
Serial
.
începe
(
9600
);
// Inițializarea lucrului cu Serial-port} // MAIN CYCLE void loop
(
nul
){
octet i
;
// Variabilă auxiliară pentru bucle prezente de octeți
=
0
;
// Variabil pentru a determina disponibilitatea senzorului pentru octet de comunicare tip_s
;
// Variabilă pentru definirea tipului de senzor de temperatură pe magistrala de date de octeți
[
12
];
// Matrice pentru stocarea informațiilor primite de la addr octet senzor
[
8
];
// Matrice pentru stocarea adresei pe 64 de biți a senzorului float celsius
,
fahrenheit
;
// Variabile pentru calcularea temperaturii // Dacă dispozitivele de pe magistrală nu sunt găsite sau toate dispozitivele de pe magistrală sunt enumerate // afișați informațiile corespunzătoare în monitorul de port, resetați coada // și efectuați din nou o căutare după ce ați așteptat 250ms
dacă(!
ds
.
căutare
(
addr
)){
Serial
.
println
(
"Gata cu adresele."
);
Serial
.
println
();
ds
.
reset_search
();
întârziere
(
250
);întoarcere;}
// Dacă următorul dispozitiv de pe magistrală este găsit, afișați adresa sa unică // în monitorul de port în formă hexazecimală Serial
.
imprimare
(
„ROM =”
);pentru(
eu
=
0
;
eu
<
8
;
eu
++){
Serial
.
scrie
(
‘ ‘
);
Serial
.
imprimare
(
addr
[
eu
],
HEX
);}
// Verificați suma de verificare a adresei dispozitivului găsit // și dacă nu se potrivește, afișați informațiile corespunzătoare
dacă(
OneWire
::
crc8
(
addr
,
7
)!=
addr
[
7
]){
Serial
.
println
(
"CRC nu este valid!"
);întoarcere;}
Serial
.
println
();
// Verificați octetul zero al adresei, care conține informații // despre un anumit tip de senzor de temperatură. În funcție de valoarea // // octetului zero, lansăm seria de cipuri pe monitorul portului. Dacă octetul zero conține o valoare // necunoscută, afișați un mesaj despre familia necunoscută a senzorului de temperatură.
intrerupator(
addr
[
0
]){caz
0x10
:
Serial
.
println
(
„Chip = DS18S20”
);
tipuri
=
1
;pauză;caz
0x28
:
Serial
.
println
(
„Chip = DS18B20”
);
tipuri
=
0
;pauză;caz
0x22
:
Serial
.
println
(
„Chip = DS1822”
);
tipuri
=
0
;pauză;Mod implicit:
Serial
.
println
(
„Dispozitivul nu este un dispozitiv de familie DS18x20.”
);întoarcere;}
ds
.
resetați
();
// Resetați magistrala pentru a inițializa schimbul de date ds
.
Selectați
(
addr
);
// Selectați senzorul cu adresa curentă pentru a lucra cu el // Trimiteți o comandă pentru a converti temperatura (conform documentației 0x44) // Nu uitați de al doilea parametru „1”, deoarece transmitem date prin / / linie cu putere parazită. ds
.
scrie
(
0x44
,
1
);
// Senzorul începe conversia, care, conform documentației, necesită max. 750ms // Pentru a fi în siguranță, vom organiza o pauză de ё secundă de întârziere
(
1000
);
// Resetați din nou autobuzul pentru a citi informații de la senzor // salvați răspunsul funcției reset () la variabila actuală pentru a lucra în continuare cu aceasta prezentă
=
ds
.
resetați
();
ds
.
Selectați
(
addr
);
// Re-selectați senzorul după adresa acestuia, deoarece a existat un impuls de resetare // Comanda 0xBE, conform documentației tehnice, permite citirea memoriei interne // a senzorului de temperatură (Scratchpad), care este format din 9 octeți. ds
.
scrie
(
0xBE
);
// Citiți și transmiteți la monitorul de port 9 octeți din memoria internă a senzorului termic Serial
.
imprimare
(
„Date =”
);
Serial
.
imprimare
(
prezent
,
HEX
);
Serial
.
imprimare
(
» «
);pentru(
eu
=
0
;
eu
<
9
;
eu
++){
date
[
eu
]=
ds
.
citit
();
Serial
.
imprimare
(
date
[
eu
],
HEX
);
Serial
.
imprimare
(
» «
);}
// Verificați și trimiteți la port monitorizează suma de control a datelor primite Serial
.
imprimare
(
"CRC ="
);
Serial
.
imprimare
(
OneWire
::
crc8
(
date
,
8
),
HEX
);
Serial
.
println
();
// Porniți procesul de conversie a datelor primite în temperatura reală, // care este stocată în 0 și 1 octeți de memorie citită. Pentru a face acest lucru, combinăm acești doi // octeți într-un număr de 16 biți int16_t brut
=(
date
[
1
]<<
8
)|
date
[
0
];
// Înainte de conversie ulterioară, trebuie să definiți familia la care aparține acest senzor (mai devreme am salvat rezultatul în variabila type_s). // În funcție de familie, temperatura va fi calculată diferit, // deoarece DS18B20 și DS1822 returnează o valoare de 12 biți, în timp ce DS18S20 returnează o valoare de 9 biți
dacă(
tipuri
){
// Dacă senzorul aparține familiei brute DS18S20
=
brut
<<
3
;
// rezoluția implicită este de 9 biți
dacă(
date
[
7
]==
0x10
){
brut
=(
brut
&
0xFFF0
)+
12

date
[
6
];}}altceva{
// Determinați la ce precizie de măsurare este configurat acest senzor octet cfg
=(
date
[
4
]&
0x60
);
// La rezoluții mai mici, puteți pune la zero cei mai puțini biți semnificativi, // deoarece nu sunt definiți devreme
dacă(
cfg
==
0x00
)
brut
=
brut
&~
7
;
// 9 biți (conversia durează 93,75 ms)
altcevadacă(
cfg
==
0x20
)
brut
=
brut
&~
3
;
// 10 biți (conversia durează 187,5 ms)
altcevadacă(
cfg
==
0x40
)
brut
=
brut
&~
1
;
// 11 biți (conversia durează 375 ms) // Precizia implicită este de 12 biți (conversia durează 750 ms)
}
// Calculați și ieșiți valorile temperaturii la monitorul de port celsius
=(
pluti
)
brut
/
16.0
;
fahrenheit
=
celsius
*
1.8
+
32.0
;
Serial
.
imprimare
(
"Temperatura ="
);
Serial
.
imprimare
(
celsius
);
Serial
.
imprimare
(
„Celsius”
);
Serial
.
imprimare
(
fahrenheit
);
Serial
.
println
(
„Fahrenheit”
);}
Dacă totul este făcut corect, atunci în fereastra monitorului de port ar trebui să vedem ceva de genul următor (Figura 6):

Figura 6 - rezultatul lucrării cu biblioteca OneWire.h

Biblioteca DallasTemperature.h

Această bibliotecă se bazează pe cea anterioară și simplifică puțin procesul de programare datorită funcțiilor mai ușor de înțeles. După instalare, veți avea acces la 14 exemple de coduri bine documentate pentru toate ocaziile. În cadrul acestui articol, va fi luat în considerare un exemplu de funcționare cu un senzor.

Rezultatul programului este prezentat în Figura 7

Figura №7 - rezultatul citirii temperaturii folosind biblioteca DallasTemperature.h

// Conectăm bibliotecile necesare # include #include // Conectăm magistrala de date la pinul # 2 din Arduino # define ONE_WIRE_BUS 2 // Creăm o instanță a clasei pentru autobuzul nostru și un link către acesta OneWire oneWire
(
ONE_WIRE_BUS
);
Senzori de temperatură Dallas
(&
oneWire
);
// PRESET FUNCTION setare nulă
(
nul
){
Serial
.
începe
(
9600
);
// Inițializați senzorii portului serial
.
începe
();
// Inițializați autobuzul
}
// CICLUL PRINCIPAL
(
nul
){
Serial
.
imprimare
(
"Citind temperatura ..."
);
// Trimiteți comanda pentru citirea senzorilor
.
requestTemperatures
();
Serial
.
println
(
"Citit"
);
Serial
.
imprimare
(
"Temperatura senzorului 1:"
);
// Afișați valoarea temperaturii Serial
.
imprimare
(
senzori
.
getTempCByIndex
(
0
));}

Senzor de temperatură KY-001 cu interfață cu 1 fir

Acest senzor este utilizat pentru măsurarea precisă a temperaturii. Comunicarea cu senzorul se realizează prin interfața 1-Wire [1-2], care vă permite să conectați mai multe dispozitive similare la placa Arduino utilizând un pin de microcontroler [3-4]. Modulul se bazează pe microcircuitul ds18b20 [5].

Dimensiune modul 24 x 15 x 10 mm, greutate 1,3 g. Pentru conectare se folosește un conector cu trei pini. Contact central - alimentare + 5V, contact "-" - comun, contact "S" - informațional.

Placa are un LED roșu care se aprinde atunci când informațiile sunt schimbate.

Consum curent 0,6 mA în timpul schimbului de informații și 20 μA în modul de așteptare.

Conectarea acestui tip de senzori la Arduino este bine descrisă în multe surse [6-8]. În acest caz, principalele avantaje ale Arduino se manifestă din nou - versatilitate și prezența unei cantități uriașe de informații de referință. Pentru a lucra cu senzorul, veți avea nevoie de biblioteca OneWire [9]. După ce ați încărcat programul din [8] (există o eroare în prima versiune a programului - nu există conexiune #include biblioteca în antetul codului), puteți observa următoarele informații pe monitorul portului serial.

De asemenea, autorul a testat codul de la [7], totul a funcționat imediat, în monitorul portului serial puteți citi informații despre tipul senzorului conectat și datele reale de temperatură.

În general, un senzor foarte util, care face posibilă familiarizarea cu interfața 1-Wire în practică. Senzorul oferă imediat datele corecte de temperatură, utilizatorul nu trebuie să calibreze.

Evaluare
( 1 estimare, medie 4 de 5 )

Încălzitoare

Cuptoare