// Channel id 2466654
// Channel ip key 7VQ2OFGNKIDVVL2B
#define MAX_DISTANCE 100 // Define the maximum sensor range in cm
#define FULL_DISTANCE 0
#define Buzzer 25
#define LED_LOW 13
#define LED_AVE 14
#define LED_HIGH 5
#define LED_FULL 4
#define LED_EMPTY 12
long duration;
float distance;
float distanceInch;
//menghubungkan ke wifi
#include <WiFi.h>
#include <WiFiClient.h>
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
WiFiClient alfa;
unsigned long ChannelID = 2508390;
const char * WriteAPI = "AO270OTOOI4K9B9H";
const char* server = "api.thingspeak.com";
#include <Ultrasonic.h>
#include <LiquidCrystal_I2C.h>
//library thingspeak
#include <ThingSpeak.h>
int lcdColumns = 16;
int lcdRows = 2;
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);
Ultrasonic ultrasonic(18, 19); //Trig 12 Echo 14
int RELAY_PIN = 32;
void setup() {
// Debug console
Serial.begin(115200);
pinMode(Buzzer, OUTPUT);
pinMode(LED_EMPTY, OUTPUT);
pinMode(LED_LOW, OUTPUT);
pinMode(LED_AVE, OUTPUT);
pinMode(LED_HIGH, OUTPUT);
pinMode(LED_FULL, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
lcd.init();
lcd.backlight();
Serial.println("Scan WiFi...");
int networks = WiFi.scanNetworks();
if(networks == 0){
Serial.println("No WiFi Networks!");
}
else{
Serial.print(networks);
Serial.println("Networks Found!");
for(int i = 0; i < networks; i++)
Serial.println(WiFi.SSID());
delay(10);
}
//menyambungkan ke wifi
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED){
delay(100);
Serial.println(".");
}
Serial.println("WiFi Connected!");
Serial.println(WiFi.localIP());
//memulai program thingspeak
ThingSpeak.begin(alfa);
}
void loop() {
distance = ultrasonic.read();
// Calculate the slurry level percentage
int slurryLevelPercentage = map(distance, FULL_DISTANCE, MAX_DISTANCE, 100, 0);
slurryLevelPercentage = constrain(slurryLevelPercentage, 0, 100); // Ensure it stays within 0-100%
Serial.print("Distance in CM: ");
Serial.println(distance);
Serial.print(slurryLevelPercentage);
Serial.println("%");
lcd.setCursor(0, 0);
lcd.print("Slurry Lvl: ");
lcd.print(slurryLevelPercentage);
lcd.print(" %");
if (slurryLevelPercentage <= 54 && slurryLevelPercentage >= 56){
digitalWrite(Buzzer, HIGH);
Serial.println("Buzzer ON!");
}else {
digitalWrite(Buzzer, LOW);
}
if (slurryLevelPercentage <= 54){
digitalWrite(RELAY_PIN, HIGH);
Serial.println("Water Pump ON!");
}else {
digitalWrite(RELAY_PIN, LOW);
}
if (slurryLevelPercentage < 9){
Serial.println("Slurry is EMPTY");
digitalWrite(LED_EMPTY, LOW);
digitalWrite(LED_LOW, HIGH);
digitalWrite(LED_AVE, LOW);
digitalWrite(LED_HIGH, LOW);
digitalWrite(LED_FULL, LOW);
lcd.setCursor(0, 1);
lcd.print("EMPTY");
}else if (slurryLevelPercentage >= 10 && slurryLevelPercentage <= 53){
Serial.println("Slurry is LOW");
digitalWrite(LED_EMPTY, HIGH);
digitalWrite(LED_LOW, LOW);
digitalWrite(LED_AVE, LOW);
digitalWrite(LED_HIGH, LOW);
digitalWrite(LED_FULL, LOW);
lcd.setCursor(0, 1);
lcd.print("Under Set Point");
}else if (slurryLevelPercentage >= 54 && slurryLevelPercentage <= 56 ){
Serial.println("Slurry is On Set Point");
digitalWrite(LED_EMPTY, LOW);
digitalWrite(LED_LOW, LOW);
digitalWrite(LED_AVE, LOW);
digitalWrite(LED_HIGH, HIGH);
digitalWrite(LED_FULL, HIGH);
lcd.setCursor(0, 1);
lcd.print("On Set Point");
}else if (slurryLevelPercentage >= 57 && slurryLevelPercentage <= 90 ){
Serial.println("Slurry is High");
digitalWrite(LED_EMPTY, LOW);
digitalWrite(LED_LOW, HIGH);
digitalWrite(LED_AVE, LOW);
digitalWrite(LED_HIGH, LOW);
digitalWrite(LED_FULL, LOW);
lcd.setCursor(0, 1);
lcd.print("Over Set Point");
}
else {
Serial.println("Slurry is FULL");
digitalWrite(LED_EMPTY, HIGH);
digitalWrite(LED_LOW, HIGH);
digitalWrite(LED_AVE, LOW);
digitalWrite(LED_HIGH, LOW);
digitalWrite(LED_FULL, LOW);
lcd.setCursor(0, 1);
lcd.print("FULL");
}
delay(2000);
lcd.clear();
int x = ThingSpeak.writeField (ChannelID, 1, slurryLevelPercentage, WriteAPI);
delay(1500);
}