51单片机最小系统循迹小车(带源码)

51单片机循迹小车是初学者最容易的一个项目,做好一辆小车就相当于入门单片机了。在做项目之前要学习单片机的相关的知识,不要急于求成。红外寻迹小车_哔哩哔哩_bilibili,这是我做的小车基本框架,没有思路的同学可以参考一下。

一. 要准备的基本模块

首先仔细想想小车需要什么?

  1. 轮子,用普通的轮子就行。

  1. 直流电机,用这种简单的直流电机就行了,价格也便宜,很适合初学者,在这家店里也就几块钱。

  1. 电源,用18650锂电池就行,这东西也是便宜。

这些是搭建一个小车的最基本的东西。这些东西要准备好。

二. 51单片机最小系统

单片机最小系统可以在淘宝上买现成的最小系统板,这种板子最适合不过了。

当然,自己画板子也是可以的,用嘉立创免费白嫖一块板子,我就是用自己画的最小系统板,好用也可以锻炼自己画板子的能力。嘉立创上面的开源最小系统板挺多的,找一找然后打印下来,然后买点电阻电容啥的自己焊起来,培养培养动手能力。画这个板子主要就是要留多电源接口。

三. 红外循迹模块

红外循迹模块没啥说的,无非就是寻到黑线输出高电平还是低电平,然后用单片机引脚检测红外模块的输出口,我的红外模块是输出低电平,模块的L 、O、R分别接单片机的P3.7、P3.6、P3.5,VCC和GND接在单片机上的电源接口。至于巡线之后电机怎么转,可以想一想挖掘机怎么转弯的。

四. 电机驱动TB6612

这个东西是必须要的,一般要使用电机的话都需要tb6612,单片机的接口接tb6612的接口如下,当然,还要接电源接口。VM要接5V以上的电源。tb6612的原理就不用多讲了,网上有很多资料。

bin1 = P2^6;

bin2 = P2^7;

ain1 = P2^4;

ain2 = P2^5;

pwma = P2^1;

pwmb = P2^0;

stby = P2^2;

然后两个电机分别接在AO1、AO2、BO1、BO2。

五. 降压模块

降压模块选择LM2596S降压模块,电池的正负极接IN+、IN-。OUT+、OUT-,接单片机的+5V和GND,然后tb6612的VM接在OUT+上面,调接电压到5V。

六. 代码部分

#include<reg52.h>
unsigned char dlayleft,dlayright;
sbit bin1 = P2^6;
sbit bin2 = P2^7;
sbit ain1 = P2^4;
sbit ain2 = P2^5;
sbit pwma = P2^1;
sbit pwmb = P2^0;
sbit stby = P2^2; //TB6612,必须接,输出高电平。
sbit l = P3^7;
sbit o = P3^6;
sbit r = P3^5;
void  zhi()  //直走
{
dlayleft = 45;
dlayright = 52 ;
ain1 = 1;
ain2 = 0;
bin1 = 1;
bin2 = 0;
}
void zuo()//左转
{
dlayleft = 45;
dlayright = 48;
ain1 = 0;
ain2 = 1;
bin1 = 1;
bin2 = 0;
}
void you() //右转
{
dlayleft = 48;
dlayright = 45;
ain1 = 1;
ain2 = 0;
bin1 = 0;
bin2 = 1;
}
void timer0init()
{
    TMOD|=0x01;
    TH0=0xff;
    TL0=0x9c;
    
    EA=1;  
    ET0=1;
    TR0=1;  
}
//定时器中断服务函数
void timer0() interrupt 1
{
unsigned char i,j;
    TH0=0xff;
    TL0=0x9c;
    i++;
    j++;
    if(i<=dlayleft)//左轮占空比,控制左轮速度
        pwma=1;
    else
        pwma=0;
    
    if(j<=dlayright)
        pwmb=1;
    else
        pwmb=0;
    
    if(i==100)  //设置pwm周期=0.1ms*100=10ms
    {
        i=0;//加到100后变为0,重新计数
    }
    if(j==100)
    {
        j=0;
    }  
}
void xunji()
{ 
unsigned char flag;  
    if((l==0)&&(r==1))
    {
    flag = 0;//左边黑线
    }
    else if((l==1)&&(r==0))
    {
  flag = 1;//右边黑线
}
    else if((l==1)&&(r==1))
{
flag = 3; //两边都没黑线
}
else 
{
  flag = 4;
}
switch(flag)
{
case 0:  you();break;
case 1:  zuo();break;
case 3:  zhi();break;
case 4:  zhi();break;
default: zhi();break;
}
}
void main()
{
stby = 1;
    timer0init();
    while(1)
    {
    xunji();
    }
}

有问题的可以在评论区解答。

物联沃分享整理
物联沃-IOTWORD物联网 » 51单片机最小系统循迹小车(带源码)

发表评论