12-13-2014, 09:39 AM
Evo ovdje stavljam prvi kompletiran Arduino projekt, radi se o termometru unutarnje temperature.
Koristio sam Arduino Uno, LM35DZ temperaturni senzor te LCD 16×2 baziran na Hitacijevom HD44780 LCD kontroleru.
Sam senzor mjeri od +2 do +150 stupnjeva, a u mojem projektu mjeri od +5 do +30, pošto je ovo zasad samo termometar unutarnje temperature, više i niže temperature nisu potrebne, zato moj program izbacuje poruke: "Temperatura previsoka !" za temperaturu iznad 30 stupnjeva i "Temperatura preniska !" za temperaturu ispod 4-5 stupnja.
LCD radi u 4 bitnom načinu rada, može raditi i u 8 bitnom, ali ne vidim potrebu za time, samo bi si bezveze dodatna 4 pina zauzeli .
Evo i koda programa za one koji bi željeli isprobati :
U početku sam koristio naredbu map i switch case ali sam se ipak odlučio za if i if else jer sam imao neke nestabilnosti pri nižim temperaturama dok sam koristio RGY ledicu za indikaciju temperature.
Formula za prikaz točne temperature je: (5.0 * 1000 / 1024) / 10, gdje je 5.0 napon napajanja (ja sam korisio 4.5V jer mi tolko dolazi na senzor), 1000 je ovdje da bi se volti pretvorili u milivolte, a 1024 je maksimalna vrijednost koju ADC od Arduina može prikazati (8 bit), a 10 je konstanta (10mV po °C) i za 4.5V napajanje je rezultat 0.439453125
Jedino sam mislio sve funkcije razdvojit u svoje petlje pa ih onda nakraju sjediniti u void loop(). Preglednosti radi.
Morao sam se malo poigrati dok nisam uspio sve moguće probleme riješiti, a bilo ih je tipa da poslije blinkajućih poruka display se jednostavno ugasio, a to sam rješio sa lcd.display() poslije delay-a u glavnom djelu programa koji ispisuje temperaturu. Onda je bilo i problema za zaostalim slovima, pa je poslije Ugodno došlo Toplo pa je zadnje o ostalo i onda je pisalo Toploo.
Sada mi je plan uzeti par displaya, jedna sa RGB osvjetljenjem pa malo se time igrati i uzeti 20×4 LCD.
Evo jedan video da vidite termometar u funkciji, svi savjeti i kritike dobrodošli
Koristio sam Arduino Uno, LM35DZ temperaturni senzor te LCD 16×2 baziran na Hitacijevom HD44780 LCD kontroleru.
Sam senzor mjeri od +2 do +150 stupnjeva, a u mojem projektu mjeri od +5 do +30, pošto je ovo zasad samo termometar unutarnje temperature, više i niže temperature nisu potrebne, zato moj program izbacuje poruke: "Temperatura previsoka !" za temperaturu iznad 30 stupnjeva i "Temperatura preniska !" za temperaturu ispod 4-5 stupnja.
LCD radi u 4 bitnom načinu rada, može raditi i u 8 bitnom, ali ne vidim potrebu za time, samo bi si bezveze dodatna 4 pina zauzeli .
Evo i koda programa za one koji bi željeli isprobati :
Code:
#include<LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
byte stupanj[8] = {
B00100,
B01010,
B00100,
B00000,
B00000,
B00000,
B00000,
};
byte slovo[8] = {
B00010,
B00100,
B01110,
B10001,
B10000,
B10001,
B01110,
B00000,
};
byte slovo2[8] = {
B01010,
B00100,
B01110,
B10001,
B10000,
B10001,
B01110,
B00000,
};
const int lm35 = A0;
float temp = 0;
void setup(){
lcd.begin(16,2);
lcd.createChar(0, stupanj);
lcd.createChar(2, slovo2);
lcd.setCursor(3, 0);
lcd.print("Termometar");
delay(3000);
lcd.setCursor(2, 1);
lcd.print("Verzija 2.0 ");
delay(3000);
lcd.clear();
delay(500);
lcd.display();
lcd.setCursor(0, 0);
lcd.print("Senzor: LM35DZ");
lcd.setCursor(0, 1);
lcd.print("Veli");
lcd.setCursor(4, 1);
lcd.write(2);
lcd.setCursor(5, 1);
lcd.print("ina: 5.692b");
delay(3500);
lcd.clear();
delay(500);
}
void loop(){
temp = analogRead(lm35);
temp = temp * 0.439453125;
lcd.setCursor(0, 0);
lcd.print("Temperatura sobe ");
lcd.setCursor(2, 1);
lcd.print(temp,1);
lcd.setCursor(6, 1);
lcd.write(byte(0));
lcd.setCursor(7, 1);
lcd.print("C");
lcd.setCursor(8, 1);
lcd.print(" ");
delay(200);
lcd.display();
if(temp > 21){
lcd.setCursor(10, 1);
lcd.print("Toplo");
lcd.setCursor(15, 1);
lcd.print(" ");
} else if(temp < 21 && temp > 19.5){
lcd.setCursor(10, 1);
lcd.print("Ugodno");
} else{
lcd.setCursor(10, 1);
lcd.print("Hladno");
}
if(temp > 28){
lcd.createChar(1, slovo);
lcd.setCursor(10, 1);
lcd.print("Vru");
lcd.setCursor(13, 1);
lcd.write(1);
lcd.setCursor(14, 1);
lcd.print("e");
lcd.setCursor(15, 1);
lcd.print(" ");
}
if(temp > 30){
lcd.display();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("Temperatura");
lcd.setCursor(3, 1);
lcd.print("previsoka!");
delay(2000);
lcd.noDisplay();
delay(2000);
}
if(temp < 3){
lcd.display();
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("Temperatura");
lcd.setCursor(3, 1);
lcd.print("preniska!");
delay(2000);
lcd.noDisplay();
delay(2000);
}
}
U početku sam koristio naredbu map i switch case ali sam se ipak odlučio za if i if else jer sam imao neke nestabilnosti pri nižim temperaturama dok sam koristio RGY ledicu za indikaciju temperature.
Formula za prikaz točne temperature je: (5.0 * 1000 / 1024) / 10, gdje je 5.0 napon napajanja (ja sam korisio 4.5V jer mi tolko dolazi na senzor), 1000 je ovdje da bi se volti pretvorili u milivolte, a 1024 je maksimalna vrijednost koju ADC od Arduina može prikazati (8 bit), a 10 je konstanta (10mV po °C) i za 4.5V napajanje je rezultat 0.439453125
Jedino sam mislio sve funkcije razdvojit u svoje petlje pa ih onda nakraju sjediniti u void loop(). Preglednosti radi.
Morao sam se malo poigrati dok nisam uspio sve moguće probleme riješiti, a bilo ih je tipa da poslije blinkajućih poruka display se jednostavno ugasio, a to sam rješio sa lcd.display() poslije delay-a u glavnom djelu programa koji ispisuje temperaturu. Onda je bilo i problema za zaostalim slovima, pa je poslije Ugodno došlo Toplo pa je zadnje o ostalo i onda je pisalo Toploo.
Sada mi je plan uzeti par displaya, jedna sa RGB osvjetljenjem pa malo se time igrati i uzeti 20×4 LCD.
Evo jedan video da vidite termometar u funkciji, svi savjeti i kritike dobrodošli