This shows you the differences between two versions of the page.
|
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", "ALERTA: Obiect 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 urcare, 1s coborâre). | ||
| + | - La distanță sub prag: prealarmă (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 o abordare modulară pentru a facilita debugging-ul și extinderea ulterioară. Fiecare periferic (ADC, USART, I2C) are propriul set de funcții de inițializare și utilizare. | + | Codul este conceput pentru ATmega328P și folosește o 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ți) pentru a mă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 < prag; LED constant, log 1/s. |
| - | * **Starea WARNING:** Distanța scade sub prag. LED-ul clipește rar, buzzer-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 mă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(char* str)'' | 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, mă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 a fost montata si testata cu succes, ramanand de finisat partea software. | + | Validarea s-a 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> | ||