Am vrut sã scap de
cablarea cu fire multe dintre LCD şi Arduino şi mi-am propus sã fac o aplicaţie
cu interfaţa I2C.
Toate bune şi frumoase , pânã am instalat librãria LiquidCrystal_I2C şi am constatat cã
existã diferenţe faţã de LiquidCrytsal .
Am
încercat exemplele “CustomChars.ino” şi “Hello World.ino” din
LiquidCrystal_I2C;
Apoi , am încercat sã
adaptez la I2C şi exemplele din
LiquidCrystal, ca sã mã familiarizez cu
modul de lucru.
Si pentru cã aveam un
senzor LM50, am trecut la încercãri.
Ca întotdeauna, am
cãutat mai întîi pe modele lucrate de
altcineva – mi-am zis cã e mai
comod.
l-am încercat cu afişare pe SerialMonitor şi apoi l-am modificat la
afişarea pe LCD I2C.
Cea mai buna
bibliografie, pentru explicarea algoritmului
şi calculelor matematice este pe site-ul :
ttp://users.utcluj.ro/~rdanescu/pmp-c08.pdf
pagina 31.Tot de aici am preluat şi inaginea paginii 31, cu caracteristicile senzorului LM50 :
............................................................................................................................................
Conexiuni
De la modulul
I2c, pinul SDA la pinul A4 de la Ardu Uno
De la modulul
I2c , pinul SCL la pinul A5 Ardu Uno
De la
Brickul LM50, pinul Out la pinul A0 Ardu
Uno
GND –
este comun ; Vcc la +5v, comun
............................................................................................................................................
Codul modificat şi complectat (am blocat afişarea pe
Serial Monitor ) este redat mai jos :
//…………………………………
//temperaturaC_I2C.ino
//…………………………………
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// cu senzor brick LM 50
// am plecat de la schita de pe Robofun cu LM50 si
//http://users.utcluj.ro/~rdanescu/pmp-c08.pdf pagina 31
// am adaugat cod pentru afisare
pe LCD I2C 16x2
//.......................................
LiquidCrystal_I2C lcd(0x27,16,2);
// set the LCD address to 0x27 for a 16 chars and 2 line display
void setup(){
// Serial.begin(9600);
lcd.init(); // initialize the lcd
lcd.backlight();
// Print a message to the
LCD.
lcd.print("Temperatura:
");
}
void loop(){
Serial.print("Temperatura:
");
float temperatura =
readTempInCelsius(10,0); //apeleaza functia, cu 10 citiri pe pinul analg A0)
// functia returneaza media a 10 citiri succesive
lcd.setCursor(0,1);
lcd.print(temperatura);
lcd.setCursor ( 6, 1 ); // sare pe linia 2
lcd.print((char)223); // Tipareste cerculetul de la grade Celsius pe linia 2
lcd.setCursor ( 7, 1 ); // sare pe linia 2
lcd.print("C");
// Serial.print(temperatura);
// Serial.print(" ");
//Serial.write(176);
//Serial.println("C");
//delay(200);
delay(1000);
}
// functia pentru citirea temperaturii , referinte
:http://www.robofun.ro/senzor-temperatura-brick
//http://users.utcluj.ro/~rdanescu/pmp-c08.pdf exemplu pagina 31
float readTempInCelsius(int count, int pin) { //unde count= numarul de
citiri; la pin-ul specigicat-0
float sumaTemperatura;
for (int i =0; i <
count; i++) { // pentru i de la 1 la 10
int reading =
analogRead(pin); // citeste pinul analog
0
float voltage = reading
* 5.0; // 5 este rezolutia la tensiunea
de referinta 5V pt Arduino Uno
voltage /= 1024.0; //
imparte la rezolutie senzor
float
temperatureCelsius = (voltage - 0.5) * 100 ; //scade deplasament
sumaTemperatura =
sumaTemperatura + temperatureCelsius;
}
return sumaTemperatura
/ (float)count; //calculeaza media
}
Succes
la cine doreşte sã încerce !
Niciun comentariu:
Trimiteți un comentariu