标题: 单片机红外对管寻迹小车设计 [打印本页]

作者: 止于心    时间: 2019-1-6 11:30
标题: 单片机红外对管寻迹小车设计



#include <red52.h>
sbit hongwai1=P1^0;   //定义红外对管引脚  4个                  
sbit hongwai2=P1^1;
sbit hongwai3=P1^2;
sbit hongwai4=P1^3;                       
sbit ENA=P0^0;//电机驱动
sbit M1A=P0^1;                        
sbit M1B=P0^2;                           
sbit M2A=P0^3;                           
sbit M2B=P0^4;                          
sbit ENB=P0^5;
void tingzhi()         //停止
{
   M1A=0;                                 
   M1B=0;                                 
   M2A=0;                                   
   M2B=0;

}

void qianjin()         //前进  
{
   M1A=1;                                   
   M1B=0;                                   
   M2A=1;                                   
   M2B=0;
}

void houtui()    //后退
{
   M1A=0;                                   
   M1B=1;                                   
   M2A=0;                                   
   M2B=1;
}

void zuozhuan()          //左转
{
   M1A=1;                                   
   M1B=0;                                   
   M2A=0;                                   
   M2B=1;
}
void weizuozhuan() //左微转
{
   M1A=1;                                   
   M1B=0;                                   
   M2A=0;                                   
   M2B=0;
}


void youzhuan()           //右转
{  
   M1A=0;                                   
   M1B=1;                                   
   M2A=1;                                   
   M2B=0;

}
void weiyouzhuan()        //右微转                                
{
   M1A=0;                                   
   M1B=0;                                   
   M2A=1;                                   
   M2B=0;
}


void delay_nus(unsigned int i)  //延时函数
{
  i=i/10;
  while(--i);
}   
void delay_nms(unsigned int n) //延时函数
{
  n=n+1;
  while(--n)  
  delay_nus(900);         

}  
void ControlCar(unsigned char xunji)   
{

  tingzhi();       //首先是停止
switch(xunji)     //根据swith里面的值来驱动车                     
{
  case 1:                     
  {
    qianjin();
    break;
  }
  case 2:                       
  {
    houtui();                                
    break;
  }
  case 3:                     
  {
    zuozhuan();                              
        break;
  }
  case 4:                        
  {
    youzhuan();                              
        break;
  }
  case 5:                        
  {
    weiyouzhuan();                              
        break;
  }
   case 6:                     
  {
    weizuozhuan();                              
        break;
  }

  case 7:                    
  {
    tingzhi();
        break;                              
  }
}
}
void main()          //主函数                     
{
   delay_nms (30);//延时

  ControlCar(7);//停止
  ControlCar(1);//前进
   delay_nms (10);

  while(1)                                
  {  
          Start:          //行号
    ENA=1;//电机使能
        ENB=1;

   if(hongwai1==0&&hongwai2 == 0 && hongwai3 == 0&&hongwai4==0)   //寻迹模块的情况判定,4个寻迹模块,可以组合为16种情况
   {                                                            //根据需要选择
      ControlCar(7);                     
      delay_nms (3);
          goto NextRun;
   }

    if(hongwai1==0&&hongwai2 == 0 && hongwai3 == 0&&hongwai4==1)   
   {   
      ControlCar(6);                     
      delay_nms (3);
          goto NextRun;
   }
    if(hongwai1==0&&hongwai2 == 0 && hongwai3 == 1&&hongwai4==1)   
   {  
      ControlCar(6);                     
      delay_nms (3);
          goto NextRun;
   }
    if(hongwai1==0&&hongwai2 == 0 && hongwai3 == 1&&hongwai4==0)   
   {
     ControlCar(6);                     
      delay_nms (3);
          goto NextRun;
   }
   if(hongwai1==1&&hongwai2 == 0 && hongwai3 == 0&&hongwai4==0)   
   {
      ControlCar(5);                     
      delay_nms (3);
          goto NextRun;
   }
    if(hongwai1==1&&hongwai2 == 1 && hongwai3 == 0&&hongwai4==0)   
   {
      ControlCar(5);                     
      delay_nms (3);
          goto NextRun;
   }
    if(hongwai1==0&&hongwai2 == 1 && hongwai3 == 0&&hongwai4==0)   
   {  
      ControlCar(5);                     
      delay_nms (3);
          goto NextRun;
   }
         if(hongwai1==1&&hongwai2 == 1 && hongwai3 == 1&&hongwai4==1)   
   {
      ControlCar(7);                     
      delay_nms (3);
          goto NextRun;
   }
            if(hongwai1==0&&hongwai2 == 0 && hongwai3 == 0&&hongwai4==0)   
   {
      ControlCar(7);                     
      delay_nms (3);
          goto NextRun;
   }
   if(hongwai1==0&&hongwai2 == 1 && hongwai3 == 1&&hongwai4==1)   
   {
      ControlCar(3);                     
      delay_nms (3);
          goto NextRun;
   }
   if(hongwai1==1&&hongwai2 == 1 && hongwai3 == 1&&hongwai4==0)   
   {
      ControlCar(4);                     
      delay_nms (3);
          break;
          goto NextRun;
   }

   goto Start;          //相当于返回  start行
   NextRun:
   ControlCar(1);

}
}




作者: 123qs    时间: 2019-3-13 19:43
四轮的用一个驱动模块行吗
作者: 止于心    时间: 2019-4-5 17:04
123qs 发表于 2019-3-13 19:43
四轮的用一个驱动模块行吗

可以的

作者: 求大神写编程    时间: 2019-4-7 19:30
请问是stc12c5a60s2的吗

作者: niuquanwang    时间: 2019-4-10 09:53
123qs 发表于 2019-3-13 19:43
四轮的用一个驱动模块行吗

可以,左侧两个轮子接一个输出口,右侧轮子接一个输出口。
作者: zpj159    时间: 2019-4-10 16:28
请问这个速度怎么控制
作者: 止于心    时间: 2019-4-10 19:57
求大神写编程 发表于 2019-4-7 19:30
请问是stc12c5a60s2的吗

stc51

作者: 止于心    时间: 2019-4-10 19:58
zpj159 发表于 2019-4-10 16:28
请问这个速度怎么控制

pwm调速,定时器调脉冲宽度

作者: dats333    时间: 2019-4-21 10:54
请问能把您做的c51循迹小车的电路图发给我吗??还有配件清单
作者: 止于心    时间: 2019-4-25 08:42
dats333 发表于 2019-4-21 10:54
请问能把您做的c51循迹小车的电路图发给我吗??还有配件清单

L298N电机驱动模块,红外对管,最小系统,电源,

作者: Rainson    时间: 2019-5-8 13:06
请问楼主可以发工程吗?
作者: Rainson    时间: 2019-5-14 10:26
请问这是用一个l298nma
作者: 止于心    时间: 2019-5-14 12:40
Rainson 发表于 2019-5-14 10:26
请问这是用一个l298nma

嗯,我使用了一个,两个也可以

作者: geng123    时间: 2019-5-14 20:24
这个可以用吗?
作者: 止于心    时间: 2019-5-16 20:58
geng123 发表于 2019-5-14 20:24
这个可以用吗?

可以

作者: 电信172    时间: 2019-6-16 23:36
我的电机驱动模块用的是L1109S,但我觉得原理都一样,不过我实现不了循迹,就像一个断了线的风筝一样,走的是唯心派,可以帮我解决一下吗,我可以把代码发给你

作者: 止于心    时间: 2019-6-17 10:28
电信172 发表于 2019-6-16 23:36
我的电机驱动模块用的是L1109S,但我觉得原理都一样,不过我实现不了循迹,就像一个断了线的风筝一样,走的 ...

嗯呐,可以发过来一起学习。

作者: 来日可期1    时间: 2019-6-18 16:16
能循黑线走不?
作者: 止于心    时间: 2019-6-19 09:50
来日可期1 发表于 2019-6-18 16:16
能循黑线走不?

可以寻黑线
作者: 来日可期1    时间: 2019-6-19 14:12
止于心 发表于 2019-6-19 09:50
可以寻黑线

为啥我检测到黑线就走不动
作者: 止于心    时间: 2019-6-19 16:07
来日可期1 发表于 2019-6-19 14:12
为啥我检测到黑线就走不动

你可以调整一下红外对管之间的距离
作者: 厚朴    时间: 2019-8-5 20:20
你好,这样不需要用到晶振吗
作者: qq19990601    时间: 2019-9-19 09:20
请问这个红外模块的电路是怎样的?
作者: 止于心    时间: 2019-9-20 21:03
厚朴 发表于 2019-8-5 20:20
你好,这样不需要用到晶振吗

需要,最小系统里面有

作者: 止于心    时间: 2019-9-20 21:05
qq19990601 发表于 2019-9-19 09:20
请问这个红外模块的电路是怎样的?

红外对管一共有三个接口,一个接vcc一个接gnd还有一个接单片机的IO口,具体的可以上网查一下手册。
作者: time'power    时间: 2020-2-24 11:17
有没有PCB、原理图
作者: 漠城    时间: 2020-8-7 22:38
楼主,请问,在转弯处,在检测到黑线后,电机没来得及反应,小车就冲出黑线了,应该怎么调?
作者: 三旬    时间: 2020-8-9 18:20
楼主,头文件写错了吗?应该是#include<reg51.h>??
作者: 止于心    时间: 2020-11-13 15:37
漠城 发表于 2020-8-7 22:38
楼主,请问,在转弯处,在检测到黑线后,电机没来得及反应,小车就冲出黑线了,应该怎么调?

可以用pwm调速

作者: 止于心    时间: 2020-11-13 15:38
三旬 发表于 2020-8-9 18:20
楼主,头文件写错了吗?应该是#include??

我用的是52系列的单片机
作者: hjx521    时间: 2020-11-26 19:55
123qs 发表于 2019-3-13 19:43
四轮的用一个驱动模块行吗

可以的。。。

作者: 自传zz    时间: 2021-5-27 14:32
红外对管怎么接上去
作者: 止于心    时间: 2021-6-19 21:33
自传zz 发表于 2021-5-27 14:32
红外对管怎么接上去

看程序定义的端口




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1