TKK_E32210409/kombinasi.ino

193 lines
4.6 KiB
C++

#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6pmSmTWSq"
#define BLYNK_TEMPLATE_NAME "Sensor"
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Servo.h>
// Blynk authentication token and WiFi credentials
char auth[] = "RV_-8PWtIpIC09kAYSfGtZT6r6ezJNCk"; // Blynk auth token
char ssid[] = "realme 5 Pro"; // Wi-Fi SSID
char pass[] = "tugasakhir"; // Wi-Fi password
// Pin Definitions
const int servoPin = D6; // Pin for the servo
const int mq135Pin = A0; // Pin for the MQ-135 sensor
#define DHTPin D3 // Pin for the DHT sensor
const int relayPin = D4; // Pin for the relay controlling the fan
#define VPIN_TEMP V0
#define VPIN_HUM V1
#define VPIN_UDARA V2 // Blynk virtual pin
#define VPIN_FAN V3
#define VPIN_SERVO V4
const int thresholdPPM = 65; // New threshold for MQ-135 in PPM
// Servo Setup
Servo myServo;
int closedPosition = 0; // Position when window is closed
int openPosition = 90; // Position when window is open
#define DHTTYPE DHT11
DHT dht(DHTPin, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Address 0x27, 16x2 LCD
unsigned long previousMillis = 0; // Stores the last time data was sent
const long interval = 60000; // Interval to send data (1 minute)
bool fanState = false; // State of the fan
bool windowState = false; // State of the window
void setup() {
Serial.begin(115200);
Serial.println("Connecting to Wi-Fi...");
Blynk.begin(auth, ssid, pass);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, HIGH); // Turn off relay initially
myServo.attach(servoPin); // Attach servo to the specified pin
myServo.write(closedPosition); // Initial servo position
dht.begin(); // Initialize DHT sensor
lcd.init(); // Initialize LCD
lcd.backlight(); // Turn on LCD backlight
Serial.println("Setup completed");
}
void loop() {
Blynk.run();
sensorReadings();
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
sendDataToBlynk();
}
}
void sensorReadings() {
int sensorValue = analogRead(mq135Pin);
// Adding a delay to stabilize the readings
delay(200);
sensorValue = analogRead(mq135Pin);
int ppm = map(sensorValue, 0, 1023, 0, 500); // Adjusted range for MQ-135
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from sensor");
return;
}
Blynk.virtualWrite(VPIN_TEMP, t);
Blynk.virtualWrite(VPIN_HUM, h);
Blynk.virtualWrite(VPIN_UDARA, ppm);
Serial.print("Humidity: ");
Serial.print(h);
Serial.print("%\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print("°C\t");
Serial.print("PPM: ");
Serial.println(ppm);
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(t);
lcd.print("C");
lcd.setCursor(2, 0);
lcd.print("ppm: ");
lcd.print(String(ppm));
}
void openWindow() {
myServo.write(openPosition);
windowState = true;
Serial.println("Window opened.");
}
void closeWindow() {
myServo.write(closedPosition);
windowState = false;
Serial.println("Window closed.");
}
void turnFanOn() {
digitalWrite(relayPin, LOW); // Turn on fan
fanState = true;
}
void turnFanOff() {
digitalWrite(relayPin, HIGH); // Turn off fan
fanState = false;
}
void sendDataToBlynk() {
float h = dht.readHumidity();
float t = dht.readTemperature();
int sensorValue = analogRead(mq135Pin);
int ppm = map(sensorValue, 0, 1023, 0, 500); // Adjusted range for MQ-135
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from sensor");
return;
}
Blynk.virtualWrite(VPIN_TEMP, t);
Blynk.virtualWrite(VPIN_HUM, h);
Blynk.virtualWrite(VPIN_UDARA, ppm);
Blynk.virtualWrite(VPIN_FAN, fanState ? 1 : 0);
Blynk.virtualWrite(VPIN_SERVO, windowState ? 1 : 0);
Serial.print("Humidity: ");
Serial.print(h);
Serial.print("%\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print("°C\t");
Serial.print("PPM: ");
Serial.println(ppm);
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(t);
lcd.print("C");
lcd.setCursor(2, 0);
lcd.print("ppm: ");
lcd.print(String(ppm));
}
// Blynk function to control the fan via button
BLYNK_WRITE(VPIN_FAN) {
int fanControl = param.asInt();
if (fanControl == 1) {
turnFanOn();
} else {
turnFanOff();
}
}
// Blynk function to control the servo via button
BLYNK_WRITE(VPIN_SERVO) {
int servoControl = param.asInt();
if (servoControl == 1) {
openWindow();
} else {
closeWindow();
}
}