Differences

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

Link to this comparison view

pm:prj2026:vlad.radulescu2901:daria.campeanu [2026/05/06 10:17]
daria.campeanu
pm:prj2026:vlad.radulescu2901:daria.campeanu [2026/05/25 10:50] (current)
daria.campeanu
Line 2: Line 2:
  
 ===== Introducere ===== ===== Introducere =====
-<note tip> +Proiectul **Alcohol-Lock** este un sistem de siguranță activă destinat vehiculelor,​ conceput pentru a condiționa pornirea motorului ​de starea de sobrietate a șoferului. Dispozitivul măsoară concentrația de alcool din aerul expiratprocesează datele în timp real și acționează un mecanism ​de blocare simulat, asigurând în același timp stocarea istoricului de testări pe un suport extern.
-Ideea acestui proiect a luat naștere dintr-o realitate pe care o trăim cu toții: deși responsabilitatea la volan este un subiect intens discutat, factori precum oboseala, stresul sau o estimare greșită a stării proprii pot duce la decizii cu consecințe ireversibile. Adesealimita dintre "apt pentru condus" ​și "​pericol public"​ este invizibilă fără un instrument ​de măsură precis.+
  
-Proiectul propune o soluție sub forma unui kit de siguranță activă, conceput să ofere date esențiale despre alcoolemie într-un mod rapid și eficient. Scopul este transformarea unei simple supoziții într-o certitudine bazată pe daterezultatul obținut determinând dacă pornirea autovehiculului este sigură sau dacă este necesară ​perioadă de repaus. +Sistemul vizează eliminarea erorii umane în autoevaluarea capacității ​de condusoferind ​barieră tehnică obiectivă împotriva condusului sub influența alcoolului.
- +
-Acest dispozitiv ajută persoanele responsabile care doresc să dețină control deplin asupra propriei siguranțe și celor din jur, oferind certitudinea datelor acolo unde, până acum, existau doar presupuneri legate de metabolism sau timpul trecut de la ultimul consum. +
-</​note>​+
  
 ===== Descriere generală ===== ===== Descriere generală =====
 +Dispozitivul integrează module de achiziție date, control și stocare pentru a îndeplini următoarele funcții:
 +  * **Monitorizare**:​ Detectarea precisă a vaporilor de alcool folosind un senzor electrochimic.
 +  * **Control Interlock**:​ Blocarea sau deblocarea contactului auto (simulată prin servomotor) în funcție de pragul legal setat.
 +  * **Avertizare**:​ Semnalizarea vizuală și acustică a stării sistemului și a tentativelor de pornire neautorizate.
 +  * **Data Logging**: Înregistrarea fiecărei măsurători pe un card microSD pentru trasabilitatea utilizării vehiculului.
  
-{{:​pm:​prj2026:​vlad.radulescu2901:​safedrive_block_diagram.png?800x400|}}+==== Schemă Bloc ==== 
 +{{:​pm:​prj2026:​vlad.radulescu2901:​alcohol_lock.png?800|Schema Bloc Alcohol-Lock}}
  
-Sistemul asigură monitorizarea stării utilizatorului și controlul accesului prin următoarele funcționalități: ​+===== Hardware Design =====
  
-**Afișaj LCD:** Vizualizarea instantanee a concentrației de alcool ​detectate ​și a mesajelor de stare (Safe/Danger).+==== Componente hardware ==== 
 +^ Componentă ^ Cantitate ^ Scop ^ 
 +| Microcontroler ​**ATmega328P** | 1 | Unitatea centrală de procesare ​și control | 
 +| Senzor Alcool ​**MQ-3** | 1 | Achiziția semnalului analogic pentru ​concentrația de alcool ​
 +| **Modul cititor Card SD** | 1 | Interfață pentru salvarea datelor pe suport extern | 
 +| **Servomotor SG90** | 1 | Simulare mecanică pentru blocarea contactului (PWM) | 
 +| **LCD 16x2 cu adaptor I2C** | 1 | Afișarea concentrației ​și a mesajelor de stare 
 +| **Buzzer Pasiv** | 1 | Semnalizare acustică a pragurilor critice | 
 +| **LED-uri** ​(Roșu/Verde| 2 | Indicarea vizuală a permisiunii de pornire | 
 +| **Buton Push** | 1 | Declanșarea manuală a procesului de testare | 
 +| **Breadboard Full-size** | 1 | Suport pentru realizarea montajului experimental |
  
-**Sistem de interlock ​(Servomotor):** Blocarea fizică a contactului sau a accesului dacă pragul ​de alcoolemie ​este depășitacționând ​ca o barieră de siguranță activă.+==== Pinii folosiți ==== 
 +^ Componentă ^ Pin ATmega328P ^ Tip semnal ^ Justificare ^ 
 +| Senzor MQ-3 | PC0 (A0| Intrare analogică | PC0 este conectat la ADC0; semnalul MQ-3 este o tensiune continuă 0–5V proporțională cu concentrația ​de alcool | 
 +| Buton START | PD2 | Intrare digitală (INT0) | PD2 este legat la întreruperea externă INT0permițând detecția apăsării fără polling continuu | 
 +| LED Verde | PD6 | Ieșire digitală | Pin digital setat ca ieșire; controlează starea LED-ului verde | 
 +| LED Roșu | PD7 | Ieșire digitală | Pin digital setat ca ieșire; controlează starea LED-ului roșu | 
 +| Buzzer Pasiv | PB0 | Ieșire digitală | Pin digital configurat ca ieșire pentru activarea/​dezactivarea directă a buzzerului | 
 +| Servomotor SG90 | PB1 (OC1A) | PWM (Timer1, 16 biți) | Servomotorul necesită PWM la 50 Hz; PB1 este conectat la canalul OC1A al Timerului 1 pe 16 biți | 
 +| LCD SDA | PC4 (SDA) | I2C date | Pin hardware pentru linia de date SDA a interfeței TWI interne | 
 +| LCD SCL | PC5 (SCL) | I2C ceas | Pin hardware pentru linia de ceas SCL a interfeței TWI interne | 
 +| SD Card CS | PB2 | Ieșire digitală (SPI CS) | Chip Select pentru perifericul SPI, controlat software | 
 +| SD Card MOSI | PB3 (MOSI) | SPI date ieșire | Master Out Slave In - Linia hardware de transmisie SPI | 
 +| SD Card MISO | PB4 (MISO) | SPI date intrare | Master In Slave Out - Linia hardware de recepție SPI | 
 +| SD Card SCK | PB5 (SCK) | SPI ceas | Serial Clock - Ceasul hardware generat de master pentru magistrala SPI |
  
-**Sistem de alertă:** Un buzzer integrat care avertizează sonor utilizatorul în cazul în care testul este pozitiv, dublat de semnalizare vizuală prin LED-uri.+==== Schema electrică ==== 
 +{{ :pm:​prj2026:​vlad.radulescu2901:​schema-electrica-alcohol-lock.jpeg?​800 |Schema electrică Alcohol-Lock}} 
 +{{ :​pm:​prj2026:​vlad.radulescu2901:​project-alcohol-lock.jpeg?300 |}}
  
-**Estimare Sobrietate:​** Calcularea și afișarea timpului aproximativ necesar până când utilizatorul va fi din nou apt pentru condus, bazat pe rata medie de metabolizare.+<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
-===== Hardware ​Design =====+===== Software ​Design =====
  
-Componente ​hardware ​folosite+==== Stadiul actual al implementării software ==== 
-  * ATmega324P (Microcontroler central) +Proiectul software este complet funcțional și structurat modular pe straturi de abstractizare ​hardware: 
-  ​Senzor de gaz MQ-3 (Detectare alcool) +  * **adc.c / adc.h**: Inițializare și citire ADC pentru senzorul ​MQ-3. 
-  * Servomotor SG90 (Mecanism de blocare) +  * **button.c / button.h**: Gestionarea butonului pe pinul PD2 folosind întreruperea externă INT0. 
-  * Ecran LCD 1602 cu adaptor ​I2C +  * **lcd_i2c.c / lcd_i2c.h**:​ Driver ​I2C scris direct pe registre pentru ecranul LCD. 
-  * Buzzer pasiv și LED-uri (Sistem ​de avertizare) +  * **servo.c / servo.h**: Controlul servomotorului prin generare ​de semnal PWM la 50Hz folosind Timer1. 
-  * Buton declanșare test +  * **sd_logger.c**:​ Interfațarea cu sistemul de fișiere Petit FatFs pentru înregistrarea istoricului de măsurători. 
-  * Sursă ​de alimentare 5V+  * **spi.c / spi.h**: Driverul pentru comunicația SPI hardware utilizat ​de cardul SD. 
 +  * **uart.c / uart.h**: Configuarea transmisiei seriale și redirectarea fluxului standard stdout.
  
-===== Software Design =====+==== Motivarea alegerii bibliotecilor folosite ​==== 
 +Pentru a eficientiza spațiul redus de memorie al microcontrolerului ATmega328P, s-au scris drivere directe pe registre și s-au adăugat exclusiv componentele software strict necesare: 
 +  * **Petit FatFs (R0.02)**: S-a ales varianta extrem de simplificată dezvoltată de ChaN pentru sistemul de fișiere FAT. Aceasta nu utilizează alocare dinamică în memoria RAM și scrie direct în blocul de sectoare deja existente ale fișierului LOG.TXT, reducând masiv amprenta de memorie. 
 +  * **avr/io.h & avr/​interrupt.h**:​ Bibliotecile standard din avr-libc folosite pentru maparea regiștriilor specifici microcontrolerului și manipularea vectorilor de întreruperi. 
 +  * **util/​delay.h**:​ Utilizată pentru temporizările precise necesare la inițializarea ecranului LCD și a pașilor din mașina de stări.
  
-<note tip> +==== Elementul ​de noutate al proiectului ==== 
-Descrierea codului aplicaţiei (firmware):​ +Proiectul realizează un dispozitiv de siguranță autonom bazat pe Edge ProcessingCalculele matematice ​pentru ​determinarea concentrației clinice (mg/L) din rezistența brută a senzorului sunt executate local, în timp real, direct pe cipTotodată, componenta ​de Data Logger securizează utilizarea vehiculului printr-o jurnalizare continuă pe card, formând o barieră tehnică ce previne pornirea neautorizată a motorului.
-  * **Mediu ​de dezvoltare:​** Microchip Studio (fostul AVR Studio) +
-  * **Librării:** Utilizarea bibliotecii avr/io.h, avr/​interrupt.h și a unei biblioteci custom ​pentru ​comunicarea I2C cu LCD-ul. +
-  * **Algoritmi:​**  +
-    * Implementarea unei rutine de calibrare la pornire pentru senzorul MQ-3. +
-    * Citirea valorilor analogice prin ADC și conversia lor în mg/L+
-    * Generarea semnalului PWM pentru controlul poziției servomotorului. +
-    * Utilizarea întreruperilor externe pentru butonul ​de start. +
-</​note>​+
  
-===== Rezultate Obţinute =====+==== Justificarea utilizării funcționalităților din laborator ​==== 
 +Aplicația integrează organic cunoștințele acumulate de-a lungul celor 7 laboratoare ale disciplinei:​
  
-<note tip> +  * **Laboratorul GPIO** 
-Proiectul a reușit să demonstreze ​funcționarea unui sistem ​de tip "​Ignition Interlock"​Senzorul detectează cu precizie prezența vaporilor ​de alcooliar servomotorul reacționează instantaneu ​pentru a simula blocarea motoruluiMesajele ​de pe LCD sunt clarefacilitând interacțiunea cu utilizatorul+    * Configuarea direcției pinilor prin registrele DDR și controlul stărilor logice prin registrele PORT. A fost esențial pentru gestionarea LED-urilor de stare (Roșu/​Verde) și activarea/​dezactivarea buzzerului. 
-</note>+  * **Laboratorul UART** 
 +    * Configurarea baude-rate-ului,​ activarea transmisiei și maparea fluxului `stdout` către registrul `UDR0`. Acest lucru a permis utilizarea ​funcției standard `sprintf` pentru formatarea mesajelor, fiind esențial în faza de depanare a algoritmului ​de calcul. 
 +  * **Laboratorul Întreruperi** 
 +    * Configurarea registrului `EICRA` pentru detecția pe front căzător (ISC01) și activarea măștii `INT0` din `EIMSK`. Acest laborator este critic deoarece permite preluarea promptă a acțiunii utilizatorului prin ISR(INT0_vect) fără ​încărca procesorul cu bucle de polling. 
 +  * **Laboratorul Timere. PWM** 
 +    * Configurarea Timerului 1 hardware în mod Fast PWM sau Phase Correct pe 16 bițidefinind perioada totală prin registrul `ICR1 = 40000` și factorul de umplere prin `OCR1A`. Este vital pentru generarea semnalului de comandă la frecvența fixă de 50Hz cerută de servomotorul SG90. 
 +  * **Laboratorul ADC** 
 +    * Activarea convertorului prin bitul `ADEN` și setarea unui prescaler la 128 pentru ​o conversie stabilă la frecvențde 16MHz a ceasuluiPermite citirea semnalului analogic brut furnizat ​de senzorul MQ-3 pe canalul ADC0. 
 +  * **Laboratorul SPI** 
 +    * Configurarea pinilor MOSISCK și SS ca ieșiri, trecerea modulului SPI în mod Master și setarea divizorului de viteză din registrul `SPCR`. Această funcționalitate este fundamentul pe care rulează driverul de card SD (`sd.c`), permițând transferul rapid de blocuri de date
 +  * **Laboratorul I2C** 
 +    * Configurarea reguștriilor `TWSR` și `TWBR` pentru stabilirea frecvenței de ceas la 100kHz și gestionarea biților de START/STOP/WRITE prin bitul `TWINT`. Permite scrierea datelor către expandorul PCF8574 atașat ecranului LCD, reducând numărul de pini folosiți.
  
-===== Concluzii ===== +==== Scheletul proiectului și validarea ​==== 
-Sistemul Alcohol-Lock demonstrează eficiența sistemelor de siguranță biometriceDeși este un prototip, acesta subliniază importanța tehnologiei ​în prevenirea comportamentelor riscante la volan, oferind o metodă obiectivă de evaluare a capacității de condus.+Aplicația funcționează sub forma unei mașini de stări rulate într-o buclă infinită:​ 
 +  * **1. Așteptare**:​ Sistemul stă în repaus și afișează instrucțiunile inițiale pe LCD până când rutina de întrerupere de la buton modifică flag-ul intern. 
 +  * **2Citire ​și Procesare**:​ Se prelevează valoarea analogică ADC și se transformă prin calcul ​în alcoolemie exprimată în mg/L. 
 +  * **3. Salvare**: Datele finale (valoarea ADC brută și cea calculată) sunt înregistrate imediat pe cardul SD în fișierul LOG.TXT. 
 +  * **4. Decizie Interlock**:​ Dacă alcoolemia depășește pragul ​de 0.15 mg/L, servomotorul rămâne blocat, se aprinde LED-ul Roșu și buzzerul sună alert. Dacă șoferul este sub prag, se aprinde LED-ul Verde, iar servomotorul deblochează contactul.
  
-===== Download =====+Validarea s-a făcut prin monitorizarea mesajelor de debug pe interfața UART și prin citirea ulterioară a cardului SD pe un PC pentru a asigura scrierea corectă a datelor text.
  
-<note warning> +==== Demo Video ==== 
-Arhiva conține fișierele sursă (.c și .h), schema electrică realizată în Tinkercad și documentația tehnică a componentelor. +Demonstrația practică a funcționării sistemului ​în ambele cazuri de testare:
-[[:pm:​prj2026:​vlad.radulescu2901:​alcohol_lock_v1.zip|Download Arhivă Proiect]] +
-</​note>​+
  
-===== Jurnal =====+[[https://​youtube.com/​shorts/​0Pz0abMM4Bo?​feature=share|Demo Video Alcohol-Lock - YouTube]]
  
-<note tip> +  * **Cazul Sobru**: Se detectează o concentrație sigură (0.00 mg/L), se aprinde LED-ul Verde și servomotorul deblochează contactul
-  ​* **Săptămâna 1:** Documentare asupra senzorului MQ-și calibrarea acestuia+  * **Cazul Alcool detectat**: La apropierea vaporilor de alcool, ecranul afișează valoarea depășită și alerta "Nu poti conduce!",​ fiind acompaniată de aprinderea LED-ului Roșu și sunetul ​de avertizare al buzzerului.
-  * **Săptămâna 2:** Implementarea comunicării I2C pentru LCD și controlul PWM pentru servo. +
-  * **Săptămâna 3:** Integrarea tuturor modulelor ​și testarea sistemului ​de blocare. +
-</​note>​+
  
-===== Bibliografie/​Resurse ​=====+==== Calibrarea senzorului ​==== 
 +Senzorul MQ-3 își modifică rezistența internă la contactul cu alcoolul. Calibrarea s-a făcut folosind valoarea determinată experimental în aer curat R0 60.0 kΩ și o rezistență de sarcină RL 10.0 kΩ: 
 +  * Tensiunea de ieșire se obține din raportul valorii brute ADC raportat la 1024 pași. 
 +  * Se determină rezistența curentă a senzorului Rs pe baza divizorului de tensiune. 
 +  * Concentrația finală în mg/L se calculează pe baza raportului dintre Rs și R0 folosind coeficienții curbei logaritmice din fișa tehnică. 
 +  * Valorile reziduale mici, sub 1.00 mg/L, sunt interpretate ca fiind 0.0 mg/L pentru a elimina zgomotul de fond.
  
-<​note>​ +==== Optimizări software realizate ==== 
-**Resurse Hardware:** +  * **Oprirea PWM-ului la repaus**: În `servo.c`, funcția `servo_lock` decuplează semnalul PWM din registre și pune pinul PB1 direct pe starea LOW. Acest lucru elimină vibrațiile parazite ale servomotorului și scade consumul de curent când nu se face mișcare. 
-  ​Datasheet ATmega324P +  * **Eliminarea operanzilor float din sprintf**: Pentru a salva spațiu prețios în memoria Flash, valoarea float a fost extrasă prin conversie directă în două variabile întregi separate (partea întreagă și partea zecimală), salvând peste 15% din spațiul de stocare al programului. 
-  * Datasheet MQ-3 Gas Sensor +  * **Forțarea salvării pe card (Flush)**: Imediat după scrierea textului, se apelează funcția de încheiere cu parametri nuli din Petit FatFs. Acest lucru golește bufferul RAM direct în memoria nevolatilă a cardului, securizând logurile în cazul unei deconectări bruște a bateriei vehiculului.
-  * Tutoriale conexiune I2C LCD+
  
-**Resurse Software:​** +==== Cod Relevant ====
-  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab3|Laborator ADC - OCW]] +
-  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab4|Laborator PWM - OCW]] +
-</​note>​+
  
-<html><a class="media mediafile mf_pdf"​ href="?do=export_pdf">​Export to PDF</​a></​html>+Mai jos este prezentată funcția principală care orchestrează algoritmul de prelevare, calculul alcoolemiei,​ scrierea pe cardul SD și decizia de blocare a contactului:​ 
 + 
 +<code c> 
 +float calculeaza_alcoolemie(uint16_t adc_raw) { 
 +    if (adc_raw ​== 0) adc_raw ​1;  
 +    float v_out = ((float)adc_raw / 1024.0) * 5.0; 
 +    float rs = RL_VALUE * (5.0 - v_out) / v_out; 
 +    float ratio = rs / R0_CLEAN_AIR;​ 
 +    float mgL = 0.4 * pow(ratio, -1.431); 
 +    if (mgL < 1.00) { mgL = 0.0; } 
 +    return mgL; 
 +
 +</code> 
 + 
 +Rutina de tratare ​întreruperii externe asociată butonului START: 
 + 
 +<code c> 
 +ISR(INT0_vect) {  
 +    button_flag = 1;  
 +
 +</code> 
 + 
 +==== Repozitor GitHub ==== 
 + 
 +Întregul cod sursă al proiectului,​ driverele dezvoltate și fișierele de configurare PlatformIO pot fi consultate la următorul link: 
 + 
 +  * [[https://​github.com/​dariacampeanu/​Alcohol-Lock]] 
 + 
 +===== Bibliografie ===== 
 + 
 +  * **ChaN**, *Petit FatFs Module User Application Interface*, disponibil online la: [[http://​elm-chan.org/​fsw/​ff/​00pff.html]]. 
 +  * **Microchip Technology**,​ *ATmega328P 8-bit AVR Microcontroller with 32K Bytes In-System Programmable Flash - Datasheet*, [[https://​www.microchip.com]]. 
 +  * **Hanwei Electronics Co., Ltd**, *MQ-3 Gas Sensor for Alcohol Detection - Technical Data*, Product Datasheet. 
 +  * **Librăria avr-libc**, *AVR Libc Reference Manual*, disponibil online la: [[https://​www.nongnu.org/​avr-libc/​]].
pm/prj2026/vlad.radulescu2901/daria.campeanu.1778051875.txt.gz · Last modified: 2026/05/06 10:17 by daria.campeanu
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