光流传感器初步测试:GL9306

GL9306光流传感器
目 录
Contents
背景介绍
器件特性
器件测试
实验总结

光流模块GL9306

§01 GL9306光流传感器


一、背景介绍

  根据全国大学生智能车竞赛, 智能视觉组同学询问, 是否可以使用光流传感器GL9306。 为了熟悉这款传感器的特性, 在淘宝上购买了一个传感器进行测试。 下面测试一下这个传感器的特性。

  GM1657190942_1192_745.MPG| GM1657190965_940_587.MPG| GM1657191006_643_400.MPG| GM1657191079_904_565.MPG| *

二、器件特性

1、器件接口

  器件的接口比较简单; 三个接口管脚定义分别是: VDD、GND、以及UARG。 对于串口数据输出信号, 在网站页面给出了数据通讯格式。 通讯波特率为19200, 输出数据帧速为66H组, 数据表示模块移动距离。 当距离很小的时候,输出为0。
  > -9-

2、接口改造

  为了能够在面包板上测试模块数据, 下面对于模块接口改造成100mil间距的接头。 焊接完之后增加热缩管。 这是接口改造完长之后的传感器。

  GM1657191949_1280_799.MPG| GM1657192035_1008_628.MPG| GM1657192128_1280_800.MPG| >

三、器件测试

1、上电观察接口信号

  下面将传感器接在面包板上, 对器件施加3.3V的工作电压。 器件稳态的工作电流大约20mA。 利用示波器观察UART输出管脚信号。 可以看到管脚有数据输出。 具体数据需要使用计算机来进行辨析。 这是测量每个数据帧之间的周期, 大约是38ms, 对应的数据帧速为26.3Hz。

  * < GM1657192564_1280_799.MPG| -5-

2、读取数据

  为了读取光流传感器输出数据, 这里使用了MM32F3277 MicroPython实验板。 使用其中的UART(1), 占用了PA3(RXD),PA2(TXD), 初始化波特率为19200, 将模块连接到光流传感器的数据输出端口。

  < * -3- >
  周期读取UART接收到的数据, 并显示出来。 这是光流模块销售网站给出UART数据协议。 数据帧的开头和结束为0xfe,0xaa。 中间是数据内容。 这是模块网站给出的数据内部结构。 根据数据协议,编写处理代码。

  GM1657194681_1280_799.MPG| -4-
  下面是MicroPython代码,每个100ms输出检测到的数据。 可以看到当光流传感器模块移动时,输出的x,y数据发生变化。

  GM1657197880_1280_799.MPG| GM1657197937_1280_799.MPG|
 

验总结 ※


  里对于光流传感器GL9306进行了初步的测试。它的具体应用有待之后做进一步的测试。

  


from machine                import Pin,UART
import time
uart = UART(1, baudrate=19200)
print(uart)
inbuf = bytes([0]*7)
recebuf = b''
mx = 0
my = 0
squal = 0
while True:
    if uart.any() > 0:
        inb = uart.read(uart.any())
        recebuf = recebuf + inb
    buflen = len(recebuf)
    delflag = 1
    if buflen > 0:
        id = 0
        for b in recebuf:
            if b == 254:
                if buflen >= id+9:
                    mx = recebuf[id+2]
                    mx = mx*256 + recebuf[id+1]
                    my = recebuf[id+4]
                    my = my*256 + recebuf[id+3]
                    squal = recebuf[id+6]
                else:
                    recebuf = recebuf[id:]
                    delflag = 0
                break
            id += 1
        if delflag > 0: recebuf = b''
    print(mx, my, squal)
    time.sleep_ms(100)

猜你喜欢

转载自blog.csdn.net/zhuoqingjoking97298/article/details/125665058