import time
from machine import Pin
###
# 继电器,注意继电器的触发模式
###
class Relay:
# 初始化
def __init__(self, pin):
self.pin = Pin(pin, Pin.OUT) # 输出模式
# 打开继电器
def on(self):
self.pin.value(0)
# 关闭继电器
def off(self):
self.pin.value(1)
###
# 超声波传感器
###
class Ultrasonic:
# 初始化
def __init__(self, trig, echo):
self.trig = Pin(trig, Pin.OUT) # 输出模式
self.echo = Pin(echo, Pin.IN) # 输入模式
# 获取距离
def get_distance(self):
self.trig.value(0) # 结束触发超声波
time.sleep_us(10) # 等待 10 微妙
self.trig.value(1) # 开始触发超声波
while not self.echo.value(): # 当为高电平时,表示开始回声
pass
start_time = time.ticks_us() # 记录开始回声的时间
while self.echo.value(): # 当为低电平时,表示结束回声
pass
end_time = time.ticks_us() # 记录结束回声的时间
time_diff = end_time - start_time # 计算回声的时间差
distance = time_diff * 0.0343 / 2 # 根据时间差计算距离,单位为厘米
return distance
###
# 程序入口
###
if __name__ == "__main__":
relay = Relay(28) # 继电器
u1 = Ultrasonic(0, 1) # 超声波传感器1
u2 = Ultrasonic(2, 3) # 超声波传感器2
# 循环执行
while True:
u1_distance = u1.get_distance() # 获取超声波传感器1的距离值
u2_distance = u2.get_distance() # 获取超声波传感器2的距离值
print(f"u1 distance: {u1_distance} cm")
print(f"u2 distance: {u2_distance} cm")
# 当距离大于3小于6时启动供水
if u1_distance >= 3 and u1_distance <= 6:
relay.on()
else:
relay.off()
# 当距离小于6时停止供水
if u2_distance <= 6:
relay.off()
time.sleep(1)