[精品书单]试着用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 ****************************************************************/

其他子函数代码

 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
         }
//.................        
} 
}

代码结束。

这里大家大概思路应该懂了吧,先试着来弄自己第一辆智能车吧。

 

转载于:https://www.cnblogs.com/zssyz/articles/6220773.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值