#define BLYNK_TEMPLATE_ID "TMPL64s3b0k8L"
#define BLYNK_TEMPLATE_NAME "sensor monitoring"
#define BLYNK_AUTH_TOKEN "hUgn5zo2RaazOjze3f0utEl7QyEB6Fus"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <BlynkSimpleEsp8266.h>
#include <ESP8266WiFi.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int ledHijau = 8;
const int ledOranye = 9;
const int ledMerah = 10;
const int buzzer = 11;
const int sensorGas = A1;
const int batasRendah = 200;
const int batasSedang = 500;
int baseline = 0; // Variabel untuk menyimpan nilai baseline kalibrasi
const int numSamples = 10; // Jumlah sampel untuk rata-rata bergerak
int nilaiSensorArray[numSamples]; // Array untuk menyimpan sampel
int indeks = 0;
// Informasi WiFi
char ssid[] = "Your_SSID"; // Ganti dengan SSID WiFi Anda
char pass[] = "Your_Password"; // Ganti dengan password WiFi Anda
void setup() {
pinMode(ledHijau, OUTPUT);
pinMode(ledOranye, OUTPUT);
pinMode(ledMerah, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(sensorGas, INPUT);
lcd.begin(16, 2);
lcd.backlight();
Serial.begin(9600);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// Inisialisasi array sampel
for (int i = 0; i < numSamples; i++) {
nilaiSensorArray[i] = 0;
}
// Melakukan kalibrasi sensor
kalibrasiSensor();
}
void kalibrasiSensor() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kalibrasi...");
long total = 0;
const int kalibrasiSamples = 100; // Jumlah sampel untuk kalibrasi
for (int i = 0; i < kalibrasiSamples; i++) {
total += analogRead(sensorGas);
delay(50);
}
baseline = total / kalibrasiSamples;
lcd.setCursor(0, 1);
lcd.print("Selesai: ");
lcd.print(baseline);
delay(2000);
}
int hitungRataRata() {
long total = 0;
for (int i = 0; i < numSamples; i++) {
total += nilaiSensorArray[i];
}
return total / numSamples;
}
void tampilkanStatus(int ppm, const char* status, bool hijau, bool oranye, bool merah, bool buzzerAktif) {
digitalWrite(ledHijau, hijau);
digitalWrite(ledOranye, oranye);
digitalWrite(ledMerah, merah);
digitalWrite(buzzer, buzzerAktif);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PPM: ");
lcd.print(ppm);
lcd.setCursor(0, 1);
lcd.print(status);
// Kirim data ke Blynk
Blynk.virtualWrite(V0, ppm); // Mengirim nilai PPM ke Virtual Pin V0
Blynk.virtualWrite(V1, status); // Mengirim status ke Virtual Pin V1
}
void loop() {
Blynk.run(); // Memastikan koneksi ke Blyn