一、循迹小车
TCRT5000传感器的红外发射二极管不断发射红外线 当发射出的红外线没有被反射回来或被反射回来但强度不够大时, 红外接收管一直处于关断状态,此时模块的输出端为高电平,指示二极管一直处于熄灭状态 被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,红外接收管饱和, 此时模块的输出端为低电平,指示二极管被点亮
循迹模块TCRT5000长相如下图:
接线:
VCC:接电源正极(3-5V)
GND:接电源负极
DO:TTL开关信号输出0、1
AO:模拟信号输出(不同距离输出不同的电压,此脚一般可以不接)
循迹小车原理:
由于黑色具有较强的吸收能力,当循迹模块发射的红外线照射到黑线时,红外线将会被黑线吸收,导致 循迹模块上光敏三极管处于关闭状态,此时模块上一个LED熄灭。在没有检测到黑线时,模块上两个LED 常亮
循迹模块安装在小车车头两侧
下方小车两个模块都能反射回来红外,输出低电平,灯亮,直走
上方小车左模块遇到黑线,红外被吸收,左模块输出高电平,右模块输出低电平,左转,反之右转
代码如下:
void main()
{
Time0Init();
Time1Init();
//UartInit();
//Delay1000ms();
while(1){
if(leftSensor == 0 && rightSensor == 0){//前进
speedLeft = 28;//10份单位时间全速运行,30份停止,所以慢,20ms是40份的500us
speedRight = 30;
}
if(leftSensor == 1 && rightSensor == 0){//左转
speedLeft = 10;//10份单位时间全速运行,30份停止,所以慢,20ms是40份的500us
speedRight = 40;
}
if(leftSensor == 0 && rightSensor == 1){//右转
speedLeft = 28;
speedRight = 15;
}
if(leftSensor == 1 && rightSensor == 1){//停止
speedLeft = 0;
speedRight = 0;
}
}
}
走直线的时候,如果小车往左偏,证明左边马达比右边马达马力大,所以要把右边的速度调快,多次测试,找到合适的数值
二、跟随小车/避障小车
使用的模块:超声波、舵机、C51开发板、电机等
演示视频如下:
避障小车
代码如下:
char dir;
double disMiddle;
double disRight;
double disLeft;
Time1Init();//定时器1初始化
Time0Init();//定时器0初始化
//舵机初始位置
sgMiddle();//正前方
Delay200ms();
Delay200ms();
dir = MIDDLE;//用临时变量接收MIDDLE、LEFT、RIGHT的值,用它来判断当前小车头的状态
while(1){
//PWM(脉冲宽度调制)信号来控制旋转角度
//2.0ms的高电平时间对应舵机转动到135°,而2.5ms的高电平时间对应舵机转动到180,我现在是2.0ms
if(dir != MIDDLE){//车头不在正前方
sgMiddle();
dir = MIDDLE;//让车头变为正前方
Delay200ms();
}
disMiddle = get_distance();//测距
if(disMiddle>35){//前方距离大于35
//前进
Delay200ms();
openStatusLight();//距离D5亮D6灭
goForward();//向前走
}else if(disMiddle < 20){//前方距离小于20
goBack();//后退
Delay20ms();
}else{
//停止
stop();
//测左边距离
closeStatusLight();//D5灭D6亮
sgLeft();//
Delay200ms();
//Delay2000ms();
disLeft = get_distance();//左边距离
sgMiddle();
Delay20ms();
//Delay2000ms();
sgRight();
dir = RIGHT;
Delay200ms();
//Delay2000ms();
disRight = get_distance();//右边距离
if(disLeft < disRight){//如果右边距离大于左边距离,则向右转
goRight();
Delay20ms();
stop();
}
if(disLeft > disRight){//如果左边距离大于右边距离,则向左转
goLeft();
Delay20ms();
stop();
}
}
}
}
三、OLED二次开发小车
实现用OLED显示小车速度,还可以通过蓝牙模块显示小车的速度和控制小车前后左右移动。
这里使用的测速模块是
用于电机转速测试
有遮挡,输出高电平;无遮挡,输出低电平
- 测试原理和单位换算
轮子走一圈,经过一个周长,C = 2x3.14x半径= 3.14 x 直径(6.5cm) 对应的码盘也转了一圈,码盘有20个格子,每经过一个格子,会遮挡(高电平)和不遮挡(低电平), 那么一个脉冲就是走了 3.14 * 6.5 cm /20 = 1.0205CM
定时器可以设计成一秒,统计脉冲数,一个脉冲就是1cm 假设一秒有80脉冲,那么就是80cm/s