树莓派:Python编程实现双红外双向预警
2022-12-16牟晓东
牟晓东
同样是利用PinPong库进行Python编程,在树莓派中的开发板初始化语句则应设置为“Board("rpi").begin()”,其余的代码书写规则与在Arduino和掌控板中几乎完全一致。以实现“双红外双向预警”功能为例,如何在树莓派中进行Python编程呢?
实验器材包括:树莓派3B一块,古德微扩展板一块,红外线传感器两支,红色、绿色和黄色LED灯各一支,低电平触发蜂鸣器一个,各种杜邦线若干。首先,将树莓派与扩展板正确连接(注意四周紧密接触);接着,将一支红外线传感器直接插入扩展板的24号组引脚,注意VCC、GND和OUT三个引脚要一一对应,另一支红外线传感器则通过杜邦线连接至扩展板的23号组引脚,同样要注意三个引脚的正确对应关系;然后,通过杜邦线将低电平触发蜂鸣器的I/O信号引脚连接至扩展板的25号引脚组的D(数字信号)引脚,电源正极VCC端接入扩展板的3.3V引脚端,GND端接地;接下来,按照“长腿正、短腿负”的规则,将绿色、红色和黄色LED灯分别插入扩展板的5号、6号和12号引脚;最后,给树莓派通电,启动操作系统(如图1)。
在电脑端运行Windows的“远程桌面连接”,输入树莓派的IP地址(192.168.1.120)后点击“连接”按钮,进入树莓派的操作系统。
如果是第一次在树莓派中调用PinPong库进行Python编程,需要先进行库模块的安装,方法是点击左上角的“LX终端”进入命令行模式,输入命令“pip3 install pinpong”后回车,直至最终出现“Successfully installed……”的安装成功提示即可(如图2)。
值得一提的是,命令行中的“pip3”表示将PinPong库安装于Python 3环境(PinPong库无法运行于Python 2等低版本环境),如果命令行中的“pip3”替换为常规的“pip”,则是试图将PinPong库安装于树莓派中可能存在的Python 2中,就会出现一些异常的错误提示。
安装好PinPong库后,点击左上角的树莓派图标,从菜单中依次选择“编程”-“Thonny Python IDE”,进入Python编辑器开始编程:
首先,导入时间库:“import time”,再导入PinPong库中的Board开发板及Pin引脚类:“from pinpong.board import Board,Pin”,通过语句“Board("rpi").begin()”对树莓派进行初始化;建立Green_LED、Red_LED和Yellow_LED三個变量,分别赋值为“Pin(Pin.D5,Pin.OUT)”“Pin(Pin.D6,Pin.OUT)”和“Pin(Pin.D12,Pin.OUT)”,作用是对插入5号、6号和12号引脚的绿色、红色和黄色LED灯进行初始化,声明其为电平输出端;接着,建立RedSensor_Front和RedSensor_Up两个变量,分别赋值为“Pin(Pin.D23,Pin.IN)”和“Pin(Pin.D24,Pin.IN)”,作用是对插入23号和24号引脚的两支红外线传感器进行初始化,声明其为电平输入端,二者的监测方向分别为树莓派的前方(Front)和上方(Up);再建立变量Low_Buzzer,赋值为“Pin(Pin.D25,Pin.OUT)”,作用是对插入25号引脚的低电平触发蜂鸣器进行初始化,声明其为电平输出端;语句“Low_Buzzer.value(1)”的作用是关闭蜂鸣器——因为树莓派默认的为其加载低电平会导致其异常“发声”(如图3)。
接下来,编写“while True”循环部分主程序代码:
为两个变量RedSensor_Front_value和RedSensor_Up_value分别赋值“RedSensor_Front.read_digital()”和“RedSensor_Up.read_digital()”,作用是读取两支红外线传感器的数字信号,注意红外线传感器所获取的信号如果是1,表示监测范围内无物体,0的话代表监测到有物体闯入。接着是两个if判断语句,结构非常类似,作用是分别对前方和上方进行红外线监测结果判断和处理:如果条件(RedSensor_Front_value==0)成立,说明前方有物体闯入,则依次执行熄灭绿色LED灯(Green_LED.value(0))、点亮红色LED灯(Red_LED.value(1))、蜂鸣器发声(Low_Buzzer.value(0))三个动作,同时在程序交互界面上打印输出文字提示信息(print("前方预警!"));如果条件(RedSensor_Up_value
==0)成立,说明上方有物体闯入,则依次执行熄灭绿色LED灯(Green_LED.value(0))、点亮黄色LED灯(Yellow_LED.value(1))、蜂鸣器发声(Low_Buzzer.value(0))三个动作,同时在程序交互界面上打印输出文字提示信息(print("上方预警!"))。
两个if判断语句组执行结束后,添加时间等待语句“time.sleep(0.3)”,暂停0.3秒钟;接着,熄灭红色和黄色警示灯:“Red_LED.value(0)”“Yellow_LED.value(0)”,点亮绿色LED灯:“Green_LED.value(1)”,并且同样是通过设置高电平的方式关闭低电平触发蜂鸣器:“Low_Buzzer.value(1)”,打印输出文字提示信息:“print("状态正常…")”(如图4)。
将程序保存为“Two_Way_Alert.py”,点击上方的“运行”按钮进行测试:正常情况下,前方和上方均无障碍物和遮挡,蜂鸣器不发声,绿色LED灯常亮,同时程序界面下方会有“状态正常…”的文字提示;如果在前方设置一个玩偶障碍物的话,蜂鸣器开始啸叫报警,红色LED灯发光,绿色LED灯熄灭,文字提示信息显示为“前方预警!”,直至将障碍物移除后才恢复为正常状态;如果在上方遮挡一个滑杆传感器来模拟“闯入者”的话,蜂鸣器又会开始啸叫报警,黄色LED灯发光,绿色LED灯熄灭,文字提示信息显示为“上方预警!”,直至将遮挡物移除后才恢复为正常状态(如图5)。