from machine import Pin, PWM
import time
# 初始化超声波传感器
trig = Pin(2, Pin.OUT) # 发射信号
echo = Pin(3, Pin.IN) # 接收信号
# 初始化舵机
servo = PWM(Pin(15))
servo.freq(50) # 舵机需要50Hz频率
# 舵机角度控制函数
def set_servo_angle(angle):
# 将角度转换为PWM占空比
duty = int((angle / 180) * (2500 - 500) + 500)
servo.duty_u16(int(duty * 65535 / 20000))
# 超声波测距函数
def get_distance():
# 发送10微秒脉冲
trig.value(0)
time.sleep_us(2)
trig.value(1)
time.sleep_us(10)
trig.value(0)
# 测量回声时间
while echo.value() == 0:
start_time = time.ticks_us()
while echo.value() == 1:
end_time = time.ticks_us()
# 计算距离(声速340m/s)
duration = time.ticks_diff(end_time, start_time)
distance = (duration * 0.034) / 2
return distance
# 主程序
print("感应垃圾桶启动!")
set_servo_angle(0) # 初始关闭状态
while True:
distance = get_distance()
print(f"距离: {distance:.1f} 厘米")
if distance < 10: # 检测到人靠近
print("开盖!")
set_servo_angle(90) # 打开盖子
time.sleep(3) # 等待3秒
else:
print("关盖!")
set_servo_angle(0) # 关闭盖子
time.sleep(0.2) # 每0.2秒检测一次