单片机设计_智能可视化倒车系统(STM32、OV7670摄像头、HC-SR04超声波传感器)

本文介绍了一款基于STM32F103的智能可视化倒车系统,系统集成了图像传感器OV7670和超声波传感器HC-SR04,用于实时监测车辆后方图像及障碍物距离,并在4.3寸LCD屏幕上显示,实现安全倒车功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

智能可视化倒车系统

想要更多项目私wo!!!

一、系统总体框图

当小车前进时,LCD上可显示小车前进的提示信息等;当小车后退时,开始利用图像传感器实现对小车后侧的图像实时监测,利用距离传感器实现对小车后侧障碍物的距离实时监测,并将测量数据传送至STM32进行处理,然后由控制器根据所检测的各种数据实现在LCD模块上显示出来。根据要求设计要求,可得到系统总体框图如下:
在这里插入图片描述

二、总体电路设计

根据总体框图,主控芯片可用STM32F103,再在该主控芯片外部连接晶振电路、复位电路、存储电路、按键电路、电源电路、图像传感器电路、距离传感器电路和声音报警电路等。 因条件限制,系统主控采用STM32F103ZET6开发板,开发板自带了复位电路、电源电路、晶振电路、声音报警电路等,存储器则为微控制器芯片内部系统总线上挂接的外设,系统电源由开发板本身通过一个usb电路供电,也可由提供的5v开关电源提供,显示模块为配套的4.3寸LCD,屏幕分辨率为800x480。距离传感器可以采用HC-SR04超声波传感器模块,图像传感器可以采用OV7670摄像头模块,将它们安装在小车后方,在小车后退时,实时检测后方的图像,以及与小车后方障碍物直接的距离,当距离太小时,发出警告。OV7670摄像头模块,最大能够输出VGA分辨率(640x480)的图像,直接和开发板的摄像头电路连接,HC-SR04超声波传感器能够检测2cm-400cm的距离,可用杜邦线和开发板的IO口相连。系统通过控制按键模块,实现对微控制器控制,同时微控制器控制OV7670图像传感器模块、HC-SR04超声波传感器模块和LCD显示模块,实现小车倒车时的图像显示,和障碍物距离过小报警。

三、运行结果图

v

四、主代码
/*想要更多项目私wo!!!*/
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"	 
#include "string.h"
#include "ov7670.h"
#include "tpad.h"
#include "timer.h"
#include "exti.h"
#include "usmart.h"
#include "beep.h"
#include "LcdApi.h"
#include "image.h"
const u8*LMODE_TBL[5]={"Auto","Sunny","Cloudy","Office","Home"};//5种光照模式	    
const u8*EFFECTS_TBL[7]={"Normal","Negative","B&W","Redish","Greenish","Bluish","Antique"};	                   //7种特效 
extern u8 ov_sta;           	//在exit.c里 面定义
extern u8 ov_frame;	            //在timer.c里面定义		
u32 ov_window_x,ov_window_y,ov_window_j;

 int main(void)
 {	 
	u8 key,key_old;
  u8 flag = 0;
	u8 lightmode=0,saturation=2,brightness=2,contrast=2;
	u8 effect=0;	
	u8 msgbuf[15];				//消息缓存区
	u8 tm=0;  
	TIM5_Cap_Init(0XFFFF,72-1);
	delay_init();	    	           //延时函数初始化	  
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);    //设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
	uart_init(9600);	        	//串口初始化为 115200	
 	LED_Init();		  			//初始化与LED连接的硬件接口
	KEY_Init();					//初始化按键
	LCD_Init();			   		//初始化LCD  
	BEEP_Init();
	TPAD_Init(6);				//触摸按键初始化 
 	POINT_COLOR=RED;			//设置字体为红色  
   LCD_ShowString(30,30,200,16,16,"OV7670 Init...");	  
	while(OV7670_Init())       //初始化OV7670
	{
		LCD_ShowString(30,30,200,16,16,"OV7670 Error!!");
		delay_ms(200);
	  LCD_Fill(30,230,239,246,WHITE);
		delay_ms(200);
	}
 	LCD_ShowString(30,30,200,16,16,"OV7670 Init OK");
	delay_ms(1500);	 	   	
	TIM6_Int_Init(10000,7199);			//10Khz计数频率,1秒钟中断		
	EXTI8_Init();	
   ov_window_x=480;
	ov_window_y=400;		
	ov_window_j=192000;
	OV7670_Window_Set(12,176,480,400);	//设置窗口	 	
   OV7670_CS=0;			
	LCD_Clear(WHITE);
	BACK_COLOR=WHITE;
	POINT_COLOR=GREEN;			//设置字体为绿色 
	zt=0;
	ov_windows=1;
	Show_Str(20,100,220,24,"智",24,0);     //覆盖显示
	delay_ms(200);
	POINT_COLOR=BLACK;	
	Show_Str(70,100,220,24,"能",24,0);    //覆盖显示
	delay_ms(200);
	POINT_COLOR=BLUE;
	Show_Str(120,100,220,24,"可",24,0);    //覆盖显示
	delay_ms(200);
	POINT_COLOR=BRED;
	Show_Str(170,100,220,24,"视",24,0);      //覆盖显示
	delay_ms(200);
	POINT_COLOR=MAGENTA;
	Show_Str(220,100,220,24,"化",24,0);     //覆盖显示
	delay_ms(200);
	POINT_COLOR=BROWN;
	Show_Str(270,100,220,24,"倒",24,0);     //覆盖显示
	delay_ms(200);
	POINT_COLOR=GRAY;	
	Show_Str(320,100,220,24,"车",24,0);      //覆盖显示
	delay_ms(200);
	POINT_COLOR=DARKBLUE;
	Show_Str(370,100,220,24,"系",24,0);      //覆盖显示
	delay_ms(200);
	POINT_COLOR=LIGHTGREEN;
	Show_Str(420,100,220,24,"统",24,0);      //覆盖显示
	delay_ms(200);
	POINT_COLOR=GREEN;	
	flash_1();
	flash_2();
	flash_3();
	LCD_Clear(WHITE);
 	while(1)
	{			             //更新状态时清屏
		if(zt==1||zt==2)
		{
			zt=0;
			LCD_Clear(WHITE);
			if(cars=='B')
			{
					LCD_ShowString(150,90,200,24,24,"000.0CM");
			}
		}
		ov_window_x=320;
		ov_window_y=480;
		ov_window_j=153600;
		OV7670_Window_Set(12,176,320,480);	//设置窗口	
		POINT_COLOR=GREEN;			//设置字体为绿色 	
		Show_Str(60,60,220,24,"小车状态:",24,0);    //覆盖显示
		Show_Str(60,90,220,24,"距离:",24,0);       //覆盖显示
		POINT_COLOR=GREEN;			//设置字体为绿色 	
		LCD_Color_Fill(360,0,480-1,160-1,(u16*)&gImage_1[0]);
		if(WK_UP==1)                     //判断小车状态
		{
			delay_ms(10);
			if(WK_UP==1)
			{
				cars = 'G';
				Show_Str(180,60,220,24,"向前",24,0);    //覆盖显示
			}
		}
		if(KEY1==0)
		{
			delay_ms(10);
			if(KEY1==0)
			{
				cars = 'B';
		    Back();
				Show_Str(180,60,220,24,"向后",24,0);       //覆盖显示
			}
			if(KEY1 == 1)
			{
					flag = 1;
			}
		}
		if(KEY2==0)
		{
			delay_ms(10);
			if(KEY2==0)
			{
				cars = 'L';
				Show_Str(180,60,220,24,"向左",24,0);        //覆盖显示
				flash_5();
				LCD_Clear(WHITE);
			}
		}
		if(KEY0==0)
		{
			delay_ms(10);
			if(KEY0==0)
			{
				cars = 'R';
				Show_Str(180,60,220,24,"向右",24,0);        //覆盖显示
				flash_1();
				LCD_Clear(WHITE);
			}
		}
		
		if(flag == 1)
		{
			LCD_Clear(WHITE);
			flag = 0;
		}
	}   
}
欢迎下载研华科技主题白皮书: 【深度剖析】研华多核异构ARM核心板之机器视觉应用案例 [摘要] TI Sitara系列AM5718/5728是采用ARM+DSP多核异构架构,可以实现图像采集、算法处理、显示、控制等功能,具有实时控制、低功耗、多标准工业控制网络互联、工业人机界面的优化、2D/3D图形处理、1080 HD的高清视频应用、工业控制设备的小型化等特点。广泛应用在机器视觉、工业通讯、汽车多媒体、医疗影像、工厂自动化、工业物联网等领域。 https://www.eefocus.com/resource/advantech/index.p... 前言: 使用单片机方案的简单图像处理在很多情况下有应用,比如颜色的跟踪识别,给智能控制的机器人带来的视觉系统,能使设计更加的智能化。在各种机器人大赛中都有图像处理应用的身影,低调却非常的有用。虽然只是对图像的颜色跟踪,但是这样却可以应用到很多的场合。 本方案介绍的是基于Colibri_GD32F207+OV7670+SPI_LCD的图像处理->颜色跟踪。 系统框图如下: 实物PIN脚连接图: 管脚配置: 设计应用描述及心得总结: 1. Colibri_GD32F207这个板子的MCU是带有camera的接口的,但是没有引出来,使用使用了FIFO的OV7670摄像头,数据口使用GPIO。OV7670是30W的摄像头最大是支持VGA 640*480的像素,但是应为液晶的分辨率只有320*240,所以讲OV7670配置为QVGA 320*240的像素输出。 2. 同样板子上的MCU是带有LCD 的接口的,但是也是应为没有将这部分的IO全部引出来,所以使用SPI LCD ,这样可以节省很多的 IO,但是也造成了使用GD32f207处理图片的时候速度变慢。如果这部分做些修改,处理的速度将达到每秒7帧以上。 3.本设计发挥了GD32F207的最大的速度,主频配置为了120MHZ。 4. 本设计集成了对图片设定的识别颜色条件为:Condition={30,70,130,255,100,170,40,40,320,240}; 5. 识别使用的是HSV空间,这个和RGB的区别是,HSV更加符合人眼对颜色的认知模式。H是色调,S是色饱和度,V是色温。其中的S值不会受到环境亮度的影响。 6. 识别的算法做了对目标的大小,坐标等的识别,集成了图像搜索的膨胀、腐蚀算法。
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值