[精品书单]试着用51单片机来弄智能小车(小机器人)
说到智能循迹小车是我最早的一辆自己搭起又编写好的程序弄成功的很开心的小车,虽然只是很普通的电路,最小系统板,和延时之类的中断但很是心满意足,也很感谢我的另外两个小伙伴,一起加油打气,很难忘的一次比赛............................那是大二第一学期么,哈哈.....
话不多说,回忆拿出来分享吧............................
先来一张车的整体图吧,了解下车的大概情况
车还可以吧,履带型的,这个是根据情况来选择的车型,这个大家可以参考下,
在附一张
(这张旁边是其他队友的,也跟着我俩弄了好多东西)
思路:这个车主要功能是避障和循迹,避障用了黄色的光电传感器,循迹是普通的光电传感器,在这里的提个醒,算是经验吧,很多硬件都得选择好的硬件,这个非常重要,然后电机驱动我用了L298N(后面那个看到没有)的这个接线也得注意有一点是得共地GND形成回路,不然你加上程序他始终就是不执行,还有
单片机最小系统板,这个也是最核心一会电路硬件再讲,当然接错线难免会爆,这个我也遇到过。就算不爆也很容易是烧,没事刚开始都这样,感觉所有情况我都遇到了,没遇到都对不起自己了,算是成长吧...........最后基本智能的东西是三部分:传感器识别、控制部分、执行部分。
电路硬件
最小系统原理图
电路其实可以结合程序来连接,比如引脚的什么。
程序代码
1 *******************************************************************************************************/ 2 #include"reg52.h" 3 #include"intrins.h" 4 #define uchar unsigned char 5 #define uint unsigned int 6 /*********************电机********************/ 7 sbit ZQDJ=P1^1;//电机左向前 8 sbit ZHDJ=P1^2;//电机左后 9 sbit YHDJ=P1^3;//电机右后 10 sbit YQDJ=P1^4;//电机右前 11 /*********************传感器********************/ 12 sbit YB1 = P3^1;//右外传感器 13 sbit YB2 = P3^2;//右内 14 sbit ZB3 = P3^3;//左内 15 sbit ZB4 = P3^4;//左外 16 /********************标志位*******************/ 17 sbit bz= P1^0; 18 /**********************************************/ 19 #define ZQDJ_G ZQDJ=1//左前电机高电平 20 #define ZHDJ_G ZHDJ=1//左后高 21 #define YHDJ_G YHDJ=1//右后高 22 #define YQDJ_G YQDJ=1 //右前高 23 #define ZQDJ_D ZQDJ=0//左前低 24 #define ZHDJ_D ZHDJ=0//左后低 25 #define YHDJ_D YHDJ=0//右后低 26 #define YQDJ_D YQDJ=0 //右前低 27 /**********************************************/ 28 bit flag=0; //避障标志位 29 /*************************************************************** 30 31 ****************************************************************/
其他子函数代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /*************************************************************** 2 50usÑÓʱ 3 ****************************************************************/ 4 void delay_50us(uint t) 5 { 6 uchar j; 7 for(;t>0;t--) 8 for(j=19;j>0;j--); 9 } 10 /*************************************************************** 11 50msÑÓʱ 12 ****************************************************************/ 13 void delay_50ms(uint t) 14 { 15 uint j; 16 for(;t>0;t--) 17 for(j=6245;j>0;j--); 18 } 19 /*************************************************************** 20 Ç°½ø 21 ****************************************************************/ 22 void forward(void) 23 { 24 ZHDJ_G; 25 YHDJ_G; 26 ZQDJ_D; 27 YQDJ_D; 28 } 29 /*************************************************************** 30 ºóÍË 31 ****************************************************************/ 32 void back(void) 33 { 34 ZHDJ_D; 35 YHDJ_D; 36 ZQDJ_G; 37 YQDJ_G; 38 } 39 /*************************************************************** 40 Í£Ö¹ 41 ****************************************************************/ 42 void stop(void) 43 { 44 ZHDJ_G; 45 YHDJ_G; 46 ZQDJ_G; 47 YQDJ_G; 48 } 49 50 /*************************************************************** 51 ×óת˫ÂÖ 52 ****************************************************************/ 53 void turn_left(void) 54 { 55 ZHDJ_D; 56 ZQDJ_G; 57 YQDJ_D; 58 YHDJ_G; 59 } 60 /*************************************************************** 61 ÓÒת˫ÂÖ 62 ****************************************************************/ 63 void turn_right(void) 64 { 65 ZHDJ_G; 66 ZQDJ_D; 67 YQDJ_G; 68 YHDJ_D; 69 }
循迹部分
1 /************************************************************** 2 循迹部分 3 ****************************************************************/ 4 void track(void) 5 { 6 if(ZB4==0&&ZB3==0&&YB2==1&&YB1==0) // 右边检测到黑线
turn_right(); 9 10 } 11 }
避障部分
/*************************************************************** 避障部分 ****************************************************************/ void obstacle(void) { back(); delay_50us(4000); turn_left(); delay_50us(10000); forward(); delay_50us(23000); turn_right(); delay_50us(800); forward(); delay_50us(3000); turn_right(); delay_50us(15000); forward(); if(ZB4==0&&ZB3==0&&YB2==0&&YB1==1) { turn_left(); delay_50us(70000); } track(); }
主函数代码
/*************************************************************** 主函数 ****************************************************************/ void main(void) { delay_50us(25000); //等待系统启动 while(1) { if(flag==0) //................... { flag=1; obstacle(); //bizhang } //................. } }
代码结束。
这里大家大概思路应该懂了吧,先试着来弄自己第一辆智能车吧。