#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <ThingSpeak.h>
// Ultrasonic sensor
#define TRIG_PIN 18
#define ECHO_PIN 5
// DHT sensor
#define DHTPIN 19
#define DHTTYPE DHT22
// LED
#define LED_RED 4
#define LED_GREEN 2
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 20, 4);
// WiFi & ThingSpeak
WiFiClient client;
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const int channelId = 2720192;
const char* apiKey = "OGLT9NG5M0BLXYEK";
//const char* server = "api.thingspeak.com";
void setup() {
Serial.begin (9600);
// Ultrasonic sensor setup
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// DHT sensor setup
dht.begin();
// pin LED
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
// LCD setup
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Data sensor:");
// WiFi setup
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
while(WiFi.status() != WL_CONNECTED){
delay(1000);
Serial.println("WiFi: Waiting for connection!");
}
Serial.println("WiFi: Connected!");
WiFi.mode(WIFI_STA);
// ThingSpeak
ThingSpeak.begin(client);
}
void loop() {
Serial.println("--- looping ---");
// sinyal trigger ultrasonic sensor
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// mengukur durasi pulsa dan konversi ke jarak
float pulse_duration = pulseIn(ECHO_PIN, HIGH);
float distance_cm = 0.017 * pulse_duration;
String strDistance_cm = String(distance_cm, 1);
// mendapatkan data dari DHT sensor
float humid = dht.readHumidity();
float temp = dht.readTemperature();
String strHumid = String(humid, 1);
String strTemp = String(temp, 1);
// serial print
Serial.println("Jarak: " + strDistance_cm + "cm");
Serial.println("Humid: " + strHumid + "%");
Serial.println("Temp: " + strTemp + "\xDF" + "C");
// LCD Print
lcd.setCursor(0, 1);
lcd.print("Temper: " + strTemp + "\xDF" + "C");
lcd.setCursor(0, 2);
lcd.print("Humidity: " + strHumid + "%");
lcd.setCursor(0, 3);
lcd.print("Jarak obj: " + strDistance_cm + "cm");
// LED Merah terang jika temperatur lebih dari 40'C
if(temp > 40 ){
digitalWrite(LED_RED, HIGH);
}else{
digitalWrite(LED_RED, LOW);
}
// LED Hijau terang jika jarak kurang dari 5cm
if(distance_cm < 10){
digitalWrite(LED_GREEN, HIGH);
}else{
digitalWrite(LED_GREEN, LOW);
}
// Write to ThingSpeak
ThingSpeak.setField(1, temp);
ThingSpeak.setField(2, humid);
ThingSpeak.setField(3, distance_cm);
int x = ThingSpeak.writeFields(channelId, apiKey);
if(x == 200){
Serial.println("Data uploaded successfully!");
}else{
Serial.println("Error while uploading data!");
}
delay(1000);
}