RGB巡线模块

优质
小牛编辑
155浏览
2023-12-01

微信截图_20160129150749

概述

RGB巡线传感器模块专为小车巡线比赛设计。它包含4个RGB补光灯和4个光敏接收管,该模块既可以用于深色背景浅色赛道做巡线,也可以用于浅色背景深色赛道做巡线,只要背景与赛道色差灰度值大于阈值(背景与赛道在RGB域的色差越大,巡线效果越好),RGB巡线传感器模块均能用于巡线。该模块具有检测速度快,通过按键学习场地功能,适应性良好等优点。本模块接口是蓝白色色标,说明是双数字、I2C接口,需要连接到主板上带有蓝白色标示接口。

技术规格

  • 工作电压:5V DC
  • 工作温度:0℃~70℃
  • 检测高度:依跑道材质和光照情况不等,建议模块探头距跑道5mm~15mm间
  • 信号模式:I2C通信(对应蓝色白色色标)
  • 模块尺寸:48 x 72 x 26.5 mm (长x宽x高)

功能特性

  • 支持Arduino IDE编程, 并且提供运行库来简化编程;
  • 具有四只LED指示灯用于巡线反馈以及新环境学习情况;
  • 使用RJ25接口连线方便;
  • 适配 Makeblock DIY 平台金属件:模块的白色区域是与金属梁接触的参考区域;
  • 模块化安装,兼容乐高系列;
  • 配有接头支持绝大多数 Arduino 系列主控板;
  • 支持场地学习功能:识别并记录所用场地的背景及路径的颜色;
  • 支持eeprom存储:学习后的数据会保留到eeprom,防断电丢失数据;
  • 支持切换RGB补光颜色:目前暂时支持三种颜色切换(红、绿、蓝),长按2秒按键切换RGB颜色;
  • 巡线灵敏度可调;
  • 具有反接保护,电源反接不会损坏IC;
  • 一个主板最多同时支持4路巡线传感器模块。

原理分析

RGB巡线传感器主要有4对RGB发射管和光敏接收管,如下图:

微信截图_20160129150749

当RGB经过不同颜色背景时,光敏接收管将接收到不同的光信息转化为电信号,并经过放大器后由模拟口输出具体数值。软件再把4个光敏接收管的模拟值做融合算法,最终计算输出传感器模块偏离赛道的位置偏移量,用户可以直接把该偏移量用于控制左右两个电机转速实现巡线。

引脚定义

RGB巡线模块有六个针脚的接头,每个针脚的功能如下表

序号引脚功能
1SDAI2C数据接口
2SCLI2C时钟接口
3VCC电源线
4GND接地
5S2I2C地址分配口
6S1I2C地址分配口

连线模式

RJ25连接

由于RGB巡线传感器模块接口是蓝白色标,当使用RJ25接口时,需要连接到主控板上带有蓝白色标的接口。

以 Makeblock Megapri为例,可以连接到5,6,7,8号接口,如下图所示:

微信截图_20160129151012

杜邦线连接

当使用杜邦线连接到 Arduino Uno 主板时,模块A0引脚需要连接到ANALOG(模拟)口,如下图所示:

微信截图_20160129151050

学习方法

如果比赛场地、环境、RGB传感器模块安装位置等发生了变化,建议重新学习传感器模块,学习信息会保存在eeprom,防掉电丢失。完整的学习过程包括四个步骤:

  1. 调整补光灯颜色:根据场地背景和线的颜色,通过长按按钮选择合适的补光灯颜色。
  2. 学习背景颜色:将RGB传感器模块安装在待使用的位置,并使其4个RGB灯都正对场地背景,单击按键,四个led指示灯开始慢闪,2~3秒后学习完成,led指示灯停止闪烁。
  3. 学习赛道颜色:将RGB传感器模块安装在待使用的位置,并使其4个RGB灯都正对赛道,双击按键,四个led指示灯开始慢闪,2~3秒后学习完成,led指示灯停止闪烁。
  4. 测试确认:保持该模块在待使用的位置,调整四个探头的位置以确认其是否能正确检测到背景及线的颜色。检测到背景时探头对应的LED亮起,检测到线时对应的LED熄灭。

编程指导

Arduino 编程

如果使用 Arduino 编程,需要调用库 Makeblock-Library-master 来控制RGB巡线模块。

本程序通过 Arduino 编程,使用两路增强型180编码电机进行巡线控制,工程文件根目录必须包含 MeRGBLineFollower 源文件和 MeEnhanceEncoderOnBoard 源文件,如下:

程序下载

微信截图_20160129151123
MeRGBLineFollower180motorAuriga.ino 是基于 Auriga 主控板、180编码电机做底盘的巡线例子,代码如下:

微信截图_20160129151123

RGB巡线传感器主要函数功能列表

函数功能
void setKp(float value)设置巡线灵敏度,灵敏度是用于调节巡线响应速度,值越大巡线时转弯越灵敏
uint8_t getStudyTypes(void)获取RGB传感器学习状态,0-未学习,1-正在学习背景色,2-正在学习赛道色
int16_t getPositionOffset(void)获取传感器偏离赛道的位置偏移量,输出值为巡线灵敏度Kp与4个传感器融合算法模拟量的乘积,范围-512 \~512,大于0时表示线的位置偏向RGB4一侧,值越大偏离度越高;小于0时表示线的位置偏向RGB1一侧,负值越大偏离越大。
换而言之,当传感器的RGB探头一侧朝向前进方向安装时,偏移量是正数表示传感器偏向线的左侧;偏移量是负数表示传感器偏向线的右侧。
uint8_t getPositionState(void) 如图所示,用bit0~bit3分别代表从左至右四个RGB探头RGB4,RGB3,RGB2,RGB1。 用‘1’代表检测到背景(对应的LED亮起),用‘0’代表检测到线(对应的LED熄灭)。

如‘0000’代表四个探头全部检测到线(LED状态为‘灭灭灭灭’),返回值为0;

‘0111’代表从左至右四个探头分别检测到‘线’‘背景’‘背景’‘背景’(LED状态为‘灭亮亮亮’),返回值为7;

‘0011’代表从左至右四个探头分别检测到‘线’‘线’‘背景’‘背景’(LED状态为‘灭灭亮亮’),返回值为3。
uint8_t getADCValueRGB1(void)

uint8_t getADCValueRGB2(void)

uint8_t getADCValueRGB3(void)

uint8_t getADCValueRGB4(void)
获取RGB巡线传感器各通道的ADC值,返回值为0~255
int8_t setRGBColour(uint8_t colour)设置RGB补光灯颜色参数color设置为1--红色、2--绿色、3--蓝色;

mBlock 3 编程

RGB巡线传感器模块支持mBlock编程环境,必须安装 RGBLineFollower 或者RGBLineFollowerAdvanced插件,如果使用180编码电机做底盘巡线则还必须安装 EnhanceEncoderOnBoard 增强型编码电机插件。

RGBLineFollower插件

RGBLineFollower提供基本的功能以方便快速实现巡线应用。

插件安装方法:
打开mBlock软件 → 扩展 → 扩展管理器→找到 RGBLineFollowerEnhanceEncoderOnBoard 插件包 → 下载插件包即可。现在机器人模块会出现插件语句块,如下:

微信截图_20160129151218

语句块简介:

  • 接口:Port1 ~Port12
  • 地址:地址1 ~ 地址4(0 ~ 3),任意端口可以和任意地址绑定,但所有语句块里面一个端口只能绑定唯一一个地址
语句块描述
微信截图_20160129151218设置巡线灵敏度,灵敏度是用于调节巡线响应速度,值越大巡线时转弯越灵敏
微信截图_20160129151218获取传感器偏离赛道的位置偏移量,输出值为巡线灵敏度Kp与4个传感器融合算法模拟量的乘积,范围-512 \~512,大于0时表示线的位置偏向RGB4一侧,值越大偏离度越高;小于0时表示线的位置偏向RGB1一侧,负值越大偏离越大。
换而言之,当传感器的RGB探头一侧朝向前进方向安装时,偏移量是正数表示传感器偏向线的左侧;偏移量是负数表示传感器偏向线的右侧。
微信截图_20160129151218 如图所示,用bit0\~bit3分别代表从左至右四个RGB探头RGB4,RGB3,RGB2,RGB1。 用‘1’代表检测到背景(对应的LED亮起),用‘0’代表检测到线(对应的LED熄灭)。

如‘0000’代表四个探头全部检测到线(LED状态为‘灭灭灭灭’),返回值为0;

‘0111’代表从左至右四个探头分别检测到‘线’‘背景’‘背景’‘背景’(LED状态为‘灭亮亮亮’),返回值为7;

‘0011’代表从左至右四个探头分别检测到‘线’‘线’‘背景’‘背景’(LED状态为‘灭灭亮亮’),返回值为3。
微信截图_20160129151218获取RGB传感器学习状态。输出值:0-未学习,1-正在学习背景色,2-正在学习赛道色

基于Auriga主控板、180编码电机做底盘的巡线例子,如下:

微信截图_20160129151218

基于mCore主控板、TT马达做底盘的巡线例子,如下:

微信截图_20160129151218

RGBLineFollowerAdvanced插件

RGBLineFollowerAdvanced插件提供了包括传感器探头原始返回值的更加底层的语句块,支持更加灵活的教学、应用场景。 插件安装方法:打开mBlock软件 → 扩展 → 扩展管理器 → 找到RGBLineFollowerAdvancedEnhanceEncoderOnBoard插件包 → 下载插件包即可。现在机器人模块会出现插件语句块,如下:

微信截图_20160129151218

语句块简介:

端口:Port1 ~Port12

传感器编号:1~4,任意端口可以和任意编号传感器绑定,每个编号对应唯一RGB巡线模块。

语句块描述
微信截图_20160129151218初始化RGB巡线传感器,绑定RGB巡线模块到要接入的端口(使用RGB巡线传感器必须先调用该初始化语句块)
微信截图_20160129151218设置RGB补光灯颜色,目前暂支持设置三种颜色(红、绿、蓝)
微信截图_20160129151218设置巡线灵敏度(范围0\~1),灵敏度是用于调节巡线响应速度,值越大巡线时转弯越灵敏
微信截图_20160129151218获取RGB巡线传感器模块各探头采集的模拟量值(ADC值),范围为0\~255,探头下颜色越趋近黑色值就接近0,颜色越趋近白色值就接近255
微信截图_20160129151218获取传感器输出的电机差速值,输出值为巡线灵敏度Kp与4个传感器融合算法模拟量的乘积,范围-512 \~512,大于0时表示线的位置偏向RGB4一侧,值越大偏离度越高,电机差速越大;小于0时表示线的位置偏向RGB1一侧,负值越大偏离越大,电机差速越大。
换而言之,当传感器的RGB探头一侧朝向前进方向安装时,偏移量是正数表示传感器偏向线的左侧;偏移量是负数表示传感器偏向线的右侧。
微信截图_20160129151218如图所示,从左至右四个RGB探头RGB4,RGB3,RGB2,RGB1。 用‘1’代表检测到背景(对应的LED亮起),用‘0’代表检测到线(对应的LED熄灭)。

如‘0000’代表四个探头全部检测到线(LED状态为‘灭灭灭灭’);

‘0111’代表从左至右四个探头分别检测到‘线’‘背景’‘背景’‘背景’(LED状态为‘灭亮亮亮’);

‘0011’代表从左至右四个探头分别检测到‘线’‘线’‘背景’‘背景’(LED状态为‘灭灭亮亮’)。

如探头检测到的状态与设定的状态一致,返回‘真’;反之,返回‘假’。
微信截图_20160129151218获取单个RGB探头当前状态,是检测到背景还是检测到线; 如探头检测到背景,返回‘真’;检测到线,返回‘假’。

基于Auriga主控板、180编码电机做底盘的默认巡线策略例程,例程为巡线遇到“十”字路口停下2秒后直线运行0.5秒继续巡线,需要预先学习,例程如下:

微信截图_20160129151218

基于Auriga主控板、180编码电机做底盘的用户获取传感器各通道模拟值(ADC值)自行编写巡线算法的巡线例子,例程为白底黑线巡线,例程如下:

微信截图_20160129151218

慧编程(mblock 5)编程

1.以Auriga为例,先添加扩展

微信截图_20160129151218

2.添加RGB传感器扩展

微信截图_20160129151218

3.在上传模式下使用RGB巡线传感器语句块

微信截图_20160129151218

语句块简介:

端口:Port1 ~Port12

传感器编号:1~4,任意端口可以和任意编号传感器绑定,每个编号对应唯一RGB巡线模块。

语句块描述
微信截图_20160129151218初始化RGB巡线传感器,绑定RGB巡线模块到要接入的端口(使用RGB巡线传感器必须先调用该初始化语句块)
微信截图_20160129151218设置RGB补光灯颜色,目前暂支持设置三种颜色(红、绿、蓝)
微信截图_20160129151218设置巡线灵敏度(范围0\~1),灵敏度是用于调节巡线响应速度,值越大巡线时转弯越灵敏
微信截图_20160129151218获取RGB巡线传感器模块各探头采集的模拟量值(ADC值),范围为0\~255,探头下颜色越趋近黑色值就接近0,颜色越趋近白色值就接近255
微信截图_20160129151218获取传感器输出的电机差速值,输出值为巡线灵敏度Kp与4个传感器融合算法模拟量的乘积,范围-512 \~512,大于0时表示线的位置偏向RGB4一侧,值越大偏离度越高,电机差速越大;小于0时表示线的位置偏向RGB1一侧,负值越大偏离越大,电机差速越大。
换而言之,当传感器的RGB探头一侧朝向前进方向安装时,偏移量是正数表示传感器偏向线的左侧;偏移量是负数表示传感器偏向线的右侧。
微信截图_20160129151218如图所示,从左至右四个RGB探头RGB4,RGB3,RGB2,RGB1。 用‘1’代表检测到背景(对应的LED亮起),用‘0’代表检测到线(对应的LED熄灭)。

如‘0000’代表四个探头全部检测到线(LED状态为‘灭灭灭灭’);

‘0111’代表从左至右四个探头分别检测到‘线’‘背景’‘背景’‘背景’(LED状态为‘灭亮亮亮’);

‘0011’代表从左至右四个探头分别检测到‘线’‘线’‘背景’‘背景’(LED状态为‘灭灭亮亮’)。

如探头检测到的状态与设定的状态一致,返回‘真’;反之,返回‘假’。
微信截图_20160129151218获取单个RGB探头当前状态,是检测到背景还是检测到线; 如探头检测到背景,返回‘真’;检测到线,返回‘假’。

慧编程编程实例

下载示例程序