import machine
import network
from machine import Pin, SoftI2C ,ADC
from lcd_api import LcdApi
from i2c_lcd import I2cLcd
from time import sleep
from servo import Servo
from hcsr04 import HCSR04
from blynkLib import Blynk
BLYNK_AUTH_TOKEN = "4WLYv3MoesdlDoxo540VYLucEHSPeyxm"
motor = Servo(pin=15)
soil = ADC(Pin(32))
irsensor= Pin(26, Pin.IN)
h=20
min_moisture=0
max_moisture=4095
#soil.atten(ADC.ATTN_11DB) #Full range: 3.3v
soil.width(ADC.WIDTH_12BIT)#range 0 to 4095
wifi= network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect("Mohitnarutogod","spox2684")
#wifi.connect("Wokwi-GUEST","")
while not wifi.isconnected():
pass
print("Wifi Connected Successfully")
blynk= Blynk(BLYNK_AUTH_TOKEN)
I2C_ADDR = 0x27
totalRows = 2
totalColumns = 16
i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=10000)#initializing the I2C method for ESP32
lcd = I2cLcd(i2c, I2C_ADDR, totalRows, totalColumns)
wetsensor = HCSR04(trigger_pin=12,echo_pin=13,echo_timeout_us=100000)
drysensor = HCSR04(trigger_pin=19,echo_pin=18,echo_timeout_us=100000)
def dry_cap(drylevel):
distancedry= drysensor.distance_cm()
drylevel = int(((h - (distancedry-7)) / h) * 100)
return drylevel
def wet_cap(wetlevel):
distancewet= wetsensor.distance_cm()
wetlevel = int(((h - (distancewet-7)) / h) * 100)
return wetlevel
blynk.on("V0",dry_cap)
blynk.on("V1",wet_cap)
while True:
blynk.run()
sleep(0.1)
distancewet= wetsensor.distance_cm()
distancedry= drysensor.distance_cm()
wetlevel = int(((h - (distancewet-7)) / h) * 100)
drylevel = int(((h - (distancedry-6.5)) / h) * 100)
sleep(2)
lcd.clear()
lcd.move_to(0,0)
lcd.putstr("Wet Waste:")
lcd.putstr(str(wetlevel))
lcd.putstr(" %")
lcd.move_to(0,1)
lcd.putstr("Dry Waste:")
lcd.putstr(str(drylevel))
lcd.putstr(" %")
moisture = soil.read()
if(irsensor.value()==0):
if(moisture<=4000 and wetlevel<90):
lcd.clear()
lcd.putstr("Wet Garbage")
lcd.move_to(0,1)
lcd.putstr("Detected")
motor.move(130)
sleep(2)
motor.move(90)
elif(moisture>4000 and drylevel<90):
lcd.clear()
lcd.putstr("Dry Garbage")
lcd.move_to(0,1)
lcd.putstr("Detected")
motor.move(50)
sleep(2)
motor.move(90)
elif(moisture<=4000 and wetlevel>=90):
lcd.clear()
lcd.putstr("Wet Garbage ")
lcd.move_to(0,1)
lcd.putstr("Is Full")
elif(moisture>4000 and drylevel>=90):
lcd.clear()
lcd.putstr("Dry Garbage")
lcd.move_to(0,1)
lcd.putstr("Is Full")