Proiect: Mini-Stație Meteo cu Arduino și LCD
Trecem la nivelul următor! În acest proiect vom combina un senzor cu un ecran pentru a crea un dispozitiv independent care afișează temperatura și umiditatea în timp real.
Componente Necesare
- 1x Placă Arduino
- 1x Senzor de temperatură și umiditate DHT11
- 1x Ecran LCD 16x2 cu modul I2C
- 1x Breadboard și fire de legătură
Despre Componente
Senzorul DHT11 este un senzor digital ieftin și popular care poate măsura atât temperatura, cât și umiditatea relativă a aerului. Comunică cu Arduino printr-un singur pin de date.
Ecranul LCD cu modul I2C este un display standard, dar are un mic modul atașat pe spate. Acest modul simplifică enorm conexiunile: în loc de 6-8 fire, vom avea nevoie de doar 4 fire pentru a controla ecranul (VCC, GND, SDA, SCL), datorită protocolului de comunicare I2C.
Asamblarea Circuitului
Conexiunile sunt simple datorită modulului I2C.
- Ecran LCD: Conectează VCC la 5V, GND la GND, SDA la pinul A4 (SDA) al Arduino, și SCL la pinul A5 (SCL).
- Senzor DHT11: Conectează pinul de alimentare la 5V, pinul de masă la GND, iar pinul de date la pinul digital 2 al Arduino.
Codul Sursă și Bibliotecile
Acest proiect necesită două biblioteci externe: una pentru ecranul LCD I2C și una pentru senzorul DHT. Le puteți instala din Arduino IDE mergând la Tools > Manage Libraries... și căutând "LiquidCrystal I2C" și "DHT sensor library" de la Adafruit.
// Includem bibliotecile necesare
#include
#include
#include "DHT.h"
// Definim pinii si tipul senzorului
#define DHTPIN 2 // Pinul de date al senzorului DHT11
#define DHTTYPE DHT11 // Specificam ca folosim un DHT11
// Initializam senzorul
DHT dht(DHTPIN, DHTTYPE);
// Initializam ecranul LCD la adresa I2C 0x27, cu 16 coloane si 2 randuri
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Initializam ecranul LCD si pornim lumina de fundal
lcd.init();
lcd.backlight();
// Initializam senzorul DHT
dht.begin();
// Afisam un mesaj de start
lcd.setCursor(0, 0);
lcd.print("Statie Meteo");
delay(2000);
lcd.clear();
}
void loop() {
// Asteptam cateva secunde intre masuratori
delay(2000);
// Citim umiditatea si temperatura
float h = dht.readHumidity();
float t = dht.readTemperature();
// Verificam daca citirile au reusit
if (isnan(h) || isnan(t)) {
lcd.setCursor(0, 0);
lcd.print("Eroare citire");
lcd.setCursor(0, 1);
lcd.print("senzor!");
return;
}
// Curatam ecranul si afisam datele
lcd.clear();
// Afisam temperatura pe primul rand
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" C");
// Afisam umiditatea pe al doilea rand
lcd.setCursor(0, 1);
lcd.print("Umid: ");
lcd.print(h);
lcd.print(" %");
}