Differences

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

Link to this comparison view

pm:prj2025:iotelea:catalin.turcanu [2025/05/21 20:52]
catalin.turcanu [Descriere generală]
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: +
-[ Obiect ] → [ Senzor IR ] → [ Arduino Uno ] → [ LCD ]   +
-                                     ​↓ ​           ↓   +
-                              [ EEPROM ]      [ Buzzer ] +
-                                     ↑ +
-                              [ Buton Reset ] +
 Descriere module: Descriere module:
 Senzor IR – detectează trecerea obiectului Senzor IR – detectează trecerea obiectului
Line 25: 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
Line 31: Line 24:
 Buton – resetează contorul la zero Buton – resetează contorul la zero
  
- +{{:​pm:​prj2025:​iotelea:​shiny_krunk-blorr.png?​600|}}
-{{:​pm:​prj2025:​iotelea:​shiny_krunk-blorr.png?​200|}}+
  
  
Line 56: Line 48:
 1x Rezistență 220Ω (pentru test LED) 1x Rezistență 220Ω (pentru test LED)
  
-Scheme electrice/​poze+Poze
 +{{:​pm:​prj2025:​iotelea:​project1.jpg?​200|}} 
 +{{:​pm:​prj2025:​iotelea:​project2.jpg?​200|}}
  
 Diagrame de semnal: Diagrame de semnal:
Line 67: 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.1747849939.txt.gz · Last modified: 2025/05/21 20:52 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