查看: 3402  |  回复: 2
智能扫地小车

主题

回复
发表于2018-11-28 12:22:15 | 显示全部楼层
1# 电梯直达

电子和生活产品结合,可以实现避障、测距。做这个项目的经验,可分为四步。 


   

第1步:根据实际情况确定智能小车所需要实现的功能。例如:测距、避障检测边缘……;

第2步:根据智能小车所需要实现的功能确定相应的硬件部分。如寻线是用红外还是用激光……、测距是用超声波还是激光……、避障是用红外还是超声波……寻找物体使用红外还是超声波还是雷达还是其他的等等。选取方案的时候既要考虑实际效果还要根据自身能力判断……不要到时候进退两难;

第3步:编写程序。

第4步:实验,并找出漏洞优化程序。

 当然在此之前,还有一件很重要的事要做就是选取什么单片机。 下面是源程序:

#include <REGX52.H> //包含51单片机相关的头文件
sbit LeftIR=P1^1;                         //定义前方左侧红外探头端口
sbit RightIR=P1^0;                        //定义前方右侧红外探头端口
sbit bizhangLED=P2^0;                 //定义前方右侧红外探头端口


sbit M1A=P0^0;                            //定义左侧电机驱动A端
sbit M1B=P0^1;                            //定义左侧电机驱动B端

sbit M2A=P0^2;                            //定义右侧电机驱动A端
sbit M2B=P0^3;                            //定义右侧电机驱动B端



void tingzhi()
{
   M1A=0;                                   //将M1电机A端初始化为0
   M1B=0;                                   //将M1电机B端初始化为0
   M2A=0;                                   //将M2电机A端初始化为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 youzhuan()
{
   M1A=0;                                   
   M1B=1;                                   
   M2A=1;                                   
   M2B=0;
}

void delay_nus(unsigned int i)  //延时:i>=12 ,i的最小延时单12 us

  i=i/10;
  while(--i);
}   
void delay_nms(unsigned int n)  //延时n ms

  n=n+1;
  while(--n)  
  delay_nus(900);         //延时 1ms,同时进行补偿
  
}  


void ControlCar(unsigned char ConType)    //定义电机控制子程序
{
 
  tingzhi();
 switch(ConType)                          //判断用户设定电机形式
 {
  case 1:  //前进                         //判断用户是否选择形式1
  { 
    qianjin();
    break;
  }
  case 2: //后退                          //判断用户是否选择形式2
  { 
    houtui();                                //M2电机反转
    break;
  }
  case 3: //左转                          //判断用户是否选择形式3
  { 
    zuozhuan();                               //M2电机正转
break;
  }
  case 4: //右转                          //判断用户是否选择形式4
  { 
    youzhuan();                                //M1电机正转
                                          //M2电机反转
break;
  }
  case 8: //停止                          //判断用户是否选择形式8
  {
    tingzhi();
break;                                //退出当前选择
  }
 }
}
void main()                               //主程序入口
{
  bit RunFlag=0;                          //定义小车运行标志位
  //RunShow=0;                              //初始化显示状态

  ControlCar(8);                          //初始化小车运行状态
  while(1)                                //程序主循环
  {
   Start:
   bizhangLED = 0;
  
   if( LeftIR == 0 && RightIR == 1 )                          //如果前面避障传感器检测到障碍物
   {
      ControlCar(8);                       //停止
      delay_nms (300);    //停止300MS   防止电机反相电压冲击  导致系统复位
  ControlCar(4);    //后退  
   delay_nms (260);
  goto NextRun;
   }
     if( LeftIR == 1 && RightIR == 0 )                          //如果前面避障传感器检测到障碍物
   {
      ControlCar(8);                       //停止
      delay_nms (300);    //停止300MS   防止电机反相电压冲击  导致系统复位
  ControlCar(3);    //后退  
  delay_nms (260);
  goto NextRun;
   }
   
   if( LeftIR == 0 && RightIR == 0 )                            //如果前面避障传感器检测到障碍物
   {
      ControlCar(8);                       //停止
      delay_nms (300);    //停止300MS   防止电机反相电压冲击  导致系统复位
  ControlCar(2);    //后退  
  delay_nms (1000);    //后退1500MS  
  ControlCar(3);    //
  delay_nms (1800);
  goto NextRun;
   }
   
   if( LeftIR == 1 && RightIR == 1 )  
   {
      ControlCar(1);                      //右侧没有信号时,开始向左转一定的角度
      delay_nms (10);
  goto NextRun;
   }


   goto Start;
   NextRun:
   ControlCar(1);
  }
}


主题

回复
发表于2018-11-28 12:58:29   |  显示全部楼层
2#
不错

主题

回复
  • 温馨提示: 标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考: 社区发帖规则
  • 您当前输入了 0 个文字。还可以输入 8000 个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

禁言/删除

X
请选择禁言时长:
是否清除头像:
禁言/删除备注:
昵 称:
 
温馨提示:昵称只能设置一次,设置后无法修改。
只支持中文、英文和数字。

举报

X
请选择举报类型:
请输入详细内容:

顶部