基于单片机的视觉导航小车设计

收藏和点赞,您的关注是我创作的动力

文章目录

    • 概要
  • 一、项目总体设计
  • 二、总体方案设计
    • 方案论证
  • 三、 项目软件设计
    • 3.1软件开发流程图
    • 3.2 视觉导航软件设计
    • 3.3 循迹模块软件设计
  • 四、 实物展示
    • 程序
  • 五、 总结
  • 五、 文章目录

概要

  为了消除人们在各种工业繁琐的危险环境对于自身的危险的问题,本着让工作更加高效而且节省成本,提升人们生活水平的原则,本课题利用STM32单片机作为主控芯片,视觉采集模块采用USB摄像头以及PWM驱动技术实现视觉导航小车,同时在小车上增加WIFI传输功能,从而实现人们可以规划小车的行驶路径以及人们可以在手机终端或者PC端实时看见周围的情况并且实时控制小车,从而随时应付突发情况。结果表明,通过完成系统总体设计、硬件设计、软件编写、软硬件调试的工作,人们完全可以让视觉导航小车去他们无法进入地方进行勘测,从而可以让工作更加有效,提升生活效率,而且对安全也可以得到保障,即使由于环境导致小车损坏,只需修理,既做到了节省成本,又可以消除安全隐患,从而带来了巨大的经济和社会效益。

关键词:STM32; PWM驱动; WIFI; 视觉导航

一、项目总体设计

  本设计基于STM32主控模块,该功能主要通过7个模块的电路设计来实现,分别是电源模块,红外模块,电机驱动模块,视觉采集模块,WIFI模块,循迹模块,超声波模块。系统功能图如图1.1所示。
基于单片机的视觉导航小车设计_第1张图片

图1.1 系统功能图

二、总体方案设计

方案论证

   本课题是为了让小车进入人类无法进入的地方进行勘测,从而让人类在手机终端或者PC端看见小车周围的环境,从而进行操作和工作。所以为了控制小车实现功能做出以下两种设计方案进行对比:
  方案一:是采用STM32主控+摄像头+PWM驱动技术实现视觉导航小车,具体为通过STM32作为主控芯片驱动小车,以便来控制小车的运行,根据视觉采集模块采集的图像信息通过WIFI模块发送到手机或电脑,人们在界面上实时查看,再将图像信息传递给STM32,从而控制小车。
  方案二:是采用FPGA+图像采集单元+驱动板实现视觉导航小车,具体地,视觉导航小车利用CMOS传感器采集图像信息。FPGA利用COMS传感器提供的时钟信号作为同步的信号进行图像采集,然后通过控制板的数字接口将相机的8位数据线和相应的控制信号直接连接到图像采集,优点是集成度高,速度快和可靠性高[1]。如果要更改驱动电路的时序并添加一些功能,则只需对设备进行重新编程。
  经过比较,考虑到性能,第一种更加灵活。对于变化的车速,使用PWM脉冲代码速度控制进行控制,并通过更改电动机的平均电压来改变汽车的速度。相对于第二种,成本也是很低,所以采用第一种方案。

三、 项目软件设计

3.1软件开发流程图

如图3.2所示。
基于单片机的视觉导航小车设计_第2张图片

图3.2 软件开发流程图

3.2 视觉导航软件设计

在本设计中,人们可以通过手机或PC控制视觉导航小车,因此需要设计出一个视觉导航软件的程序。本设计要实现的是,人们可以使用电脑或手机选择不同的按钮来控制小车,并实际监视视频机器以建立连接。人们可以在计算机界面上选择不同的按钮,并发送适当的命令来控制小车的运行和实时视频监控。该系统的目的是控制计算机上的终端软件。通过使用Visual C ++设计软件,它具有开发环境可视化的特征。用户可以直接在界面上进行编程,这给开发人员带来了很多便利。在PC端可以实现的功能是
(1)实时监控显示。可以实时显示摄像头采集的图像;
(2)可以对小车进行控制。比如说前进,后退,左右移动。
本设计中的应用程序设计也是两个部分。一部分是控制界面,另一部分是视频界面。在控制界面中,人们可以看到小车的不同行驶状态,并控制车辆向前,向后,向左和向右行驶。在视频界面中,人们可以看到视频的IP地址和视频显示界面。然后结合这两个界面,可以同时在手机上看到这两个界面,如图3.3所示。
基于单片机的视觉导航小车设计_第3张图片

图3.3 手机界面
视觉导航软件流程设计图如图3.4所示。
基于单片机的视觉导航小车设计_第4张图片

图3.4 视觉导航软件设计图

3.3 循迹模块软件设计

若想让小车在规定的轨迹上进行前进,后退,左转,右转,应当在软件设计中,编程好小车的代码,如下图3.5所示,循迹模块的流程图如下图3.6所示,当按下转接板的按钮时,系统开始初始化,小车开始在黑色引导线上移动,当左循迹模块检测到是白色,右循迹模块检测到的也是白色,小车继续根据轨迹行驶;当左循迹模块检测到是黑色,右循迹模块检测到的是白色,小车会根据检测到的信号向右行驶;当左循迹模块检测到是白色,右循迹模块检测到的是黑色,小车会根据检测到的信号向左行驶。

基于单片机的视觉导航小车设计_第5张图片

图3.5 循迹模块软件设计图
基于单片机的视觉导航小车设计_第6张图片

图3.6 循迹模块流程图

四、 实物展示

基于单片机的视觉导航小车设计_第7张图片

程序

#include "stm32f10x.h"
#include "delay.h"
#include "motor.h"
#include "keysacn.h"
#include "IRSEARCH.h"
#include "IRAvoid.h"
#include "remote.h"   

#define KEYMODE_1   1  // 定义模式1
#define KEYMODE_2   2  // 定义模式2
#define KEYMODE_3   3  // 定义模式3
uint8_t keyMode;      //指无符号8Bit整形数

void IR_IN()                             //红外遥控子程序
{
	  u8 key;	
  //  ZYSTM32_brake(10);	
	   key=Remote_Scan();	
			switch(key)
			{    
				case 98:ZYSTM32_run(20,100);break;	    
				case 2:ZYSTM32_brake(100);break;		 	  
				case 194:ZYSTM32_Left(20,100);break;	   
				case 34:ZYSTM32_Right(20,100);break;		  
				case 224:ZYSTM32_Spin_Left(20,100);break;		  
				case 168:ZYSTM32_back(20,100);break;		   
				case 144:ZYSTM32_Spin_Right(20,100);break;		    
			}
}

void KeyScanTask(void)//按键子程序
{
	static u8 keypre = 0;//按键被按下时置1
	
	if((keypre == 0)&& (KEY))
	{
		keypre = 1; //置1,避免持续按下按键时再次进入此函数。
		switch(keyMode)
		{
			case KEYMODE_1:keyMode = KEYMODE_2; break;
			case KEYMODE_2:keyMode = KEYMODE_3; break;
			case KEYMODE_3:keyMode = KEYMODE_1; break;
			default: break;
		}
	}
	if(!KEY)  //按键被放开
	{
		keypre = 0;//置0,允许再次切换LED模式
	}
}

//任务:循迹、避障、遥控模式处理
void LEDTask()
{
		switch(keyMode)
		{
			case KEYMODE_1:
				LED_D4_SET;
			  LED_D3_RESET;
			  SearchRun();
			  break;
			case KEYMODE_2:
				LED_D4_RESET;
			  LED_D3_SET;
        AVoidRun();
			  break;
			case KEYMODE_3:
				LED_D4_SET;
			  LED_D3_SET;
        IR_IN();			
			  break;
			 default:
         break;
		}
}
	

//	  int val;
//  val=KEY;  //读取按键
//  while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2))//当按键没有被按下时,一直循环
//  {
//    val=KEY;//词句可省略,可让循环跑空
//  }
//  while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2))//当按键被按下时
//  {
//    delay_ms(10);	  //延时10ms
//    val=KEY;//读取数字端口PC2口电平值赋给Val
//    if(val==1)  //第二次判断按键是否被按下
//    {
//      BEEP_SET;		//蜂鸣器响
//      while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2))	//判断按时是否被松开
//        BEEP_RESET;	//蜂鸣器停止
//    }
//    else
//				BEEP_RESET;//蜂鸣器停止
//  }
//}


 int main(void)
 {	
	 delay_init();
	 KEY_Init();
	 IRSearchInit();
	 IRAvoidInit();
	 TIM4_PWM_Init(7199,0);  //初始化PWM
	 Remote_Init();			    //红外接收初始化	
	 ZYSTM32_brake(500);
//	 keysacn();		
	 keyMode = KEYMODE_1;
		while(1)
		{  
		 
   KeyScanTask();
   LEDTask();			

		}
 }






五、 总结

  本设计是以STM32为核心,在外围加电机驱动模块,循迹模块,红外模块,超声波模块,WIFI模块,使其构成一个基于单片机的视觉导航小车。WIFI模块的稳定性以及在手机上的操作灵敏,使得这次方案设计达到了最开始的设计期望。
  论文首先分析了关于智能车的国内外相关现状,其次提出了视觉导航小车的设计方案以及总体思路,然后进行了单片机的选型以及对各种传感器进行了简单的介绍和说明。
  本设计经过了硬件以及软件的测试,各部分均达到预期功能:当按钮启动的同时,小车可以在平面上进行运动以及随意变速;小车可以避开障碍物,选择一条无碰路径,遇见障碍物就停止运动;小车能够将控制器发出的命令以及采集出来视频与控制器连接;PC或手机可以清晰显示小车采集到的视频数据以及可以显示各种命令。本设计通过7个模块,达到了这些目的,并且首次通过自己的努力完成了以上的功能。
  在设计出这个视觉导航小车之后,各个模块的功能需求很实用并且在WIFI信号稳定正常的情况下,手机或者PC端能够实现与小车的实时控制以及视频监测,根据这个功能,人类可以利用它进不能进入的地方进行勘测。

五、 文章目录

目 录
摘 要 I
Abstract II
引 言 1
1 总体方案设计 3
1.1 方案论证 3
1.2 项目总体设计 3
2 项目硬件设计 4
2.1 主控模块设计 4
2.1.1单片机选型 4
2.1.2 STM32F103RCT6芯片 4
2.2单片机最小系统电路 5
2.3电机驱动模块设计 7
2.4红外模块设计 8
2.5红外遥控模块设计 9
2.6超声波避障模块设计 10
2.7 视觉采集模块设计 11
2.8 WIFI模块设计 12
3 项目软件设计 14
3.1 软件开发环境介绍 14
3.2 视觉导航软件设计 15
3.3 循迹模块软件设计 16
4 仿真与调试 18
4.1 系统硬件调试 18
4.2 系统软件调试 18
4.3实物测试 18
结论 20
参考文献 21
附录:程序主函数 23
致 谢 27

你可能感兴趣的:(单片机,单片机,嵌入式硬件)