概述
在本课中将介绍用红外控制小车循迹,按下遥控器某个按键,小车开始循迹;按下另一个按键,小车停止。
循迹原理
循迹传感器模块上有2个探头,一个是红外发射二极管,一个是红外接收管。红外发射二极管不断向外发射红外线,若循迹模块不在黑色轨道上,红外发射管发射的红外线反射回来被红外接收管接收到,模块输出低电平;如果循迹模块位于黑色轨道上,红外发射管发射的红外线会被黑色轨道吸收,红外接收管无法检测到红外线或检测到的红外线信号比较弱,模块输出高电平。
坦克底盘上一共有2个循迹传感器,左右各一个。若左边循迹传感器模块位于黑线上,使坦克小车左转;若右边循迹传感器模块位于黑线上,使坦克小车右转;若左右两个循迹模块位于黑色轨道两侧,则坦克小车直行;若左右循迹模块均在黑线上,坦克小车停止运动。如图所示
软件
下载https://osoyoo.com/driver/tank_robot_lesson4.zip并解压文件,用arduino IDE打开tank_robot_lesson4.ino文件,下面对代码做简要说明。
#define LFSensor_1 A0 //line follow sensor1 #define LFSensor_2 A1 //line follow sensor2
上面两行代码定义了左右两个循迹传感器所接的端口
void read_sensor_values() { sensor[0]=digitalRead(LFSensor_1); sensor[1]=digitalRead(LFSensor_2); }
read_sensor_values()函数会读取左右两个循迹模块信号,并将左边模块信号存储在sensor[0]中;右边模块结果存储在sensor[1]中。
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(250); } 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(250); } 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(); } }
在auto_tarcking()中先调用read_sensor_values()函数,获取到左右循迹模块信号,接着通过if语句判断左右循迹模块信号,控制坦克小车运动,实现循迹。auto_tarcking()将在loop()中被循环调用。
用usb线把坦克下车与pc连接起来,选择正确的板子型号和端口号,将程序烧录到arduino中,打开电池盒电源,将坦克小车放到黑色轨道上,遥控器对着红外接收头,按下”OK”键,小车将沿着黑色轨道行驶;按下”0″小车停止。若无法循迹,请看考第一课调节循迹模块灵敏度,并检查接线。
DownLoad Url osoyoo.com