Schema de conectare a senzorilor si a afisajului este:
Am facut niste teste, inclusiv un simbol grafic de casa:
si chiar o casa cu un cos de fum:
dupa cum se vede in filmuletul numit home vs outside temperature with LM335 and Arduino
Prima varianta de sketch, in care am folosit si crearea unui simbol (de fapt 2 pentru casuta), dupa cum este prezentat la http://arduino.cc/en/Reference/LiquidCrystalCreateChar:
/*original sketch by niq_ro (Nicu FLORICA) from http://nicuflorica.blogspot.com
version 1.1
program original scris de mine (niq_ro) versiounea 1.1
..............................................................*/
#include <LiquidCrystal.h>
// folosesc libraria pentru afisaje LCD simple
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
// indic modul de legare, vezi mai jos:
/* -------------------
| LCD | Arduino |
-------------------
LCD RS pin to digital pin 7 | RS | D7 |
LCD Enable pin to digital pin 6 | E | D6 |
LCD D4 pin to digital pin 5 | D4 | D5 |
LCD D5 pin to digital pin 4 | D5 | D4 |
LCD D6 pin to digital pin 3 | D6 | D3 |
LCD D7 pin to digital pin 2 | D7 | D2 |
LCD R/W pin to ground | R/W | GND |
-------------------
*/
// http://arduino.cc/en/Reference/LiquidCrystalCreateChar
byte smiley[8] = {
B00000,
B10001,
B00000,
B00000,
B10001,
B01110,
B00000,
};
byte home12[8] = {
B00001,
B00110,
B11000,
B00111,
B00100,
B00100,
B00111,
};
byte home22[8] = {
B10000,
B01100,
B00011,
B11100,
B00100,
B00100,
B11100,
};
// variables
// variabile
int t1, t2;
float t10, t20;
float t11, t21;
float t12, t22;
int temperaturePin1 = A0; // output from first LM335 is put at analog input no.0
int temperaturePin2 = A1; // output from second LM335 is put at analog input no.1
// cei 2 senzori de temperaturia LM335 sunt legati la pinii A0 si A1
// other
int led = 13; //pin for LED
void setup() {
lcd.createChar(0, smiley);
lcd.createChar(1, home12);
lcd.createChar(2, home22);
lcd.begin(16, 2); // set up the LCD's number of columns and rows:
pinMode(led, OUTPUT);
lcd.clear(); // clear the screen
lcd.setCursor(0, 0); // put cursor at colon 2 and row 0 = left/up
lcd.print("dual thermometer"); // print a text
lcd.setCursor(0, 1); // put cursor at colon 0 and row 0 = left/down
lcd.print("1.1 by niq_ro "); // print a text
lcd.write(byte(0));
delay (2000);
lcd.clear(); // clear the screen
} // END void setup
void loop(){
digitalWrite(led, HIGH);
// Read and store Sensor Data
t11=0;
t21=0;
//lcd.clear(); // clear the screen
for (int x=1; x <= 5; x++)
{
// calculate the value
t1 = analogRead(temperaturePin1); // read value from temperature from first sensor (LM335);
t10 = 100.0*(5.0*t1/1023-2.980)+25.0;
t11 = t10 + t11;
t2 = analogRead(temperaturePin2); // read value from temperature from second sensor (LM335);
t20 = 100.0*(5.0*t2/1023-2.980)+25.0;
t21 = t20 + t21;
delay (500);
}
t12 = t11/5.0 -2.0 ; // average and corrected temperature
t22 = t21/5.0 -1.0; // average and corrected temperature
/*
t1 = analogRead(temperaturePin1); // read value from temperature from first sensor (LM335);
t2 = analogRead(temperaturePin2); // read value from temperature from first sensor (LM335);
t10 = (100.0*(5.0*t1/1023.0-2.980)+25.0)-1.0; //
t20 = (100.0*(5.0*t2/1023.0-2.980)+25.0);
*/
lcd.setCursor(14, 0);
lcd.write(byte(1));
lcd.write(byte(2));
lcd.setCursor(3, 0);
lcd.print("t1=");
if (t12<10) lcd.print(" ");
if (t12>0.0) lcd.print("+");
lcd.print(t12,1);
lcd.write(0b11011111);
lcd.print("C");
lcd.setCursor(3, 1);
lcd.print("t2=");
if (t22<10) lcd.print(" ");
if (t22>0.0) lcd.print("+");
lcd.print(t22,1);
lcd.write(0b11011111);
lcd.print("C");
digitalWrite(led, LOW);
delay(1000);
}
Pentru a crea casuta, mi-am desenat casuta:
si, dupa cum am scris si inainte, m-am folosit de un exemplu de la Arduino de pe site:
// http://arduino.cc/en/Reference/LiquidCrystalCreateChar
#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
byte smiley[8] = {
B00000,
B10001,
B00000,
B00000,
B10001,
B01110,
B00000,
};
void setup() {
lcd.createChar(0, smiley);
lcd.begin(16, 2);
lcd.write(byte(0));
}
void loop() {}
La mine partea de definitie este:
respectiv in partea de setari:// partea din stanga
byte home12[8] = { B00001, B00110, B11000, B00111, B00100, B00100, B00111, };
// partea din dreapta
byte home22[8] = { B10000, B01100, B00011, B11100, B00100, B00100, B11100, };
void setup() {
lcd.createChar(1, home12);
lcd.createChar(2, home22);
Ulterior, am modificat "casa" si am schimbat modul de afisare:
- casuta cu animatie, din 2 caractere:
- casuta cu animatie, din 3 caractere:
- simbolul de grad, mai rotiunjit decat cel original:
- casuta cu animatie, din 2 caractere:
- casuta cu animatie, din 3 caractere:
- simbolul de grad, mai rotiunjit decat cel original:
Sketch-ul devine:
/*
original sketch by niq_ro (Nicu FLORICA) from http://nicuflorica.blogspot.com
version 1.4
program original scris de mine (niq_ro) versiounea 1.4
..............................................................*/
#include <LiquidCrystal.h>
// folosesc libraria pentru afisaje LCD simple
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
// indic modul de legare, vezi mai jos:
/* -------------------
| LCD | Arduino |
-------------------
LCD RS pin to digital pin 7 | RS | D7 |
LCD Enable pin to digital pin 6 | E | D6 |
LCD D4 pin to digital pin 5 | D4 | D5 |
LCD D5 pin to digital pin 4 | D5 | D4 |
LCD D6 pin to digital pin 3 | D6 | D3 |
LCD D7 pin to digital pin 2 | D7 | D2 |
LCD R/W pin to ground | R/W | GND |
-------------------
*/
// http://arduino.cc/en/Reference/LiquidCrystalCreateChar
byte home13[8] = {
B00011,
B00100,
B01000,
B11111,
B01000,
B01000,
B01111,
};
byte home23[8] = {
B00000,
B10110,
B01110,
B11111,
B00100,
B00100,
B11100,
};
byte home33[8] = {
B00011,
B10110,
B01110,
B11111,
B00100,
B00100,
B11100,
};
byte home03[8] = {
B11111,
B00000,
B00000,
B11111,
B00000,
B00000,
B11111,
};
byte grad[8] = {
B00100,
B01010,
B00100,
B00000,
B00000,
B00000,
B00000,
};
// variables
// variabile
int t1, t2;
float t10, t20;
float t11, t21;
float t12, t22;
int temperaturePin1 = A0; // output from first LM335 is put at analog input no.0
int temperaturePin2 = A1; // output from second LM335 is put at analog input no.1
// cei 2 senzori de temperaturia LM335 sunt legati la pinii A0 si A1
// other
int led = 13; //pin for LED
void setup() {
lcd.createChar(0, grad);
lcd.createChar(1, home13);
lcd.createChar(2, home23);
lcd.createChar(3, home33);
lcd.createChar(4, home03);
lcd.begin(16, 2); // set up the LCD's number of columns and rows:
pinMode(led, OUTPUT);
lcd.clear(); // clear the screen
lcd.setCursor(0, 0); // put cursor at colon 2 and row 0 = left/up
lcd.print("dual thermometer"); // print a text
lcd.setCursor(1, 1); // put cursor at colon 0 and row 0 = left/down
lcd.print("1.4 by niq_ro"); // print a text
delay (2000);
lcd.clear(); // clear the screen
} // END void setup
void loop(){
digitalWrite(led, HIGH);
// Read and store Sensor Data
t11=0;
t21=0;
//lcd.clear(); // clear the screen
for (int x=1; x <= 5; x++)
{
// calculate the value
t1 = analogRead(temperaturePin1); // read value from temperature from first sensor (LM335);
t10 = 100.0*(5.0*t1/1023-2.980)+25.0;
t11 = t10 + t11;
t2 = analogRead(temperaturePin2); // read value from temperature from second sensor (LM335);
t20 = 100.0*(5.0*t2/1023-2.980)+25.0;
t21 = t20 + t21;
delay (500);
}
t12 = t11/5.0 -2.0 ; // average and corrected temperature
t22 = t21/5.0 -1.0; // average and corrected temperature
/*
t1 = analogRead(temperaturePin1); // read value from temperature from first sensor (LM335);
t2 = analogRead(temperaturePin2); // read value from temperature from first sensor (LM335);
t10 = (100.0*(5.0*t1/1023.0-2.980)+25.0)-1.0;
t20 = (100.0*(5.0*t2/1023.0-2.980)+25.0);
*/
lcd.setCursor(2, 0);
lcd.write(byte(1));
lcd.write(byte(4));
lcd.write(byte(3));
lcd.print(":");
// lcd.print("t1=");
if (t12<10) lcd.print(" ");
if (t12>0.0) lcd.print("+");
lcd.print(t12,1);
// lcd.write(0b11011111);
lcd.write(byte(0));
lcd.print("C");
lcd.setCursor(2, 1);
lcd.print("ext:");
// lcd.print("t2=");
if (t22<10) lcd.print(" ");
if (t22>0.0) lcd.print("+");
lcd.print(t22,1);
// lcd.write(0b11011111);
lcd.write(byte(0));
lcd.print("C");
digitalWrite(led, LOW);
delay(500);
lcd.setCursor(4, 0);
lcd.write(byte(2));
}
Am facut un filmulet, numit home vs outside temperature with LM335 and Arduino (II):
15.10.2013
M-am gandit sa fac un simbol pentru exterior si am facut un copac din 2 bucati (5 coloane si 8 randuri, anterior faceam cu 7 randuri), apoi am micsorat casuta ca parea hala...
Dupa ce am (re)vazut articolul LM335 + Arduino temperature sensor de la Legwinskij's Gadgets am refacut si eu simbolul de la grad:
Ultima varianta este prezentata in filmuletul home vs outside temperature with LM335 and Arduino (III):
Niciun comentariu:
Trimiteți un comentariu