昉·星光系列课程12:昉·星光开发板巡线传感器使用

昉·星光系列课程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

9.2路-1巡线正常

11.2路-2巡线左偏

13.2路-3巡线右偏

15.2路-4巡线脱离

五、总结

在本次课程中,我们学习了1路巡线传感器和2路巡线传感器的使用。
巡线传感器一般为巡线小车或者巡线机器人使用,控制小船或者机器人,沿着黑线或者白线运动。另外,也可以通过特定的黑白色块,来检测特定物品的放置是否正确。

六、课后作业

  • 了解巡线传感器的具体使用
  • 完善演示程序,当线路偏离时,使用蜂鸣器报警
  • 演示中2路巡线传感器使用的是较宽的线路,请改为使用较窄的线路进行测试,并完善程序输出

七、参考资料

1 Like