#define BLYNK_TEMPLATE_ID "TMPLdYj16lPK"
#define BLYNK_DEVICE_NAME "sortingjeruk"
#define BLYNK_AUTH_TOKEN "lXIsrFCNul0ustvL8jP4ZBphocMPMu3r"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include<LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
LiquidCrystal_I2C lcd(0x27,20,4);
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
Servo Servo1;
Servo Servo2;
#define S0 34
#define S1 35
#define S2 32
#define S3 33
#define ir1 13
#define ir2 12
#define ir3 14
#define sensorOut 25
#define tcs 4
#define pin_buzzer 23
int frequency, color;
int baca_ir1, baca_ir2, baca_ir3;
int ir1_state, ir2_state, ir3_state;
int ir2_value, data_proses, pos, pos1;
int jeruk_masuk, kng_besar, kng_kecil;
String warna_jeruk;
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
lcd.init();
lcd.backlight();
pinMode(ir1, INPUT);
pinMode(ir2, INPUT);
pinMode(ir3, INPUT);
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
pinMode(pin_buzzer, OUTPUT);
digitalWrite(S0, HIGH);
digitalWrite(S1, LOW);
pos = 90; pos1 = 90;
Servo1.attach(2);
Servo1.write(pos);
delay(15);
Servo2.attach(15);
Servo2.write(pos1);
lcd.setCursor(2, 0); lcd.print("Sortir Buah Jeruk");
lcd.setCursor(0, 1); lcd.print("Monitoring & Control");
lcd.setCursor(3, 2); lcd.print("Dirancang Oleh:");
lcd.setCursor(7, 3); lcd.print("ALANG");
delay(2000);
lcd.clear();
}
void loop() {
readColor();
blynk_send();
lcd_print();
baca_ir1 = digitalRead(ir1);
baca_ir2 = digitalRead(ir2);
baca_ir3 = digitalRead(ir3);
if(baca_ir1 == 0){
if(ir1_state==0){
jeruk_masuk += 1;
ir1_state = 1;
}
}
else ir1_state=0;
if(baca_ir2 == 0){
if(ir2_state == 0){
ir2_value = 1;
kng_besar += 1;
ir2_state = 1;
}
}else ir2_state = 0;
if(ir2_value == 1){
for (pos; pos > 0; pos--) {
Servo2.write(pos);
delay(1);
}
delay(1000);
for (pos; pos < 90; pos++) {
Servo2.write(pos);
delay(1);
}
ir2_value = 0;
}
if(baca_ir3 == 0){
if(ir3_state==0){
kng_kecil += 1;
ir3_state = 1;
}
}
else ir3_state=0;
if(color == 0){
lcd.setCursor(13, 3); lcd.print("Kuning");
for (pos1; pos1 < 90; pos1++) {
Servo1.write(pos1);
delay(1);
}
}
else{
lcd.setCursor(13, 3); lcd.print("Hijau ");
for (pos1; pos1 > 0; pos1--) {
Servo1.write(pos1);
delay(1);
}
}
if(kng_kecil>=5){
digitalWrite(pin_buzzer, HIGH);
}
else{
digitalWrite(pin_buzzer, LOW);
}
}
void lcd_print(){
lcd.setCursor(0, 0);
lcd.print("JerukMasuk : ");
lcd.print(jeruk_masuk);
lcd.setCursor(0, 1);
lcd.print("Kuning Besar : ");
lcd.print(kng_besar);
lcd.setCursor(0, 2);
lcd.print("Kuning Kecil : ");
lcd.print(kng_kecil);
lcd.setCursor(0, 3);
lcd.print("WarnaJeruk : ");
if(digitalRead(tcs)==0){
warna_jeruk = "Kuning";
}
else{
warna_jeruk = "Hijau ";
}
}
int readColor() {
// Setting red filtered photodiodes to be read
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
int R = frequency;
// Printing the value on the serial monitor
//Serial.print("R= "); // printing name
//Serial.print(frequency); // printing RED color frequency
//Serial.print(" ");
// Setting Green filtered photodiodes to be read
digitalWrite(S2, HIGH);
digitalWrite(S3, HIGH);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
int G = frequency;
// Printing the value on the serial monitor
//Serial.print("G= "); // printing name
// Serial.print(frequency); // printing RED color frequency
//Serial.print(" ");
// Setting Blue filtered photodiodes to be read
digitalWrite(S2, LOW);
digitalWrite(S3, HIGH);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
int B = frequency;
// Printing the value on the serial monitor
//Serial.print("B= "); // printing name
//Serial.print(frequency); // printing RED color frequency
//Serial.println(" ");
if ((B < 555 && B > 250) && (G < 360 && G > 250) && (R < 200 && R > 50)) {
color = 0; // kuning
//Serial.print("kuning");
}
if ((R < 470 && R > 311) && (G < 500 && G > 385) & (B < 500 && B > 400)) {
color = 1; // hijau
//Serial.print("Hijau");
}
return color;
}
void blynk_send(){
Blynk.virtualWrite(V1, jeruk_masuk);
Blynk.virtualWrite(V3, kng_besar);
Blynk.virtualWrite(V4, kng_kecil);
Blynk.virtualWrite(V9, warna_jeruk);
}