Salutare, drag pasionat de electronica! Sunt Oana de la Bitmi.ro si ma bucur sa revin cu un nou proiect, astazi iti voi arata cum sa construiesti un contor de persoane utilizand un senzor infrarosu (IR) si un afisaj LCD cu interfata I2C, controlat de o placa de dezvoltare compatibila Arduino. Acest proiect este perfect pentru monitorizarea numarului de treceri intr-un spatiu, fiind usor adaptabil pentru aplicatii variate: de la controlul capacitatii intr-o sala de conferinte, la un contor de trafic pentru intrari si iesiri din cladiri. Proiectul poate fi realizat atat de incepatori, cat si de cei mai experimentati.
Ce este un senzor IR si cum functioneaza?
Senzorul cu infrarosu (IR) este un dispozitiv electronic care detecteaza radiatia infrarosie, adica o forma de lumina invizibila pentru ochiul uman, dar perceptibila de anumite dispozitive. Radiatia IR este emisa in mod natural de toate obiectele cu o temperatura mai mare decat zero absolut, dar in proiectele de electronica, senzorii IR sunt folositi pentru a detecta miscarea, prezenta sau chiar distanta fata de un obiect. In acest proiect, senzorul IR este folosit pentru a detecta trecerea unei persoane
Majoritatea senzorilor IR de miscare au doua parti principale: un LED IR care emite o raza de lumina infrarosie si un fotodiod care detecteaza orice reflexie a acestei lumini. Cand un obiect (de exemplu, o persoana) trece prin raza IR, lumina se reflecta inapoi spre senzor, declansand un semnal.
Ce este un ecran LCD I2C si de ce este util?
Un ecran LCD (Liquid Crystal Display) este o componenta comuna in proiectele cu Arduino, care permite afisarea textului si a simbolurilor. Ecranul LCD folosit in acest proiect are o interfata I2C, ceea ce inseamna ca se conecteaza la microcontroler folosind doar doi pini (SDA si SCL), fata de sapte sau mai multi pini necesari in mod normal pentru un LCD fara interfata I2C.
Componente necesare
1 x placa de dezvoltare compatibila Arduino Uno R3
1 x modul senzor IR
1 x Breadboard 400 puncte
1 x Ecran LCD1602 cu modul I2C/IIC
5 fire tata-tata
4 fire mama-tata
Acum ca ai aflat care sunt componentele necesare, te vei ghida dupa schema de conectare de mai jos.
Cum functioneaza sistemul de contorizare?
Proiectul este conceput astfel incat senzorul IR detecteaza fiecare trecere in fata acestuia si trimite un semnal catre placa de dezvoltare Arduino, care contorizeaza evenimentul. Contorul afiseaza in mod ciclic numarul de treceri detectate in ultimul minut, in ultimele doua minute si totalul inregistrat in ultima ora. Informatiile sunt afisate pe ecranul LCD, astfel incat sa fie usor de urmarit.
Exemplu cod
Dupa ce ai realizat circuitul, 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 descarca biblioteca LiquidCrystal_I2C, clic AICI. Acum trebuie sa adaugi biblioteca in mediul de dezvoltare Arduino IDE, deschide Arduino IDE si din meniul Sketch acceseaza Include Library biblioteca si apoi selecteaza Add .zip Library. Aici va trebui sa gasesti si sa selectezi fisierul .zip al bibliotecii LiquidCrystal_I2C. Dupa ce ai deschis fisierul .zip si cand procesul de instalare s-a terminat cu succes, va aparea un mesaj in partea de jos a ferestre care iti va confirma ca fisierul a fost adaugat in biblioteca.
Pentru a incarca codul pe placa, apasa butonul 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 < Wire.h >
#include < LiquidCrystal_I2C.h >
// Seteaza adresa I2C a LCD-ului la 0x27 pentru un ecran de 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pinul senzorului IR
const int sensorPin = 2;
int countLastMinute = 0; // Contorul de treceri din ultimul minut
int countLast2Minutes = 0; // Contorul de treceri din ultimele 2 minute
int totalCountLastHour = 0; // Contorul total de treceri in ultima ora
int totalCount = 0; // Contorul total general
unsigned long startTimeMinute;
unsigned long startTime2Minutes;
unsigned long startTimeHour;
void setup() {
pinMode(sensorPin, INPUT);
Serial.begin(9600);
// Inițializare LCD
lcd.begin(16, 2);
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Contor persoane:");
// Initializare timpi de referinta
startTimeMinute = millis();
startTime2Minutes = millis();
startTimeHour = millis();
}
void loop() {
unsigned long currentTime = millis();
// Verificare senzor IR pentru detectarea trecerii
if (digitalRead(sensorPin) == LOW) { // presupunem ca LOW indica trecerea
countLastMinute++;
countLast2Minutes++;
totalCountLastHour++;
totalCount++;
Serial.print("Trecere detectata. Numar total: ");
Serial.println(totalCount);
delay(500); // Mica intarziere pentru a evita dublarea contorizarii
}
// Resetare contor dupa 1 minut
if (currentTime - startTimeMinute >= 60000) {
countLastMinute = 0;
startTimeMinute = currentTime;
}
// Resetare contor dupa 2 minute
if (currentTime - startTime2Minutes >= 120000) {
countLast2Minutes = 0;
startTime2Minutes = currentTime;
}
// Resetare contor dupa 1 ora
if (currentTime - startTimeHour >= 3600000) {
totalCountLastHour = 0;
startTimeHour = currentTime;
}
// Actualizare afisaj la fiecare 5 secunde
if (currentTime % 5000 < 50) {
updateDisplay(currentTime % 15000);
}
}
// Functia de actualizare a afisajului in functie de intervalul de timp
void updateDisplay(unsigned long rotationTime) {
lcd.clear();
if (rotationTime < 5000) {
lcd.setCursor(0, 0);
lcd.print("In ultimul minut:");
lcd.setCursor(0, 1);
lcd.print(countLastMinute);
} else if (rotationTime < 10000) {
lcd.setCursor(0, 0);
lcd.print("Ultimele 2 minute:");
lcd.setCursor(0, 1);
lcd.print(countLast2Minutes);
} else {
lcd.setCursor(0, 0);
lcd.print("Total ultima ora:");
lcd.setCursor(0, 1);
lcd.print(totalCountLastHour);
}
}
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. 👇