Ceas + termometru + higrometru cu Arduino si DHT11

Acesta este un proiectel mai vechi pe care l-am transpus intr-o forma noua cu ajutorul Shieldului Universal.

Pentru asta am folosit clona Arduino pe care am realizat-o pentru proiectul cu modulul GSM, pe care am transferat microcontrollerul ATMega328 aflat pe Arduino Uno care fusese programat in prealabil.

2015-01-13 20.53.00

Programul este unul foarte simplu:
/* Pentru citirea temperaturii si umiditatii cu ajutorul senzorului DHT11
si afisarea pe ecranul 16x2 i2c am folosit o parte din codul din link-ul de mai jos
http://arduino-info.wikispaces.com/PROJECT-Temp-Humidity-Display
Functiile adaugate au fost cea de afisare a orei
si de aprindere a ecranului la apasarea unui buton */
#include
#include
#include
#include "RTClib.h"

RTC_DS1307 RTC;

const int buttonPin = 2; //pinul la care este conectat butonul
int buttonState = 0;
dht11 DHT11;
#define DHT11PIN 8

byte termometru[8] = //pictograma pentru temperatura
{
B00100,
B01010,
B01010,
B01010,
B01110,
B11111,
B11111,
B01110
};

byte picatura[8] = //pictograma pentru umiditate
{
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110,
};

/*-----( Declarare obiecte )-----*/
// Se seteaza adresa, ordinea pinilor ecranului si iluminarea ecranului
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x20, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE);

void setup()
{

pinMode(buttonPin, INPUT); //se seteaza butonul ca dispozitiv de intrare
lcd.noBacklight(); //ecranul este stins

lcd.begin(16,2); // se initializeaza ecranul 16x2
lcd.backlight();
lcd.clear();

lcd.createChar(1,termometru);
lcd.createChar(2,picatura);

Wire.begin();

// Aceasta parte de cod a fost luata de pe http://tronixstuff.wordpress.com/
Wire.beginTransmission(0x68);
Wire.write(0x07); // move pointer to SQW address
Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave
Wire.endTransmission();
// http://tronixstuff.wordpress.com/

RTC.begin();
if (! RTC.isrunning()) {
Serial.println("Ceasul nu e prezent!");
// Urmatoarea linie seteaza automat ceasul RTC dupa ora computerului
RTC.adjust(DateTime(__DATE__, __TIME__));
}

}

void loop()
{

// se citeste starea butonului
buttonState = digitalRead(buttonPin);

// Se verifica daca butonul este apasat
// Daca este apasat, valoarea va fi LOW
if (buttonState == LOW) {
// se aprinde iluminarea ecranului pentru 3 secunde
lcd.backlight();
delay(3000);
}
else {
// apoi se stinge
lcd.noBacklight();
}

DateTime now = RTC.now();

int chk = DHT11.read(DHT11PIN);

lcd.setCursor(5, 0);
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print("");
lcd.print(now.minute(), DEC);

lcd.setCursor(1, 1);
lcd.write(1);
lcd.print(" ");
lcd.print((float)DHT11.temperature, 0); //se printeaza temperatura
lcd.print((char)223); //caracterul pentru grade
lcd.print("C");

lcd.setCursor(9, 1);
lcd.write(2);
lcd.print(" ");
lcd.print((float)DHT11.humidity, 0);//se printeaza umiditatea
lcd.print(" ");
lcd.print("%");
delay(1000);

}

Librariile folosite sunt DHT11,RTClib si NewLiquidCrystal.

Iata si cateva poze cu toata magaria functionala…

2015-01-13 20.53.50 2015-01-13 20.54.41

Anunțuri

Lasă un răspuns

Completează mai jos detaliile tale sau dă clic pe un icon pentru a te autentifica:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s