1、主要设备
超声波测距传感器+蜂鸣器+报警灯
代码中的管脚均是GPIO中对应的管脚,蜂鸣器和led控制较简单,初始化后使用高低电平控制开关
2、全部代码
import RPi.GPIO as GPIO
import time
#warndistance = float(input("请输入警戒距离"))
warndistance = 100 #设置报警距离,单位cm
makerobo_TRIG = 11 # 超声波模块Tring控制管脚
makerobo_ECHO = 12 # 超声波模块Echo控制管脚
makerobo_BuzzerPin = 7 # 蜂鸣器控制管脚
pin_R = 33 # 定义红色LED灯PIN
def makerobo_setup():
GPIO.setmode(GPIO.BOARD) # 采用实际的物理管脚给GPIO口
GPIO.setwarnings(False) # 忽略GPIO操作注意警告
# 超声波模块初始化
GPIO.setup(makerobo_TRIG, GPIO.OUT) # Tring设置为输出模式
GPIO.setup(makerobo_ECHO, GPIO.IN) # Echo设置为输入模式
#蜂鸣器初始化
GPIO.setup(makerobo_BuzzerPin, GPIO.OUT) # 设置有源蜂鸣器管脚为输出模式
GPIO.output(makerobo_BuzzerPin, GPIO.HIGH) # 蜂鸣器设置为高电平,关闭蜂鸟器
#LED灯
GPIO.setup(pin_R, GPIO.OUT)
# 超声波计算距离函数
def ur_disMeasure():
GPIO.output(makerobo_TRIG, 0) # 开始起始
time.sleep(0.000002) # 延时2us
GPIO.output(makerobo_TRIG, 1) # 超声波启动信号,延时10us
time.sleep(0.00001) # 发出超声波脉冲
GPIO.output(makerobo_TRIG, 0) # 设置为低电平
while GPIO.input(makerobo_ECHO) == 0: # 等待回传信号
us_a = 0
us_time1 = time.time() # 获取当前时间
while GPIO.input(makerobo_ECHO) == 1: # 回传信号截止信息
us_a = 1
us_time2 = time.time() # 获取当前时间
us_during = us_time2 - us_time1 # 转换微秒级的时间
# 声速在空气中的传播速度为340m/s, 超声波要经历一个发送信号和一个回波信息,
# 计算公式如下所示:
return us_during * 340 / 2 * 100 # 求出距离
# 循环函数
def makerobo_loop():
while True:
us_dis = ur_disMeasure() # 获取超声波计算距离
if us_dis < warndistance:
GPIO.output(makerobo_BuzzerPin, GPIO.LOW)# 蜂鸣器为低电平触发,使蜂鸣器发声
GPIO.output(pin_R, GPIO.HIGH)
time.sleep(0.3)
GPIO.output(pin_R, GPIO.LOW)
else:
GPIO.output(makerobo_BuzzerPin, GPIO.HIGH)# 蜂鸣器为高电平触发,使蜂鸣器不发声
print (us_dis, 'cm') # 打印超声波距离值
print ('')
time.sleep(0.3) # 延时300ms
# 资源释放函数
def destroy():
GPIO.cleanup() # 释放资源
# 程序入口
if __name__ == "__main__":
makerobo_setup()
try:
makerobo_loop()
except KeyboardInterrupt: # 当按下Ctrl+C时,将执行destroy()子程序。
destroy() # 释放资源