This shows you the differences between two versions of the page.
pm:prj2023:drtranca:stefan.stan [2023/05/28 15:34] stefan.stan2402 [Descriere functionalitate] |
pm:prj2023:drtranca:stefan.stan [2023/05/28 22:28] (current) stefan.stan2402 [Concluzii] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Etilotest ====== | + | {{:pm:prj2023:drtranca:etilotest.zip|}}====== Etilotest ====== |
<note tip> | <note tip> | ||
Line 45: | Line 45: | ||
- | ===== Mediul de dezvoltare ===== | + | ==== Mediul de dezvoltare ==== |
La nivel de implementare a codului, am folosit Arduino IDE | La nivel de implementare a codului, am folosit Arduino IDE | ||
Line 51: | Line 51: | ||
- | ===== Biblioteci folosite ===== | + | ==== 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. | 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. | ||
- | <note tip> | + | ==== Descriere functionalitate ==== |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
- | + | ||
- | + | ||
- | ===== 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(). | 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(). | ||
Line 69: | Line 60: | ||
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. | 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 | ||
+ | - Am folosit debugging cu seriala pentru a afisa valorile primite de la senzorul de gaz, starea butonului afisat. | ||
+ | |||
+ | 2. I2C | ||
+ | - Am folosit biblioteca 'LiquidCrystal_I2C.h' pentru a facilita comunicarea intre microcontroller si ecran. | ||
+ | - API-ul explicat pe scurt: | ||
+ | - init() -> initializeaza comunicarea prin protocolul I2C. | ||
+ | - clear() -> sterge tot continutul existent pe ecran. | ||
+ | - backlight() -> aprinde ledurile din spatele ecranului; | ||
+ | - setCursor() -> seteaza inceputul cursorului de scriere pe ecran | ||
+ | - 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ă. | ||
Line 74: | Line 91: | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | Am obtinut un etilotest care afiseaza un mesaj in functie de cantitatea de alcool determinata in aerul expirat, iar valoarea este afisata pe seriala. |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Pentru un demo vizual, intrati pe urmatorul link: https://drive.google.com/file/d/1jECQA-Zpb9RRyhnK6wZDqzt3-ZvT5yjN/view?usp=share_link |
- | </note> | + | |
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Mi se pare foarte nice ca am reusit sa fac un etilotest. Pe langa faptul ca mi-a facut mare placere sa lucrez la acest proiect, acum stiu si daca pot sa plec cu masina dupa ce am baut o bere sau nu, cel putin orientativ =) | ||
+ | |||
+ | Cel mai nice e ca e super rewarding sa vezi la final ca iti merge proiectul, si chiar e ceva functional. | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | + | Codul se gaseste in fisierul .ino din arhiva de mai jos: |
- | 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:prj2023:drtranca:etilotest.zip |}} |
- | </note> | + | |
- | ===== Jurnal ===== | ||
- | |||
- | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
- | </note> | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
Line 100: | Line 114: | ||
</note> | </note> | ||
+ | ==== Resurse Hardware ==== | ||
Senzor MQ3 Datasheet: https://www.sparkfun.com/datasheets/Sensors/MQ-3.pdf \\ | Senzor MQ3 Datasheet: https://www.sparkfun.com/datasheets/Sensors/MQ-3.pdf \\ | ||
+ | Ecran LCD cu modul I2C: http://www.handsontec.com/dataspecs/module/I2C_1602_LCD.pdf \\ | ||
Datasheet microcontroller: https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf | Datasheet microcontroller: https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf | ||
+ | |||
<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> | ||
+ | |||