/* MQ-4 Methane Sensor module and HC-SR04 distance sensor with Arduino */
//afisaza cate un un mesaj in functie de activarea celor doi senzori//
#include <LiquidCrystal.h> //afiseaza mesajele pe un lcd 16*2//
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const int trigPin=8;
const int echoPin=9;
int triggerDistance = 5;
long durata;
int distanta;
const int AO_Pin=0; // Connect AO of MQ4 with Analog channel 0 pin (A0) of Arduino
const int DO_Pin=7; // Connect DO of MQ4 with Digital pin 8 (D8) of Arduino
const int difuzor_Pin=6; // Connect an speaker with D6 pin of Arduino
int threshold_value; // A variable to store digital output of MQ4
int AO_Out; // stores analog output of MQ4 sensor
static uint32_t oldtime; // variabla globala pentru program
const unsigned long intarziere_afisare = 3000; // durata intarzierii
void setup() {
lcd.begin(16, 2);
pinMode(DO_Pin, INPUT); // Configure D7 pin as a digital input pin
pinMode(difuzor_Pin, OUTPUT); //Configure D2 pin as a digital output pin
pinMode (trigPin, OUTPUT);
pinMode (echoPin, INPUT);
lcd.print("Bine ati venit");
delay(500);
lcd.clear();
oldtime=millis();
}
void loop() {
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
durata = pulseIn(echoPin, HIGH);
distanta = durata*0.034/2;
threshold_value= digitalRead(DO_Pin); //Read digital output of MQ4 sensor
AO_Out= analogRead(AO_Pin); // Take Analog output measurement sample from AO pin of MQ4 sensor
threshold_value= digitalRead(DO_Pin); //Read digital output of MQ4 sensor//
// lcd.clear();
if ((threshold_value== HIGH)&&(distanta>5))// dispare obiectul plasat la o distanta mai mica de 5cm
{
if ( (millis()-oldtime) > intarziere_afisare) // intarziem afisarea noilor conditii si emiterea tonului de avertizare
{
tone(6,1000);
lcd.setCursor(8,1);//gaz
lcd.print("1");
lcd.setCursor(8,1);//distanta
lcd.print("0");
oldtime = millis();
}
}
else
if ((threshold_value== HIGH)&&(distanta<=5))//reapare obiectul plasat la o distanta mai mica de 5cm
{
noTone(6);
lcd.setCursor(8,0);
lcd.print("1");
lcd.setCursor(8,1);
lcd.print("1");
oldtime = millis();
}
else
if ((threshold_value== LOW)&&(distanta<=5))//senzorul nu mai detecteaza gazul
{
if ( (millis()-oldtime) > intarziere_afisare)// intarziem afisarea noilor conditii si emiterea tonului de avertizare
{
tone(6,1000);
lcd.setCursor(8,0);
lcd.print("0");
lcd.setCursor(8,1);
lcd.print("1");
oldtime=millis();
}
}
else
if ((threshold_value== HIGH)&&(distanta<=5)) // senzorul detecteaza gazul
{
noTone(6);
lcd.setCursor(8,0);
lcd.print("1");
lcd.setCursor(8,1);
lcd.print("1");
oldtime = millis();
}
if ((millis()-oldtime)>4)
{
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print(millis()-oldtime);
}
else {
lcd.setCursor(0,0);
lcd.print(" ");
}
}