I2C五路巡线模块LineFollowerArray5s使用说明

介绍

该巡线模块由I2C接口通讯,不占用开发板额外端口。模块包含5路巡线传感器。预留2路IO接口,支持INPUT/OUTPUT,可用于扩展IO端口使用。

I2C五路巡线模块LineFollowerArray5s使用说明

注意:

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

硬件总览

I2C五路巡线模块LineFollowerArray5s使用说明

原理图(请查看高清版

I2C五路巡线模块LineFollowerArray5s使用说明

安装

I2C五路巡线模块LineFollowerArray5s使用说明

组装很容易,与开发板引脚连接如下。

信号/说明 巡线模块Arduino uno
电源-5v DC5V5V
GNDGNDGND
I2C DataSDASDA / A4
I2C ClockSCLSCL / A5
INT(*)NCNC

*注意: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。

I2C五路巡线模块LineFollowerArray5s使用说明
#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); 
  }

}

这样就完成了一个呼吸灯的效果。

示例演示

I2C五路巡线模块LineFollowerArray5s使用说明

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

(19)
上一篇 2021年1月11日 下午3:53
下一篇 2021年1月12日 上午10:33

相关推荐