Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2025:iotelea:catalin.turcanu [2025/05/11 21:49]
catalin.turcanu
pm:prj2025:iotelea:catalin.turcanu [2025/05/26 22:06] (current)
catalin.turcanu [Descriere generală]
Line 12: Line 12:
 Aplicabilă în industrie, depozite, educație Aplicabilă în industrie, depozite, educație
 ===== Descriere generală ===== ===== Descriere generală =====
- +                             
-Schema bloc: +
-[Senzor IR] ─→ [Arduino UNO] ─→ [LCD I2C] +
-                       │ +
-                       ​├─→ [Memorie interna] +
-                       ​├─→ [Buzzer] +
-                       ​└─→ [Buton Reset]+
 Descriere module: Descriere module:
 Senzor IR – detectează trecerea obiectului Senzor IR – detectează trecerea obiectului
Line 24: Line 18:
 Arduino Uno – controlează logica de numărare, afișare, memorare și semnalizare Arduino Uno – controlează logica de numărare, afișare, memorare și semnalizare
  
-LCD I2C – afișează numărul curent de obiecte+LCD 16x2 – afișează numărul curent de obiecte
  
 Buzzer – emite un sunet la fiecare trecere Buzzer – emite un sunet la fiecare trecere
  
 Buton – resetează contorul la zero Buton – resetează contorul la zero
 +
 +{{:​pm:​prj2025:​iotelea:​shiny_krunk-blorr.png?​600|}}
  
  
Line 38: Line 34:
 1x Modul senzor IR 1x Modul senzor IR
  
-1x Display LCD 16x2 cu I2C+1x Display LCD 16x2
  
 1x Buzzer activ 1x Buzzer activ
Line 52: Line 48:
 1x Rezistență 220Ω (pentru test LED) 1x Rezistență 220Ω (pentru test LED)
  
-Scheme electrice+Poze
- +{{:pm:prj2025:​iotelea:​project1.jpg?​200|}} 
-Conectările de bază includ: +{{:pm:​prj2025:​iotelea:​project2.jpg?​200|}}
- +
-Senzor IRVCC/​GND/​DOUT → Arduino +
- +
-LCD I2CSDA/SCL → A4/A5 (pe Uno) +
- +
-Buzzer → pin digital +
- +
-Buton → pin digital + rezistență pull-down+
  
 Diagrame de semnal: Diagrame de semnal:
Line 72: Line 60:
  
 ===== Software Design ===== ===== Software Design =====
 +Mediu de dezvoltare
 +Folosim PlatformIO în Visual Studio Code pentru dezvoltare, compilare și upload.
  
 +Alternativ, codul poate fi rulat și cu Arduino IDE.
 +
 +Microcontroller-ul folosit este ATmega328P (placa Arduino UNO).
 +
 +Limbajul de programare: C++ (framework Arduino).
 +
 +Librării și surse 3rd-party
 +#include <​LiquidCrystal.h>​ – pentru controlul afișajului LCD 16x2 conectat în mod paralel (fără I2C).
 +
 +#include <​Arduino.h>​ – pentru funcții de bază (digitalWrite,​ millis, etc.), inclusă implicit în PlatformIO.
 +
 +Algoritmi și structuri implementate
 +1. Inițializare componente
 +Se definesc pinii pentru LCD, buzzer, LED-uri, senzor IR și butonul de reset. Se setează tipul fiecărui pin.
 +
 +const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2, ct = 9;
 +const int irPin = 8;
 +const int buzzerPin = 10;
 +const int ledPin = 13;
 +const int resetButton = 7;
 +
 +LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
 +
 +void setup() {
 +  pinMode(irPin,​ INPUT);
 +  pinMode(buzzerPin,​ OUTPUT);
 +  pinMode(ledPin,​ OUTPUT);
 +  pinMode(resetButton,​ INPUT); ​ // conectat la GND
 +  analogWrite(ct,​ 100);         // luminozitate ecran
 +  lcd.begin(16,​ 2);
 +  lcd.print("​Obiecte:​ ");
 +}
 +2. Contorizarea obiectelor detectate
 +Senzorul IR emite semnal LOW când un obiect este prezent. Se folosește o variabilă objectDetected pentru a evita incrementările multiple la o singură trecere.
 +
 +if (irStatus == LOW && !objectDetected) {
 +  objectDetected = true;
 +  counter++;
 +
 +  lcd.clear();​
 +  lcd.print("​Obiecte:​ ");
 +  lcd.print(counter);​
 +
 +  digitalWrite(buzzerPin,​ HIGH);
 +  digitalWrite(ledPin,​ HIGH);
 +  delay(100);
 +  digitalWrite(buzzerPin,​ LOW);
 +  digitalWrite(ledPin,​ LOW);
 +}
 +3. Debounce pentru buton reset
 +Butonul resetează contorul și afișajul. Se aplică un delay pentru stabilizarea semnalului (debounce simplu software).
 +
 +if (digitalRead(resetButton) == HIGH) {
 +  counter = 0;
 +  lcd.clear();​
 +  lcd.print("​Obiecte:​ ");
 +  lcd.print(counter);​
 +  delay(300);
 +}
 +4. Detecție de trafic rapid (ALERTĂ)
 +Se memorează ultimele 3 timestamp-uri folosind millis(). Dacă 3 obiecte trec în <1 sec, sistemul emite alertă.
 +
 +lastTimes[0] = lastTimes[1];​
 +lastTimes[1] = lastTimes[2];​
 +lastTimes[2] = millis();
 +
 +if (lastTimes[2] - lastTimes[0] <= 1000 && lastTimes[0] != 0) {
 +  lcd.clear();​
 +  lcd.print("​ALERTA:​ PREA"​);​
 +  lcd.setCursor(0,​ 1);
 +  lcd.print("​MULTE OBIECTE"​);​
 +
 +  digitalWrite(buzzerPin,​ HIGH);
 +  digitalWrite(ledPin,​ HIGH);
 +  delay(2000);​
 +  digitalWrite(buzzerPin,​ LOW);
 +  digitalWrite(ledPin,​ LOW);
 +
 +  counter = 0; // resetăm contorul
 +  lcd.clear();​
 +  lcd.print("​Obiecte:​ ");
 +  lcd.print(counter);​
 +}
  
-<note tip> 
-Descrierea codului aplicaţiei (firmware): 
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi 
-  * (etapa 3) surse şi funcţii implementate 
-</​note>​ 
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +Rezultate Obținute: 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +S-a realizat cu succes un sistem funcțional de numărare a obiectelor detectate de un senzor IR.
-</​note>​+
  
-===== Concluzii =====+Afișajul LCD actualizează în timp real numărul obiectelor.
  
-===== Download =====+Comportament corect în caz de treceri rapide, sistemul detectând fluxul excesiv și reacționând automat.
  
-<note warning>​ +Testele au fost realizate atât pe breadboard cât și în PlatformIOcu program funcțional încărcat cu succes.
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute ​în urma realizării proiectului:​ sursescheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+
  
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:​** Dumitru Alin331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +S-au folosit 5 piese electronice diferite și 4 concepte din laboratoareGPIOPWM, afișaj, debounce, memorie RAM și temporizare.
-</​note>​+
  
-===== Jurnal ​=====+===== Concluzii ​===== 
 +Proiectul demonstrează aplicarea practică a noțiunilor de PM: programarea microcontrollerului,​ lucrul cu senzori digitali, afișaj și interacțiune hardware.
  
-<note tip> +Codul este modular, comentat șpoate fi ușor extins (ex: numărare bidirecțională, afișare pe serial monitor, stocare etc).
-Putețavea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +
-</​note>​+
  
-===== Bibliografie/​Resurse =====+Se poate transforma într-un prototip real de contor pentru bandă transportoare în fabrici sau linii de sortare.
  
-<​note>​ +===== Download ===== 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**+Proiectu{{:​pm:​prj2025:​iotelea:​pmproject.zip|}} 
-</note>+ 
 +===== Bibliografie/Resurse =====
  
-<​html><​a class="​media mediafile mf_pdf"​ href="?do=export_pdf">​Export to PDF</​a></​html>​+LCD Help: 
 +https://​www.youtube.com/​watch?v=860eErq9c3E
  
 +Sensor Help:
 +https://​www.youtube.com/​watch?​v=OMZacCLRt9A
pm/prj2025/iotelea/catalin.turcanu.1746989396.txt.gz · Last modified: 2025/05/11 21:49 by catalin.turcanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0