介绍
驱动程序和示例下载: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