Arduino može poslužiti kao termometar koji izmjerenu temperaturu prikazuje na LCD display.Izbor LCD display-a ovisi o vrsti i opsegu podataka koji će biti prikazivani. Na slici ispod je primjer 16x2 LCD display-a koji u dva reda može prikazati po 16 znakova.
Na slici ispod je primjer Arduino termometra sa termistorom u AREF spoju koji izmjerenu temperaturu prikazuje na 16x2 LCD display-u.
Na slici ispod je LCD display 16x2 sa ispisanom jednom linijom teksta (od dvije moguće).
Svaki LCD display ima svoj raspored nožica tako da, tokom spajanja, treba obratiti pažnju na oznake napisane na pločici display-a.
Na slici lijevo je LCD display 16x2 sa oznakom 1602A (V2.0).
LCD display ima paralelni interface što znači da mikrokontroler istovremeno mora manipulisati sa više pinova.
To smanjuje broj senzora koji se mogu priključiti na Arduino jer samo LCD display zauzima šest pinova (ulaza/izlaza).
Za prikaz teksta na LCD display-u, prije svega, u sketch je potrebno uključiti biblioteku LiquidCrystal.h
Ispod je kôd sketch-a koji vrši mjerenje temperature pomoću termistora u AREF spoju ispis teksta na 16x2 LCD (kopirajte kompletan kôd ispod u Arduino IDE prozor i upload-ujte ga na Arduino) :
/*
* MJERENJE TEMPERATURE UZ POMOĆ TERMISTORA
* I PRIKAZ TEMPERATURE NA NA LCD
*
* Autor: Samir Gutić
* URL: http://amicus.ba
* Datum: 7. IV 2017.
*/
/*
Raspored pinova:
* LCD RS pin na digitalni pin 12
* LCD Enable pin na digitalni pin 11
* LCD D4 pin na digitalni pin 5
* LCD D5 pin na digitalni pin 4
* LCD D6 pin na digitalni pin 3
* LCD D7 pin na digitalni pin 2
* LCD R/W pin na masu
* Brisanje LCD-a, VO pin (pin 3)
*/
//Uključivanje biblioteke za upravljanje LCD-om
#include <LiquidCrystal.h>
float floatSuma;
float floatProsjek;
float floatOtpor;
float floatTemperatura;
//Vrijeme refreširanja prikaza temperature
#define intOdgoda 1000
//Pin za analogno očitavanje
#define pinAnalogTerm A1
//Vrijednost rednog otpornika u omima
#define redniOtpor 9900
//Broj očitavanja za računanje prosječne vrijednosti
#define intBrCitanja 5
//Otpor na 20.6 stepeni C
#define intTermistorNa25 12080
//Nominalna temperatura
#define intNominalnaTemp 20.6
//Beta koeficijent termistora (obično 3000-4000)
#define intBetaKoeficijent 4016.032
//Inicijalizacija biblioteke sa brojevima pinova LCD-a
LiquidCrystal lcdDisplay(12, 11, 5, 4, 3, 2);
void setup()
{
Serial.begin(9600);
//Spojiti AREF na 3.3V i koristiti za napajanje (manje smetnji nego na 5V)
analogReference(EXTERNAL);
}
void loop()
{
//Očitavanje vrijednosti sa termistora
floatSuma = 0;
for (int i=0; i<intBrCitanja; i++)
{
floatSuma = floatSuma+analogRead(pinAnalogTerm);
delay(10);
}
//Računanje prosječne vrijednosti u zadnjih intBrCitanja očitavanje
floatProsjek = floatSuma/intBrCitanja;
//Konverzija vrijednosti u otpor
floatOtpor = redniOtpor*floatProsjek/(1023-floatProsjek);
// Steinhart-Hart metod računanja
floatTemperatura = floatOtpor / intTermistorNa25; // (R/Ro)
floatTemperatura = log(floatTemperatura); // ln(R/Ro)
floatTemperatura = floatTemperatura/intBetaKoeficijent; // 1/B * ln(R/Ro)
floatTemperatura = floatTemperatura+1.0 / (intNominalnaTemp + 273.15); // + (1/To)
floatTemperatura = 1.0 / floatTemperatura; // Invertovati vrijednost
floatTemperatura = floatTemperatura-273.15; // Konverzija u stepene C
//Prikaz temperature na LCD
//Konfigurisanje broja vrsta i kolona LCD-a
lcdDisplay.begin(16, 2);
lcdDisplay.clear();
//Ispis poruke u prvu liniju
lcdDisplay.setCursor(0, 0);
lcdDisplay.print("Temperatura");
lcdDisplay.print((char)91);
lcdDisplay.print((char)223);
lcdDisplay.print("C");
lcdDisplay.print((char)93);
lcdDisplay.print(":");
//Prikaz temperature sa termistora
lcdDisplay.setCursor(5, 1);
lcdDisplay.print(floatTemperatura,1);
lcdDisplay.print((char)223);
lcdDisplay.print("C");
delay(intOdgoda);
}
Više datalja o termistoru možete pronaći u članku Arduino termistor termometar (AREF) sa upisom na SD karticu.
U sketch-u iznad se, u svakom ciklusu, vrši pet mjerenja te se od njih računa srednja vrijednost koja se koristi kao izmjerena vrijednost u tom ciklusu.
Za prikaz otvorene uglaste zagrade na LCD display-u koristiti sljedeću naredbu: lcdDisplay.print((char)91)
Za prikaz zatvorene uglaste zagrade na LCD display-u koristiti sljedeću naredbu: lcdDisplay.print((char)93)
Celzius znak (º) ćena LCD display-u biti prikazan pomoću naredbe: lcdDisplay.print((char)223);
Šema spoja elemenata kreirana u Fritzing programu je na slici ispod.
Potenciometar na šemi iznad služi za regulaciju osvijetljenosti LCD-a. Šema spajanja LCD-a 16x2 važi za display 16x2 (1602A).
Na šemi iznad su pinovi LCD-a označeni brojevima od 1 do 16 (sa donje strane pločice display-a).
Kao što se vidi sa šeme iznad, pin 1 LCD-a je spojen na GND, pin2 na +5V, pin3 na srednji kontakt potenciometra, pin 4 na Arduino pin 12, pin 5 na Arduino GND, pin 6 na Arduino pin 11, pin 11 na Arduino pin 5, pin 12 na Arduino pin 4, pin 13 na Arduino pin 3, pin 14 na Arduino pin 2, pin 15, preko otpornika od 220Ω na Arduino +5V i pin 16 na Arduino GND.
U tabeli ispod je raspored i funkcije pojedinih pinova LCD display-a.
Rb. |
LCD pin |
Funkcija LCD pina |
1 |
VSS |
Gnd |
2 |
VDD |
+5V |
3 |
VO |
Kontrast |
4 |
RS |
RS (Register Select Pin) |
5 |
RW |
R/W (Read/Write Pin) |
6 |
E |
E (Clock Enable Pin, enable signal) |
7 |
D0 |
Sabirnica za podatke |
8 |
D1 |
Sabirnica za podatke |
9 |
D2 |
Sabirnica za podatke |
10 |
D3 |
Sabirnica za podatke |
11 |
D4 |
Sabirnica za podatke |
12 |
D5 |
Sabirnica za podatke |
13 |
D6 |
Sabirnica za podatke |
14 |
D7 |
Sabirnica za podatke |
15 |
A |
+5V (LED+ za pozadinsku rasvjetu) |
16 |
K |
GND (LED- za pozadinsku rasvjetu) |
Električna šema spoja je na sljedećoj slici.
Ispod je video koji prikazuje kako funkcioniše termommetar sa termistorom i ispis temperature na LCD.
Potrebne komponente:
1 x Arduino UNO
1 x Breadboard (mala)
1 x otpornik 220Ω
1 x potenciometar 10KΩ
1 x LCD display 16x2 (1602A)
Žice za spajanje
9V napajanje