#include <WiFi.h>
#include <ESP32Servo.h> // Library untuk mengendalikan servo motor
#include <Arduino_JSON.h>
#include "HX711.h"
#include <HTTPClient.h>
HX711 scale;
Servo myservo;
const int trigPin = 5;
const int echoPin = 18;
#define SOUND_SPEED 0.034
#define buzzer 13
#define tarebutton 34
// HX711 circuit wiring
#define LOADCELL_DOUT_PIN 27 //2
#define LOADCELL_SCK_PIN 14 //4
long duration;
float distanceCm;
String ssid = "Wokwi-GUEST";
String pass = "";
int statusservo = 0;
int statustempatsampah = 0;
float berat = 0;
int batasmaksimal = 0;
String serverName = "https://sgp1.blynk.cloud/external/api/batch/update?token=A_9Z75e8feTHqlXPB3C9D7uedDj1Zzin&v0=";
String serverName2 = "https://sgp1.blynk.cloud/external/api/get?token=A_9Z75e8feTHqlXPB3C9D7uedDj1Zzin&v1&v2";
unsigned long myoffset,refval;
void setup() {
byte buttonstat;
// Inisialisasi Serial Monitor
Serial.begin(115200);
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
myservo.attach(2);
myservo.write(0);
pinMode(buzzer, OUTPUT);
pinMode(tarebutton, INPUT);
// Ptogram Tera Load Cell
Serial.println("Initializing the scale");
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
Serial.println("pastikan beban tidak ada (0 kg) lalu tekan tombol");
do
{
buttonstat=digitalRead(tarebutton);
}
while(buttonstat==HIGH);
delay(300);
Serial.println("tunggu....");
myoffset=scale.read_average(20);
Serial.print("nilai offset: ");
Serial.println(myoffset);
Serial.println("berikan beban standar (1 kg) lalu tekan tombol");
do
{
buttonstat=digitalRead(tarebutton);
}
while(buttonstat==HIGH);
delay(300);
Serial.println("tunggu....");
refval=scale.read_average(20);
Serial.print("nilai referensi: ");
Serial.println(refval);
Serial.println("Memulai Koneksi...");
WiFi.begin(ssid, pass);
Serial.println("Connecting");
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
}
void sensorjarak ()
{
// Tunggu sebentar sebelum membaca sensor lagi
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculate the distance
distanceCm = duration * SOUND_SPEED/2;
// Prints the distance in the Serial Monitor
Serial.print("Distance (cm ): ");
Serial.println(distanceCm);
if(distanceCm<=30 || statusservo == 1)
{
myservo.write(0);
Serial.println("BUKA!");
}
else {
Serial.println("TUTUP.");
myservo.write(90);
}
}
void loop() {
// Menjalankan fungsi sensor jarak;
sensorjarak();
// Membaca berat sampah
unsigned long adcave;
adcave=scale.read_average(1);
berat=(adcave-myoffset)/(refval-myoffset);
Serial.println(String(berat) +" KG");
// Menulis blynk
if(WiFi.status()== WL_CONNECTED)
{
HTTPClient http;
String serverPath = serverName + String(berat) +"&v3=" +statustempatsampah ;
http.begin(serverPath);
Serial.println(serverPath);
int httpResponseCode = http.GET();
if (httpResponseCode>0)
{
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
String payload = http.getString();
Serial.println(payload);
}
else
{
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
http.end();
}
// Menjalankan fungsi sensor jarak;
sensorjarak();
//Membaca dari blynk
if(WiFi.status()== WL_CONNECTED)
{
HTTPClient http;
String serverPath = serverName2;
http.begin(serverPath);
int httpResponseCode = http.GET();
if (httpResponseCode>0)
{
String payload = http.getString();
JSONVar myObject = JSON.parse(payload);
if (JSON.typeof(myObject) == "undefined")
{
Serial.println("Parsing input failed!");
return;
}
JSONVar keys = myObject.keys();
JSONVar value = myObject[keys[0]];
Serial.print("keys: ");
Serial.println(keys);
statusservo = value;
Serial.print("statusservo: ");
Serial.println(statusservo);
value = myObject[keys[1]];
Serial.print("keys: ");
Serial.println(keys);
batasmaksimal = value;
Serial.print("batasmaksimal: ");
Serial.println(batasmaksimal);
}
else
{
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
http.end();
}
else
{
Serial.println("WiFi Disconnected");
}
// Menjalankan fungsi sensor jarak;
sensorjarak();
if (berat >= batasmaksimal){
tone (buzzer, 1000);
statustempatsampah = 1;
Serial.println("Tempat Sampah Penuh!");
}
else {
noTone(buzzer);
statustempatsampah = 0;
}
}