Table of Contents

Alcohol-Lock

Introducere

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 expirat, procesează 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.

Sistemul vizează eliminarea erorii umane în autoevaluarea capacității de condus, oferind o barieră tehnică obiectivă împotriva condusului sub influența alcoolului.

Descriere generală

Dispozitivul integrează module de achiziție date, control și stocare pentru a îndeplini următoarele funcții:

Schemă Bloc

Schema Bloc Alcohol-Lock

Hardware Design

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 16×2 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

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ă INT0, permițâ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

Schema electrică

Schema electrică Alcohol-Lock

Export to PDF

Software Design

Stadiul actual al implementării software

Proiectul software este complet funcțional și structurat modular pe straturi de abstractizare hardware:

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:

Elementul de noutate al proiectului

Proiectul realizează un dispozitiv de siguranță autonom bazat pe Edge Processing. Calculele matematice pentru determinarea concentrației clinice (mg/L) din rezistența brută a senzorului sunt executate local, în timp real, direct pe cip. Totodată, componenta de Data Logger securizează utilizarea vehiculului printr-o jurnalizare continuă pe card, formând o barieră tehnică ce previne pornirea neautorizată a motorului.

Justificarea utilizării funcționalităților din laborator

Aplicația integrează organic cunoștințele acumulate de-a lungul celor 7 laboratoare ale disciplinei:

Scheletul proiectului și validarea

Aplicația funcționează sub forma unei mașini de stări rulate într-o buclă infinită:

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.

Demo Video

Demonstrația practică a funcționării sistemului în ambele cazuri de testare:

Demo Video Alcohol-Lock - YouTube

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Ω:

Optimizări software realizate

Cod Relevant

Mai jos este prezentată funcția principală care orchestrează algoritmul de prelevare, calculul alcoolemiei, scrierea pe cardul SD și decizia de blocare a contactului:

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;
}

Rutina de tratare a întreruperii externe asociată butonului START:

ISR(INT0_vect) { 
    button_flag = 1; 
}

Repozitor GitHub

Întregul cod sursă al proiectului, driverele dezvoltate și fișierele de configurare PlatformIO pot fi consultate la următorul link:

Bibliografie