piątek, 27 marca 2020

Zrób to sam, bardzo dokładny alkomat na podstawie arduino

I kolejny bardzo przydatny projekt oparty o kontroler arduino. Tym razem jest to alkomat, w dodatku bardzo czuły, pokazujący wynik do 1 tysięcznej miligrama na litr. Dzięki specjalnemu przelicznikowi alkomat taki może naprawdę zastąpić te prawdziwe.




Co potrzebujemy?

Oczywiście to co w naszych pozostałych projektach czyli standardowo:

  • moduł ATMEGA 2560 (klon)
  • wyświetlacz LCD keypad SHIELD (nakładka)




A także:

  • dowolny buzzer (piezzo) 


  • moduł czujnika alkoholu MQ-3 


https://kamami.pl/czujniki-gazow/211358-modmq-3-modul-z-czujnikiem-stezenia-alkoholu.html?search_query=MQ-3&results=5
(pamiętajcie: rozróżniamy samodzielny czujnik oraz moduł  czujnikiem, bierzemy ten z modułem czyli gotową płytką z wlutowanym już czujnikiem)







PROJEKT NUMER 2

Jeśli chcecie lepszy wyświetlacz możecie zaopatrzyć się w:

  • wyświetlacz nokia 5110 (cena do 20 zł)

https://kamami.pl/lcd-84x48/180404-modlcd1.html?search_query=nokia+5110&results=1





Co należy zrobić najpierw?

Zaraz po zakupie czujnika MQ-3, należy go najlepiej "wypalać" przez około 24 godziny, czyli powinien grzać się podłączony pod 5 volt - wtedy pomiary będą o wiele dokładniejsze.




Schemat połączeń











Oblicz mnożnik




Zanim wgramy program, musimy przeliczyć wartość napięcia wyjściowego pobieraną z naszego czujnika







Ja musiałem wstawić wartość
    if(mgL > 0.09)
ponieważ tylko taka dawała rzeczywiste pomiary zweryfikowane przez profesjonalny alkomat, ale w każdym przypadku może to być inna wartość.







Program do wgrania




#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#define sensor A8
#define led 53
#define buz 22
void setup()
{
  Serial.begin(9600);
  lcd.begin(16,2);
  lcd.print(" Alkomat ");
  lcd.setCursor(0,1);
  lcd.print(" Poczekaj ... ");
  delay(2000);
  pinMode(sensor, INPUT);
  pinMode(buz, OUTPUT);
  pinMode(led, OUTPUT);
  lcd.clear();
}
void loop()
{
  float adcValue=0;
  for(int i=0;i<10;i++)
  {
    adcValue+= analogRead(sensor);
    delay(10);
  }
    float v= (adcValue/10) * (5.0/1024.0);
    float mgL= 0.05 * v;
    Serial.print("pom.");
    Serial.print(mgL);
    Serial.print(" mg/L");
    lcd.setCursor(0,0);
    lcd.print("pom. ");
    lcd.print(mgL,4);
    lcd.print(" mg/L        ");
    lcd.setCursor(0,1);
    if(mgL > 0.09)
    {
      lcd.print("Pijany!!!   ");
      Serial.println("    Pijany!!!");
      digitalWrite(buz, HIGH);
      digitalWrite(led, HIGH);
    }
    else
    {
      lcd.print("Normalny  ");
      Serial.println("    Normalny");
      digitalWrite(buz, LOW);
      digitalWrite(led, LOW);
    }
    delay(100);
 
}






Czujnik zacznie piszczeć i alarmować zaraz po przekroczeniu 0,9 ml/L czyli 0.2 promila







Projekt 2 oparty o wyświetlacz nokia 5110


Program do wgrania:


const int AOUTpin=7;//the AOUT pin of the alcohol sensor goes into analog pin A0 of the arduino
const int DOUTpin=9;//the DOUT pin of the alcohol sensor goes into digital pin D8 of the arduino
const int ledPin=10;//the anode of the LED connects to digital pin D13 of the arduino
int limit;
int value;

#include <LCD5110_Graph.h>

int sensorValue;
float sonuc;
//     CLK  - Pin 7
//     DIN  - Pin 6
//      DC  - Pin 5
//      RST - Pin 4
//      CS  - Pin 3
LCD5110 myGLCD(7,6,5,4,3);
extern uint8_t SmallFont[];
extern uint8_t BigNumbers[];


void setup() {

 myGLCD.InitLCD();

Serial.begin(9600);//sets the baud rate
pinMode(DOUTpin, INPUT);//sets the pin as an input to the arduino
pinMode(ledPin, OUTPUT);//sets the pin as an output of the arduino
}
void loop()
{
value= analogRead(AOUTpin);//reads the analaog value from the alcohol sensor's AOUT pin
limit= digitalRead(DOUTpin);//reads the digital value from the alcohol sensor's DOUT pin
  myGLCD.update();
  sensorValue = analogRead(AOUTpin);
  sonuc = (sensorValue*1.26)/450 ;
  // 200 DEĞERİ REFERANS ALINMIŞTIR
  myGLCD.setFont(SmallFont);     
  myGLCD.print("Alkohol ",CENTER,10);
  myGLCD.print("mg/L",RIGHT,40);


  myGLCD.setFont(BigNumbers);
   myGLCD.printNumF(sonuc,2,5,20);


  delay(500);
  myGLCD.update();
Serial.print("   Pomiar alkoholu: ");
Serial.println(value);//prints the alcohol value

Serial.print("Limit: ");
Serial.print(limit);//prints the limit reached as either LOW or HIGH (above or underneath)
delay(100);
if (limit == HIGH){
digitalWrite(ledPin, LOW);//if limit has been reached, LED turns on as status indicator
}
else{
digitalWrite(ledPin, HIGH);//if threshold not reached, LED remains off
}
}









Sketche i biblioteki do pobrania:

https://drive.google.com/open?id=1rYkUQRaO3G32n7tAuouz4lUwJO8Bp8Fu














Whatsapp Button works on Mobile Device only

Wpisz czego szukasz i kliknij w ikonkę lupy