sbitxunjiLed=P2^1;//定义前方左侧指示灯端口
sbitbizhangLed=P2^0;//定义前方右侧指示灯端口
sbitLeftIRBZ=P1^1;//定义前方左侧红外探头端口
sbitRightIRBZ=P1^0;//定义前方右侧红外探头端口
sbitLeftIR=P3^5;//定义前方左侧红外探头端口
sbitRightIR=P3^6;//定义前方右侧红外探头端口
sbitM1A=P0^0;//定义左侧电机驱动A端
sbitM1B=P0^1;//定义左侧电机驱动B端
sbitM2A=P0^2;//定义右侧电机驱动A端
sbitM2B=P0^3;//定义右侧电机驱动B端
staticunsignedintLedFlash;//定义闪动频率计数变量
bitEnableLight=0;//定义指示灯使能位
unsignedchartemp=1;
voidtingzhi()
{
M1A=0;//将M1电机A端初始化为0
M1B=0;//将M1电机B端初始化为0
M2A=0;//将M2电机A端初始化为0
M2B=0;
}
voidqianjin()
{
M1A=1;
M1B=0;
M2A=1;
M2B=0;
}
voidhoutui()
{
M1A=0;
M1B=1;
M2A=0;
M2B=1;
}
voidzuozhuan()
{
M1A=0;
M1B=1;
M2A=1;
M2B=0;
}
voidyouzhuan()
{
M1A=1;
M1B=0;
M2A=0;
M2B=1;
}
voidDelay1ms(unsignedinti)
{
unsignedcharj,k;
do{
j=10;
do{
k=50;
do{
_nop_();
}while(--k);
}while(—-j);
}while(——i);
}
voiddelay_nus(unsignedinti)//延时:
i>=12,i的最小延时单12us
{
i=i/10;
while(—-i);
}
voiddelay_nms(unsignedintn)//延时nms
{
n=n+1;
while(--n)
delay_nus(900);//延时1ms,同时进行补偿
}
voiddelayms(unsignedcharx)//0。
14mS延时程序
{
unsignedchari;//定义临时变量
while(x--)//延时时间循环
{
for(i=0;i<13;i++){}//14mS延时
}
}
voidDelay()//定义延时子程序
{
unsignedintDelayTime=30000;//定义延时时间变量
while(DelayTime--);//开始进行延时循环
return;//子程序返回
}
voidControlCar(unsignedcharConType)//定义电机控制子程序
{
tingzhi();
switch(ConType)//判断用户设定电机形式
{
case1:
//前进//判断用户是否选择形式1
{
//tingzhi();//进入前进之前先停止一段时间防止电机反向电压冲击主板导致系统复位
//Delay1ms(50);
qianjin();
break;
}
case2:
//后退//判断用户是否选择形式2
{
//tingzhi();//进入后退之前先停止一段时间防止电机反向电压冲击主板导致系统复位
//Delay1ms(50);
houtui();//M2电机反转
break;
}
case3:
//左转//判断用户是否选择形式3
{
//tingzhi();//进入左转之前先停止一段时间防止电机反向电压冲击主板导致系统复位
//Delay1ms(50);
zuozhuan();//M2电机正转
break;
}
case4:
//右转//判断用户是否选择形式4
{
//tingzhi();//进入右转之前先停止一段时间防止电机反向电压冲击主板导致系统复位
//Delay1ms(50);
youzhuan();//M1电机正转
//M2电机反转
break;
}
case8:
//停止//判断用户是否选择形式8
{
tingzhi();
break;//退出当前选择
}
}
}
voidControlCar_yaokong(unsignedcharConType)//定义电机控制子程序(红外遥控单独设置一个switchcase语句)
{
tingzhi();
switch(ConType)//判断用户设定电机形式
{
case1:
//前进//判断用户是否选择形式1
{
tingzhi();//进入前进之前先停止一段时间防止电机反向电压冲击主板导致系统复位
Delay1ms(150);
qianjin();
break;
}
case2:
//后退//判断用户是否选择形式2
{
tingzhi();//进入后退之前先停止一段时间防止电机反向电压冲击主板导致系统复位
Delay1ms(150);
houtui();//M2电机反转
break;
}
case3:
//左转//判断用户是否选择形式3
{
tingzhi();//进入左转之前先停止一段时间防止电机反向电压冲击主板导致系统复位
Delay1ms(150);
zuozhuan();//M2电机正转
break;
}
case4:
//右转//判断用户是否选择形式4
{
tingzhi();//进入右转之前先停止一段时间防止电机反向电压冲击主板导致系统复位
Delay1ms(150);
youzhuan();//M1电机正转//M2电机反转
break;
}
case8:
//停止//判断用户是否选择形式8
{
tingzhi();
break;//退出当前选择
}
}
}
voidRobot_AvoidanceTraction()//机器人避障+循迹综合子程序
{
if(LeftIR==0&&RightIR==0)//三个红外检测到黑线,就前进
{
ControlCar
(1);
if(LeftIRBZ==0||RightIRBZ==0)
{
delay_nms(50);
while(!
LeftIRBZ)
{
ControlCar(8);
delay_nms(120);
}
while(!
RightIRBZ)
{
ControlCar(8);
delay_nms(120);
}
}
//左侧没有信号时,开始向右转一定的角度
delay_nms(10);
}
elseif(LeftIR==0&&RightIR==1)
{
ControlCar(3);//右侧没有信号时,开始向左转一定的角度
delay_nms(10);
}
elseif(LeftIR==1&&RightIR==0)
{
ControlCar(4);//右侧没有信号时,开始向左转一定的角度
delay_nms(10);
}
ControlCar(8);
}
智能小车电路图
智能小车焊接组装
1.先小后大焊接效果图如下:
2.主板背面焊接效果图如下:
第二步:
结构件的安装:
首先按照如图所示把2个尾轮安装好,并且结构固定要上锡。
第三步:
将两个尾轮装好以后,再将两条电机电源线按照如图方式从底板的正面从反面各一条装好,然后按照图示方式接在电机上面,注意方向,电机的上端接红色线,下端接黑色线。
第四步:
装前轮按照如图所示,先将两个紧锁柱分插入电机里面,注意是有螺纹的一头插入电机的滚动轴里面,然后再将轮子装进去。
第五步:
组装循迹传感器(如下图所示):
第六步:
整机装配
智能小车模块系统详解
实训成果:
成品展示,下图是焊接成品.请欣赏.
收获和体会:
本学期电子设计制作与创新提高课程的学习任务,是让我们制作智能小车,
过程非常有趣,在动手操作的同时又学习了模拟电子的相关知识,让我们的课程学习也非常方便。
通过此次的设计制作,使我们更加认识到了动手能力和理论知识的重要性,而理论与实践的结合更是重中之重。
当然,我们也深刻地认识到我们的不足,由于自身理论知识的欠缺和动手能力的不佳在工作中频频受阻,走了好多弯路,虽然在制作过程中不可避免地遇到很多问题,但是最后还是在老师以及同学的帮助下圆满解决了这些问题,实现了整个系统设计与最后调试,相关指标达到预期的要求,很好地完成了本次设计任务。
经过多次的修改和调试测量,本设计基本符合设计要求,由于受人为因
素和软硬件的限制,系统难免不了带来一些误差,但通过调节和精确计算可以减小误差,并且在不断的摸索前进中我们学到了很多东西。
特别是,在老师的帮助下,我们获得的不只是知识和成果,还有比之更重要的学习方法和解决问题的能力,这将是我们一生的财富,就像我们在老师的帮助下不断的寻找着打开各个知识宝库的金钥匙.
通过这次创新设计,我了解并掌握了传感器的基本理论知识,更深入的掌握单片机的开发应用和编程控制.为以后从事单片机软硬件产品的设计开发、打下了良好的基础,树立独立从事产品研发的信心,并在这种能力上得到了比较充分的锻炼.且我深刻的认识到团队的协作真的很重要,周围人的帮助也很重要,而这两个方面,我都拥有了,很感谢,这几周大家一起的努力,老师追求的是结果,但我们追求的是过程