#include <WiFi.h>
#include <TinyGPS++.h>
#include "ThingSpeak.h"
#include "TM1637.h"
#include <MQSpaceData.h>
#define ADC_BIT_RESU (12)
#define space1 (35)
#define space2 (34)
#define CLK (18)
#define DIO (15)
TM1637 tm1637(CLK,DIO);
MQSpaceData MQ(ADC_BIT_RESU, space1);
MQSpaceData other(ADC_BIT_RESU, space2);
HardwareSerial neogps(1);
TinyGPSPlus gps;
int value1, value2, value3, value4, value5, value6, value7, sec;
int gpscontrol = 0;
String latitude, longitude;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
WiFiClient client;
unsigned long int hello2 = 2;
unsigned long int hello1 = 1;
static const char * myWriteAPIKey1 = "J2UEIZSZTC5568NM";
static const char * myWriteAPIKey2 = "ZVZ3UYIV4PTYA6XP";
unsigned long int lastTime = 0;
unsigned long int timerDelay = 15000;
void setup() {
Serial.begin(115200);
MQ.begin();
other.begin();
tm1637.init();
tm1637.set(BRIGHT_TYPICAL);
neogps.begin(9600, SERIAL_8N1, 4, 2);
WiFi.mode(WIFI_STA); Serial.println("Connecting to WiFi ");
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
ThingSpeak.begin(client);
}
void loop() {
sec = map(analogRead(32),0,(1 << ADC_BIT_RESU) - 1,1,14);
switch(sec){
case (1):
{
MQ135doing();
}
break;
case (2):
{
normal();
MQ.RSRoMQAir(9.8);
MQ.setRL(20);
MQ.dangerousPer(10.2);
value1 = MQ.MQ2DataH2();
MQ.dangerousPer(7.96);
value2 = MQ.MQ2DataLPG();
MQ.dangerousPer(31.63);
value3 = MQ.MQ2DataCO();
MQ.dangerousPer(16.33);
value4 = MQ.MQ2DataAlcohol();
MQ.dangerousPer(8.38);
value5 = MQ.MQ2DataPropane();
MQ.dangerousPer(17.86);
value6 = MQ.MQ2DataCH4();
MQ.dangerousPer(18.98);
value7 = MQ.MQ2Datasmoke();
// value8 = MQ.MQ2DataAir();
}
break;
case (3):
{
normal();
MQ.RSRoMQAir(60.53);
MQ.setRL(200);
MQ.dangerousPer(48.97);
value1 = MQ.MQ3DataLPG();
MQ.dangerousPer(74.69);
value2 = MQ.MQ3DataCH4();
MQ.dangerousPer(57);
value3 = MQ.MQ3DataCO();
MQ.dangerousPer(0.67);
value4 = MQ.MQ3DataAlcohol();
MQ.dangerousPer(2.92);
value5 = MQ.MQ3DataBenzene();
MQ.dangerousPer(38);
value6 = MQ.MQ3DataHexane();
value7 = MQ.MQ3DataAir();
}
break;
case (4):
{
normal();
MQ.RSRoMQAir(4.4);
MQ.setRL(20);
MQ.dangerousPer(64.43);
value1 = MQ.MQ4DataH2();
MQ.dangerousPer(34.32);
value2 = MQ.MQ4DataLPG();
MQ.dangerousPer(22.73);
value3 = MQ.MQ4DataCH4();
MQ.dangerousPer(86.14);
value4 = MQ.MQ4DataCO();
MQ.dangerousPer(82.05);
value5 = MQ.MQ4DataAlcohol();
MQ.dangerousPer(80.23);
value6 = MQ.MQ4DataSmoke();
value7 = MQ.MQ4DataAir();
}
break;
case (5):
{
normal();
MQ.RSRoMQAir(6.5);
MQ.setRL(20);
MQ.dangerousPer(15.12);
value1 = MQ.MQ5DataH2();
MQ.dangerousPer(5.54);
value2 = MQ.MQ5DataLPG();
MQ.dangerousPer(7.92);
value3 = MQ.MQ5DataCH4();
MQ.dangerousPer(44.15);
value4 = MQ.MQ5DataCO();
MQ.dangerousPer(39.38);
value5 = MQ.MQ5DataAlcohol();
value6 = MQ.MQ5DataAir();
value7 = 0;
}
break;
case (6):
{
normal();
MQ.RSRoMQAir(10);
MQ.setRL(20);
MQ.dangerousPer(33.7);
value1 = MQ.MQ6DataH2();
MQ.dangerousPer(10);
value2 = MQ.MQ6DataLPG();
MQ.dangerousPer(13.5);
value3 = MQ.MQ6DataCH4();
MQ.dangerousPer(78);
value4 = MQ.MQ6DataCO();
MQ.dangerousPer(61.2);
value5 = MQ.MQ6DataAlcohol();
value6 = MQ.MQ6DataAir();
value7 = 0;
}
break;
case (7):
{
normal();
MQ.RSRoMQAir(26);
MQ.setRL(10);
MQ.dangerousPer(3.08);
value1 = MQ.MQ7DataH2();
MQ.dangerousPer(30.77);
value2 = MQ.MQ7DataLPG();
MQ.dangerousPer(49.18);
value3 = MQ.MQ7DataCH4();
MQ.dangerousPer(3.85);
value4 = MQ.MQ7DataCO();
MQ.dangerousPer(57.69);
value5 = MQ.MQ7DataAlcohol();
value6 = MQ.MQ7DataAir();
value7 = 0;
}
break;
case (8):
{
normal();
MQ.RSRoMQAir(70);
MQ.setRL(10);
MQ.dangerousPer(1.43);
value1 = MQ.MQ8DataH2();
MQ.dangerousPer(27.53);
value2 = MQ.MQ8DataLPG();
MQ.dangerousPer(63.47);
value3 = MQ.MQ8DataCH4();
MQ.dangerousPer(80.57);
value4 = MQ.MQ8DataCO();
MQ.dangerousPer(14.81);
value5 = MQ.MQ8DataAlcohol();
value6 = MQ.MQ8DataAir();
value7 = 0;
}
break;
case (9):
{
normal();
MQ.RSRoMQAir(9.7);
MQ.setRL(20);
MQ.dangerousPer(10.31);
value1 = MQ.MQ9DataLPG();
MQ.dangerousPer(18.04);
value2 = MQ.MQ9DataCH4();
MQ.dangerousPer(8);
value3 = MQ.MQ9DataCO();
value4 = MQ.MQ9DataAir();
value5 = value6 = value7 = 0;
}
break;
case (10):
{
tm1637.display(3,1);
tm1637.display(2,3);
tm1637.display(1,1);
tm1637.display(0,0);
MQ.RSRoMQAir(12);
MQ.setRL(100);
MQ.dangerousPer(23.75);
value1 = 1 / MQ.MQ131DataNOx(); // ratio = Ro / Rs
MQ.dangerousPer(8.33);
value2 = 1 / MQ.MQ131DataCL2(); // ratio = Ro / Rs
MQ.dangerousPer(4.166);
value3 = 1 / MQ.MQ131DataO3(); // ratio = Ro / Rs
value4 = MQ.MQ131DataAir();
value5 = value6 = value7 = 0;
}
break;
case (11):
{
tm1637.display(3,6);
tm1637.display(2,3);
tm1637.display(1,1);
tm1637.display(0,0);
MQ.RSRoMQAir(3.54);
MQ.setRL(20);
MQ.dangerousPer(40.68);
value1 = MQ.MQ136DataH2S();
MQ.dangerousPer(72);
value2 = MQ.MQ136DataNH4();
MQ.dangerousPer(81.64);
value3 = MQ.MQ136DataCO();
value4 = MQ.MQ136DataAir();
value5 = value6 = value7 = 0;
}
break;
case (12):
{
tm1637.display(3,7);
tm1637.display(2,3);
tm1637.display(1,1);
tm1637.display(0,0);
MQ.RSRoMQAir(3.54);
MQ.setRL(47);
MQ.dangerousPer(81.64);
value1 = MQ.MQ137DataCO();
MQ.dangerousPer(72);
value2 = MQ.MQ137DataEthanol();
MQ.dangerousPer(40.68);
value3 = MQ.MQ137DataNH3();
value4 = MQ.MQ137DataAir();
value5 = value6 = value7 = 0;
}
break;
case (13):
{
tm1637.display(3,10);
tm1637.display(2,3);
tm1637.display(1,0);
tm1637.display(0,3);
MQ.RSRoMQAir(1);
MQ.setRL(47);
MQ.dangerousPer(28);
value1 = MQ.MQ303ADataIso(); // ratio = Rs / Rs
MQ.dangerousPer(21);
value2 = MQ.MQ303ADataHyd(); // ratio = Rs / Rs
MQ.dangerousPer(27);
value3 = MQ.MQ303ADataEthanol(); // ratio = Rs / Rs
value4 = MQ.MQ303ADataAir();
value5 = value6 = value7 = 0;
}
break;
case (14):
{
tm1637.display(3,10);
tm1637.display(2,7);
tm1637.display(1,0);
tm1637.display(0,3);
MQ.setRL(50);
MQ.RSRoMQAir(1); // no air: // ratio = Rs / Rs
MQ.dangerousPer(0.96); // ratio = Rs / Rs
value1 = MQ.MQ307ADataCO(); // ratio = Rs / Rs
MQ.dangerousPer(56.107);
value2 = MQ.MQ307ADataH2(); // ratio = Rs / Rs
}
break;
case (15):
{
tm1637.display(3,10);
tm1637.display(2,9);
tm1637.display(1,0);
tm1637.display(0,3);
MQ.setRL(50);
// MQ.RSRoMQAir(11); // air 11 but ratio = Rs / Rs
MQ.RSRoMQAir(1); // so we define 1
MQ.dangerousPer(11.4545);
value1 = MQ.MQ309ADataH2();
MQ.dangerousPer(9.0909);
value2 = MQ.MQ309ADataCH4();
MQ.dangerousPer(54.5454);
value3 = MQ.MQ309ADataCO();
MQ.dangerousPer(49.0909);
value4 = MQ.MQ309ADataAlcohol();
value5 = MQ.MQ309ADataAir();
}
break;
default:
{
sec = 1;
MQ135doing();
}
break;
}
if (neogps.available()) {
char c = neogps.read();
if (gps.encode(c)) {
if (gps.location.isValid()) {
latitude = (gps.location.lat(), 6) * pow(10,6);
longitude = (gps.location.lng(), 6) * pow(10,6);
gpscontrol = 1;
}
}
}
if ((millis() - lastTime) > timerDelay) {
ThingSpeak.setField(1, value1);
ThingSpeak.setField(2, value2);
ThingSpeak.setField(3, value3);
ThingSpeak.setField(4, value4);
ThingSpeak.setField(5, value5);
ThingSpeak.setField(6, value6);
ThingSpeak.setField(7, value7);
ThingSpeak.setField(8, sec);
int a = ThingSpeak.writeFields(hello1, myWriteAPIKey1);
ThingSpeak.setField(5, MQ.MQData100());
ThingSpeak.setField(6, other.MQData100());
gpscontrol = 1;
if (gpscontrol == 1){
ThingSpeak.setField(7, 40032287);
ThingSpeak.setField(8, 35220634);
}
int b = ThingSpeak.writeFields(hello2, myWriteAPIKey2);
lastTime = millis();
gpscontrol = 0;
}
}
void normal(){
tm1637.display(3,sec);
tm1637.display(2,sec);
tm1637.display(1,sec);
tm1637.display(0,sec);
}
void MQ135doing(){
tm1637.display(3,5);
tm1637.display(2,3);
tm1637.display(1,1);
tm1637.display(0,0);
MQ.RSRoMQAir(3.6);
MQ.setRL(20);
MQ.dangerousPer(42.5);
value1 = MQ.MQ135DataCO();
MQ.dangerousPer(25.55);
value2 = MQ.MQ135DataAlcohol();
MQ.dangerousPer(27.77);
value3 = MQ.MQ135DataCO2();
MQ.dangerousPer(21.944);
value4 = MQ.MQ135DataToluen();
MQ.dangerousPer(29.166);
value5 = MQ.MQ135DataNH4();
MQ.dangerousPer(20.55);
value6 = MQ.MQ135DataAceton();
value7 = MQ.MQ135DataAir();
}
// GPS : [GND --> GND] [TX --> D3] [RX --> D1] [VCC --> 3.3V]
// MQ-X: [PIN --> D35] [GND --> GND] [VCC --> 3.3V]
// Other Sensor: [PIN --> D34] [GND --> GND] [VCC --> 3.3V]
// Potentiometer: [PIN --> D32] [GND --> GND] [VCC --> 3.3V]
// TM1637: [CLK --> D18] [DIO --> D15] [VCC --> 5V] [GND --> GND]