Merjenje in prikaz temperature na LCD
Izdelali bomo melilnik temperature. Izmerjena temperatura naj se prikazuje v stopinjah Celzija (°C) in v stopinjah Fahrenheita (°F) na LCD prikazovalniku in na serijskem monitorju in naj se osvežuje vsake pol sekunde.
Za merjenje temperature bomo uporabili temperaturni senzor LM35. Deluje v območju -55°C do 150°C. Napetost na izhodu senzorja je linearno odvisna od temperature in se spreminja za 10 mV/°C. Pri temperaturi 25°C znaša izhodna napetost temperaturnega senzorja LM35 250 mV (datasheet za LM35). Z višanjem temperature izhodna napetost senzorja narašča in pri temperaturi 150°C znaša 1500 mV oziroma 1,5 V.
Slika 1: Temperaturni senzor LM35 (vir: http://www.mileti.com.ar/hoy/?p=413, 19. oktober 2014).
Slika 2: Sestava elementov na eksperimentalno ploščico in priključitev na razvojno ploščo Intel Galileo.
//Program za merjenje in prikaz temperature s temperaturnim senzornjem LM35:
/*
Merjenje temperature s temperaturnim senzorjem LM35.
Prikaz naslova in temperature v °C in °F na LCD displayu 2x16 ter prikaz izmerjene temperature na
serijskem monitorju.
Avtor: Milan Ivič, oktt. 2014
*/
#include <LiquidCrystal.h> //Knjižnica za LCD prikazovalnik
/* Priključitev LCD displaya:
RS: Pin2
EN: Pin3
D4: Pin5
D5: Pin6
D6: Pin8
D7: Pin9
*/
//Deklariranje spremenljivk
float tempC;
float tempF;
int tempPin = A5; //Temp. senzor je priključen na pin A5
LiquidCrystal lcd(2,3,5,6,8,9); //Objekt za LCD
void setup()
{
Serial.begin(9600); //Odpiranje serijskega porta za komunikacijo z Intel Galileo
lcd.begin(16,2); //LCD 2x16 => dve vrsti vsaka po 16 znakov
lcd.setCursor(5,0);
lcd.print("SERS"); //Izpis v prvi vrstici od znaka 6 naprej (prvi znak je znak 0)
lcd.setCursor(4,1);
lcd.print("MARIBOR"); //Izpis v drugi vrstici od znaka 5 naprej (prvi znak je znak 0)
delay(2000); //Napis se po dveh sekundah izbriše
lcd.clear();
lcd.setCursor(2,0);
lcd.print("Merjenje");
lcd.setCursor(1,1);
lcd.print("temperature");
delay(2000);
lcd.clear();
}
//Zanka za krmiljenje, ki se neprestano ponavlja:
void loop()
{
tempC = analogRead (tempPin); //Branje na temp pinu in pošiljanje vrednosti v spremenljivko tempC
tempC = (5.0*tempC*100)/1024.0; //LM35 ima občutljivost 10 mV/°C, karakteristika je linearna
tempF = ((tempC*9)/5 + 32); //Pretvorba v °F (stopinje Fahrenheita)
//Izpis na serijski monitor:
Serial.print("Temperatura: ");
Serial.print(tempC);
Serial.print(" ");
Serial.print((char)42);
Serial.print("C ");
Serial.print(tempF);
Serial.print(" ");
Serial.print((char)42);
Serial.print("F");
Serial.println(); //Naslednji podatek piši v novo vrstico
//Izpis na LCD prikazovalnik:
lcd.setCursor(1,0);
lcd.print("Temperatura:");
lcd.setCursor(0,1);
lcd.print(tempC);
lcd.setCursor(5,1);
lcd.print((char)223); //Simbol za ° (ASCII)
lcd.setCursor(6,1);
lcd.print("C");
lcd.setCursor(9,1);
lcd.print(tempF);
lcd.setCursor(14,1);
lcd.print((char)223); //Simbol za ° (ASCII)
lcd.setCursor(15,1);
lcd.print("F");
delay(500);
}
Pretvorba temperature iz °C v °F:
Če hočemo pretvoriti temperaturo iz °C v °F moramo vrednost temperature v °C pomnožiti z 9/5 in prišteti 32.
Temperatura 20 °C je enaka 68 °F.
Opis programa:
V program moramo vključiti knjižnico za LCD prikazovalnik. Spremenljivki tempC in tempF so tipa float, ker bomo prikazovali temperaturo z realnimi števili (števili z decimalno vejico).
LCD prikazovalnik (2 vrstici po 16 znakov) bomo priključili na razvojno plošči Intel galileo po naslednjem razporedu:
RS (Priključek 4 na LCD-displayu): Pin2
EN (Priključek 6 na LCD-displayu): Pin3
D4 (Priključek 11 na LCD-displayu): Pin5
D5 (Priključek 12 na LCD-displayu): Pin6
D6 (Priključek 13 na LCD-displayu): Pin8
D7 (Priključek 14 na LCD-displayu): Pin:9
V funkciji void setup(), ki se izvede 1-krat odpremo serijsko komunikacijo z razvojno ploščo Intel Galileo ter zapišemo napise, ki se pojavijo na LCD prikazovalniku ob vklopu oziroma resetiranju. V prvi vrstici se naj izpiše SERS, v drugi pa MARIBOR. Po preteku dveh sekund se napis spremeni, v prvi vrstici se izpiše Merjenje v drugi pa temperature. Po preteku dveh sekund se na LCD prikazovalniku začnejo izpisovati temperature v °C in °F.
V glavni zanki void loop(), ki se neprestano ponavlja, najprej beremo vrednost na analognem pinu A5, kamor je priključen temperaturni senzor LM35. To vrednost shranjujemo v spremenljivko tempC. V tej spremenljivki je shranjena binarna vrednost. Pri temperaturi 25 °C je ta vrednost 51 decimalno oziroma 0000110011 binarno, ker temperaturni senzor LM35 pri temperaturi 25 °C na svojem izhodu da napetost 250 mV:
5000 mV => 1023(10) => 1111111111(2)
250 mV => 51(10) => 0000110011(2)
Nato binarno vrednost temperature spremenimo v decimalno vrednost in jo shranimo nazaj v spremenljivko tempC:
tempC = (5.0*tempC*100)/1024.0
Pri temperaturi 25 °C je ta sprememba:
tempC = (5,0*51*100)/1024 = 25 °C
Nato izračunamo še temperaturo v °F in jo shranimo v spremenljivko tempF.
Za izpis na serijski monitor in na LCD prikazovalnik smo uporabili še tip char, ki nam ob ustreznem številskem podatku (parametru) izpiše ustrezni znak po ASCII tabeli. Znak 42 iz ASCII tabele je zvezdica (*), znak 223 pa znak za stopinje (glej sliko 4), ki se prikaže na LCD prikazovalniku pred C in pred F. ASCII (angl. American Standard Code for Information Interchange) je ameriški standardni nabor za izmenjavo informacij.
Prikaz merjenih temperatur na serijskem monitorju v °C in °F:
Slika 3: Prikaz merjenih podatkov na serijskem monitorju.
Slika 4: Prikaz sestavljenega vezja na eksperimentalni ploščici, povezanega z razvojno ploščo Intel Galileo.