在前面的两篇文章中,我已经介绍了51智能小车的一些最基本功能,大家如果学习前两篇文章,我相信大家能够掌握了智能小车基本原理,并且完全已经有能力将小车制作出来并且实现小车的基本操作功能。但是呢,如果小车只能是人为遥控使它前后左右移动,那么小车可能会略微显得单调了些,为了让小车更加智能化、更加有趣,接下来,我加入红外避障、红外寻迹、超声波避障的功能。
红外避障模块:
void search()
{
unchar flag;
if((search_left==0)&&(search_right==0))
{flag='g';}
if((search_left==0)&&(search_right==1))
{flag='l';}
.
.
switch(flag)
{
case 'g':go_forward();
break;
case 'l':turn_left();
break;
.
.
}
}
程序仅供参考
红外寻迹模块:
void infrared()
{
if(Lr1==0)
turn_right();
if(Lr2==0)
turn_back_right();
if(Rr1==0)
turn_left();
if(Rr2==0)
turn_back_left();
}
程序仅供参考
超声波模块:
如图所示,此模块共有4只引出脚,从左往右,第一脚为VCC,由于该模块工作电压为5V,第二只脚为Trig,输入触发信号,第三只脚为Echo,输出回响信号,第四只脚为接地。
(1)给至少给Trig 10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回
(3)有信号返回,通过Echo输出一高电平,高电平持续的时间就是超声波从发射到放回的全部时间
(4)测试距离=(高电平时间*声速(340m/s))/2
超声波测距的关键一点就是对时间的精确测量,要想精确测量时间,我们就需要用到定时器,但是前面T0(用于PWM)、T1(用于串口通信),这里小编查阅了很多的资料,也突破了认识的局限,发现了T2定时器。
但是T2与T0、T1的使用方式很不相同,小编实际实验,发现T2不能直接用于超声波的计时,最后我们把T2用作波特率发生器,T1用于计时,就需要对寄存器重新进行配置,这样就充分利用了3个定时/计数器,达到了预期效果
超声波避障的完整程序:
void distance ()
{
int t,i;
delay_us ();
Trig=1;
Trig=0;
TR1=1;
while (!Echo);while(Echo);
n=0;
TR1=0;t=256*TH1+TL1+65535*n;
if(s>0&&s<30) //如果距离30厘米,小车持续左转
TH1=TL1=0;s=t*0.01845; //距离为厘米 {
{turn_left();}
for(t=0;t<70;t++)for(i=0;i<10;i++)}else{stop();}
}
程序仅供参考
如果前面的功能你都已经实现了,小编认为你是一名优秀的司机了,也为你点个赞!
带你们走到这里,我认为初级阶段的智能小车已经完成了,但小车的功能还远远不止这些,后期如果大家水平进一步提升,接触到了图像处理、音频处理、嵌入式、人工智能等,那么小车还能继续拓展出好多好多的功能,对小车的探究就像是一个无底洞,它等着我们去探索。
前面的知识,大家如果有什么不懂的、有什么疑惑、有什么更好的想法,都可以给我留言喔,我看到了会尽快答复,能帮助到大家,是我的荣幸!