鼻部整形

首页 » 常识 » 预防 » 多途径实现Arduino超声波测距警示
TUhjnbcbe - 2023/9/27 18:23:00
北京正规看白癜风医院 https://wapjbk.39.net/yiyuanfengcai/yyjs_bjzkbdfyy/

文/山东省招远第一中学牟晓东

汽车的倒车雷达系统能够根据车尾与障碍物的间距进行声音报警,间距值越小,蜂鸣器的“滴滴”啸叫频率越高。类似地,我们可以借助于Arduino开发板来制作一个小型“超声波警示灯”系统,利用超声波传感器来检测和显示与障碍物的间距,并且能够根据不同的间距值来控制不同颜色的LED发光:距离远,非常安全,亮绿灯;距离减小,处于警示区间范围,亮*灯;距离接近于警示临界点,比较危险,亮红灯。

1.实验器材与电路连接

实验器材:ArduinoUNO主板一个,HC-SR04超声波传感器一个,绿色、*色和红色LED灯各一支,面包板一块,各种颜色的杜邦线若干。

首先,将Arduino的5V电源正极和GND通过杜邦线连接至面包板;HC-SR04超声波传感器有四个引脚,其中的VCC和GND分别插接至面包板的正极和负极,Trig信号发射引脚和Echo信号接收引脚分别插接至Arduino的2号和3号数字引脚;绿色、*色和红色LED的长腿(正极)通过面包板分别连接至Arduino的4号、7号和8号数字引脚,短腿(负极)与GND连接;最后,通过数据线将Arduino与计算机USB接口连接(如图1)。

2.ArduinoIDE代码编程实现“超声波测距警示灯”

在ArduinoIDE中首先进行变量的定义,与超声波传感器相关的语句包括“intTrigPin=2;”“intEchoPin=3;”和“floatdistance;”,前两个分别声明它的信号发射与接收引脚为2号和3号数字引脚,定义的浮点型变量distancd是用来存储超声波传感器所测量的间距值;接着再定义三个整形变量:“intGreenLED=4;”“intYellowLED=7;”和“intRedLED=8;”,分别对应绿色、*色和红色LED的三个数字引脚(4号、7号和8号)。

在setup()函数中,先通过语句“Serial.begin();”来设置串口监视器的波特率,目的是实时显示出超声波传感器所监测的间距数据;然后是五个pinMode()引脚模式设置语句,除超声波传感器的EchoPin设置为INPUT输入模式外,将它的TrigPin和三个LED灯(GreenLED、YellowLED、RedLED)均设置为OUTPUT输出模式(如图2)。

在loop()函数中,首先要控制超声波传感器的发射端进行信号的触发,即使用“低-高-低”的短时间脉冲:语句“digitalWrite(TrigPin,LOW);”和“delayMicroseconds(20);”的作用是控制发射端保持20微秒的低电平;然后通过语句“digitalWrite(TrigPin,HIGH);”和“delayMicroseconds(20);”,控制发射端再保持20微秒的高电平(即触发一个20微秒的高脉冲);最后的语句“digitalWrite(TrigPin,LOW);”是控制发射端再次处于低电平状态。

接着,为存储间距值的变量distance进行赋值:“distance=pulseIn(EchoPin,HIGH)*/2/;”,计算方法是借助pulseIn()来实现——此时要特别注意它的单位是“微秒”(空气中的声速值按米/秒计),有“米与厘米”和“秒与微秒”间的单位换算(相当于“除以”);而且超声波传感器所监测的间距值是“超声波从发射端发出、向前运动并碰到障碍物后、再返回至接收端”的往返值(要“除以2”),因此在表达式中要对“pulseIn(EchoPin,HIGH)”的值再进行“*/2/”的计算。然后,在串口监视器中输出一行提示信息,语句为“Serial.print("与障碍物间的距离为:");”;接着再通过“Serial.print(distance);”和“Serial.print("cm");”两行语句,将distance变量和单位(“厘米”)在同一行显示输出;而后面的语句“Serial.println();”,作用是输出一个“换行”(相当于“回车”操作)。

接下来要构建一个“if…elseif…else…”三分支选择结构,对变量distance的值进行区间范围判断:如果距离大于30厘米(“distance=30.00”),执行语句“digitalWrite(GreenLED,HIGH);”,控制绿色LED灯发光;如果距离在15厘米和30厘米之间(“distance30.00anddistance=15.00”),则执行语句“digitalWrite(YellowLED,HIGH);”,控制*色LED灯发光;否则的话——相当于距离小于15厘米(“distance15.00”),则执行语句“digitalWrite(RedLED,HIGH);”,控制红色LED灯发光。

最后,添加一个“delay();”语句,作用是控制每次循环均延迟毫秒;而三个digitalWrite()语句则是向三个LED连接引脚写入低电平,作用是关闭所有的LED灯,从而为下一次循环的正确响应做好初始化准备(如图3)。

将程序保存、编译并上传Arduino,对“超声波测距警示灯”进行测试(注意要点击打开右上角的“串口监视器”项):分别控制超声波传感器与障碍物间的距离在30厘米之外、15厘米与30厘米之间、15厘米以内,发现绿色、*色和红色LED灯会根据不同的安全距离分别发光;同时,串口监视器中也会每隔0.5秒钟就显示有一行类似于“与障碍物间的距离为:32.00cm”的提示信息(如图4)。

3.Python代码编程实现“超声波测距警示灯”

在PythonIDLE编程环境中,首先导入time和pinpong库:“importtime”、“frompinpong.boardimportBoard,Pin,SR04_URM10”,注意其中的“SR04_URM10”对应的是HC-SR04超声波传感器的“调用”;接着,仍是使用语句“Board("uno").begin()”,完成对Arduinouno板型的初始化操作。

建立TRIGER_PIN和ECHO_PIN两个变量,通过“TRIGER_PIN=Pin(Pin.D2)”和“ECHO_PIN=Pin(Pin.D3)”两个语句,声明超声波传感器连接引脚分别为D2和D3(超声波传感器的Trig与Echo引脚插接在Arduino的2号和3号数字引脚),再加上语句“sonar=SR04_URM10(TRIGER_PIN,ECHO_PIN)”,实现超声波传感器的初始化。然后对三支LED灯进行设置:“GreenLED=Pin(Pin.D4,Pin.OUT)”、“YellowLED=Pin(Pin.D7,Pin.OUT)”和“RedLED=Pin(Pin.D8,Pin.OUT)”,包括插接的数字引脚分别是4号、7号和8号,而且均作为信号输出端。

建立“whileTrue:”循环结构,将读取到的超声波传感器检测间距数据存储至变量distance中:“distance=sonar.distance_cm()”(单位是厘米),并且通过print()函数将该值在屏幕上打印输出:“print("与障碍物间的距离为:{0:.2f}cm".format(distance))”;然后再建立“if…elif…else…”三分支选择结构,通过对变量distance值的大小进行判断来控制不同颜色LED灯的发光(向对应LED灯的数字引脚写入高电平“1”);最后仍然是添加“time.sleep(0.5)”延迟语句,并且向三支LED灯的数字引脚均写入低电平“0”来完成“熄灯”操作。

将程序保存,按功能键F5运行程序来测试“超声波测距警示灯”,屏幕显示检测的间距值,同时也会亮起对应颜色的LED灯(如图5)。

4.Mind+图形化编程实现“超声波测距警示灯”

运行Mind+进入图形化编程界面,首先要点击左下角的“扩展”项,将ArduinoUno主控板和超声波测距传感器加载;接着,建立变量“超声波测距”,为其赋值为“读取超声波传感器距离”,注意要将模块中的trig和echo引脚分别设置为2和3号;再使用“设置串口波特率”和“串口字符串输出”四个语句,完成将变量“超声波测距”在屏幕上打印输出的功能;然后建立三分支选择结构,根据超声波测距的数值大小控制对应颜色的LED灯发光;最后是延迟0.5秒钟,并且熄灭所有的LED灯。

点击“上传到设备”项,出现“上传成功”提示后,再次测试Arduino的“超声波测距警示灯”:右下角出现“与障碍物间的距离为:93.00cm”的提示信息,同时也会亮起对应颜色的LED灯,效果与使用代码编程相同(如图6)。

1
查看完整版本: 多途径实现Arduino超声波测距警示