This is an old revision of the document!


Etilotest

Nume: Stan Stefan
Grupa: 333CB

Introducere

Prezentare

Proiectul consta intr-un etilotest, care se pune in functiune printr-un buton, care afiseaza pe un ecran LCD cantitatea de alcool si un mesaj sugestiv, iar in eventualitatea in care este depasit un prag, folosesc un buzzer care sa avertizeze utilizatorul ca ar trebui sa se opreasca din consumat alcool.

Ideea si Scopul proiectului

Toata lumea are curiozitatea de a vedea ce alcoolemie ai dupa ce consumi o bere, doua sau mai multe, o bomboana cu rom, etc. Cu acest etilotest, poti vedea daca merita sa te urci la volan sau nu dupa ce ai consumat un produs ce contine orice urma de alcool. Sau daca mai intra o bere daca esti la petrecere si urmatoarea zi ai examen =).

Descriere generală

Placuta de Arduino Uno va primi date de la senzorul de alcool MQ3. Pe ecranul LCD se va afisa cantitatea de alcool din aerul expirat, si un mesaj sugestiv, in functie de cantitatea de alcool determinata. La depasirea unui anumit prag, microcontrollerul va activa un buzzer, pentru a anunta utilizatorul ca s-a depasit un anumit prag.

Schema Bloc

Hardware Design

Prototip implementat in Tinkercad:

Schema electrica:

Implementare finala hardware: etilotest_hw_final.jpg

Software Design

Mediul de dezvoltare

La nivel de implementare a codului, am folosit Arduino IDE Designul circuitului (pana sa ajunga piesele), si schema electrica au fost realizate in Tinkercad

Biblioteci folosite

Am utilizat 'LiquidCrystal_I2C.h', care ofera un API pentru comunicarea prin protocolul I2C cu ecranul LCD ce are atasat pe spate un modul I2C.

Descriere functionalitate

La pornirea etilotestului, acesta initiaza comunicarea cu ecranul LCD, initiaza setupul pentru ADC, pentru senzorul de alcool gazos, prin functia setupADC(), si pinii unde vor fi transmise impulsuri electrice de la buton si catre buzzer. Apoi se va citi in loop, pinul pentru apasarea butonului. Daca acesta nu este apasat, nu se va intra pe fluxul in care se citesc datele de pe senzor si afisarea aferenta. Cand butonul este apasat, se citesc datele venite de la senzor folosind analogReadCustom().

In continuare, am interpretat datele de la senzor si am observat, prin multitudine de testari in conditii diferite, ca valorile date sub 500 corespund la alcool determinat 0 in aerul expirat. Ce sare de 500 inseamna ca exista alcool determinat in aerul expirat. Am pus in functie de anumite intervale sa se primeasca un mesaj diferit pe lcd si buzzerul sa scoata diverse sunete in functie de “gravitatea” alcoolemiei.

O sa detaliez acum putin despre notiunile din laborator folosite:

1. USART. Digital Debugging

  1. Am folosit debugging cu seriala pentru a afisa valorile primite de la senzorul de gaz, starea butonului afisat.

2. I2C

  1. Am folosit biblioteca 'LiquidCrystal_I2C.h' pentru a facilita comunicarea intre microcontroller si ecran.
  2. API-ul explicat pe scurt:
    1. init() → initializeaza comunicarea prin protocolul I2C.
    2. clear() → sterge tot continutul existent pe ecran.
    3. backlight() → aprinde ledurile din spatele ecranului;
    4. setCursor() → seteaza inceputul cursorului de scriere pe ecran
    5. print() → scrie o litera pe ecran, si deplaseaza cursorul o celula la dreapta

3. ADC

  setupADC() 
  - 1. se setează referința de tensiune a ADC la AVCC (tensiunea de referință a alimentării cu curent continuu).
  - 2.  se setează prescalerul ADC la 128. Prescalerul controlează frecvența la care funcționează ADC și divizează frecvența de bază a microcontrolerului.
  - 3. se activează ADC. Bitul ADEN (ADC Enable) din registru ADCSRA este setat la 1 pentru a activa modulul ADC.
  analogReadCustom(uint8_t pin) -
  
  - 1. "ADMUX = (ADMUX & 0xF0) | (pin & 0x0F);" Această linie de cod setează canalul ADC pentru a selecta pinul specific de pe care se va face citirea analogică. "ADMUX" este registru special care controlează setările ADC. În această linie de cod, se utilizează operația cu masti pentru a păstra valoarea existentă a registrelor ADMUX, cu excepția celor mai puțin semnificative 4 biți. Acești 4 biți sunt înlocuiți cu valorile celor mai puțin semnificative 4 biți ai variabilei "pin" pentru a selecta canalul ADC corespunzător.
  - 2. "ADCSRA |= (1 << ADSC);" inițiază conversia analog-digitală. Bitul ADSC (ADC Start Conversion) din registru ADCSRA este setat la 1 pentru a declanșa începerea conversiei ADC.
  - 3. "while (ADCSRA & (1 << ADSC));" așteaptă finalizarea conversiei analog-digitale. Se utilizează o buclă while pentru a verifica în mod continuu starea bitului ADSC din registru ADCSRA. Cât timp bitul ADSC este setat la 1 (conversia este în curs), bucla se execută continuu, ceea ce înseamnă că așteaptă finalizarea conversiei.
  - 4. "return ADC;" returnează valoarea digitală rezultată din conversia analog-digitală. 

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

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.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Senzor MQ3 Datasheet: https://www.sparkfun.com/datasheets/Sensors/MQ-3.pdf
Datasheet microcontroller: https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf

Export to PDF

pm/prj2023/drtranca/stefan.stan.1685279521.txt.gz · Last modified: 2023/05/28 16:12 by stefan.stan2402
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