Co potrzebujemy?
- 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
- 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?
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