Differences

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

Link to this comparison view

pm:prj2024:sseverin:diana.stanicoaea [2024/05/14 00:06]
diana.stanicoaea [Hardware Design]
pm:prj2024:sseverin:diana.stanicoaea [2024/05/27 00:16] (current)
diana.stanicoaea [Bibliografie/Resurse]
Line 6: Line 6:
 Scopul principal al acestui proiect este de a oferi o modalitate simplă și eficientă de a determina dacă cineva este apt să conducă în siguranță. Prin detectarea nivelului de alcool din aerul expirat, proiectul ajută la prevenirea accidentelor cauzate de consumul de alcool înainte de a urca la volan. Scopul principal al acestui proiect este de a oferi o modalitate simplă și eficientă de a determina dacă cineva este apt să conducă în siguranță. Prin detectarea nivelului de alcool din aerul expirat, proiectul ajută la prevenirea accidentelor cauzate de consumul de alcool înainte de a urca la volan.
  
-Pornind de la experiența personală ca șofer, am constatat lipsa unui instrument portabil și accesibil pentru a testa nivelul de alcool înainte de a urca la volan. Ca șofer responsabil,​ am simțit nevoia de a avea o modalitate rapidă și precisă de a evalua propriul nivel de alcool, mai ales în situații în care consumul de alcool este incert sau în cazul în care am consumat alimente sau medicamente care pot afecta rezultatul testului. De asemenea, am observat că astfel de dispozitive sunt disponibile doar pentru autorități,​ iar lipsa lor pe piața generală m-a inspirat să dezvolt un astfel de dispozitiv pentru uz personal și pentru ceilalți șoferi responsabili. Astfel, am dorit să creez un etilotest digital care să ofere o soluție practică și accesibilă pentru evaluarea rapidă și precisă a nivelului de alcool înainte de a lua decizia de a conduce.+<​note>​Pornind de la experiența personală ca șofer, am constatat lipsa unui instrument portabil și accesibil pentru a testa nivelul de alcool înainte de a urca la volan. Ca șofer responsabil,​ am simțit nevoia de a avea o modalitate rapidă și precisă de a evalua propriul nivel de alcool, mai ales în situații în care consumul de alcool este incert sau în cazul în care am consumat alimente sau medicamente care pot afecta rezultatul testului. De asemenea, am observat că astfel de dispozitive sunt disponibile doar pentru autorități,​ iar lipsa lor pe piața generală m-a inspirat să dezvolt un astfel de dispozitiv pentru uz personal și pentru ceilalți șoferi responsabili. Astfel, am dorit să creez un etilotest digital care să ofere o soluție practică și accesibilă pentru evaluarea rapidă și precisă a nivelului de alcool înainte de a lua decizia de a conduce.</​note>​
  
 Un etilotest portabil este indispensabil pentru orice șofer responsabil,​ furnizând o modalitate rapidă și precisă de a evalua capacitatea de a conduce în siguranță. Un etilotest portabil este indispensabil pentru orice șofer responsabil,​ furnizând o modalitate rapidă și precisă de a evalua capacitatea de a conduce în siguranță.
Line 18: Line 18:
  
 **Buzzer-ul:​** Produce un sunet în funcție de rezultatul testului. De exemplu, emite un sunet scurt pentru un rezultat negativ și un sunet lung pentru un rezultat pozitiv. **Buzzer-ul:​** Produce un sunet în funcție de rezultatul testului. De exemplu, emite un sunet scurt pentru un rezultat negativ și un sunet lung pentru un rezultat pozitiv.
-<​note ​tip>+<​note>​
 **Mod de functionare:​** **Mod de functionare:​**
 După ce butonul este apăsat, senzorul MQ-3 începe să măsoare concentrația de alcool din aer. Datele detectate sunt apoi procesate de către microcontrollerul Arduino, iar rezultatul este afișat pe display-ul OLED. În același timp, LED-ul RGB și buzzer-ul sunt activate în funcție de incadrarea rezultatului în limitele admise. Astfel, utilizatorul primește informații clare și imediate despre aptitudinea sa de a conduce în siguranță. După ce butonul este apăsat, senzorul MQ-3 începe să măsoare concentrația de alcool din aer. Datele detectate sunt apoi procesate de către microcontrollerul Arduino, iar rezultatul este afișat pe display-ul OLED. În același timp, LED-ul RGB și buzzer-ul sunt activate în funcție de incadrarea rezultatului în limitele admise. Astfel, utilizatorul primește informații clare și imediate despre aptitudinea sa de a conduce în siguranță.
Line 36: Line 36:
   * Rezistente: 220Ω   * Rezistente: 220Ω
  
-{{ :​pm:​prj2024:​sseverin:​1.png?​300 |}}+{{ :​pm:​prj2024:​sseverin:​1.png?​500 |}}
  
-{{ :​pm:​prj2024:​sseverin:​2png.png?​300 |}}+{{ :​pm:​prj2024:​sseverin:​2png.png?​500 |}}
  
-{{ :​pm:​prj2024:​sseverin:​3.jpg?​300 |}}+{{ :​pm:​prj2024:​sseverin:​3.jpg?​500 |}}
 ===== Software Design ===== ===== Software Design =====
 +**Biblioteci folosite:**
 +  * Wire.h -  folosită pentru comunicarea I2C cu afișajul OLED.
 +  * Adafruit_GFX.h -  folosită pentru a desena forme și a afișa text pe ecranul OLED.
 +  * Adafruit_SSD1306.h - folosită pentru a controla și inițializa afișajul OLED SSD1306.
  
 +**Laboratoare folosite**
 +  * UART → folosit pentru a afișa informații de debug.
 +  * TIMERE → folosit pentru a seta timpul de masurare a nivelului de alcool.
 +  * PWM → folosit pentru a controla buzzer-ul pasiv.
 +  * I2C → folosit pentru ecranul OLED.
  
-<note tip> +**Descrierea ​logicii și metodelor folosite** 
-Descrierea ​codului aplicaţiei (firmware): +  * **setup()** - folosit pentru initializarea componentelor ​(ecran OLEEDbuton cu rezistență internă de pull-up, led RGB, buzzer
-  * mediu de dezvoltare ​(if any) (e.g. AVR StudioCodeVisionAVR+  * **loop()** - aici este implementata toata logica programului. Initial se afiseaza un mesaj de pregatire al senzorului deoarece acesta trebuie sa se inclazeasca pentru a afisa valori corecte. Cand timerul expira, voi afisa pe ecran faptul ca senzorul este gata si se poate incepe masurarea prin apasarea butonului. Dupa ce este apasat se va incepe masurarea timp de 7 secunde. Dupa ce s-au terminat cele 7 secunde voi afisa ultima valoare masurata si voi apela functia printResult() pentru a declansa actiunile corespunzatoare in functie de valoare. 
-  * librării şi surse 3rd-party ​(e.g. Procyon AVRlib) +  * **printResult()**  
-  ​algoritmi şi structuri ​pe care plănuiţi ​să le implementaţi +                  <​note>​ 
-  * (etapa 3surse şi funcţii implementate+                  - Daca valoarea este mai mica de 200, se va afisa 'You can drive.'​ pe ecran si se va face led-ul verde. 
 +                  - Daca valoarea se afla intre 200 si 280, se va afisa 'Wait one hour.' pe ecran, led-ul va fi galben iar buzzer-ul va transmite sunete intrerupte. 
 +                  - Daca valoarea se afla intre 280 si 350, se va afisa 'Wait a few hours.'​ pe ecran, led-ul va fi tot galben, iar buzzer-ul va transmite aceleasi sunete intrerupte. 
 +                  - Daca valoarea este mai mare de 350, se va afisa 'Do not drive!',​ led-ul va deveni rosu iar buzzer-ul va scoate un sunet constant de alta frecventa.
 </​note>​ </​note>​
 +  * **printButtonPrompt()** - functie pentru a afisa mesajul ca senzorul este gata de masurare.
 +  * **printTitle()** - functie pentru a afisa numele '​Breatalyzer"​ constant in partea de sus a ecranului.
 +  * **printWarming()** - functie pentru a afisa mesajul de pregatire a senzorului.
 +  * **printAlcohol()** - functie care afiseaza valoarea nivelului de alcool.
 +  * **readAlcohol()** - functie pentru citirea valorilor de la senzor si calibrarea lor.
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<​note ​tip+<​note>​ 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru.+Demos:  
 +  * [[https://​youtu.be/​sa9CNZZ7o-8?​si=sKB12-hLpTnPyphd|Exemplu 1]] 
 +  * [[https://​youtube.com/​shorts/​4SyZZIwYV2M?​si=dK28bVFj5OvlAsvM|Exemplu 2]] 
 </​note>​ </​note>​
  
 ===== Concluzii ===== ===== Concluzii =====
  
 +Prin combinarea componentelor hardware și software, am reușit să construiesc un dispozitiv capabil să detecteze nivelurile de alcool din respirație și să ofere recomandări corespunzătoare șoferilor.
 +
 +În timpul dezvoltării,​ am întâlnit diverse provocări tehnice, cum ar fi gestionarea temporizărilor și a controlului buzzer-ului fără a bloca funcționarea sistemului. Cu toate acestea, prin aplicarea unor soluții eficiente și prin perseverență,​ am reușit să depășesc aceste obstacole și să obțin rezultatele dorite.
 ===== Download ===== ===== Download =====
  
-<​note ​warning> +<​note>​
-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**.+{{:pm:prj2024:sseverin:breathalyzer.zip|}}
 </​note>​ </​note>​
  
Line 77: Line 99:
  
 <​note>​ <​note>​
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse ​Software** şi **Resurse Hardware**.+Resurse software: 
 +  * https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab1-2023 
 +  ​https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab3-2023-2024 
 +  ​https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab6-2023-2024 
 + 
 +Resurse ​hardware: 
 +  ​https://​www.sparkfun.com/​datasheets/​Sensors/​MQ-3.pdf 
 +  ​https://​docs.arduino.cc/​tutorials/​generic/​digital-input-pullup/​ 
 +  ​https://​docs.arduino.cc/​learn/​microcontrollers/​analog-output/​ 
 +  ​https://​circuitdigest.com/​microcontroller-projects/​understanding-difference-between-active-and-passive-buzzer-with-arduino
 </​note>​ </​note>​
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2024/sseverin/diana.stanicoaea.1715634386.txt.gz · Last modified: 2024/05/14 00:06 by diana.stanicoaea
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