Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino - tutorijali, pitanja, primjeri i projekti
#11
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 :

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 Smile

Reply


Messages In This Thread
RE: Arduino - tutorijali, pitanja, primjeri i projekti - by gigabyte091 - 12-13-2014, 09:39 AM

Forum Jump:


Users browsing this thread: 18 Guest(s)