IX. TavIR programozói verseny: Szabó Gábor (Tonic): LCD hőmérő
A program a Steinhart-Hart hőmérő egyenletet használja.
A termiszor hőmérséklet-ellenjállás grafikonján jól látható a hőmérőm elektromos ellenállás tulajdonsága külöböző hőfokon. (A Steinhart-Hart hőmérő egyenlet bővebben: http://elfiz2.kee.hu/jegyzet/labor01.pdf)
Elfut bármelyik Arduinon azaz UNO-tól a Mega2560-ig, de nekem csak 2560 Mega-val volt alkalmam kipróbálni. Más méretű LCD-n is elfut csak ahhoz át kell egy kicsit írogatni a programot....
Az LCD-s hőmérő
A program több verzióban létezett:
- Sorosportos
- LCD ékezet nélkül
- LCD ékezettel
A program másodpercenként kétszer ellenőrziés kijelzi a hőmérsékletet.
Hozzávalók
Alkatrészlista
- 2x 10 kohm ellenállás,
- 16x2 karakteres LCD kijelző,
- Arduino és USB kábel,
- 10 kohm ellenállású thermistor,
- Vezetékek,
- Próbapanel,
- Potenciométer
A Program
#include <math.h>
// A matek konyvtarat
#include "LiquidCrystal.h"
// A LiquidCrystal konyvtarat hasznaljuk
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);
// Az LCD bekotes a labak:
// R(D4), E(D5), D4(D6) ,D5(D7), D6(D8), D7(D9)
byte e1[8] = {B10,B100,B1110,B10001,B11111,B10000,B1110};
byte o3[8] = {B1010,B1010,B0,B1110,B10001,B10001,B1110};
//Beallitjuk az ekezetes karaktereket
double Thermister(int RawADC) {
double Temp;
Temp = log(((10240000/RawADC) - 10000));
// 10K Ohm hoellenallas.
//Ahogy számolunk: Ellenállás =
(1024 * BalanceResistor/ADC) - BalanceResistor
Temp = 1 / (0.001129148 + (0.000234125 * Temp) +
+ (0.0000000876741 * Temp * Temp * Temp));
Temp = Temp - 273.15;
// Convert Kelvin to Celcius
return Temp;
}
void setup() {
lcd.createChar(1, e1);
lcd.createChar(4, o3);
// Tarsitjuk a szamokhoz
lcd.begin(16, 2);
//Az LCD 2 sor, 16 oszlopos
lcd.print(" Homerseklet:");
//LCD-re kiirunk szoveget
}
void loop() {
lcd.setCursor(3, 0);
//Kurzor 1. sor 4. karalternel
lcd.write(4);
//A't irjuk hosszu o"
lcd.setCursor(5, 0);
//Kurzor 1. sor 6 karalternel
lcd.write(1);
//Atirjuk az e betut e'-re
lcd.setCursor(8, 0);
//Kurzor 1.sor 9. karakternel
lcd.write(1);
//Atirjuk az e betut e'-re
lcd.setCursor(11, 1);
//Kurzor 2.sor 12. karakternel
lcd.print("C");
//C bertu kifirkalas
lcd.setCursor(10, 1);
//Kurzor a 2.sor 11. karakternel
lcd.print((char)223);
//Fokjel elohivasa a memoriabaol
lcd.setCursor(4, 1);
//Kurzor a 2.sor 4. karakternel
lcd.print(double(Thermister(analogRead(0))));
// Kiirjuk a homerseklete
delay(500);
//Fel masodpercet varunk
}
Szabó Gábor (Tonic)
TavIR-Facebook