基于STM32的红外相机设计.docx
《基于STM32的红外相机设计.docx》由会员分享,可在线阅读,更多相关《基于STM32的红外相机设计.docx(18页珍藏版)》请在冰点文库上搜索。
基于STM32的红外相机设计
.
《嵌入式系统原理与应用》综合设计
基于STM32的红外遥控照相机设计
学院:
工学院
专业班级:
通信工程13秋2班
姓名:
胡羽婷
学号:
13150210
小组成员:
胡羽婷、鲁博文
指导教师:
周丽婕、徐振
完成日期2016年6月
1引言
1.1设计背景
随着改革开放,人民的生活水平有进一步提高,各种家用电器设备也随之进入千家万户,一些家用电器开关在使用的时候非常麻烦,为了方便大家使用,现在社会上也设计出了各种各样的控制开关,其中包括红外遥控开关,红外遥控是目前家用电器中用的较多的遥控方式我们这个设计既具有红外遥控的一般通用特性,也设计了一种具有自己独特性能的部分,让人们更好的使用家用电器,以下介绍红外遥控的特点:
它不影响周边环境的、不干扰其他电器设备。
由于其无法穿透墙壁,故不同房间的家用电器可以使用通用的遥控器而不会产生相互的干扰;电路调试简单。
由于其抗干扰能力强,操作简单等诸多有点,已经广泛应用于彩色电视机,VCD,DVD空调,组合音响等各种家用电器上,本次我们设计的这个红外遥控照相机,不仅是要让人们明白红外遥控的工作原理,还要使他们能更深刻的把握照相机的原理。
在数字化浪潮扑面而来的今天,新技术和新产品越来越多地影响着我们的生活,拥有一件数字化的产品也已成为了一种新时尚,照相机无疑是最贴近我们日常生活的用品,而数码相机以其独特的性能和特征,大有取代传统相机之势,究竟什么是数码相机,它有那些特点,如何选购、使用等。
当按下快门时,镜头将光线会聚到感光器件CCD(电荷耦合器件)上,CCD是半导体器件,它代替了普通相机中胶卷的位置,它的功能是把光信号转变为电信号。
这样,我们就得到了对应于拍摄景物的电子图像,但是它还不能马上被送去计算机处理,还需要按照计算机的要求进行从模拟信号到数字信号的转换,ADC(模数转换器)器件用来执行这项工作。
接下来MPU(微处理器)对数字信号进行压缩并转化为特定的图像格式,例如JPEG格式。
最后,图像文件被存储在内置存储器中。
至此,相机的主要工作已经完成,剩下要做的是通过LCD(液晶显示器)查看拍摄到的照片。
红外线遥控器的作用主要适用于“自拍”操作之用。
辅助对焦之用,仔细看看就会发现专业机子打出的是一个网格类的图案,普及类的打出是一个重重叠叠的图案,是直接打在被摄体上面的。
红外线遥控器其实很简单的就一个IC,一个晶振两个协振电容,一个电解,一个一个发射管现在的很多遥控器都是单片机来写的了,有的元件更简单了其实就是IC的两个脚短接(靠按键按下去)发出一个波形出去,然后电视机接收后再经过解码。
1.2总体设计原理
本次课程设计我们主要设计了红外遥控摄像头拍摄照片。
而本次总体的设计原理框图如图1.1所示。
首先打开开发板,然后进入摄像头模式,然后按动遥控器上的一个按钮,即可对摄像头进行拍照。
在液晶屏上显示拍摄到的图片,再次按动按钮即可恢复拍照模式继续拍照。
在拍摄照片的同时蜂鸣器响一下,LED灯闪烁三次。
图1.1原理框图
2红外照相机设计总体方案
2.1主要介绍
2.1.1软件介绍
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。
运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。
如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
如图2.1所示,这是一个keiluvision4软件。
图2.1keil4
2.1.2硬件介绍
本次设计总共运用了3个外接模块:
红外遥控器,ov7670摄像头,有源蜂鸣器;一个stm32内带的led灯。
2.2红外遥控模块
2.2.1红外遥控的原理
红外遥控开关就是对住宅内德各种家用电器进行智能管理与控制的开关,跟传统开关相比,它主要可以实现一键场景。
一对一遥控及分区灯光全开全关等管理,并可以用多种控制方式实现以上功能,最主要的控制方式为无线控制,定时控制,集中控制,甚至远程控制等,从而创造舒适、节能、方便、安全、环保的居住灯光效果。
红外遥控开关系统一般分发射和接受普两个部分,发射部分的主要元件为红外发光二极管以及555,接收部分的红外接收管是一种光敏二极管以及锁相环lm567(是一种音频解码电路)可实现加密功能,接收电路中还设计了电源电路,以适应不同电路的供电需求。
同时还有光电耦合器组成的隔离电路,主要用于高低压隔离保护。
如图2.2所示,这是一个红外线遥控器。
也是本次设计需要用到的红外线遥控器。
图2.2红外遥控器
2.2.2红外遥控的连接口
如图2.3所示,图中黄色部分是连接红外遥控器与开发板的跳线帽。
而占据的管脚是PA1接口。
图2.3跳线帽
红外遥控相当于一个发射器,图2.3为一个红外遥控的发射电路图。
当遥控器发出指令时,开发板接收指令并作出相应的反应。
液晶屏会停止在遥控器按下的一瞬间摄像头拍摄到的画面。
图2.4红外遥控发射图
2.2.3红外遥控控制摄像头拍照
如图2.4所示,此时正在用红外线遥控器控制摄像头拍摄照片。
因为摄像头的下方IO口的连接线之间会有相互的感应干扰,所以需要把它们分开一些就会显示得比较清楚,拍摄的画面也比较清晰,没有雪花之类的。
除此之外,遥控器不能距离开发板太远,它的有效距离是0到3米左右。
而这张图片拍摄得不太清晰,主要原因是我拿摄像头的手在抖动,所以画面不太清楚。
图2.5红外遥控拍照
如图2.6所示,这是用红外线遥控器控制摄像头拍摄的另外一张照片。
这张图片就会比较清晰,此时拍出来的照片就是因为摄像头下部线与线之间的干扰比较小。
图2.6红外遥控拍照
2.3摄像头模块
2.3.1摄像头的原理
摄像头的工作原理是:
按一定的分辨率,以隔行扫描的方式采集图像上的点,当扫描到某点时,就通过图像传感芯片将该点处图像的灰度转换成与灰度一一对应的电压值,然后将此电压值通过视频信号端输出。
摄像头连续地扫描图像上的一行,则输出就是一段连续的电压信号,电压信号的高低起伏反映了该行图像的灰度变化。
当扫描完一行,视频信号端就输出一个低于最低视频信号电压的电平(如5V),并保持一段时间。
2.3.2摄像头的IO口
如图2.7所示,这是本次采用摄像头的IO口平面图。
主要需要注意的是电压接的是3.3v,而不是5v。
除此之外,摄像头和液晶屏之间的连接尤其需要注意,由于红外遥控器的需要,开发板上的PA1管脚被红外线的跳线帽占领,所以,只能将原本接PA1的管脚接到PA2上。
由于PA2原本就是空置的,所以这并不影响摄像头的拍摄和液晶屏的显示。
图2.7摄像头IO口
2.3.3摄像头拍摄照片
在遥控器按下的时候,摄像头的摄像范围内的景象都会被拍下来。
但同时,摄像头拍摄照片时,一定要注意摄像头下方线与线之间的相互干扰,尽可能的把接线两部分分开一写些,其拍摄效果会比较好一些。
如图2.8所示,这是摄像头拍摄的照片,这是拍的天花板上的日光灯。
图片效果还不错,没有模糊。
图2.8摄像头拍照
如图2.9所示,这是用红外线遥控器控制摄像头拍摄的另一张照片。
这张图片就会比较清晰,此时拍出来的照片就是因为摄像头下部线与线之间的干扰比较小。
图2.9摄像头拍照
2.4蜂鸣器和led灯模块
2.4.1蜂鸣器的原理
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
如图2.10所示,这是一个有源蜂鸣器。
也是本次设计需要用到的蜂鸣器。
图2.10有源蜂鸣器
这是一个有源蜂鸣器,它一共有三个管脚,一个GND接地的,一个VCC结3v电源,中间的那个就是负责接入开发板的按键key2,当按键key2按下产生低电平的时候,蜂鸣器就会‘哔---’一声。
这时候就实现了按键控制蜂鸣器响的功能。
2.4.2蜂鸣器的分类
蜂鸣器分为有源和无源等。
这里的源不是指电源,而是指震荡源。
也就是说,有源蜂鸣器内部摘由震荡源,所以一通电就会叫。
而无源蜂鸣器的内部没有震荡源,所以如果用直流信号无法令其鸣叫,必须用2k-5k的方波去驱动它。
如图2.11所示,这是一个有源蜂鸣器的原理图。
图2.11有源蜂鸣器原理图
2.4.3led灯的简介
自从1996年日亚化学发表InGaN/Y3Al5O12:
Ce3+(简称YAG:
Ce)荧光粉的单芯片白光LED,荧光粉转换白光LED技术随之成为市场主流。
荧光粉的发展则由较不安定的硫化物与卤化物,演变至化学与高温安定性较佳的铝酸盐、硅酸盐、氮化物以及氮氧化物荧光材料,近期则以氮化物(Nitride)以及氮氧化物最为热门欧司朗研发了(Tb1-x-yRexCey)3(Al,Ga)5O12,简称TAG,仍然是钇铝石榴石的晶体结构,只是添加元素Tb而得到区别于YAG的新的黄色荧光粉,并申请了白光LED专利。
图2.12发光二极管
如图2.12所示,这是一个发光二极管。
LED的颜色和发光效率等光学性能与半导体材料及其加工工艺有关。
在P型材料和N型材料中掺入不同的杂质,就可以得到不同的单一波长的LED发光二极管,同时电气性能也会有所不同。
2.4.4led灯的原理
LED,是一种能够将电能转化为可见光的固态的半导体器件,即发光二极管,它可以直接把电转化为光。
LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。
半导体晶片由两部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N型半导体,在这边主要是电子。
这两种半导体连接起来的时候,它们之间就形成一个P-N结。
当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED灯发光的原理。
如图2.14所示,这是一个发光二极管的原理图。
图2.14LED灯原理图
3程序调试与下载
3.1摄像模式
程序下载到开发板上之后,首先进入摄像模式。
如图3.1所示,这是初始化摄像模式,现在已经进入拍摄界面。
图3.1摄像头初始化
3.2拍摄照片
如图3.2所示,这是安红外遥控器的拍摄按键,摄像头就拍摄界面内的画面。
由于摄像头的线与线之间的问题导致拍摄画面不清晰。
图3.2摄像头拍摄照片
4总结
通过此次课程设计,使我更加扎实的掌握了有关STM32开发板方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。
实践出真知,通过亲自动手制作,使我掌握的知识不再是纸上谈兵。
过而能改,善莫大焉。
在课程设计过程中,我和搭档不断发现错误,不断改正,不断领悟并且一次又一次的检测调试。
最终这次课程设计顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。
在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦!
课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。
同时,设计让我感触很深。
使我对抽象的理论有了具体的认识。
我认为,在这学期的设计中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。
更重要的是,在设计中,我们学会了很多学习的方法。
而这是日后最实用的,真的是受益匪浅。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
这对于我们的将来也有很大的帮助。
以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。
就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识!
参考文献
[1]宋瑞,刘华珠,林树涛.一种新型自学习型红外遥控器设计[J].东莞理工学院学报,2011(03):
1-4.
[2]杨晟,阳泳,余建坤.基于嵌入式的红外遥控设计与论述[J].数字技术与应用,2016(02):
1.
[3]万璞,王丽莎,卢巧.虚拟仿真照相机设计研究[J].数字技术与应用,2011(07):
1.
[4]郑尧,贾正松.基于单反相机实现立体照相技术的研究[J].电子设计工程,2014(01):
1-3.
[5]束奇,李永.ARM嵌入式照相机的设计与实现[J].价值工程,2012(10):
1.
附录
MAIN
//#include
#include"stm32f10x.h"
#include"sys.h"
#include"usart.h"
#include"delay.h"
#include"led.h"
#include"key.h"
#include"exti.h"
#include"wdg.h"
#include"timer.h"
#include"lcd.h"
#include"ov7670.h"
#include"usmart.h"
#include"remote.h"
u8Shutter;
externu8ov_sta;
externu8ov_frame;
voidcamera_refresh(void)
{
u32j;
u16color;
if(ov_sta==2)
{
LCD_Scan_Dir(U2D_L2R);
LCD_SetCursor(0x00,0x0000);
LCD_WriteRAM_Prepare();
OV7670_CS=0;
OV7670_RRST=0;
OV7670_RCK=0;
OV7670_RCK=1;
OV7670_RCK=0;
OV7670_RRST=1;
OV7670_RCK=1;
for(j=0;j<76800;j++)
{
GPIOB->CRL=0X88888888;
OV7670_RCK=0;
color=OV7670_DATA;
OV7670_RCK=1;
color<<=8;
OV7670_RCK=0;
color|=OV7670_DATA;
OV7670_RCK=1;
GPIOB->CRL=0X33333333;
LCD_WR_DATA(color);
}
OV7670_CS=1;
OV7670_RCK=0;
OV7670_RCK=1;
EXTI->PR=1<<15;
if(Shutter==0){
ov_sta=0;
}
ov_frame++;
LCD_Scan_Dir(DFT_SCAN_DIR);
}
}
intmain(void)
{
u8i;
Stm32_Clock_Init(9);
uart_init(72,9600);
delay_init(72);
OV7670_Init();
LED_Init();
Remote_Init();
LCD_Init();
if(lcddev.id==0X6804)
{
lcddev.width=240;
lcddev.height=320;
}
usmart_dev.init(72);
POINT_COLOR=RED
LCD_ShowString(60,50,200,200,16,"MiniSTM32");
LCD_ShowString(60,70,200,200,16,"OV7670TEST");
LCD_ShowString(60,90,200,200,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,200,200,16,"2012/10/31");
LCD_ShowString(60,130,200,200,16,"UseUSMARTToSet!
");
LCD_ShowString(60,150,200,200,16,"OV7670Init...");
while(OV7670_Init())
{
LCD_ShowString(60,150,200,200,16,"OV7670Error!
!
");
delay_ms(200);
LCD_Fill(60,230,239,246,WHITE);
delay_ms(200);
}
LCD_ShowString(60,150,200,200,16,"OV7670InitOK");
delay_ms(1500);
Timerx_Init(10000,7199);
EXTI15_Init();