概述

上一课学会了通过红外让小车运动,本课将在上一课的基础上增加黑白循迹功能。循迹功能就是让小车沿着白色地板上的黑色线运动,就像火车卡在轨道上移动一样。

硬件

本课只需要安装两个黑白循迹模块就可以了,所以说安装还是很简单的。黑白循迹模块用于识别黑白线,当黑白循迹模块检测到黑线时候模块信号灯熄灭输出高电平;检测到白色线,信号指示灯亮起输出低电平。模块的灵敏度可以通过可调电位器调节。

所需配件:

M3*5十字螺丝  x4颗

M3*12双通铜柱 x2根

用M3*5十字螺丝通过铜柱把两个循迹模块按照图示样子安装在底盘上(记得加图!)

循迹模块按照下表与uno连接起来

左边循迹模块
循迹模块 Arduino uno
VCC 5V
GND GND
DO D2
AO 不接
右边循迹模块
循迹模块 Arduino uno
VCC 5V
GND GND
DO D3
AO 不接

接好线后,在白色地板上贴一条黑色胶带,用USB把uno和PC连接起来,给uno板供电。用螺丝旋转循迹模块上的可调点位,使循迹模块在黑线上时候模块信号指示灯熄灭,在白线上时候模块指示灯亮起。

软件

下载示例代码并解压,用arduino IDE打开lesson-3.ino,下面对部分代码作简单说明。

#define LFSensor_1 2 //line follow sensor1
#define LFSensor_2 3 //line follow sensor2

循迹模块与uno之间端口定义

char sensor[2]={0,0};

定义一个数组,将循迹模块检测到的信号存储在数组中。

#define M_SPEED1   150  //motor speed
#define M_SPEED2   170  //motor speed

上面两个变量分别代表小车转弯和执行时候的电机速度,速度不要设置的过大,速度过大小车循迹时候可能会跑出轨道。

void auto_tarcking(){
  read_sensor_values();
  if((sensor[0]==LOW)&&(sensor[1]==HIGH)){ //The right sensor is on the black line.The left sensor is on the white line
    set_motorspeed(M_SPEED1,M_SPEED1);
    turn_right(20);
  }
  else if((sensor[0]==HIGH)&&(sensor[1]==LOW)){//The right sensor is on the white line.The left sensor is on the black line
    set_motorspeed(M_SPEED1,M_SPEED1);
    turn_left(20);
  }
  else if((sensor[0]==LOW)&&(sensor[1]==LOW)){//The left an right sensor are on the white line.
    set_motorspeed(M_SPEED2,M_SPEED2);
    go_ahead();
  }
  else if((sensor[0]==HIGH)&&(sensor[1]==HIGH)){//The left an right sensor are on the black line.
    go_stop();
  }
 }

上面的函数是循迹功能的核心代码,黑线位于左右循迹模块之间时候小车直行;左边循迹在黑线上,小车左转;右边循迹模块在黑线上,小车右转;左右循迹均在黑线上,小车停止。

测试

用USB线将arduino 和PC连接起来,选择正确的板卡型号和端口将其烧录到arduino uno中。将小车放置在黑线上,打开电池盒电源,遥控器对着红外接收头,按下”OK”键,小车开始循迹。按下”0″小车停止。

如果小车无法按照预期工作,请检查下面事项

  1. 电池有没有电
  2. 遥控器有没有离接收器太远
  3. 线路有没有接错
  4. 循迹模块灵敏度是否调好了