A hőmérő kapott egy kis Windows-os programot, lentebb letölthető.
Szerettem volna egy analóg kinézetű hőmérőt készíteni, a lehető legegyszerűbb módon. Egyúttal bemutatom a termisztor (hőre változó ellenállás) használatát Arduinoval. Egy miniatűr olcsó szervomotor mutatja az értékeket a skálán. A most bemutatott amolyan prototípus, idővel készül egy másik félméteres vagy nagyobb skála mérettel. (sokkal komolyabb motorral)
Mivel a legolvasottabb bejegyzés az oldalon a feszültségmérő készítése, remélem ez is olyan népszerű lesz.
Alkatrészek:
R1: 10K ellenállás
R2: 10K termisztor (NTCM-10K-B3380) egyéb típus is megfelel
Szervo 180 ° egy SG90 használtam, nem a pontosság csúcsa de a célnak megfelel.
Arduino Uno
Áramkör:
Program:
Mielőtt ismertetném a programot, amelyet fel kell tölteni az Arduinoba beszéljünk egy kicsit a működésről.
A termisztor, mint ahogy a neve is mondja, nem más mint egy hőre változó ellenállás. Nő vagy csökken az ellenállása a környezeti hőtől függően. Több típusa is létezik de ebbe most nem megyek bele, akit bővebben érdekel, olvassa el ezt a cikket itt.
A fenti képen látható R1-R2 ellenállás nem más mint egy feszültség osztó, és az A0 bemeneten feszültséget mérünk az Arduinoval. (analog-digitál átalakító egyik bemenete)
Mivel az R2 termisztor, ezért a mért feszültség változik a hőmérséklet arányában.
R1 értékét tudjuk, a mért feszültséget tudjuk, így visszaszámoljuk R2 értékét ohmban a terheletlen feszültségosztók képletével. Képletet át kell rendezni.
Ezt a mért ellenállást számoljuk vissza C° -ra a Steinhart-Hart képlet segítségével. (Mivel ők megcsinálták nekünk már könnyű dolgunk van. Tehát „óriások vállán állunk”. 😀 )
Aki részletesen szeretne ismerkedni vele megteheti itt.
T- hőmérséklet Kelvinben
A,B,C – Steinhart-Hart féle együtthatók
R- kiszámolt ellenállás
Kapott T értéket át kell váltanunk Celsiusba.
Jelen esetben egy szervót használok a hőmérséklet kijelzésére, egy analóg skálán. Fontosnak tartom megjegyezni hogy map() funkciót használok, ami csak fokos pontosságot fog adni, mert a kimenete egész szám, a bemenettől függetlenül. Tehát ha valaki nagyobb pontosságot szeretne, ne így váltsa át a Celsius fokot szervó szögre. 😀
Egyébként ezen a ponton használhatsz egy kijelzőt is, csak illesztened kell és hozzáadni a programhoz. Pl.: https://www.hirehamva.hu/wpblog/archivum/827
És akkor jöjjön a program.
#include <Servo.h>
int Lab = A0; //A/D átalakító A0 bemenete
float Homerseklet; //mért hőmérséklet
Servo szervo_ho;
int szervoSzog = 0;
boolean szervo_teszt = true;
const int szervoLab = 9; //szervo kimenet 9 láb
const float kalibracio = 1.00; //kalibráció a skálához képest Celsiusban
void setup() {
Serial.begin(9600); //soros kimenet inicializál
szervo_ho.attach(szervoLab); //szervo kimenet inicializál
}
void loop() {
//csak egy szervo teszt induláskor, jól jön skála rajzolásnál
if(szervo_teszt == true){
szervo_teszt = false;
for(int i=-10;i<=42;i++){
// Serial.println(i);
szervoSzog = map(i, -10, 42, 25, 180);
// Serial.println(szervoSzog);
szervo_ho.write(szervoSzog);
delay(100); // növeld 5000-re skála rajzoláshoz
}
}else{
Homerseklet=ho(Lab);
Serial.println(Homerseklet);
Homerseklet = Homerseklet + kalibracio;
szervoSzog = map(Homerseklet, -10, 42, 25, 180);
// Serial.println(szervoSzog);
szervo_ho.write(szervoSzog);
delay(2000);
}
}
//hőmérő funkció
float ho(int x){
int dc;
float R1 = 10000;
float logR2, R2, T, Tc, Tf;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;
dc = analogRead(x);
R2 = R1 * (1023.0 / (float)dc - 1.0); //terheletlen feszültségosztók képlete
logR2 = log(R2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2)); //Steinhart-Hart képlet
Tc = T - 273.15;//Kelvin átváltása Celsiusba
return Tc;
}
Windows program:
Ez egy kis Windows program, ami arra szolgál, hogy monitorozza ezt az Arduino alapú hőmérőt. Ha eléri a beállított hőmérsékletet e-mailt küld a beállított címre. Valamint beállított időközönként (5-60 perc) elküldi a mért adatot Nextcloud Analitics pluginjének.
OS: Windows 10, Windows 11