昉·星光系列课程12:昉·星光开发板巡线传感器使用
本次课程为昉·星光开发板IoT开发系列课程的第十二讲,将带领同学们在昉·星光开发板上,使用巡线传感器。
本次课程,在昉·星光开发板V1和V2上,操作步骤相同。
一、学习目标
- 学习昉·星光开发板通过巡线传感器,实现对线路的检测。
二、准备工作
在开始本次课程的实际操作之前,同学们需要做好一些准备工作,课程中涉及到的硬件如下:
- 开发板:昉·星光开发板
- 巡线传感器:1路巡线传感器和2路巡线传感器各一个
- 地图:带黑色条纹的A4纸
- 杜邦线:若干
三、巡线传感器使用原理
本次课程中,使用的巡线传感器模块具体如下:
在巡线传感器上,每一路会有一对红外发射接收探头,其工作原理是利用红外线对颜色的反射率不一样,将反射信号的强弱转化成电流信号。巡线传感器在检测到黑色高电平有效,检测到白色是为低电平有效,检测高度为 0—3cm。受现场环境的光线和黑色路线的影响,在实际使用前,需要配合传感器上的旋钮电位器来调节检测的灵敏度。
在1路巡线传感器上,还有AO输出,同学们可以结合之前使用ADS1115读取模拟信号的方式来使用。在本次课程中,我们使用巡线传感器的DO输出,也就是开发板直接接收到高低电平。
四、巡线传感器使用
首先,参考下图,将1路巡线传感器连接到昉·星光开发板:
实物连接如下:
注意:
应根据实际使用的传感器,确定供电电压。本次课程中使用的巡线传感器模块使用5V供电电压。
然后,我们编写如下的程序:
# file: ~/projects/tracking/tracking_one.py
import VisionFive.gpio as GPIO
import time
TRACKING_PIN = 12
def setup():
GPIO.setmode(GPIO.BCM) #set pin numbering system
#Configure the direction of buzz_pin as out.
GPIO.setup(TRACKING_PIN, GPIO.IN)
if __name__ == '__main__':
setup()
try:
while True:
status = GPIO.input(TRACKING_PIN)
if status == 1:
print("巡线正常 status=%d" % status)
else:
print("路线偏离 status=%d" % status)
time.sleep(1)
finally:
pass
要运行以上的程序,还需要安装相应的赛昉GPIO支持库,具体如下:
# 安装扩展库
sudo pip show VisionFive.gpio
编写完成后,运行 tracking_one.py,然后将1路巡线传感器水平保持在地图线路的上方2CM高。
python3 tracking_one.py
-
巡线传感器正常处于线路上方
-
巡线传感器偏离线路
程序将会输出如下的结果:
使用1路巡线传感器时,可以检测到是否在线路上,或者是否偏离线路。
而使用2路巡线传感器的时候,能够进一步检测到是左偏还是右偏,获得更加具体的结果。
参考之前的连线说明,将2路巡线传感器连接到昉·星光开发板,主要L、R连接到对应的GPIO口。
然后,编写如下的程序:
# -*- coding: utf-8 -*-
# file: ~/projects/tracking/tracking_two.py
import VisionFive.gpio as GPIO
import time
TRACKING_PIN_L = 12
TRACKING_PIN_R = 11
def setup():
GPIO.setmode(GPIO.BCM) #set pin numbering system
#Configure the direction of buzz_pin as out.
GPIO.setup(TRACKING_PIN_L, GPIO.IN)
GPIO.setup(TRACKING_PIN_R, GPIO.IN)
if __name__ == '__main__':
setup()
try:
while True:
status1 = 0 #GPIO.input(TRACKING_PIN_L)
status2 = 0 #GPIO.input(TRACKING_PIN_R)
if status1 == 1 and status2 == 1:
print("巡线正常,继续保持 status1=%d status2=%d" % (status1, status2))
elif status1 == 1 and status2 == 0:
print("路线右偏,请向左转 status1=%d status2=%d" % (status1, status2))
elif status1 == 0 and status2 == 1:
print("路线左偏,请向右转 status1=%d status2=%d" % (status1, status2))
elif status1 == 0 and status2 == 0:
print("路线脱离,请检查 status1=%d status2=%d" % (status1, status2))
time.sleep(1)
finally:
pass
编写完成后,运行 tracking_two.py,然后使用2路巡线传感器对准地图进行测试。
python3 tracking_two.py
- 巡线传感器正常位置:
- 巡线传感器左偏:
- 巡线传感器右偏:
- 巡线传感器脱离:
五、总结
在本次课程中,我们学习了1路巡线传感器和2路巡线传感器的使用。
巡线传感器一般为巡线小车或者巡线机器人使用,控制小船或者机器人,沿着黑线或者白线运动。另外,也可以通过特定的黑白色块,来检测特定物品的放置是否正确。
六、课后作业
- 了解巡线传感器的具体使用
- 完善演示程序,当线路偏离时,使用蜂鸣器报警
- 演示中2路巡线传感器使用的是较宽的线路,请改为使用较窄的线路进行测试,并完善程序输出