Inainte de a incepe, lasa-ma sa iti explic cateva detalii despre acest proiect. Am construit un sistem de monitorizare a temperaturii si umiditatii, care afiseaza aceste valori pe un display LED 4x7 segmente de 0.56", catod comun. Acest tip de display este perfect pentru afisarea clara si usor de citit a valorilor numerice si a caracterelor simple.
Ce face acest display special?
Display-ul LED 4x7 segmente este ideal pentru proiectele care necesita afisarea datelor intr-un format vizibil si ordonat. Dimensiunea de 0.56" este potrivita pentru a vizualiza informatiile chiar si de la o distanta mai mare, iar tehnologia de catod comun faciliteaza conexiunile in proiecte cu mai multi segmenti LED. Fiecare dintre cele patru cifre poate afisa numere de la 0 la 9, iar prin ajustarea adecvata a conexiunilor, pot fi afisate si unele litere simple.
Acest display va fi folosit pentru a afisa valorile masurate de senzorul DHT11, astfel incat sa poti urmari in timp real temperaturile si umiditatea din mediul inconjurator.
Senzorul DHT11 este capabil sa masoare temperaturi de la 0°C la 50°C, cu o precizie de ±2.0°C, si umiditatea in intervalul 20% - 90%, cu o precizie de ±5%. Este important de stiut ca DHT11 are o rata de esantionare de 1Hz, ceea ce inseamna ca trebuie sa astepti cel putin o secunda intre fiecare citire a senzorului pentru a obtine valori corecte.
Despre Display LED, 4*7 segmente, 0.56", catod comun
Pinii A, B, C, D, E, F și G de la un display LED 4x7 segmente cu anod comun corespund segmentilor individuali ai fiecarei cifre afisate. Fiecare dintre acesti pini controleaza un segment specific al cifrei pentru a crea numere sau litere atunci cand segmentele respective sunt activate. Pinii D1, D2, D3 si D4 corespund celor 4 cifre individuale de pe display.
Componente necesare
In continuare, pentru a putea construi acest tip de proiect vei avea nevoie de:
- 1 x placa de dezvoltare compatibila Arduino Uno R3
- 1 x modul senzor de temperatura si umiditate DHT11
- 1 x Display LED, 4*7 segmente, 0.56", catod comun
- 18 fire Dupont tata - tata
- 1 x Breadboard 830 puncte MB-102
- 4 rezistori de 220Ω
Scheme de conectare
Pentru modulul senzor de temperatura si umiditate DHT11 conecteaza pinul S la portul digital 9 Arduino, pinul din mijloc la pinul de 5V al placii de dezvoltare Arduino si ultimul pin la pinul GND al placii de dezvoltare Arduino.
Exemplu cod
In acest proiect, vei folosi biblioteca DHT pentru senzorul de temperatura si umiditate DHT11, pe care o poti descarca de AICI.
Pentru a adauga biblioteca in mediul de dezvoltare Arduino IDE, deschide programul si mergi la meniul Sketch. Acolo, selecteaza Include Library, apoi alege Add .ZIP Library. Gaseste fisierul .zip al bibliotecii DHT si selecteaza-l. Odata ce ai deschis fisierul .zip, asteapta cateva momente, iar cand procesul de instalare se finalizeaza cu succes, vei vedea un mesaj in partea de jos a ferestrei care confirma ca biblioteca a fost adaugata.
Dupa ce ai realizat circuitul si ai descarcat cu succes biblioteca DHT, e timpul sa introduci codul furnizat mai jos! Conecteaza placa de dezvoltare compatibila Arduino Uno la computer folosind portul USB. Apoi, mergi la meniul Tools si selecteaza tipul de placa si portul serial pe care il folosesti (optiunile Board si Port).
Pentru a incarca codul pe placa, apasa butonul Upload Upload (simbolul cu sageata spre dreapta). In partea de jos a ferestrei, vei putea urmari mesajele de stare: Compiling Sketch, Uploading si Done. Odata ce incarcarea s-a finalizat cu succes, placa Arduino va incepe sa ruleze codul pe care l-ai incarcat.
#include "DHT.h"
// Definire pinii senzorului DHT11
#define DHTPIN 9
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// Definire pinii pentru segmentele display-ului LED
int a = 2; // Segmentul A
int b = 3; // Segmentul B
int c = 4; // Segmentul C
int d = 5; // Segmentul D
int e = 6; // Segmentul E
int f = 7; // Segmentul F
int g = 8; // Segmentul G
// Pinii pentru digiti (D1, D2, D3, D4)
int digitPins[] = {13, 12, 11, 10};
void setup() {
// Inițializează pinii pentru segmente și digiti
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
}
// Inițializează senzorul DHT
dht.begin();
}
// Funcție simplă pentru a afișa o cifră pe 7 segmente
void displayDigit(int digit) {
switch (digit) {
case 0: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, LOW); break;
case 1: digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); break;
case 2: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, LOW); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, LOW); digitalWrite(g, HIGH); break;
case 3: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, HIGH); break;
case 4: digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); break;
case 5: digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); break;
case 6: digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); break;
case 7: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); break;
case 8: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); break;
case 9: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); break;
}
}
void loop() {
// Citește temperatura și umiditatea
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Verifică dacă citirile sunt valide
if (isnan(temperature) || isnan(humidity)) {
// Dacă este o eroare, stinge display-ul
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], HIGH); // Oprește toți digiti
}
return;
}
// Extrage cifrele pentru temperatura și umiditatea
int tempInt = (int)temperature;
int humInt = (int)humidity;
int digits[] = {tempInt / 10, tempInt % 10, humInt / 10, humInt % 10}; // Extrage fiecare cifră
// Afișează cifrele timp de 5 secunde
for (int t = 0; t < 500; t++) {
for (int i = 0; i < 4; i++) {
// Dezactivează toți digiti
for (int j = 0; j < 4; j++) {
digitalWrite(digitPins[j], HIGH); // Oprește digiti
}
// Afișează cifra corespunzătoare
displayDigit(digits[i]);
// Activează digitul curent
digitalWrite(digitPins[i], LOW);
delay(5); // Pauză scurtă pentru multiplexare
}
}
// Oprește display-ul pentru 1 secundă
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], HIGH); // Oprește toți digiti
}
delay(1000); // Stinge display-ul pentru 1 secundă
}
Daca aveti intrebari sau nelamuriri, nu ezitati sa ma contactati la adresa de e-mail electronica@bitmi.ro si voi raspunde cu drag. De asemenea, astept cu nerabdare sa primesc poze sau videoclipuri cu proiectele voastre la aceeasi adresa.
Sper ca acest proiect v-a inspirat si ca v-ati bucurat de procesul de construire! Toate componentele utilizate pot fi gasite si achizitionate de mai jos. 👇