#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int mq2 = A0;
const int mq5 = A2;
void setup() {
lcd.begin(16, 2);
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" SENSORES ");
lcd.setCursor(0, 1);
lcd.print(" SMART DE GASES");
delay(4000);
lcd.clear();
pinMode(mq5, INPUT);
pinMode(mq2, INPUT);
Serial.begin(9600);
}
void loop() {
double mq5_value = analogToPPM(analogRead(mq5), 21.91, -0.6527, 1.30);
double mq2_value = analogToPPM(analogRead(mq2), 21.91, -0.6527, 1.30);
displayValue("LNG", mq5_value);
delay(3000);
displayValue("SMOKE", mq2_value);
delay(3000);
}
void displayValue(const char* gasName, double value) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(gasName);
lcd.setCursor(0, 3);
lcd.print(value);
lcd.setCursor(7, 7);
lcd.print("PPM");
}
double analogToPPM(int sensorValue, float R0, float m, float b) {
float sensor_volt = sensorValue * (5.0 / 1023.0);
float RS_gas = ((5.0 * 10.0) / sensor_volt) - 10.0;
float ratio = RS_gas / R0;
double ppm_log = (log10(ratio) - b) / m;
return ppm_log;
}