基于51单片机的蓝牙智能小车——《加强篇》

在前面的两篇文章中,我已经介绍了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();}
}

程序仅供参考

如果前面的功能你都已经实现了,小编认为你是一名优秀的司机了,也为你点个赞!

带你们走到这里,我认为初级阶段的智能小车已经完成了,但小车的功能还远远不止这些,后期如果大家水平进一步提升,接触到了图像处理、音频处理、嵌入式、人工智能等,那么小车还能继续拓展出好多好多的功能,对小车的探究就像是一个无底洞,它等着我们去探索。

前面的知识,大家如果有什么不懂的、有什么疑惑、有什么更好的想法,都可以给我留言喔,我看到了会尽快答复,能帮助到大家,是我的荣幸!

猜你喜欢

转载自blog.csdn.net/qq_38677310/article/details/80153433