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.