的反射系数不同,可根据接收到的反射光的强弱来判断“道路”—黑线。笔者在该模块中利用了简单、应用也比较普遍的检测方法——红外探测法。
红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号,再通过LM324作比较器来采集高低电平,从而实现信号的检测。避障亦是此原理。电路图如图3.4。
市面上有很多红外传感器,在这里我选用TCRT5000型光电对管。
图3.4循迹原理图
3.4主控电路
本模块主要是对采集信号进行分析,同时给出PWM波控制电机速度,起停。以及再检测到障碍报警等作用。其电路图如图5。
图3.5 主控电路
第四章 软件设计
4.1主程序框图:
启动 避障 循迹 N N 是否检测到障碍 是否检测到停止线 Y Y 停止 图4.1 主程序框图
4.2电机驱动程序 void goahead() { s1=1; s2=0; s3=1; s4=0; }
void goback() { s1=0; s2=1; s3=0; s4=1; }
void turnleft() { s3=1; s4=0; }
void turnright() { s1=1; s2=0; } void stop() { en1=0; en2=0; }
4.3循迹模块 循迹框图:
开始 前进 扫描I/O口,是否检测到黑线 N Y 左转 左边右边 右转
图4.2 循迹框图
循迹程序: void xunji() {
if((left_red==1)&(right_red==1)) { en1=1;
en2=1; goahead(); delay(150); en1=0; en2=0; delay(50); }
else if((left_red==0)&(right_red==1)) { en1=0; en2=1; turnleft(); delay(150); en1=1; en2=0; delay(50); }
else if((left_red==1)&(right_red==0)) { en1=1; en2=0; P0_1=!P0_1; turnright(); delay(150); en1=0; en2=1; delay(50); } else { stop(); } }
P0_0=!P0_0;