Conectarea unui termistor la arduino. Termistori Încălzire directă și indirectă

Aflați despre termistori și despre cum să programați un Arduino pentru a-și măsura datele.

Te-ai întrebat vreodată cum măsoară temperatura unele dispozitive, cum ar fi termostatele, plăcuțele de încălzire pentru imprimante 3D, motoarele auto și cuptoarele? În acest articol poți afla!

Cunoașterea temperaturii poate fi foarte utilă. Cunoașterea temperaturii poate ajuta la reglarea temperaturii camerei la un nivel confortabil, asigurați-vă că placa de încălzire a imprimantei 3D este suficient de fierbinte pentru ca materiale precum ABS să se lipească de suprafața sa și împiedicați supraîncălzirea motorului sau arderea alimentelor pe care le gătiți.

În acest articol luăm în considerare un singur tip de senzor care poate măsura temperatura. Acest senzor se numește termistor.

Un termistor are o rezistență mult mai dependentă de temperatură decât alte tipuri de rezistențe.

Vom folosi Arduino pentru a măsura și procesa citirile termistorului, după care vom converti aceste citiri într-un format de unitate de temperatură ușor de citit.

Mai jos este o fotografie a termistorului pe care îl vom folosi:

Componente necesare

Accesorii

  • Arduino (Mega sau Uno sau orice alt model);
  • mai mulți săritori;
  • fier de lipit și lipit (poate fi necesar dacă termistorul nu se va potrivi în conectorii de pe placa Arduino).

Software

  • Arduino IDE

Teorie

În utilizarea obișnuită a rezistenței, nu doriți ca rezistența acestuia să se schimbe cu temperatura. Acest lucru nu este realist în viața reală, poate oferi doar o mică modificare a rezistenței pentru o schimbare mare a temperaturii. Dacă nu ar fi cazul, atunci rezistențele ar avea efecte ciudate asupra funcționării circuitelor, de exemplu un LED ar putea străluci mult mai luminos sau mai slab pe măsură ce temperatura ambientală se schimbă.

Dar dacă doriți ca luminozitatea LED-ului să fie o funcție de temperatură? Aici intervine termistorul. După cum probabil ați ghicit, rezistența unui termistor se schimbă foarte mult cu o mică schimbare a temperaturii. Pentru a ilustra acest lucru, mai jos este curba de rezistență a unui termistor:

Figura arată doar unități de măsură fără valori reale, deoarece domeniul de rezistență depinde de tipul de termistor specific. După cum puteți vedea, pe măsură ce temperatura crește, rezistența termistorului scade. Aceasta este proprietatea distinctivă a unui rezistor cu coeficient de temperatură negativ sau, pe scurt, termistor NTC.

Există, de asemenea, termistori cu coeficient de temperatură pozitiv (PTC), a căror rezistență crește pe măsură ce temperatura crește. Cu toate acestea, termistorii PTC au un punct de basculare și își schimbă foarte mult rezistența la o anumită temperatură. Acest lucru face ca interacțiunea cu termistorii PTC să fie puțin mai complicată. Din acest motiv, termistorii NTC sunt preferați în majoritatea contoarelor de temperatură ieftine.

În restul articolului, după cum puteți ghici, vom vorbi despre termistori NTC.

Patru abordări pentru găsirea unei formule pentru trasarea unei curbe

Acum că avem o mai bună înțelegere a comportamentului termistorilor, poate vă întrebați cum putem folosi Arduino pentru a măsura temperatura. Curba din graficul de mai sus este neliniară și, prin urmare, o ecuație liniară simplă nu funcționează pentru noi (de fapt putem deriva o ecuație, dar mai multe despre asta mai târziu).

Deci ce să faci?

Înainte de a continua, gândiți-vă cum ați face acest lucru pe un Arduino sau chiar într-un circuit fără componente de microprocesor.

Există mai multe modalități de a rezolva această problemă, care sunt enumerate mai jos. Aceasta nu este o listă cuprinzătoare a tuturor tehnicilor, dar vă va arăta câteva abordări populare.

Metoda 1

Unii producători oferă informații atât de cuprinzătoare încât conține un întreg grafic care arată intervale specifice de valori întregi de temperatură și rezistență (valori tipice). Un astfel de termistor poate fi găsit în fișa de date de la Vishay.

Cum, cu astfel de date detaliate, s-ar putea implementa măsurarea temperaturii pe Arduino. Ar trebui să codificați toate aceste valori într-un tabel uriaș de căutare sau structuri de control foarte lungi „comutați... caz” sau „dacă... altfel”.

Și dacă producătorul nu s-a obosit să furnizeze un tabel detaliat, atunci va trebui să măsurați singur fiecare punct pentru a forma un astfel de tabel. Această zi va fi destul de plictisitoare pentru programator. Dar această metodă nu este atât de rea și își are locul în uz. Dacă proiectul actual testează doar câteva puncte sau chiar un interval mic, aceasta poate fi metoda preferată. De exemplu, o astfel de situație apare dacă doriți să măsurați dacă valorile sunt în intervalele de temperatură selectate și să aprindeți un LED pentru a indica această condiție.

Dar în proiectul nostru dorim să măsurăm temperatura într-un interval aproape continuu și să trimitem citirile către monitorul serial, așa că nu vom folosi această metodă.

Metoda 2

Puteți încerca să „liniarizați” răspunsul termistorului adăugând circuite suplimentare la acesta.

O modalitate populară de a face acest lucru este conectarea unui rezistor în paralel cu termistorul. Unele jetoane oferă să facă asta pentru tine.

Determinarea modului de selectare și liniarizare a unei porțiuni a curbei, împreună cu alegerea valorii corecte a rezistenței, este un subiect pentru un alt articol. Această abordare este bună dacă microprocesorul nu poate evalua expresiile în virgulă mobilă (cum ar fi PICAXE), deoarece simplifică răspunsul într-un anumit interval de temperatură la liniar. Acest lucru facilitează, de asemenea, proiectarea unui circuit care nu are microprocesor.

Dar în acest articol folosim un microprocesor și dorim să măsurăm temperatura pe întregul interval.

Metoda 3

Puteți lua datele din tabelul din fișa de date sau (dacă vă place să fiți puțin ciudat) să vă creați propriul tabel luând propriile măsurători și recreând graficul în ceva de genul Excel. Puteți utiliza apoi funcția de ajustare a curbei pentru a crea o formulă pentru curba respectivă. Aceasta nu este o idee rea și toată munca depusă va da o formulă frumoasă pe care o puteți folosi în program. Dar va dura ceva timp pentru a preprocesa datele.

Deși aceasta este o abordare rezonabilă, nu vrem să depindem de analiza tuturor acestor date. De asemenea, fiecare termistor este ușor diferit (dar, desigur, aceasta nu este o problemă dacă toleranța este destul de scăzută).

Metoda 4

Se pare că există o formulă generală de potrivire a curbei destinată dispozitivelor precum termistorii. Se numește ecuația Steinhart-Hart. Mai jos este o versiune a acesteia (alte versiuni folosesc termeni în a doua și puteri):

\[\frac(1)(T)=A+B\ln(R)+C(\ln(R))^3\]

unde R este rezistența termistorului la temperatura T (în Kelvin).

Aceasta este o ecuație de curbă generală potrivită pentru toate tipurile de termistori NTC. Aproximarea relației temperatură-rezistență este „destul de bună” pentru majoritatea aplicațiilor.

Rețineți că ecuația necesită constante A, B și C. Acestea variază între termistori și trebuie fie specificate, fie calculate. Deoarece avem trei necunoscute, trebuie să faceți trei măsurători de rezistență la anumite temperaturi, care pot fi apoi folosite pentru a crea trei ecuații și a determina valorile acestor constante.

Chiar și pentru cei dintre noi care cunosc bine algebra, este încă prea multă muncă.

În schimb, există o ecuație și mai simplă, care este mai puțin precisă, dar conține o singură constantă. Această constantă este denumită β și, prin urmare, ecuația se numește β-ecuație.

\[\frac(1)(T)=\frac(1)(T_o)+(\frac(1)(\beta))\cdot\ln\left(\frac(R)(R_o)\right)\ ]

unde R 0 este rezistența la temperatura de control T 0 (de exemplu, rezistența la temperatura camerei). R este rezistența la temperatura T. Temperaturile sunt indicate în Kelvin. β este de obicei specificat în descrierea tehnică; iar dacă nu, atunci aveți nevoie de o singură măsurătoare (o ecuație) pentru a calcula această constantă. Aceasta este ecuația pe care o voi folosi pentru a interacționa cu termistorul nostru, deoarece este cea mai simplă pe care am întâlnit-o și nu are nevoie să liniază răspunsul termistorului.

Măsurarea rezistenței cu Arduino

Acum că am ales o metodă de trasare a curbei, trebuie să ne dăm seama cum să măsuram efectiv rezistența folosind Arduino înainte de a putea trece informațiile de rezistență în ecuația β. Putem face acest lucru folosind un divizor de tensiune:

Acesta va fi circuitul nostru pentru interacțiunea cu termistorul. Când termistorul detectează o schimbare a temperaturii, aceasta se va reflecta în tensiunea de ieșire.

Acum, ca de obicei, folosim formula pentru divizorul de tensiune.

Dar nu ne interesează tensiunea de ieșire V de ieșire, ne interesează rezistența termistorului R termistor. Deci o vom exprima:

Acest lucru este mult mai bine, dar trebuie să ne măsurăm tensiunea de ieșire, precum și tensiunea de alimentare. Deoarece folosim ADC-ul încorporat al Arduino, putem reprezenta tensiunea ca valoare numerică pe o scară specifică. Deci forma finală a ecuației noastre este prezentată mai jos:

Acest lucru funcționează deoarece indiferent de modul în care reprezentăm tensiunea (în volți sau unități digitale), aceste unități se anulează în numărătorul și numitorul fracției, lăsând o valoare adimensională. Apoi o înmulțim cu rezistența pentru a obține rezultatul în ohmi.

Dmax-ul nostru va fi egal cu 1023, deoarece acesta este cel mai mare număr pe care ADC-ul nostru pe 10 biți îl poate produce. D măsurată este valoarea măsurată de către convertorul analog-digital, care poate varia de la zero la 1023.

Toate! Acum poți începe asamblarea!

Să-l punem împreună

Am folosit un termistor TH10K.

Am folosit și un rezistor de 10k ca echilibru R în divizorul nostru de tensiune. Nu am avut constanta β, așa că am calculat-o singur.

Mai jos este o diagramă completă a dispozitivului. Este destul de simplu.

Și așa arată aspectul final:

Cod de program pentru Arduino

Codul este prevăzut cu o mulțime de comentarii pentru a vă ajuta să înțelegeți logica programului.

Practic, măsoară tensiunea pe divizor, calculează temperatura și apoi o afișează pe terminalul portului serial.

Pentru distracție, există și câteva afirmații „dacă... altfel” adăugate pentru a arăta cum poți acționa în funcție de intervalul de temperatură.

//================================================== ================ ============================== // Constante / /============== ===================================== ================== =============== // Legat de termistor: /* Aici avem mai multe constante care fac editarea codului Mai uşor. Inima programului se află în funcția readThermistor. */ currentTemperature = readThermistor();< 24.0) { Serial.print("It is "); Serial.print(currentTemperature); Serial.println("C. Ahhh, very nice temperature."); } else if (currentTemperature >= 24.0) ( Serial.print("Este "); Serial.print(currentTemperature); Serial.println("C. Mă simt ca un tamale fierbinte!"); ) else ( Serial.print("Este") ; Serial.print(currentTemperature); Serial.println("C. Brrrrrr, it"s COLD!"); ) ) //=================== ==================================================== == ======== // Funcții //==================================== === ================================================= ========== //////// //////////////////// ////// readThermistor ///// // /////////////// ///////////// /* Această funcție citește valorile de la pinul analogic, așa cum se arată mai jos Tensiunea la o reprezentare digitală folosind conversia A/D. Cu toate acestea, aceasta se face de mai multe ori, astfel încât să putem face o medie a valorii pentru a evita erorile de măsurare pentru a calcula temperatura termistorului În final, temperatura este convertită în grade Celsius */ double readThermistor() ( // variabile double rThermistor = 0. ; // Stochează valoarea rezistenței termistorului dublu tKelvin = 0; // Stochează temperatura calculată dublu tCelsius = 0; // Stochează temperatura în grade Celsius dublu adcAverage = 0; // Stochează valoarea medie a tensiunii int adcSamples; // O matrice pentru a stoca // măsurători individuale de tensiune /* Calculați rezistența medie a termistorului: După cum sa menționat mai sus, vom citi valorile ADC de mai multe ori pentru a obține o serie de mostre. O mică întârziere este utilizată pentru ca funcția analogRead să funcționeze corect. */ pentru (int i = 0; i< SAMPLE_NUMBER; i++) { adcSamples[i] = analogRead(thermistorPin); // прочитать значение на выводе и сохранить delay(10); // ждем 10 миллисекунд } /* Затем мы просто усредняем все эти выборки для "сглаживания" измерений. */ for (int i = 0; i < SAMPLE_NUMBER; i++) { adcAverage += adcSamples[i]; // складываем все выборки. . . } adcAverage /= SAMPLE_NUMBER; // . . . усредняем их с помощью деления /* Здесь мы рассчитываем сопротивление термистора, используя уравнение, описываемое в статье. */ rThermistor = BALANCE_RESISTOR * ((MAX_ADC / adcAverage) - 1); /* Здесь используется бета-уравнение, но оно отличается от того, что описывалось в статье. Не беспокойтесь! Оно было перестроено, чтобы получить более "красивую" формулу. Попробуйте сами упростить уравнение, чтобы поупражняться в алгебре. Или просто используйте показанное здесь или то, что приведено в статье. В любом случае всё будет работать! */ tKelvin = (BETA * ROOM_TEMP) / (BETA + (ROOM_TEMP * log(rThermistor / RESISTOR_ROOM_TEMP))); /* Я буду использовать градусы Цельсия для отображения температуры. Я сделал это, чтобы увидеть типовую комнатную температуру, которая составляет 25 градусов Цельсия. */ tCelsius = tKelvin - 273.15; // преобразовать кельвины в цельсии return tCelsius; // вернуть температуру в градусах Цельсия }

Posibili pași următori

Totul din acest articol arată o modalitate destul de simplă de a măsura temperatura folosind un termistor ieftin. Mai există câteva moduri de a îmbunătăți schema:

  • adăugați un mic condensator în paralel cu ieșirea divizorului. Acest lucru va stabiliza tensiunea și poate chiar elimina necesitatea de a face o medie a unui număr mare de mostre (așa cum s-a făcut în cod) - sau cel puțin vom putea să facem o medie a mai puține mostre;
  • Utilizați rezistențe de precizie (toleranță mai mică de 1%) pentru a obține măsurători mai previzibile. Dacă acuratețea măsurării este esențială pentru dvs., rețineți că auto-încălzirea termistorului poate afecta măsurătorile; Autoîncălzirea nu este compensată în acest articol.

Desigur, termistorii sunt doar unul dintre senzorii utilizați pentru măsurarea temperaturii. O altă alegere populară este cipurile senzorilor (este descris un exemplu de lucru cu unul dintre ele). În acest fel, nu va trebui să vă ocupați de liniarizare și ecuații complexe. Celelalte două opțiuni sunt de tip termocuplu și senzor infraroșu; acesta din urmă poate măsura temperatura fără contact fizic, dar nu mai este la fel de ieftin.

Sper că articolul a fost util. Lasă comentarii!

25 noiembrie 2018

Termistor(termistor, rezistență termică) este 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 temperatură C eficient") și pozitiv ( PTC-termistoare, din cuvintele „ P ositive T temperatură C eficientă” sau pozitori ) coeficientul de temperatură al rezistenței (sau TCR). La pozistori, rezistența acestora 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). Termistoarele sunt produse proiectate pentru a funcționa 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 o 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 #define THERMISTOR_R 100000 // rezistența nominală a termistorului, 100 kOhm #definiți NOMINAL_T 25 // temperatura nominală 100 kO 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.

Un termistor (termistor) este un element electronic cu stare solidă care arată ca un rezistor fix, dar are o caracteristică de temperatură pronunțată. Acest tip de dispozitiv electronic este de obicei utilizat pentru a modifica tensiunea de ieșire analogică pe baza modificărilor temperaturii ambientale. Cu alte cuvinte, proprietățile electrice ale termistorului și principiul de funcționare sunt direct legate de fenomenul fizic - temperatură.

Un termistor este un element semiconductor sensibil la temperatură realizat din oxizi metalici semiconductori. De obicei are forma unui disc sau bilă cu fire metalizate sau de legătură.

Astfel de forme permit valorii rezistive să varieze proporțional cu schimbările mici de temperatură. Pentru rezistențele standard, o modificare a rezistenței din cauza încălzirii pare a fi un fenomen nedorit.

Dar același efect pare să aibă succes în construcția multor circuite electronice care necesită determinarea temperaturii.

Astfel, fiind un dispozitiv electronic neliniar cu rezistență variabilă, termistorul este potrivit pentru a funcționa ca senzor de termistor. Aceste tipuri de senzori sunt utilizate pe scară largă pentru a monitoriza temperatura lichidelor și gazelor.

Ca un dispozitiv în stare solidă realizat din oxizi metalici extrem de sensibili, termistorul funcționează la nivel molecular.

Electronii de valență devin activi și reproduc un TCR negativ sau pasiv și apoi reproduc un TCR pozitiv.

Ca urmare, dispozitivele electronice - termistorii - demonstrează o rezistivitate reproductibilă foarte bună, păstrând în același timp caracteristici de performanță care permit funcționarea productivă în intervalul de temperatură de până la 200ºC.

Aplicarea termistorilor în practică

Aplicația de bază în acest caz este senzorii de temperatură rezistivi. Cu toate acestea, aceleași elemente electronice, aparținând familiei de rezistențe, pot fi utilizate cu succes în serie cu alte componente sau dispozitive.

Circuite simple pentru conectarea termistoarelor, care arată funcționarea dispozitivelor ca senzori de temperatură - un fel de convertoare de tensiune datorită modificărilor rezistenței

Acest circuit de conectare vă permite să controlați curentul care curge prin componentă. Astfel, termistorii, de fapt, acționează și ca limitatori de curent.

Termistorii sunt produși în diferite tipuri, pe baza de materiale diferite și diferă ca mărime în funcție de timpul de răspuns și temperatura de funcționare.

Există versiuni sigilate ale dispozitivelor care sunt protejate de pătrunderea umezelii. Există modele pentru temperaturi ridicate de funcționare și dimensiuni compacte.

Există trei tipuri cele mai comune de termistori:

  • minge,
  • disc,
  • încapsulat.

Dispozitivele funcționează în funcție de schimbările de temperatură:

  1. Pentru a scădea valoarea rezistivă.
  2. Pentru a crește valoarea rezistivă.

Adică, există două tipuri de dispozitive:

  1. Având TCS negativ (NTC).
  2. TCS pozitiv (PTC).

Coeficient TCS negativ

Termistorii negativi TCR NTC își scad valoarea rezistivă pe măsură ce temperatura exterioară crește. De regulă, aceste dispozitive sunt adesea folosite ca senzori de temperatură, deoarece sunt ideale pentru aproape orice tip de electronică care necesită controlul temperaturii.

Răspunsul negativ relativ mare al unui termistor NTC înseamnă că chiar și schimbările mici de temperatură pot schimba semnificativ rezistența electrică a dispozitivului. Acest factor face ca modelele NTC să fie ideale pentru măsurarea precisă a temperaturii.


Circuit de calibrare (verificare) termistor: 1 - alimentare; 2 - sensul curentului; 3—element electronic testat, termistor; 4 - microampermetru de calibrare

Termistorii NTC, care reduc rezistența pe măsură ce temperatura crește, sunt disponibile cu diferite rezistențe de bază. De obicei, rezistențele de bază la temperatura camerei.

De exemplu: 25 °C este luat ca punct de temperatură de control (de bază). De aici sunt construite valorile dispozitivelor, de exemplu, ale următoarelor denumiri:

  • 2,7 kOhm (25ºC),
  • 10 kOhm (25ºC)
  • 47 kOhm (25ºC)...

O altă caracteristică importantă este valoarea „B”. Valoarea lui „B” este o constantă care este determinată de materialul ceramic din care este fabricat termistorul.

Aceeași constantă determină gradientul curbei raportului rezistiv (R/T) într-un anumit interval de temperatură între două puncte de temperatură.

Fiecare material termistor are o constantă de material diferită și, prin urmare, o curbă individuală rezistență-temperatură.

Astfel, constanta „B” determină o valoare rezistivă la baza T1 (25ºC) și o altă valoare la T2 (de exemplu, la 100ºC).

Prin urmare, valoarea lui B va determina constanta materialului termistorului limitată de intervalul T1 și T2:

B * T1 / T2 (B * 25 / 100)

p.s. Valorile temperaturii în calcule sunt luate în calibrarea Kelvin.

Rezultă că având valoarea „B” (din caracteristicile producătorului) a unui anumit dispozitiv, inginerul electronic va trebui doar să creeze un tabel de temperaturi și rezistențe pentru a construi un grafic adecvat folosind următoarea ecuație normalizată:

B (T1/T2) = (T 2 * T 1 / T 2 – T 1) * ln(R1/R2)

unde: T 1, T 2 – temperaturi în grade Kelvin; R 1, R 2 – rezistențe la temperaturi corespunzătoare în Ohmi.

De exemplu, un termistor NTK cu o rezistență de 10 kOhm are o valoare „V” de 3455 în intervalul de temperatură de 25 - 100ºC.

Ideea evidentă este că termistorii își schimbă rezistența exponențial cu schimbările de temperatură, astfel încât caracteristica este neliniară. Cu cât sunt setate mai multe puncte de control, cu atât curba este mai precisă.

Folosind un termistor ca senzor activ

Deoarece dispozitivul este un tip activ de senzor, necesită un semnal de excitație pentru a funcționa. Orice modificare a rezistenței care rezultă dintr-o modificare a temperaturii este transformată într-o modificare a tensiunii.


Industria produce termistori de diferite modele, inclusiv cele de înaltă precizie, protejate în mod fiabil pentru utilizare în sisteme de nivel înalt

Cel mai simplu mod de a obține acest efect este utilizarea unui termistor ca parte a unui circuit divizor de potențial, așa cum se arată în figura de mai jos. O tensiune constantă este furnizată rezistorului și circuitului termistorului.

De exemplu, se folosește un circuit în care un termistor de 10 kOhm este conectat în serie cu un rezistor de 10 kOhm. În acest caz, tensiunea de ieșire la baza T = 25ºC va fi jumătate din tensiunea de alimentare.

Astfel, un circuit divizor de potențial este un exemplu de convertor simplu de rezistență la tensiune. Aici, rezistența termistorului este reglată de temperatură, urmată de formarea unei valori a tensiunii de ieșire proporțională cu temperatura.

Cu cuvinte simple: cu cât corpul termistorului este mai cald, cu atât tensiunea de ieșire este mai mică.

Între timp, dacă poziția rezistorului serie, RS și termistorul R TH este schimbată, atunci nivelul tensiunii de ieșire se va schimba la vectorul opus. Adică, acum, cu cât termistorul se încălzește mai mult, cu atât va fi mai mare nivelul tensiunii de ieșire.

Termistorii pot fi, de asemenea, utilizați ca parte a unei configurații de bază folosind un circuit de punte. Conexiunea dintre rezistențele R1 și R2 stabilește tensiunea de referință la valoarea necesară. De exemplu, dacă R1 și R2 au aceleași valori de rezistență, tensiunea de referință este jumătate din tensiunea de alimentare (V/2).

Un circuit amplificator construit folosind acest circuit de punte cu sondă termică poate acționa ca un amplificator diferențial de înaltă sensibilitate sau ca un simplu circuit de declanșare Schmitt cu funcție de comutare.


Conectarea unui termistor la un circuit de punte: R1, R2, R3 sunt rezistențe fixe obișnuite; Rt - termistor; A - aparat de măsurare microampermetru

Există o problemă cu termistorul (efect de auto-încălzire). În astfel de cazuri, puterea disipată I 2 R este destul de mare și creează mai multă căldură decât poate disipa corpul dispozitivului. În consecință, această căldură „extra” afectează valoarea rezistivă, rezultând citiri false.

Una dintre modalitățile de a scăpa de efectul de „auto-încălzire” și de a obține o modificare mai precisă a rezistenței din influența temperaturii (R/T) este alimentarea termistorului de la o sursă de curent constant.

Termistor ca regulator de curent de pornire

Dispozitivele sunt utilizate în mod tradițional ca convertoare rezistive sensibile la temperatură. Cu toate acestea, rezistența termistorului se modifică nu numai sub influența mediului, ci și modificări sunt observate de la curentul electric care curge prin dispozitiv. Efectul aceleiași „auto-încălzire”.

Diverse echipamente electrice cu o componentă inductivă:

  • motoare,
  • transformatoare,
  • lămpi electrice,
  • alte,

supus curenților excesivi de aprindere la prima pornire. Dar dacă un termistor este conectat în serie în circuit, curentul inițial ridicat poate fi limitat efectiv. Această soluție ajută la creșterea duratei de viață a echipamentelor electrice.

Termistorii TCR scăzut (la 25°C) sunt de obicei utilizați pentru a regla curentul de pornire. Așa-numitele limitatoare de curent (limitatoare de supratensiune) schimbă rezistența la o valoare foarte mică atunci când trece un curent de sarcină.

Când echipamentul este pornit inițial, curentul de pornire trece printr-un termistor rece, a cărui valoare rezistivă este destul de mare. Sub influența curentului de sarcină, termistorul se încălzește și rezistența scade lent. Acest lucru permite reglarea lină a curentului în sarcină.

Termistorii NTC sunt destul de eficienți pentru a oferi protecție împotriva curenților de aprindere nedorit de mari. Avantajul aici este că acest tip de dispozitiv este capabil să gestioneze eficient curenții de pornire mai mari în comparație cu rezistențele standard.

Salutare cititori. 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.

Început

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 buc.
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); Serial.begin(9600) ; ) // creează o metodă pentru a converti citirile senzorului în grade Celsius dublu Getterm(int RawADC) ( temperatură dublă; temp = log(((10240000/RawADC) - 10000)); temp = 1 / (0,001129148 + (0,000234125 * temp ) + (0,0000000876741 * temp * temp * temp)); temp = temp - 273,15; citiți citirile de la senzorul lcd.clear(); metoda creată mai devreme delay(1000);

Rezultatul programului.

Vă prezint atenției diagrama termostatului meu. Aveam nevoie de acest dispozitiv pentru imprimanta mea 3D, sau mai degrabă pentru a încălzi masa (am un PRUSA I3 de casă, când am pus o masă încălzită pe el a apărut o problemă, din cauza corpului imprimantei deschis, masa nu poate menține temperatura, iar controlerul imprimantei afișează o eroare și apoi oprește imprimarea). Am decis să construiesc un regulator de încălzire separat (din componentele pe care le aveam și doar pentru distracție). Aveam termistori fără nume, afișaje bazate pe controlere tm1637, drivere ULN2803 half-bridge și, bineînțeles, microcontrolere.

Primul lucru de făcut a fost să înțelegeți cum funcționează un termistor. S-a dovedit a fi foarte simplu. Inscripția NTC înseamnă că cu cât temperatura este mai mare, cu atât rezistența este mai mică. Totul este clar aici. Acum trebuie să decidem cum să-l conectăm la controler. Există mai multe opțiuni, dar principalele sunt un divizor de tensiune de două rezistențe cu un pull-up la masă sau un pull-up la putere. Am ales varianta numarul doi (aceasta se face intr-o imprimanta 3D), am conectat-o ​​la sursa de alimentare cu o rezistenta de 10 kilo-ohmi (vezi schema).

Ne-am hotărât asupra conexiunii. Întrebarea numărul doi: cum să aflați ce valori ADC vor corespunde anumitor valori de temperatură? Există mai multe moduri aici. Puteți lua un termistor cu parametri cunoscuți și tabele de rezistență sau puteți utiliza formule complexe de calcul. Aceste opțiuni nu mi s-au potrivit (rezistorul este necunoscut și nu mă pricep la matematică superioară). Am ales o cale diferită și probabil cea mai simplă. Deoarece făceam nu un termometru, ci un releu termic, nu aveam nevoie să știu cărei valori de temperatură îi corespunde fiecare valoare ADC. Trebuie să știu valoarea ADC pentru anumite temperaturi (am nevoie) într-un interval mic. Prin urmare, am decis să construiesc un grafic al ADC în funcție de temperatură în mai multe puncte și apoi, folosind acest grafic, să determin valorile ADC aproximative pentru temperaturile de care aveam nevoie. Pentru a face acest lucru, am asamblat întregul circuit și am scris un cod simplu în arduino, care a scos valorile ADC prin uart către terminal.

Const int termo_up = A2; //Intrare termistor cu pull-up la setup void pozitiv() ( Serial.begin(9600); ) void loop() ( int adc_value=analogRead(termo_up); Serial.print("ADC = "); Serial.println( adc_value) ; delay(500);

Apoi pur și simplu am luat apă de diferite temperaturi, am măsurat-o cu un termometru, am scufundat un termistor în ea și am înregistrat valorile ADC. Apoi am construit un grafic folosind aceste valori. A ieșit cam așa: (aceasta nu este versiunea finală, doar pentru claritate, dar forma graficului este aproximativ aceeași. Am corectat punctele rezultate care erau foarte departe de linie (ca să spunem așa, la general). tendinţă).

Am construit graficul online, ceea ce este foarte convenabil, puteți vedea valorile x și y în orice punct al graficului.

Ca rezultat, am compilat o serie de valori ADC în pași de un grad Celsius în intervalul de la 0 la 80 de grade:

//Matrice de valori ADC (crescătoare de la 0 la 80 de grade Celsius) int termo = (976,975,974,973,972,971,970,969,968,967,966,965,964,963,962,964,963,962,961,9,9,9,9,9,9,9,9,9 79805.800.795.790.785.780.776.771.766.761.755.748.741.733.727.720.712.703.693, 685.674.663.654.643);

Acum pentru niște electronice. Circuitul este destul de simplu, atmega8, cablaj, driver de releu sub forma ULN2803, display, manivela si termistor.

Câteva precizări. Picioarele atmega sunt marcate cu numele ieșirilor ambelor porturi ale controlerului și ale pinilor arduino (orice controler compatibil cu Arduino poate fi folosit). Există patru pini pentru relee doar pentru că este păcat pentru pinii liberi ai Atmega (puteți atașa ceva la ele în mod programatic). Pinii driverului sunt împerecheați pentru fiabilitate și, de asemenea, datorită redundanței lor. În loc de ULN2803, puteți folosi ULN2003 și altele asemenea, sunt un ansamblu de tranzistori Darlington, dacă doriți, puteți face pur și simplu comutatoare pe mosfet-uri cu canale n; Stabilizator de 5 volți - orice, puterea de intrare de 12 volți vă permite să instalați LM7805, am folosit ams1117-5.0 cu cădere scăzută, doar nu vă zgâriți cu condensatorii de filtru, puteți alimenta și ieșirea AVCC a atmega printr-o sufocare pentru a reduce ADC interferență. Dacă doriți, quartz poate fi instalat la 8 MHz, dar pentru aceasta trebuie să vă compilați hexul în Arduino sau pur și simplu să îl flash prin uart cu bootloader-ul corect.

Și, de fapt, programul. A fost scris, firesc, în mediul arduino, deoarece este foarte rapid și convenabil pentru un dispozitiv atât de simplu (nu trebuie să vă deranjați cu drivere pentru afișaj, ADC, uart etc.).

#include #definiți definițiile CLK 3//pini pentru TM1637 și pot fi schimbate în alte porturi #define DIO 4 TM1637 tm1637(CLK,DIO); //Matrice de valori ADC (crescătoare de la 0 la 80 de grade Celsius) int termo = (976,975,974,973,972,971,970,969,968,967,966,965,964,963,962,964,963,962,961,9,9,9,9,9,9,9,9,9 79805.800.795.790.785.780.776.771.766.761.755.748.741.733.727.720.712.703.693, 685.674.663.654.643); int cald = 20; // Variabilă care stochează valoarea nivelului de temperatură const int button1 = 13; //Pinul primului buton ("încălzire pornit/oprit") const int button2 = 12; //Pinul celui de-al doilea buton „+” const int button3 = 11; //Pinul celui de-al treilea buton "-" const int relay1 = 5; //Releu pini 1-4 const int relay2 = 6; //Îmi pare rău pentru picioarele libere ale MK și ULN2803 const int relay3 = 7; const int releu4 = 8; const int termo_up = A2; //Intrare termistor cu pull-up la const pozitiv int termo_down = A3; ////Intrare termistor cu setare de golire la masă() ( pinMode(19, INPUT_PULLUP); //Configurați picioare pentru intrări/ieșiri pinMode(18, INPUT_PULLUP); //Butoane cu pull-up pentru alimentare pinMode( 17, INPUT_PULLUP) ; relay1,LOW); //Dezactivați toate releele pentru orice caz digitalWrite(relay3,LOW) //Afișează valoarea variabilei „warm” () (if(digitalRead(button1)); =LOW)( //Dacă butonul 1 este apăsat în timp ce(digitalRead(button1)==LOW); //Așteptați până când este apăsat întârziere(20); nagrev(); //Mergeți la funcția de încălzire ) if(digitalRead( button2)==LOW)( //Dacă butonul 2 este apăsat în timp ce (digitalRead(button2)==LOW); //Așteptați până când este apăsat întârziere (20); cald=cald+1; //Adăugați 1 la cald variabilă if(warm>80)(warm=80;) //Verificați că nu depășește valorile noastre tm1637(); //Șterge afișajul tm1637_disp(); //Și afișați noua valoare cald pe ea) if(digitalRead(button3)==LOW)( //La fel cu butonul 2 while(digitalRead(button3)==LOW); delay(20); warm=warm-1; dacă (cald<0){warm=0;} tm1637.clearDisplay(); tm1637_disp(); } } void tm1637_disp(){ //Функция выводит на дисплей значение переменной warm if((warm/100)>0)( //Dacă cald este mai mare sau egal cu 100 tm1637.display(1,(warm/100)); //scrie sute pe locul 2 tm1637.display(2,((warm%100)/10) ); // scrie zeci în a 3-a cifră tm1637.display(3,((warm%100)%10)); //scrie unități în a 4-a cifră ) if((warm/100)==0) ((warm%100) /10)>0)( //dacă cald este mai mic de o sută tm1637.display(2,((warm%100)/10)); //zeci tm1637.display(3,(( warm%100)%10)); ) //unități else(tm1637.display(3,((warm%100)%10));) //dacă mai puțin de zece - numai unități ) ) void nagrev())( //Funcția de încălzire tm1637.display(0,0xc ); (termo_up); //Citiți valoarea ADC if((adc>termo))( //Dacă valoarea temperaturii este mai mică decât cea specificată digitalWrite(relay3,HIGH); //Porniți releul ) else if((adc);

După cum puteți vedea, codul are descrieri detaliate. Nu este nimic complicat în el, în ciclul principal butoanele sunt interogate, iar în funcția de încălzire ADC este interogat și comparat, în funcție de rezultatele cărora releul de încălzire este pornit sau oprit. Și există o funcție separată pentru afișarea informațiilor pe ecran. Deoarece codul este scris în Arduino, poate fi adaptat cu ușurință la orice afișaj (pentru care picioarele rămase sunt suficiente), puteți chiar să scoateți informații prin uart-ul computerului (ceea ce fac de obicei când depanez dispozitivele).

Și iată o fotografie a dispozitivului finit (releu și termistor de la distanță pe fire):

La finalul articolului voi atasa o schita arduino, HEX pentru atmega8 (16 MHz, FUSE: high - DC, low - BF), biblioteca pentru tm1637 si placa in layout (toate in arhiva).

Lista radioelementelor

Desemnare Tip Denumirea Cantitate NotaMagazinBlocnotesul meu
MK AVR pe 8 biți

ATmega8

1 tqfp32 La blocnotes
Tranzistor compozit

ULN2803

1 posibil uln2003 cu modificarea plăcii La blocnotes
Cr1 Cuarţ16 MHz1 La blocnotes
NTC1 TermistorNTC 100K1 Oricare este posibil La blocnotes
R1-R5 Rezistor

10 kOhm

5 La blocnotes
C1,C5 Condensator10 uF2 smd 0805