Rezistenta termica Arduino. Măsurarea temperaturii și umidității pe Arduino - o selecție de metode. Incalzire directa si indirecta

Pentru a crea o stație meteo sau un termometru acasă, trebuie să învățați cum să interfațați o placă Arduino și dispozitive pentru măsurarea temperaturii și umidității. Măsurarea temperaturii poate fi efectuată folosind un termistor sau un senzor digital DS18B20, dar sunt utilizate dispozitive mai complexe - senzori DHT11 sau DHT22. În acest articol vă vom spune cum să măsurați temperatura și umiditatea folosind Arduino și acești senzori.

Măsurarea termistorului

Cel mai simplu mod de a determina temperatura este utilizarea. Acesta este un tip de rezistor a cărui rezistență depinde de temperatura mediului ambiant. Există termistori cu un coeficient de rezistență de temperatură pozitiv și negativ - PTC (numiți și pozistori) și respectiv termistori NTC.

În graficul de mai jos puteți vedea dependența rezistenței de temperatură. Linia întreruptă arată dependența pentru un termistor cu TCS negativ (NTC) și linia continuă groasă pentru termistorul cu TCS pozitiv (PTC).

Ce vedem aici? Primul lucru care vă atrage atenția este că termistorul PTC are un grafic rupt și va fi dificil sau imposibil să măsurați un număr de valori de temperatură, dar termistorul NTC are un grafic mai mult sau mai puțin uniform, deși clar neliniar. Ce înseamnă? Utilizarea unui termistor NTC este mai ușor de măsurat temperatura, deoarece este mai ușor să înțelegeți funcția prin care se schimbă valorile sale.

Pentru a converti temperatura în rezistență, puteți citi manual valorile, dar acest lucru este dificil de făcut acasă și veți avea nevoie de un termometru pentru a determina valorile reale ale temperaturii ambientale. Fișele de date ale unor componente conțin un astfel de tabel, de exemplu, pentru o serie de termistori NTC de la Vishay.

Apoi puteți organiza traducerea prin ramuri folosind funcția if...else sau switchcase. Cu toate acestea, dacă astfel de tabele nu sunt furnizate în fișele tehnice, trebuie să calculați funcția prin care rezistența se modifică odată cu creșterea temperaturii.

Pentru a descrie această schimbare există ecuația Steinhart-Hart.

unde A, B și C sunt constantele termistorului determinate prin măsurarea a trei temperaturi cu o diferență de cel puțin 10 grade Celsius. În același timp, diverse surse indică faptul că pentru un termistor NTC tipic de 10 kOhm, acestea sunt egale:

Notă:

Cei care înțeleg bine textul tehnic în limba engleză și iubesc calculele pot citi următorul document: https://www.bipm.org/utils/common/pdf/ITS-90/Guide-SecTh-Thermistor-Thermometry.pdf

Aceasta este o broșură despre măsurătorile temperaturii termistorului emisă de Comitetul consultativ pentru termometre (TAC).

Cu toate acestea, utilizarea unei astfel de ecuații necesită forță de muncă și este nejustificată în proiectele de amatori, așa că puteți utiliza ecuația beta pentru un termistor.

B este coeficientul beta și este calculat pe baza măsurătorilor de rezistență la două temperaturi diferite. Este indicat fie în fișa de date (după cum este ilustrat mai jos), fie calculat independent.

În acest caz, B este indicat sub forma:

Aceasta înseamnă că coeficientul a fost calculat pe baza datelor obținute din măsurarea rezistenței la temperaturi de 25 și 100 de grade Celsius, aceasta este cea mai comună opțiune. Apoi se calculează folosind formula:

B = (ln(R1) - ln(R2)) / (1/T1 - 1/T2)

O diagramă tipică pentru conectarea unui termistor la un microcontroler este prezentată mai jos.

Aici R1 este un rezistor constant, termistorul este conectat la sursa de alimentare, iar datele sunt preluate din punctul de mijloc dintre ele, diagrama indică în mod convențional că semnalul este furnizat pinului A0 - aceasta este.

Pentru a calcula rezistența termistorului, puteți utiliza următoarea formulă:

Rtermistor=R1⋅((Vss/Voutput)−1)

Pentru a traduce într-un limbaj ușor de înțeles pentru Arduino, trebuie să rețineți că Arduino are un ADC de 10 biți, ceea ce înseamnă că valoarea digitală maximă a semnalului de intrare (tensiune 5V) va fi egală cu 1023. Apoi, condiționat:

  • D - valoarea reală a semnalului.

Rtermistor=R1⋅((Dmax /D)−1)

Acum folosim acest lucru pentru a calcula rezistența și apoi pentru a calcula temperatura termistorului folosind ecuația beta. Schița va fi așa:

Și mai popular pentru măsurarea temperaturii folosind. Arduino a găsit senzorul digital DS18B20. Comunică cu microcontrolerul printr-o interfață cu 1 fir, puteți conecta mai mulți senzori (până la 127) pe un fir, iar pentru a le accesa va trebui să aflați ID-ul fiecărui senzor.

Notă: Trebuie să cunoașteți ID-ul chiar dacă utilizați doar 1 senzor.

Diagrama de conectare pentru senzorul ds18b20 la Arduino arată astfel:

Acest mod nu garantează funcționarea corectă atunci când se măsoară temperaturi peste 100 de grade Celsius.

Senzorul digital de temperatură DS18B20 constă dintr-un set întreg de componente, ca orice alt CIMS. Puteți vedea mai jos structura sa internă:

Pentru a lucra cu el, trebuie să descărcați biblioteca Onewire pentru Arduino, iar pentru senzorul în sine este recomandat să folosiți biblioteca DallasTemperature.

Acest exemplu de cod demonstrează elementele de bază ale lucrului cu 1 senzor de temperatură, rezultatul în grade Celsius este scos prin portul serial după fiecare citire.


Acești senzori sunt populari și adesea folosiți pentru a măsura nivelurile de umiditate și temperatura ambiantă. În tabelul de mai jos am indicat principalele diferențe ale acestora.

Schema de conectare este destul de simplă:

    1 iesire - alimentare;

    2 ieșire - date;

    3 pini - nu este folosit;

    Pinul 4 este firul comun.

Dacă senzorul dvs. este realizat sub forma unui modul, acesta va avea trei ieșiri și nu va fi necesar un rezistor - este deja lipit pe placă.

Pentru a funcționa, avem nevoie de biblioteca dht.h, nu este în setul standard, așa că trebuie să o descărcați și să o instalați în folderul biblioteci din folderul cu IDE-ul arduino. Acceptă toți senzorii din această familie:

    DHT 21 (AM2301);

    DHT 22 (AM2302, AM2321).

Concluzie

În zilele noastre, crearea propriei stații pentru măsurarea temperaturii și umidității este foarte simplă datorită platformei Arduino. Costul unor astfel de proiecte este de 3-4 sute de ruble. Pentru funcționare autonomă, mai degrabă decât să scoată date către un computer, acesta poate fi folosit (le-am descris într-un articol recent), apoi puteți construi un dispozitiv portabil pentru utilizare atât acasă, cât și în mașină. Scrie în comentarii ce ai mai vrea să știi despre produsele simple de casă folosind Arduino!

Un termistor (sau termistor) este un rezistor care își modifică rezistența electrică în funcție de temperatură. Există două tipuri de termistoare: PTC - cu un coeficient de temperatură pozitiv și NTC - cu un coeficient de temperatură negativ. Un coeficient pozitiv înseamnă că pe măsură ce temperatura crește, rezistența termistorului crește. Un termistor NTC se comportă în sens invers. Termistorii diferă și prin rezistența lor nominală, care corespunde temperaturii camerei - 25 C°. De exemplu, termistorii cu un rating de 100 kOhm și 10 kOhm sunt populari. Astfel de termistori sunt adesea folosiți în imprimantele 3D. În acest tutorial vom folosi un termistor NTC 100K într-o carcasă de sticlă. Ca aceasta:

1. Conectarea termistorului la Arduino

Pentru a măsura rezistența termistorului, îl conectăm ca brațul inferior al unui divizor de tensiune. Vom conecta punctul de mijloc al divizorului la intrarea analogică Arduino - A0. O metodă similară a fost folosită în . Am vorbit în detaliu despre intrările analogice ale Arduino în lecție: Diagramă schematică Aspectul aspectului
Ce rezistență ar trebui să aibă rezistorul în brațul superior al divizorului? De regulă, se folosește un rezistor cu o rezistență care se potrivește cu valoarea termistorului. În lecția noastră folosim un rezistor cu R1 = 102 kOhm, acesta poate fi obținut ușor prin conectarea a două rezistențe de 51 kOhm în serie.

2. Program pentru calcularea rezistenței termistorului

Primul program pe care îl vom scrie va calcula rezistența termistorului în ohmi. #define SERIAL_R 102000 // rezistența rezistorului serial, 102 kOhm const byte tempPin = A0; void setup() ( Serial.begin(9600); pinMode(tempPin, INPUT); ) void loop() ( int t = analogRead(tempPin); float tr = 1023.0 / t - 1; tr = SERIAL_R / tr; Serial. println(tr) delay(100);
Puteți observa că rezistența măsurată a termistorului este mai mică de 100 kOhm, ceea ce înseamnă că temperatura ambiantă este sub 25 C°. Următorul pas este să calculăm temperatura în grade Celsius.

3. Program pentru calcularea temperaturii pe termistor

Pentru a calcula valoarea temperaturii, utilizați formula Steinhart-Hart: Ecuația are parametrii A, B și C, care trebuie preluați din specificația senzorului. Deoarece nu avem nevoie de mare precizie, putem folosi o ecuație modificată (ecuația B): În această ecuație, doar parametrul B rămâne necunoscut, care pentru un termistor NTC este egal cu 3950. Parametrii rămași ne sunt deja cunoscuți:
  • T0 este temperatura camerei în Kelvin, pentru care este indicată valoarea nominală a termistorului; T0 = ​​​​25 + 273,15;
  • T este temperatura dorită, în Kelvin;
  • R este rezistența măsurată a termistorului în Ohmi;
  • R0 este rezistența nominală a termistorului în Ohmi.
Să modificăm programul Arduino adăugând un calcul de temperatură: #define B 3950 // B-coeficient #define SERIAL_R 102000 // rezistența rezistenței în serie, 102 kOhm #define THERMISTOR_R 100000 // rezistența nominală a termistorului, 100 kO5/MINAL_m #define 25 kO/MINAL_m temperatura nominală (la care TR = 100 kOhm) const byte tempPin = A0; void setup() ( Serial.begin(9600); pinMode(tempPin, INPUT); ) void loop() ( int t = analogRead(tempPin); float tr = 1023.0 / t - 1; tr = SERIAL_R / tr; Serial. print("R="); Serial.print(", t="); float steinhart // (R/Ro) steinhart / ln(R/Ro); B; // 1/B * ln(R/Ro) steinhart += 1,0 / (NOMINAL_T + 273,15 // + (1/To) steinhart = 1,0 / steinhart -= 273,15; steinhart);
Deja mai bine! Programul ne arată temperatura în grade Celsius. După cum era de așteptat, este puțin sub 25 C°.

Sarcini

  1. Termometru cu display. Să conectăm un afișaj LCD simbolic la circuit și să scriem un program care va afișa temperatura pe acesta la fiecare 100 de milisecunde.
  2. Alarma de supraîncălzire. Să adăugăm un sonerie la circuit și să scriem un program care va calcula în mod continuu temperatura. Programul ar trebui să aibă și o condiție: dacă temperatura depășește 70 C°, atunci pornim soneria.

25 noiembrie 2018

Termistor(termistor, rezistență termică) - un dispozitiv semiconductor a cărui rezistență electrică variază în funcție de temperatura sa.

Termistorul a fost inventat de Samuel Ruben în 1930.

Termistorii sunt fabricați din materiale cu un coeficient de rezistență la temperatură ridicat (TCR), care este de obicei cu ordine de mărime mai mare decât TCR-ul metalelor și aliajelor metalice.

Pe baza tipului de dependență a rezistenței de temperatură, termistorii se disting cu negativ ( NTC-termistoare, din cuvintele „ N negativ T temperatura C eficient") și pozitiv ( PTC-termistoare, din cuvintele „ P ositive T temperatura C eficientă” sau pozitori ) coeficientul de temperatură al rezistenței (sau TCR). La pozistori, rezistența lor crește odată cu temperatura; Pentru NTC-termistori, o crestere a temperaturii duce la scaderea rezistentei acestora.

În mod convențional, termistorii sunt clasificați ca temperatură joasă (proiectată să funcționeze la temperaturi sub 170 Kelvin), temperatură medie (de la 170 la 510 K) și temperatură înaltă (peste 570 K). Termistorii sunt produși proiectați să funcționeze la temperaturi de la 900 la 1300 K.

Termistorii vin în diferite tipuri, de exemplu:

Mai exact, sunt interesat de termistor pentru mai mulți parametri. În primul rând, sunt folosite pentru a măsura temperatura în extruderul imprimantelor 3D și măsoară destul de bine temperatura necesară pentru topirea plasticului. În al doilea rând, dimensiunea, dacă te uiți la al 3-lea tip de termistor din imaginea de mai sus, care este din rășină epoxidică, este foarte mic și poate fi agățat pe orice suprafață și măsura temperatura pe ea. În funcție de acești parametri îl voi folosi pentru că vreau să fac o mașină pentru a face o tijă pentru imprimare pe o imprimantă 3D.

În acest exemplu, vom folosi cel mai simplu termistor NTC cu o rezistență nominală de 100 kOhm la o temperatură de 25 de grade C, care este folosit în imprimantele 3D. Acest termistor este marcat 3950.

Pentru implementare avem nevoie de:

Schema de conectare pentru toate elementele va arăta astfel:

Pentru a calcula valoarea temperaturii utilizați formula Steinhart-Hart:

Ecuația are parametrii A, B și C, care trebuie preluați din specificația senzorului. Deoarece nu avem nevoie de mare precizie, putem folosi o ecuație modificată (ecuația B):

În această ecuație, doar parametrul B rămâne necunoscut, care pentru un termistor NTC este egal cu 3950. Parametrii rămași ne sunt deja cunoscuți:

  • T0 - temperatura camerei în Kelvin, pentru care este indicată ratingul termistorului; T0 = ​​​​25 + 273,15;
  • T este temperatura dorită, în Kelvin;
  • R este rezistența măsurată a termistorului în Ohmi;
  • R0 este rezistența nominală a termistorului în Ohmi.

Schița va arăta astfel:

#definiți B 3950 // Coeficientul B #definiți SERIAL_R 102000 // rezistența rezistenței în serie, 102 kOhm #definiți THERMISTOR_R 100000 // rezistența nominală a termistorului, 100 kOhm #definiți NOMINAL_T 25 // temperatura nominală 100 kOhm const. byte tempPin = A0; void setup() ( Serial.begin(9600); pinMode(tempPin, INPUT); ) void loop() ( int t = analogRead(tempPin); float tr = 1023.0 / t - 1; tr = SERIAL_R / tr; Serial. print("R="); Serial.print(", t="); float steinhart // (R/Ro) steinhart / ln(R/Ro); B; // 1/B * ln(R/Ro) steinhart += 1,0 / (NOMINAL_T + 273,15 // + (1/To) steinhart = 1,0 / steinhart -= 273,15; steinhart);

Iată ce vom vedea în monitorul portului:

Vedem din citiri că rezistența este mai mare de 100 kOhm și temperatura este de 23 de grade, este destul de logic, formula funcționează corect.
Acum, folosind această formulă, putem deja construi diferite condiții pentru diferite acțiuni.

Să conectăm unul dintre senzorii disponibili la Arduino - un senzor de temperatură sau un termistor.

Denumirea termistorului pe diagrame

Termistor- semiconductor rezistor, a cărui rezistență electrică depinde în mod semnificativ de temperatură. Pe măsură ce temperatura crește, rezistența scade.

Ceea ce vrem

Construim un circuit cu un termistor și schimbăm numărul de diode de ardere în funcție de temperatură.

Ce vei avea nevoie

Pe lângă tot ceea ce este obișnuit - un termistor. Folosim B57164-K0103.

Etapele muncii

  • Schema de asamblare nr 1
  • Determinarea intervalului de schimbări de temperatură
  • Îmbunătățirea schemei și programului
  • Suntem mulțumiți de rezultat
  • Noi generăm idei.

Schema de asamblare nr 1

Folosim un rezistor de 10KOm

Circuitul este foarte asemănător cu circuitul cu buton, dar acum în loc de buton punem un termistor și îl conectăm la intrarea analogică A2.

Intrarea analogică poate diferenția puterea semnalului din aval. 0 este nivelul minim, 1023 este maxim. Se spune gradație de 10 biți (2 10 = 1024).

Dacă eliminați termistorul cu totul, nivelul semnalului va fi zero, dar dacă instalați termistorul, atunci curentul va începe să curgă prin el și să intre în intrarea A2. Sarcina noastră este să determinăm tensiunea condiționată la intrare, să îi setăm limitele minime și maxime în funcție de temperatura termistorului.

Program:

void setup() (
pinMode(A2,INPUT); //A2 pin - intrare de semnal

Serial.begin(9600); //comunicare cu computerul 9600 bps
}
void loop() (
int t = analogRead(A2); //citește valoarea din A2
Serial.println(t); // scrieți această valoare pe // portul serial (pentru noi acesta este USB)

întârziere (10); // așteaptă o clipă
}

Emitem programul. Pe ecran găsim butonul „Monitor serial”, faceți clic.

Butonul Monitor serial

Numerele rulează în fereastra care se deschide - aceasta este o valoare condiționată în funcție de temperatură. Notează numărul minim pe care ai reușit să-l observi. Acum prindeți cu atenție rezistorul - de la căldura mâinilor voastre, temperatura acestuia va crește, iar cifrele de pe ecran vor crește. Să fie aceasta temperatura maximă.

Îmbunătățim schema.

Să conectăm 3 diode la circuit, „atârnându-le” pe portul 10-12 al plăcii.

Atenție la diode.

Lasă o diodă să se aprindă la temperatura minimă, 2 când temperatura crește și toate 3 la temperatura maximă.

Pentru a face acest lucru, vom calibra citirile primite în program. Fie valoarea minimă 540, cea maximă (când vrem să aprindem toate cele trei diode) - 600.

Să definim valoarea variabilei led după cum urmează:

int led = map(t,540,600,0,3);

Astfel, atunci când citirile variabilei t se schimbă de la 540 la 600 de unități, valoarea variabilei LED se va schimba de la 0 la 3.

Scrierea unui program

Void setup() (

pinMode(A2,INPUT); //A2 pin - intrare de semnal

Serial.begin(9600); //comunicare cu computerul 9600 bps

pentru (int i=10; i<=12; i++) {

pinMode(i,OUTPUT);

void loop() (

int t = analogRead(A2); //citește valoarea din A2

int led = map(t,540,600,0,3);

dacă (led>=1) (digitalWrite(10,HIGH);)

else (digitalWrite(10,LOW);)

dacă (led>=2) (digitalWrite(11,HIGH);)

else (digitalWrite(11,LOW);)

dacă (led>=3) (digitalWrite(12,HIGH);)

else (digitalWrite(12,LOW);)

Serial.println(t); // scrieți această valoare pe // portul serial (pentru noi acesta este USB)

întârziere (10); // așteaptă o clipă

Ei bine, totul pare să funcționeze.

Gândiți-vă unde puteți utiliza circuitul asamblat.

Ce se întâmplă dacă diodele sunt înlocuite cu altceva?

Încercați să conectați mai multe diode pentru a afișa temperatura mai precis.

Bună, Habracommunity. După ce am citit câteva articole despre hub-ul Arduino, am fost atras să pun mâna pe această jucărie. Și recent am primit un colet cu plată. Apoi m-am plimbat cu LED-uri și am vrut ceva mai serios. Am decis să fac un termometru simplu folosind doar un termistor, un rezistor de 10 kOhm și un afișaj LCD. Dacă cineva este interesat de ceea ce s-a întâmplat, vă rugăm să vedeți pisica.

start

Un termistor este un rezistor variabil care își modifică rezistența în funcție de temperatura ambiantă.

Vom avea nevoie de următoarele detalii:
Arduino Uno - 1 bucată
Termistor - 1 buc.
Rezistor cu o rezistență de 10 kOhm - 1 buc.
Display LCD HJ1602A - 1 bucata
Juperii de conectare - mai multe piese

Aveam toate astea, așa că am început imediat să proiectez pe placa.

De asemenea, am lipit picioarele pe ecran în ziua achiziției.

Apoi conectăm ecranul la ieșirile Arduino. Ecranul meu are acest pinout.

1 (GND) GND - Masă
2 (VDD) 5v - Putere(+)
3 (VO/Contrast) - Controlul contrastului (am conectat un rezistor variabil aici)
4 (RS) - 12 - Canal de date
5 (RW) - 11 - Canal de date
6 (E) - 10 - Canal de date
11 (DB4) - 5 - Canal de date
12 (DB5) - 4 - Canal de date
13 (DB6) - 3 - Canal de date
14 (DB7) - 2 - Canal de date
15 (BL1/Iluminare de fundal1) - 13 - Putere de iluminare de fundal(+)
16 (BL2/Iluminare de fundal2) - GND - Pământ (-)

Aceasta este poza pe care o avem.

Apoi, conectați un picior al termistorului la intrarea analogică A4 și un rezistor de 10 kOhm la masă, iar cel de-al doilea picior al termistorului la 5V.

În general, asta e tot. Hardware-ul este gata. Iată diagrama.

Programare

Totul este clar cu programare. Schiță codul sursă:

// conectați două biblioteci pentru a lucra cu LCD și calcule matematice #include #include LiquidCrystal lcd (12, 11, 10, 5, 4, 3, 2); // inițializați LCD int backLight = 13; void setup(void) ( pinMode(backLight, OUTPUT); digitalWrite(backLight, HIGH); lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0,0); ) // creează o metodă pentru conversia citirilor senzorului în grade Celsius dublu Getterm(int RawADC) ( temperatură dublă; temperatură = log(((10240000/RawADC) - 10000)); temp = 1 / (0,001129148 + (0,000234125 * temp) + (0,00800000000000000000000000) temp * temp)); temp = temp - 273.15; . clear(); lcd.setCursor(0,0); lcd.print("Temperatura este:");

Rezultatul programului.

  • Serghei Savenkov

    un fel de recenzie „scurtă”... de parcă s-ar grăbi undeva