Differences

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

Link to this comparison view

pm:prj2021:alazar:etilotest_smart [2021/06/02 12:03]
mihai_flaviu.dinca
pm:prj2021:alazar:etilotest_smart [2021/06/02 21:05] (current)
mihai_flaviu.dinca
Line 7: Line 7:
  
 ===Descriere generală=== ===Descriere generală===
-Dupa ce pornim proiectul, acesta va afisa pe ecran un timer de 40 secunde sub forma de procent ce va da timp senzorului sa se incalzeasca,​ astfel avand o acuratete mult mai buna. Dupa aceea, vom fi rugati sa apasam pe buton pentru a incepe citirea datelor de la senzor. Un led albastru se va aprinde pe durata de 10 secunde, in care va face 10 citiri de la senzor. Dupa ce citirea a luat sfarsit, led-ul albastru se va inchide si se va afisa pe LCD datele urmatoare: Particule de alcool / 10^6 particule de aer, alcoolemia in respiratie, alcoolemia in sange, cantitatea aproximata de alcool pur din sange si timpul aproximat in care alcoolul va fi complet eliminat din corp pentru un barbat de 70kg.\\+Dupa ce pornim proiectul, acesta va afisa pe ecran un timer de 40 secunde sub forma de procent ce va da timp senzorului sa se incalzeasca,​ astfel avand o acuratete mult mai buna. Dupa aceea, vom fi rugati sa apasam pe buton pentru a incepe citirea datelor de la senzor. Un led albastru se va aprinde pe durata de 10 secunde, in care va face 10 citiri de la senzor. Dupa ce citirea a luat sfarsit, led-ul albastru se va inchide, se va aprinde un LED rosu sau verde, daca limita penala a fost atinsa(40mg/​L aer respirat) ​si se va afisa pe LCD datele urmatoare: Particule de alcool / 10^6 particule de aer, alcoolemia in respiratie, alcoolemia in sange, cantitatea aproximata de alcool pur din sange si timpul aproximat in care alcoolul va fi complet eliminat din corp pentru un barbat de 70kg.\\
 {{:​pm:​prj2021:​alazar:​untitled_diagram_1_.png|}} {{:​pm:​prj2021:​alazar:​untitled_diagram_1_.png|}}
 ===Hardware Design=== ===Hardware Design===
Line 13: Line 13:
   * Arduino Uno   * Arduino Uno
   * Breadboard   * Breadboard
-  * Ecran LCD+  * Ecran LCD Nokia 5110
   * Resistente   * Resistente
   * Senzor de etil   * Senzor de etil
-  * Ecran LCD +  * LED-uri
-  * 2 LED-uri+
   * Fire   * Fire
   * Buton   * Buton
-===SoftWare ​Design===+Pentru partea hardware, am parcurs etapele: 
 +  - Am legat LCD-ul la placa cu ajutorul breadboard-ului si am incercat sa afisez orice fel de text. A fost partea cea mai dificila deoarece afisajul disparea in mod aleator, fiind necesare multe ore pentru a imi da seama ca ecranul nu este ars. Am ales sa nu folosesc cabluri pentru a pune LCD-ul pe breadboard, ci l-am pus direct, deoarece se tot intrerupea conexiunea si se stergea textul. 
 +  - Am legat LED-urile la placa cu rezistente de 330 ohmi. 
 +  - Senzorul l-am montat cu ajutorul unor fire tata-mama 
 +  - Am montat butonul pe breadboad, care va da start citirii de la senzor. 
 +{{:​pm:​prj2021:​alazar:​skema.png?​700|}} 
 +===Software ​Design=== 
 +Partea de software am realizat-o in Arduino IDE. Sursa de inspiratie au fost exemplele oferite de biblioteca Adafruit_PCD8544,​ pe care am si folosit-o pentru a afisa valorile pe LCD, dupa care am implementat restul de functiuni. 
 +<spoiler Cod Arduino>​ 
 +<​code>​ 
 + 
 +#include <​SPI.h>​ 
 +#include <​Adafruit_GFX.h>​ 
 +#include <​Adafruit_PCD8544.h>​ 
 +#define MQ3pin 0 
 +unsigned long time; 
 +float temp = 0; 
 +Adafruit_PCD8544 display = Adafruit_PCD8544(7,​ 6, 5, 4, 3); 
 +float sensorValue = 0; 
 +const int LED_PIN1 =  11; 
 +const int LED_PIN2 =  8; 
 +const int BUTTON_PIN = 9; 
 +const int LED_PIN =  10;  
 +int buttonState = 0; 
 +float aer; 
 +int citit = 0; 
 +void setup() { 
 +  aer = analogRead(MQ3pin);​ 
 +   ​pinMode(LED_PIN,​ OUTPUT); 
 +   ​pinMode(LED_PIN1,​ OUTPUT); 
 +   ​pinMode(LED_PIN2,​ OUTPUT); 
 +   ​pinMode(BUTTON_PIN,​ INPUT_PULLUP);​ 
 +  Serial.begin(9600);​ 
 +  display.begin();​ 
 +  display.setContrast(56);​ 
 + 
 +
 +void loop(){ 
 +  buttonState = digitalRead(BUTTON_PIN);​ 
 +  time = millis()/​1000;​ 
 +   
 +  if(time <= 20){ 
 +   int progress_time =  map(time, 0, 20, 0, 100); 
 +  display.clearDisplay();​ 
 +  display.setCursor(0,​0);​ 
 +  display.println("​The sensor is warming up!"​);​ 
 +  display.setCursor(0,​20);​ 
 +  display.println("​Have patience."​);​ 
 +  display.setCursor(30,​30);​ 
 +  display.println(progress_time);​ 
 +  display.setCursor(48,​30);​ 
 +  display.println("​%"​);​ 
 +  display.display();​ 
 +  display.clearDisplay();​ 
 +  } else { 
 +      if(citit == 0){ 
 +        digitalWrite(LED_PIN1,​ LOW); 
 +        digitalWrite(LED_PIN2,​ LOW); 
 +      display.clearDisplay();​ 
 +      display.setCursor(0,​0);​ 
 +      display.println("​Press the button and breathe while the blue light is on..."​);​ 
 +      display.display();​ 
 +      } 
 +     ​if(buttonState == LOW){ 
 +  
 +        citit = 1;        
 +         for (int i = 0; i < 10; i++) { 
 +          delay(1000);​ 
 +          temp = analogRead(MQ3pin) - aer; 
 +          display.clearDisplay();​ 
 +          display.setCursor(0,​0);​ 
 +          display.println("​Reading..."​);​ 
 +          display.setCursor(0,​20);​ 
 +          display.println(temp);​ 
 +          display.display();​ 
 +          display.clearDisplay();​ 
 +          digitalWrite(LED_PIN,​ HIGH); 
 +           
 +           ​sensorValue = sensorValue + temp; 
 + 
 +          } 
 +        sensorValue = sensorValue / 10; 
 +        digitalWrite(LED_PIN,​ LOW);  
 +       
 +  } 
 +      if(citit == 1){ 
 +             
 +        float val_aer = sensorValue / 550; 
 +         float val_sange = val_aer * 2.1; 
 +          if(val_aer >= (float)0.4){ 
 +            digitalWrite(LED_PIN1,​ LOW); 
 +            digitalWrite(LED_PIN2,​ HIGH); 
 +            } else { 
 +            digitalWrite(LED_PIN1,​ HIGH); 
 +            digitalWrite(LED_PIN2,​LOW);​ 
 +              } 
 +        display.clearDisplay();​ 
 +        display.setCursor(0,​0);​ 
 +        display.println("​PPM:"​);​ 
 +        display.setCursor(25,​0);​ 
 +        display.println(sensorValue);​ 
 +          
 +          
 +        display.setCursor(0,​10);​ 
 +        display.println("​Aer:​ "); 
 +        display.setCursor(25,​10);​ 
 +        display.println(val_aer);​ 
 +        display.setCursor(50,​10);​ 
 +        display.println("​mg/​L"​);​ 
 +        display.setCursor(0,​20);​ 
 +        display.println("​Sange:​ "); 
 +        display.setCursor(35,​20);​ 
 +        display.println(val_sange);​ 
 +        display.setCursor(60,​20);​ 
 +        display.println("​g/​L"​);​ 
 +        display.setCursor(0,​30);​ 
 +        display.println("​Alcool Pur:"​);​ 
 +        display.setCursor(65,​30);​ 
 +        float x = val_aer * (float)100;​ 
 +        display.println((int)x);​ 
 +        display.setCursor(0,​40);​ 
 +        display.println("​Timp:"​);​ 
 +        display.setCursor(35,​40);​ 
 +        display.println(x / 12.5); 
 +        display.setCursor(60,​40);​ 
 +        display.println("​ore"​);​ 
 +        display.display();​ 
 +        delay(10000);​ 
 +        citit = 0; 
 +        } 
 +     } 
 +  } 
 +</​code>​ 
 +</​spoiler>​
 ===Rezultate Obtinute=== ===Rezultate Obtinute===
 +Proiectul a iesit asa cum imi doream si am implementat cam tot ce mi-am dorit de la el.
 +{{:​pm:​prj2021:​alazar:​nr1.jpg?​200|}}
 +{{:​pm:​prj2021:​alazar:​nr2.jpg?​200|}}
 +{{:​pm:​prj2021:​alazar:​nr3.jpg?​200|}}
 +{{:​pm:​prj2021:​alazar:​nr4.jpg?​200|}} \\
 +Demo:  https://​youtu.be/​qiokoZVNMRw
 ===Concluzie=== ===Concluzie===
 +Acest proiect mi s-a parut cel mai fun lucru pe care l-am facut in facultate. Am petrecut mult mai multe ore decat ma asteptam, dar au fost ore pe care nu le consider pierdute, am testat multe lucruri, m-am jucat mult cu piesele si pot sa zic ca am invatat super multe. Partea buna este ca am comandat foarte multe componente care mi-au ramas si mai am inca cateva idei nice cu care sa ma joc in viitorul apropiat.
 ===Bibliografie=== ===Bibliografie===
-{{:​pm:​prj2021:​alazar:​etilotest_smart_3_.pdf|}}+https://​lastminuteengineers.com/​nokia-5110-lcd-arduino-tutorial/​ \\ 
 +https://​lastminuteengineers.com/​mq3-alcohol-sensor-arduino-tutorial/​ \\ 
 +https://​github.com/​adafruit/​Adafruit-PCD8544-Nokia-5110-LCD-library \\ 
 ++ multe alte site-uri de unde am luat informatii despre alcoolemie si formule pentru a calcula toate valorile, pe care nu le mai tin minte. \\ 
 +{{:​pm:​prj2021:​alazar:​etilotest_smart.pdf|}}
  
  
pm/prj2021/alazar/etilotest_smart.1622624594.txt.gz · Last modified: 2021/06/02 12:03 by mihai_flaviu.dinca
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