Differences

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

Link to this comparison view

pm:prj2026:atoader:marian.panait1206 [2026/05/16 21:18]
marian.panait1206 [Rezultate Obţinute]
pm:prj2026:atoader:marian.panait1206 [2026/05/22 00:24] (current)
marian.panait1206
Line 3: Line 3:
  
 <note tip> <note tip>
-Proiectul constă ​în realizarea unui sistem de securitate inteligent, capabil să monitorizeze distanța ​până la obiectele din jur și să declanșeze o alertă complexă (vizuală, sonoră și digitală) ​în momentul ​încălcării unui perimetru de siguranță configurabil+Proiectul constă ​într-un ​sistem de securitate inteligent, capabil să monitorizeze distanța și să declanșeze o alertă complexă (vizuală, sonoră și digitală) ​atunci când este încălcat un perimetru de siguranță configurabil.
- +
-  * **Ce face:** Sistemul utilizează un senzor ultrasonic pentru a măsura distanța în timp real. Utilizatorul poate regla „limita de alarmă” folosind un potențiometru. Valorile sunt afișate pe un ecran LCD, iar în caz de proximitate critică, un buzzer pasiv și un LED emit semnale de avertizare. În paralel, sistemul trimite un jurnal de evenimente către un PC via Serial (USART). +
-  * **Scopul lui:** Implementarea și integrarea a patru interfețe hardware fundamentale:​ **ADC** (citire potențiometru),​ **I2C** (afișare LCD), **Timere/​PWM** (măsurare distanță și control buzzer) și **USART** (comunicație cu PC-ul). +
-  * **Ideea de pornire:** Nevoia de a crea un sistem de monitorizare interactiv, unde pragurile de declanșare nu sunt „hardcodate”,​ ci pot fi ajustate manual de utilizator, oferind în același timp o metodă de monitorizare la distanță prin jurnalul serial. +
-  * **Utilitate:​** Proiectul demonstrează conceptele de bază ale sistemelor de alarmă moderne și ale monitorizării industriale,​ fiind un punct de plecare excelent pentru aprofundarea protocoalelor de comunicație și a procesării semnalelor senzoriale.+
  
 +  * **Ce face:** Măsoară distanța cu HC-SR04, citește pragul dintr-un slide-pot și afișează valori pe OLED SSD1306; la risc, activează LED + buzzer și trimite loguri pe Serial (USART).
 +  * **Scop:** Integrarea interfețelor **ADC**, **TWI/​I2C**,​ **Timere/​PWM** și **USART** pe ATmega328P.
 +  * **Element de noutate:** Alarmă în doi pași: prealarmă pe distanță, iar alarma sonoră pornește doar la confirmarea mișcării (PIR), cu frecvența buzzer-ului dependentă de distanță.
 </​note>​ </​note>​
 ===== Descriere generală ===== ===== Descriere generală =====
Line 17: Line 15:
 ==== Modulul de Achiziție și Control (Intrare) ==== ==== Modulul de Achiziție și Control (Intrare) ====
   * **Senzorul HC-SR04:** Emite ultrasunete și măsoară timpul de întoarcere a ecoului pentru a calcula distanța.   * **Senzorul HC-SR04:** Emite ultrasunete și măsoară timpul de întoarcere a ecoului pentru a calcula distanța.
-  * **Potențiometrul:** Acționează ca un divizor de tensiune. Tensiunea variabilă este convertită de **ADC** într-o valoare numerică ce definește ​pragul de distanță ​setat de utilizator.+  * **Senzor Motion (PIR):** Confirmă mișcarea; activează alarma sonoră doar când există intrus real. 
 +  ​* **Slide-pot (ADC0):** Setează pragul de distanță ​(interval util 5-80 cm).
  
 ==== Modulul de Procesare ==== ==== Modulul de Procesare ====
-Microcontrolerul compară distanța ​citită de senzor ​cu pragul setat prin potențiometru. Acesta gestionează temporizarea pentru senzorul ultrasonic ​și calculează frecvența pentru semnalul ​de alarmă.+Microcontrolerul compară distanța cu pragul setat și verifică PIR. În funcție de stare, actualizează LED-ul, buzzer-ul și mesajele trimise pe Serial.
  
 ==== Modulele de Ieșire (Feedback) ==== ==== Modulele de Ieșire (Feedback) ====
-  * **Feedback Vizual (I2C):​** ​Afișează ​pe LCD 1602 distanța ​curentă ​și pragul setat+  * **Feedback Vizual (I2C):​** ​OLED SSD1306 afișează distanța, pragul ​și starea alarmei
-  * **Feedback Sonor și Luminos (PWM):​** ​Controlează un buzzer ​pasiv și un LED. Frecvența sunetului se modifică în funcție ​de cât de aproape este intrusul+  * **Feedback Sonor și Luminos (PWM):​** ​Buzzer ​pasiv LED status; frecvența și ritmul depind ​de distanță
-  * **Jurnal Serial (USART):​** ​Trimite mesaje ​de stare către ​terminalul ​PC-ului (ex: "Sistem activ", ​"​ALERTAObiect la 15 cm").+  * **Jurnal Serial (USART):​** ​Mesaje ​de stare și alertă ​către PC (57600 baud). 
 + 
 +==== Flux de utilizare (pe scurt) ==== 
 +  ​Conectează modulele conform tabelului de pini și alimentează placa. 
 +  - Deschide monitorul serial la 57600 baud. 
 +  - OLED-ul afișează distanța și pragul setat de potențiometru. 
 +  - Reglează pragul ​(5-80 cm) din slide-pot. 
 +  - În mod OK, LED-ul ​"respiră" ​(1s urcare1s coborâre). 
 +  - La distanță sub pragprealarmă (LED constant, log 1/s). 
 +  - La distanță sub prag + PIR activ: alarmă (blink rapid + buzzer, mesaj "!!! INTRUS !!!").
  
 ===== Hardware Design ===== ===== Hardware Design =====
  
-În această etapă, lista de componente ​hardware ​necesare pentru realizarea proiectului este următoarea:+Lista componentelor ​hardware ​utilizate:
  
 ^ Nr. Crt. ^ Componentă ^ Cantitate ^ Rol în proiect ^ Modul / Interfață folosită ^ ^ Nr. Crt. ^ Componentă ^ Cantitate ^ Rol în proiect ^ Modul / Interfață folosită ^
 | 1. | ATmega328P-Xplained Mini | 1 buc. | Unitatea centrală de procesare. | Toate | | 1. | ATmega328P-Xplained Mini | 1 buc. | Unitatea centrală de procesare. | Toate |
-| 2. | Senzor Ultrasonic HC-SR04 | 1 buc. | Măsurarea distanței prin ultrasunete. | Timere / Input Capture | +| 2. | OLED SSD1306 128x64 | 1 buc. | Afișare distanță, prag, stare alarmă. | I2C (SDA, SCL) | 
-3. | Display LCD 1602 + I2C | 1 buc. | Afișarea distanței și a limitei setate. | I2C (SDA, SCL) +| 3. | Senzor Ultrasonic HC-SR04 | 1 buc. | Măsurarea distanței prin ultrasunete. | Timere / Input Capture | 
-4. | Potențiometru 10kΩ | 1 buc. | Reglarea ​manuală a pragului de alarmă. | ADC | +4. | Senzor Motion (PIR) | 1 buc. | Detectarea mișcării. | GPIO 
-5. | Buzzer Pasiv | 1 buc. | Alarmă sonoră cu ton variabil. | PWM / Timere | +5. | Slide-pot (HW-233) ​| 1 buc. | Reglarea pragului de alarmă. | ADC | 
-6. | LED 3mm (Roșu) ​| 1 buc. | Alertă vizuală ​în caz de proximitate. | GPIO / PWM | +6. | Buzzer Pasiv | 1 buc. | Alarmă sonoră cu ton variabil. | PWM / Timere | 
-7. | Rezistență 220Ω | 1 buc. | Protecția LED-ului. | N/A | +7. | LED status ​| 1 buc. | Alarmă vizuală. | PWM | 
-| 8. | Breadboard & Fire Dupont | 1 set | Realizarea conexiunilor fizice. | N/A |+8. | Rezistență 220Ω | 1 buc. | Protecția LED-ului. | N/A |
  
 +==== Pini folosiți și motivație ====
 +
 +^ Componentă ^ Pin ATmega328P ^ Rol ^ Motivație tehnică ^
 +| OLED SDA | PC4 (SDA) | I2C data | SDA hardware (TWI) pentru I2C stabil |
 +| OLED SCL | PC5 (SCL) | I2C clock | SCL hardware (TWI) pentru I2C stabil |
 +| Ultrasonic Trig | PD3 | output digital | pin simplu pentru impuls 10 us |
 +| Ultrasonic Echo | PB0 (ICP1) | input capture | ICP1 măsoară lățimea impulsului precis |
 +| Motion (PIR) | PC1 | input digital | ieșire digitală comparată intern |
 +| Potențiometru | PC0 (ADC0) | intrare analogică | ADC0 este canal dedicat ADC |
 +| Buzzer | PD6 (OC0A) | PWM output | OC0A oferă PWM hardware |
 +| LED status | PB3 (OC2A) | PWM output | PWM hardware pentru efecte |
 +
 +==== Schema electrică (ASCII) ====
 +
 +<​code>​
 +ATmega328P ​             OLED SSD1306
 +PC4 (SDA)  ----------- ​ SDA
 +PC5 (SCL)  ----------- ​ SCL
 +VCC        ----------- ​ VCC
 +GND        ----------- ​ GND
 +
 +ATmega328P ​             HC-SR04
 +PD3 (TRIG) ----------- ​ TRIG
 +PB0 (ECHO) ----------- ​ ECHO
 +VCC        ----------- ​ VCC
 +GND        ----------- ​ GND
 +
 +ATmega328P ​             MOTION
 +PC1 ------------------ ​ OUT
 +VCC        ----------- ​ VCC
 +GND        ----------- ​ GND
 +
 +ATmega328P ​             Slide-pot HW-233
 +PC0 (ADC0) ----------- ​ OUT
 +VCC        ----------- ​ VCC
 +GND        ----------- ​ GND
 +
 +ATmega328P ​             Buzzer pasiv
 +PD6 (OC0A) ----------- ​ S
 +VCC        ----------- ​ VCC
 +GND        ----------- ​ GND
 +
 +ATmega328P ​             LED status
 +PB3 (OC2A) ----------- ​ ANOD (+)
 +GND ------------------ ​ CATOD (-) (cu rezistență serie)
 +</​code>​
  
 ===== Software Design ===== ===== Software Design =====
Line 47: Line 101:
 ==== Descrierea codului aplicației (firmware) ==== ==== Descrierea codului aplicației (firmware) ====
  
-Codul este conceput pentru ​a rula pe microcontrolerul ​ATmega328P, utilizând ​abordare ​modulară ​pentru a facilita debugging-ul și extinderea ulterioară. Fiecare ​periferic ​(ADC, USART, I2Care propriul set de funcții de inițializare și utilizare.+Codul este conceput pentru ATmega328P ​și folosește ​arhitectură ​modulară ​(driver per periferic). Nu sunt folosite biblioteci Arduino; totul este scris cu acces direct la registre.
  
-  * **Mediu de dezvoltare:​** ​Microchip Studio (fostul Atmel Studio 7) sau VS Code cu extensia ​PlatformIO. +  * **Mediu de dezvoltare:​** VS Code PlatformIO. 
-  * **Librării și surse 3rd-party:** +  * **Port serial:** 57600 baud pentru ​jurnal.
-    * **I2C Master Library:** Pentru gestionarea comunicării pe bus-ul I2C. +
-    * **LCD I2C Library:** Adaptată pentru controller-ul PCF8574 (cel de pe spatele LCD-ului), pentru a trimite comenzi și date text. +
-    * **avr/io.h & avr/​interrupt.h:​** Librăriile standard ​pentru ​lucrul cu registrele și întreruperile AVR.+
  
-==== Algoritmi și structuri ​de date ====+==== Algoritmi și logică ​de alarmă ​====
  
   * **Algoritmul de măsurare a distanței:​**   * **Algoritmul de măsurare a distanței:​**
     * Se emite un puls de 10µs pe pinul de Trigger.     * Se emite un puls de 10µs pe pinul de Trigger.
-    * Se utilizează un Timer (Timer1 pe 16 bițipentru a sura durata ​pulsului de ecou recepționat+    * Timer1 ​(Input Capture) măsoară ​durata ​ecoului
-    * Distanța este calculată ​prin formula: ''​distanta = (timp_ecou * 0.034) / 2''​. +    * Distanța este calculată: ''​distanta = (timp_ecou * 0.034) / 2''​. 
-  * **Procesare ADC (Potențiometru):** +  * **Procesare ADC (prag):** 
-    * Valoarea brută (0-1023) este mapată ​într-un interval util pentru alarmă (ex: 10 - 80 cm). +    * Valoarea brută (0-1023) este mapată ​în intervalul 5-80 cm. 
-    * Se folosește un sistem de mediere a ultimelor 5 citiri pentru a elimina jitter-ul (fluctuațiile mici ale valorii afișate)+  * **Stări ​de alarmă:** 
-  * **Logica ​de Alarmă (State Machine):** +    * **OK:** distanța > prag; LED "​respiră"​ (PWM lent)
-    * **Starea SAFE:** Distanța reală ​Pragul setat. ​LED-ul este stins, buzzer-ul este inactiv+    * **Prealarmă:** distanța pragLED constantlog 1/s
-    * **Starea WARNING:** Distanța scade sub pragLED-ul clipește rarbuzzer-ul emite un sunet de joasă frecvență+    * **Alarmă:** distanța < prag și PIR activ; ​LED blink rapid + buzzer ​variabil
-    * **Starea CRITICAL:** Distanța < 10 cm. LED-ul stă aprins, ​buzzer-ul emite un sunet continuu/​strident+  * **USART:** string-uri ​de status ​trimise ​periodic ​către PC.
-  * **Protocol ​USART:​** ​Datele sunt formatate ca string-uri ​și trimise către PC la intervale de 1 secundă pentru monitorizare.+
  
-==== Surse și funcții implementate ​====+==== Biblioteci ​și drivere ​====
  
-^ Funcție ^ Rol ^ +Header-ele standard: 
-''​void USART_init(unsigned int baud)'' ​| Configurează rata de transfer și formatul frame-ului pentru comunicarea serială| +  ​* ​''​<​avr/​io.h>​''​, ''<​avr/​interrupt.h>'',​ ''<​util/​delay.h>'',​ ''<​avr/​pgmspace.h>''​ 
-''​void ADC_init()'' ​| Configurează referința de tensiune și pre-scaler-ul pentru convertorul analog-digital| +  ​* ​''​<​stdint.h>​''​, ''<​stdbool.h>'',​ ''<​stdio.h>''​ 
-''​uint16_t ADC_read(uint8_t channel)'' ​| Returnează valoarea digitală citită de la potențiometru| + 
-''​void T1_init()'' ​| Inițializează Timer1 pentru ​surarea precisă a timpului ​(modul Input Capture). | +Drivere locale: 
-''​void PWM_init()'' ​| Configurează Timer0/2 pentru generarea semnalului PWM către buzzer| +  * ''​include/​usart.h'' ​+ ''​src/​usart.c''​ 
-''​void LCD_print(charstr)'' ​| Funcție helper pentru afișarea șirurilor de caractere ​pe ecranul I2C| +  ​* ​''​include/​adc.h'' ​+ ''​src/​adc.c''​ 
-''​void process_alarm()'' ​| Funcție principală de decizie care compară datele ​și activează ieșirile|+  * ''​include/​twi.h''​ + ''​src/​twi.c''​ 
 +  * ''​include/​ssd1306.h''​ + ''​src/​ssd1306.c''​ 
 +  * ''​include/​motion.h''​ + ''​src/​motion.c''​ 
 +  * ''​include/​ultrasonic.h''​ + ''​src/​ultrasonic.c''​ 
 +  * ''​include/​buzzer.h''​ + ''​src/​buzzer.c''​ 
 + 
 +==== Structura proiectului și interacțiunea între module ==== 
 + 
 +  - Init: USART, ADC, TWI, OLED, motion, ultrasonic, buzzer, GPIO. 
 +  - Buclă: trigger HC-SR04, ​surare distanță, citire prag. 
 +  - Decizie: OK, prealarmă, alarmă (PIR + distanță). 
 +  - Afișare: OLED actualizează valori; serialul loghează starea. 
 + 
 +==== Logica pe fișiere ==== 
 + 
 +  * ''​src/​main.cpp''​: inițializări, bucla principală,​ logică de alarmă. 
 +  * ''​src/usart.c''​ + ''​include/​usart.h'':​ inițializare și transmitere USART
 +  ​* ​''​src/​adc.c''​ + ''​include/​adc.h'':​ citire ADC și mapare prag. 
 +  ​* ''​src/​twi.c''​ + ''​include/​twi.h'':​ comunicație I2C. 
 +  * ''​src/​ssd1306.c''​ + ''​include/​ssd1306.h'':​ buffer OLED și randare text. 
 +  * ''​src/​ultrasonic.c''​ + ''​include/​ultrasonic.h'':​ trigger, input capture, conversie cm. 
 +  * ''​src/​motion.c''​ + ''​include/​motion.h'':​ citire PIR pe PC1
 +  ​* ​''​src/​buzzer.c'' ​+ ''​include/​buzzer.h'':​ PWM Timer0 și mapare frecvență
 + 
 +==== Justificarea funcționalităților din laboratoare ==== 
 + 
 +  * **L1 (USART):** jurnal serial de alerte. 
 +  * **L2 (Timere + întreruperi):​** Input Capture pe Timer1 pentru ecou. 
 +  * **L3 (PWM):** PWM pe OC0A (buzzer) ​și OC2A (LED). 
 +  * **L4 (ADC):** citire potențiometru ​și mapare prag. 
 +  * **L6 (TWI/​I2C):​** comunicație cu OLED SSD1306. 
 + 
 +==== Observații ==== 
 + 
 +  * Fontul OLED este minim (cifre, litere mari, câteva simboluri); se poate extinde în ''​src/​ssd1306.c''​.
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
 <note tip> <note tip>
-Proiectul este gata din punct de vedere hardware. Fiecare componenta ​fost montata si testata cu succesramanand ​de finisat partea software.+Validarea s-făcut prin: 
 +  * monitor serial (mesaje de status și loguri de alertă), 
 +  * OLED (distanță,​ prag, mesaj de intrus), 
 +  * LED/buzzer (respirație în OK, blink rapid la alarmă, buzzer activ), 
 +  * test practic cu obiect apropiat și mișcare PIR (alarmă confirmată).
  
 {{pm:​prj2026:​atoader:​alarma-proximitate.jpeg?​300x500}}{{pm:​prj2026:​atoader:​alarma-proximitate2.jpeg?​300x500}} {{pm:​prj2026:​atoader:​alarma-proximitate.jpeg?​300x500}}{{pm:​prj2026:​atoader:​alarma-proximitate2.jpeg?​300x500}}
Line 92: Line 180:
  
 ===== Concluzii ===== ===== Concluzii =====
 +
 +Proiectul demonstrează integrarea corectă a interfețelor ADC, TWI/I2C, Timere/PWM și USART într-un sistem de alarmă funcțional. Soluția oferă feedback clar (vizual, sonor și digital) și permite configurarea pragului în timp real, fiind o bază solidă pentru extinderi viitoare.
  
 ===== Download ===== ===== Download =====
  
-<note warning>​ +{{:pm:prj2026:atoader:alarma-proximitate.zip}}
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, 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 Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +
-</​note>​+
  
 ===== Jurnal ===== ===== Jurnal =====
  
-<note tip> +  * **Milestone 1:** documentație. 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului+  * **Milestone 2:** implementare hardware + testare componente. 
-</​note>​+  * **Milestone 3:** implementare software, testare finală. 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
 +  * laboratoarele de pe ocw
 +  * documentatia placii ATmega328P si pagina producatorului fiecarui senzor/​componente
 +
  
-<​note>​ 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. 
-</​note>​ 
  
-<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ 
  
pm/prj2026/atoader/marian.panait1206.1778955481.txt.gz · Last modified: 2026/05/16 21:18 by marian.panait1206
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