# Libraries
from machine import Pin,PWM,SoftI2C
from hcsr04 import HCSR04
import time
from lcd1602 import LCD1602
# bin height 100cm
binHeight = 100
# setting pins
ultraSonic = HCSR04(trigger_pin = 2, echo_pin = 4)
LED = Pin(27, Pin.OUT)
buzzer = PWM(Pin(26), freq = 1, duty = 0)
buzzer.init(freq=2, duty=0)
servo = PWM(Pin(13),freq=50,duty=0)
pirPin = Pin(14,Pin.OUT)
i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=400000)
lcd = LCD1602(i2c)
# servo Function
def Servo(servo, angle):
servo.duty(int(((angle) / 180 * 2 + 0.5) / 20 * 1023))
# endless loop
while True:
# PIR Sensor value
pirVal = pirPin.value()
# lid handler
if (pirVal == 1):
Servo(servo, 180)
elif (pirVal != 1):
Servo(servo, 20)
# ultrasonic sensor distance
distance = ultraSonic.distance_cm()
binPer = (100 * distance) / binHeight
binPer2 = int(101 - binPer)
# lcd.move(2,1)
num_spaces = (16 - len(str(binPer2))) // 2
padding = " " * num_spaces
centered_text = padding + str(binPer2)+ "%" + padding
lcd.clear()
lcd.puts(centered_text)
# waste measure
if(distance < 6):
LED.on()
buzzer.init(freq=1047, duty=512)
else:
LED.off()
buzzer.duty(0)
time.sleep_ms(1000)