WelcomeHere.ro
NIVEL: INTERMEDIAR

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.

Schema circuitului stației meteo
  • 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(" %");
}