first commit
This commit is contained in:
parent
8728c9d00a
commit
9a1aabda21
|
@ -0,0 +1,323 @@
|
|||
#include <Arduino.h>
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <ESPAsyncTCP.h>
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <ESPDash.h>
|
||||
#include <SPI.h>
|
||||
#include <Wire.h>
|
||||
#include "MQ135.h"
|
||||
#include <Adafruit_Sensor.h>
|
||||
#include <DHT.h>
|
||||
#include <Adafruit_GFX.h>
|
||||
#include <Adafruit_SSD1306.h>
|
||||
|
||||
/* Your Soft AP WiFi Credentials */
|
||||
const char *ssid = "IoT Smart Kitchen"; // WiFi Name
|
||||
const char* password = "1234567890"; // Password
|
||||
|
||||
#define SCREEN_WIDTH 128 // OLED display width, in pixels
|
||||
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
|
||||
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
|
||||
#define DHTTYPE DHT22 // DHT 22
|
||||
#define DHTPIN D4 //DHT22 Pin D4(GPIO 2)
|
||||
#define relay1 D5 // Lampu D5(GPIO 14)
|
||||
#define relay2 D6 // Kulkas D6(GPIO 12)
|
||||
#define relay3 D3 // Pompa D7(GPIO 13)
|
||||
#define relay4 D8 // Kipas D8(GPIO 15)
|
||||
#define buzzer 10 //Buzzer Pin(GPIO 10)
|
||||
#define PIR D7 //PIR Sensor Pin D3(GPIO 0)
|
||||
#define Api D0 // Flame sensor Pin D0
|
||||
|
||||
#define MQ135_PIN A0 // Pin analog yang digunakan untuk sensor MQ135
|
||||
#define RLOAD 10.0 // Nilai resistansi beban (10kΩ)
|
||||
#define VCC 5.0
|
||||
|
||||
MQ135 gasSensor(MQ135_PIN);
|
||||
float R0 = 0.41; // Nilai R0 yang telah dikalibrasi, sesuaikan dengan hasil kalibrasi
|
||||
|
||||
int pompa_air;
|
||||
int alarm_status;
|
||||
int pir_status = 0;
|
||||
int flame_sensor = 0;
|
||||
|
||||
DHT dht(DHTPIN, DHTTYPE);
|
||||
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
|
||||
|
||||
/* Start Webserver */
|
||||
AsyncWebServer server(80);
|
||||
|
||||
/* Attach ESP-DASH to AsyncWebServer */
|
||||
/* ESPDash dashboard(&server); */ /*Bisa Mengunakan IP Default */
|
||||
ESPDash dashboard(&server, "/rezainalvito-e32210750-smartkitchen");
|
||||
/*
|
||||
Dashboard Cards
|
||||
Format - (Dashboard Instance, Card Type, Card Name, Card Symbol(optional) )
|
||||
*/
|
||||
Card AIQ(&dashboard, GENERIC_CARD, "Index Kualitas Udara", "PPM");
|
||||
Card temperature(&dashboard, TEMPERATURE_CARD, "Temperatur", "°C");
|
||||
Card humidity(&dashboard, HUMIDITY_CARD, "Kelembaban", "%");
|
||||
Card Buzzer(&dashboard, STATUS_CARD, "Alarm");
|
||||
Card Motion_PIR(&dashboard, STATUS_CARD, "Objek");
|
||||
Card Motion_Flame(&dashboard, STATUS_CARD, "Api");
|
||||
Card light(&dashboard, BUTTON_CARD, "Lampu");
|
||||
Card fridge(&dashboard, BUTTON_CARD, "Kulkas");
|
||||
Card oven(&dashboard, BUTTON_CARD, "Pompa");
|
||||
Card fan(&dashboard, BUTTON_CARD, "Kipas");
|
||||
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
|
||||
/* Connect WiFi */
|
||||
WiFi.softAP(ssid, password);
|
||||
Serial.print("IP address: ");
|
||||
Serial.println(WiFi.softAPIP());
|
||||
/* Start AsyncWebServer */
|
||||
server.begin();
|
||||
|
||||
dht.begin();
|
||||
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
|
||||
|
||||
pinMode(PIR, INPUT);
|
||||
pinMode(Api, INPUT);
|
||||
pinMode(buzzer, OUTPUT);
|
||||
//pinMode(pompa, OUTPUT);
|
||||
pinMode(relay1, OUTPUT);
|
||||
pinMode(relay2, OUTPUT);
|
||||
pinMode(relay3, OUTPUT);
|
||||
pinMode(relay4, OUTPUT);
|
||||
|
||||
digitalWrite(buzzer, LOW);
|
||||
//digitalWrite(pompa, LOW);
|
||||
digitalWrite(relay1, HIGH);
|
||||
digitalWrite(relay2, HIGH);
|
||||
digitalWrite(relay3, HIGH);
|
||||
digitalWrite(relay4, HIGH);
|
||||
delay(100);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// Baca nilai resistansi sensor (Rs)
|
||||
int sensorValue = analogRead(MQ135_PIN);
|
||||
float voltage = sensorValue * (VCC / 1023.0); // Konversi nilai bacaan analog ke tegangan (dalam volt)
|
||||
float Rs = (VCC - voltage) / voltage * RLOAD;
|
||||
|
||||
// Hitung PPM menggunakan rumus yang sesuai
|
||||
float PPM = pow(10, ((log10(Rs / R0) - 0.12) / -0.27));
|
||||
|
||||
// Tampilkan hasil PPM
|
||||
Serial.print("Nilai PPM: ");
|
||||
Serial.println(PPM);
|
||||
|
||||
float t = dht.readTemperature();
|
||||
float h = dht.readHumidity();
|
||||
|
||||
pir_status = digitalRead(PIR);
|
||||
flame_sensor = digitalRead(Api);
|
||||
alarm_status = digitalRead(buzzer);
|
||||
//pompa_air = digitalRead(pompa);
|
||||
|
||||
if (t > 30) {
|
||||
// Suhu melebihi 30 derajat Celsius
|
||||
display.clearDisplay();
|
||||
display.setCursor(0, 0);
|
||||
display.setTextSize(1);
|
||||
display.setTextColor(WHITE);
|
||||
display.println("Kondisi Suhu Saat Ini");
|
||||
|
||||
display.setCursor(0, 20); //oled display
|
||||
display.setTextSize(2);
|
||||
display.setTextColor(WHITE);
|
||||
display.println("Panas");
|
||||
display.display();
|
||||
delay(1500);
|
||||
} else if (t < 30) {
|
||||
// Suhu di bawah 30 derajat Celsius
|
||||
display.clearDisplay();
|
||||
display.setCursor(0, 0);
|
||||
display.setTextSize(1);
|
||||
display.setTextColor(WHITE);
|
||||
display.println("Kondisi Suhu Saat Ini:");
|
||||
|
||||
display.setCursor(0, 20); //oled display
|
||||
display.setTextSize(2);
|
||||
display.setTextColor(WHITE);
|
||||
display.println("Normal");
|
||||
display.display();
|
||||
delay(1500);
|
||||
}
|
||||
|
||||
if (pir_status == 1)
|
||||
{
|
||||
Serial.println("Terdeteksi");
|
||||
Motion_PIR.update("Terdeteksi", "s");
|
||||
dashboard.sendUpdates();
|
||||
}
|
||||
else if (pir_status == 0)
|
||||
{
|
||||
Serial.println("Tidak Terdeteksi Objek");
|
||||
Motion_PIR.update("Tidak Terdeteksi", "d");
|
||||
dashboard.sendUpdates();
|
||||
}
|
||||
|
||||
if (flame_sensor == 1)
|
||||
{
|
||||
//digitalWrite(buzzer, HIGH);
|
||||
digitalWrite(relay3, LOW);
|
||||
Motion_Flame.update("Bahaya Timbul Api", "d");
|
||||
//Buzzer.update("Aktif", "w");
|
||||
oven.update(HIGH);
|
||||
dashboard.sendUpdates();
|
||||
}
|
||||
else if (flame_sensor == 0)
|
||||
{
|
||||
//digitalWrite(buzzer, LOW);
|
||||
digitalWrite(relay3, HIGH);
|
||||
Motion_Flame.update("Situasi Aman", "s");
|
||||
//Buzzer.update("Mati", "s");
|
||||
oven.update(LOW);
|
||||
dashboard.sendUpdates();
|
||||
}
|
||||
|
||||
if (PPM> 150)
|
||||
{
|
||||
digitalWrite(buzzer, HIGH);
|
||||
digitalWrite(relay4, LOW);
|
||||
Buzzer.update("Aktif", "w");
|
||||
fan.update(HIGH);
|
||||
dashboard.sendUpdates();
|
||||
|
||||
display.clearDisplay();
|
||||
display.setCursor(0, 0);
|
||||
display.setTextSize(2);
|
||||
display.setTextColor(WHITE);
|
||||
display.println("Terdeteksi");
|
||||
|
||||
display.setCursor(0, 20); //oled display
|
||||
display.setTextSize(2);
|
||||
display.setTextColor(WHITE);
|
||||
display.println("Kebocoran");
|
||||
|
||||
display.setCursor(0, 40); //oled display
|
||||
display.setTextSize(2);
|
||||
display.setTextColor(WHITE);
|
||||
display.println("Gas");
|
||||
|
||||
display.display();
|
||||
delay(1500);
|
||||
}
|
||||
else
|
||||
{
|
||||
digitalWrite(buzzer, LOW);
|
||||
digitalWrite(relay4, HIGH);
|
||||
Serial.println("Buzzer Status: OFF");
|
||||
Serial.println("Exhaust Fan: OFF");
|
||||
Buzzer.update("Mati", "s");
|
||||
fan.update(LOW);
|
||||
dashboard.sendUpdates();
|
||||
}
|
||||
|
||||
temperature.update(t);
|
||||
humidity.update(h);
|
||||
AIQ.update(PPM);
|
||||
//Button for Light
|
||||
light.attachCallback([&](bool value){
|
||||
Serial.println("[light] Button Callback Triggered: "+String((value)?"HIGH":"LOW"));
|
||||
digitalWrite(relay1, (value));
|
||||
light.update(value);
|
||||
dashboard.sendUpdates();
|
||||
});
|
||||
//Button for Fridge
|
||||
fridge.attachCallback([&](bool value){
|
||||
Serial.println("[fridge] Button Callback Triggered: "+String((value)?"HIGH":"LOW"));
|
||||
digitalWrite(relay2, (value));
|
||||
fridge.update(value);
|
||||
dashboard.sendUpdates();
|
||||
});
|
||||
//Button for Oven
|
||||
oven.attachCallback([&](bool value){
|
||||
Serial.println("[oven] Button Callback Triggered: "+String((value)?"HIGH":"LOW"));
|
||||
digitalWrite(relay3, (value));
|
||||
oven.update(value);
|
||||
dashboard.sendUpdates();
|
||||
});
|
||||
//Button for Fan
|
||||
fan.attachCallback([&](bool value){
|
||||
Serial.println("[fan] Button Callback Triggered: "+String((value)?"HIGH":"LOW"));
|
||||
digitalWrite(relay4, (value));
|
||||
fan.update(value);
|
||||
dashboard.sendUpdates();
|
||||
});
|
||||
/* Send Updates to our Dashboard (realtime) */
|
||||
dashboard.sendUpdates();
|
||||
dashboard.setAuthentication("rezainalvito", "12121212");
|
||||
delay(1500);
|
||||
|
||||
// Display Rezainal Vito
|
||||
display.clearDisplay();
|
||||
display.setCursor(0, 0);
|
||||
display.setTextSize(1);
|
||||
display.setTextColor(WHITE);
|
||||
display.println("Dapur Pintar - IoT");
|
||||
|
||||
display.setCursor(0, 20);
|
||||
display.setTextSize(1);
|
||||
display.setTextColor(WHITE);
|
||||
display.println("Rezainal Vito");
|
||||
|
||||
display.setCursor(0, 35);
|
||||
display.setTextSize(1);
|
||||
display.setTextColor(WHITE);
|
||||
display.println("E32210750");
|
||||
|
||||
display.setCursor(0, 50);
|
||||
display.setTextSize(1);
|
||||
display.setTextColor(WHITE);
|
||||
display.println("Teknik Komputer");
|
||||
|
||||
display.display();
|
||||
delay(2000);
|
||||
|
||||
// display temperature
|
||||
display.clearDisplay();
|
||||
display.setTextSize(1);
|
||||
display.setCursor(0, 0);
|
||||
display.print("Temperature: ");
|
||||
display.setTextSize(2);
|
||||
display.setCursor(0, 10);
|
||||
display.print(t);
|
||||
display.print(" ");
|
||||
display.setTextSize(1);
|
||||
display.cp437(true);
|
||||
display.write(167);
|
||||
display.setTextSize(2);
|
||||
display.print("C");
|
||||
|
||||
// display humidity
|
||||
display.setTextSize(1);
|
||||
display.setCursor(0, 35);
|
||||
display.print("Humidity: ");
|
||||
display.setTextSize(2);
|
||||
display.setCursor(0, 45);
|
||||
display.print(h);
|
||||
display.print(" %");
|
||||
display.display();
|
||||
delay(1500);
|
||||
|
||||
// Display Air Quality Index
|
||||
display.clearDisplay();
|
||||
display.setCursor(0, 0); //oled display
|
||||
display.setTextSize(1);
|
||||
display.setTextColor(WHITE);
|
||||
display.println("Air Quality Index");
|
||||
|
||||
display.setCursor(0, 20); //oled display
|
||||
display.setTextSize(2);
|
||||
display.setTextColor(WHITE);
|
||||
display.print(PPM);
|
||||
display.setTextSize(1);
|
||||
display.setTextColor(WHITE);
|
||||
display.println(" PPM");
|
||||
display.display();
|
||||
delay(1500);
|
||||
}
|
Loading…
Reference in New Issue