介绍
驱动程序和示例下载:QGPMaker_IICSensorbar库下载
Mixly插件下载:QGPMaker MixlyV5.6
巡线示例代码下载:巡线小车示例代码
该巡线模块由I2C接口通讯,不占用开发板额外端口。模块包含5路巡线传感器。预留2路IO接口,支持INPUT/OUTPUT,可用于扩展IO端口使用。

注意:
- 太阳会发出大量的红外光,因此在直射阳光下的效率要差得多,户外使用要注意;
- Arduino I2C总线会占用系统中断,使用不能在计时器内部使用该模块的方法。
硬件总览

原理图(请查看高清版)

安装

组装很容易,与开发板引脚连接如下。
| 信号/说明 | 巡线模块 | Arduino uno |
| 电源-5v DC | 5V | 5V |
| GND | GND | GND |
| I2C Data | SDA | SDA / A4 |
| I2C Clock | SCL | SCL / A5 |
| INT(*) | NC | NC |
*注意:INT引脚不是必需的,但如果用到中断功能,则可以连接到开发板任何输入端。
使用场地需是白底黑线或者黑底白线,红外传感器有效探测高度是10mm,所以要根据实际环境调节高度和灵敏度。
QGPMaker_IICSensorbar库入门(Arduino库)
示例讲解:
#include "KiKuPILineFollow.h" //引入奇果派库文件
KKPLINEFOLLOW sensorbar; //创建巡线模块对象
//定义6个变量,对应模块上的s0至s6
const byte lineSensor0 = 0;
const byte lineSensor1 = 0;
const byte lineSensor2 = 0;
const byte lineSensor3 = 0;
const byte lineSensor4 = 0;
const byte lineSensor5 = 0;
const byte lineSensor6 = 0;
void setup()
{
Serial.begin(115200);
Serial.println("Line Follow Example");
if (sensorbar.begin() == false) { //初始化巡线模块
Serial.println("Failed to communicate. Check wiring.");
while (1) ; //如果初始化失败,则会打印错误信息
}
sensorbar.enableSensor(); //启用巡线模块
}
void loop()
{
//s0至s4是5个巡线模块端口,读取其数值
//如果s5和s6接有红外、超声波等模块,也可以这样读取
uint8_t ls0 = sensorbar.readSensor(lineSensor0);
uint8_t ls1 = sensorbar.readSensor(lineSensor1);
uint8_t ls2 = sensorbar.readSensor(lineSensor2);
uint8_t ls3 = sensorbar.readSensor(lineSensor3);
uint8_t ls4 = sensorbar.readSensor(lineSensor4);
//把读取结果打印出来
Serial.print(ls0);
Serial.print(" ");
Serial.print(ls1);
Serial.print(" ");
Serial.print(ls2);
Serial.print(" ");
Serial.print(ls3);
Serial.print(" ");
Serial.print(ls4);
Serial.println();
delay(200);
}
能同时支持两个巡线模块,代码sensorbar.begin(<address>),其中<address>是扩展器的I 2 C地址(默认为0x20)。如果要部署2个巡线传感器,则需要把下图中3个触点中的下面2个用锡焊相连,此时该模块的i2c地址就被设置成了0x21。

#include "KiKuPILineFollow.h"
KKPLINEFOLLOW sensorbar1; //第1个巡线模块
KKPLINEFOLLOW sensorbar2; //第2个巡线模块
void setup(){
if(sensorbar1.begin(0x20) == false){
Serial.println("IIC sensorbar1 init failed");
while(1);
}
ensorbar1.enableSensor();
if(sensorbar2.begin(0x21) == false){
Serial.println("IIC sensorbar2 init failed");
while(1);
}
sensorbar2.enableSensor();
Serial.begin(115200);
}
void loop(){
Serial.print(sensorbar1.readSensor(0)); //读取第一个巡线模块s0端口数据
Serial.print(',');
Serial.print(sensorbar2.readSensor(0)); //读取第二个巡线模块s0端口数据
Serial.println(' ');
delay(400);
}
模拟输出(PWM)
还可以通过使用analogWrite(<pin>, <0-255>)功能将S5、S6端口用作“模拟”(PWM)输出-就像Arduino模拟输出一样!需要注意的区别:
- PWM模式不能用于舵机驱动(不支持舵机驱动)
以下是示例代码,用于调节S5引脚外接的LED灯亮度:
#include "KiKuPILineFollow.h"
void setup() {
//为了测试模拟端口输出,请准备一个led灯
//负极接在s5端口的GND引脚上,正极接在S5引脚
}
void loop()
{
//如下代码逻辑是:s5引脚循环输出0至少255,再逐次回到0
//结果s5引脚的电压会在0至3v之间变化
//因此,led灯泡会出现慢慢变亮,接着又慢慢变暗的循环状态
for (int i=0; i<256; i++)
{
sensorbar.analogWrite(5, i);
delay(10);
}
for (int i=255; i>=0; i--)
{
// PWM the LED from 255 to 0
sensorbar.analogWrite(5, i);
delay(10);
}
}
这样就完成了一个呼吸灯的效果。
示例演示

原创文章,作者:奇果派工坊,如若转载,请注明出处:https://www.7gp.cn/archives/665
