最新日志

发表于:2008-4-17 20:28:05
标签:无标签

0

自动跟踪摄像机设计(图)

前言... 1

正文... 1

 

前言

       在安防、视频会议等应用场合,常常需要能自动跟踪的摄像机。本文则对这种应用提供一种简单易行的解决方案。本方案也适用于家庭安防监控。

 

关键词:单片机、电机正反转、摄像头编程、EasyUSB模块、图像动态侦测

 

正文

       首先定义自动跟踪,即在初始监控的场景里,如果有目标移动,摄像机就会跟随者移动目标转动(最大转角359度),以保证不丢失真正的监控目标。

 

       简要的原理就是:将摄像机的监控画面分割成若干小块,然后做动态侦测,根据监控目标所在小块的位置,作出是否调整摄像机方向、以及调整多少的决定。单片机根据这个决定,来控制小云台上电机的转向和转动幅度。

 

       这个方案可以分为两部分:一是PC端的软件侦测和硬件接口。二是摄像机下云台控制电路。示意图如下:

点击看大图家庭监控DIY使用时,摄像机可以采用100元一只的USB摄像头;云台就用一个直流马达加一个正反转控制的电路即可。

 

方案再细化,可分为如下部分:

摄像机+马达控制电路+PC接口电路+PC软件。下面逐个解决。

 

摄像机:市场上去买。

PC软件:赛先生科技(www.schoolboy.com.cn)免费提供。

马达控制电路:首先看直流小马达的正反转控制,原理如下:

点击看大图此电路经过赛先生验证为正确可行,其中四个二极管是用来保护电机的,也可省略。下来,就只需要两个I/O口来控制电机正反转了,当然,这个电机需要有减速装置(实在没有,可以试一试I/O给一个PWM试一试,这个只是建议,我没有试过。)给出两个I/O,大家肯定会首先想到单片机。这个单片机程序就非常简单了,只要给以上电路的“正转”或“反转”一个高电平,就会按照你要的方向转动,两个I/O都是低电平时,马达停止;注意,杜绝两个I/O都是高电平(还好,上图中有保护的电路)。

最后看PC接口:有两种选择,一是串口,二是USB口。

对于串口:大家很亲切,熟悉。缺点是:电机控制端需要外接电源,需要单片机及其开发工具等。

对于USB口:我们就使用EasyUSB模块,在本人做的DIY例子中,也是这个。因为它不需要单片机,不需要外接电源,而且,应用它时,只需要在PC应用程序里调用两个函数。一个负责I/O输出,一个负责I/O输入,就能控制12以上的I/O

 

PC端免费软件的介绍:

它将监控屏幕分为6个竖条形区域,从左到右分别定义为1~6。每隔0.1秒钟,它就进行一次动态侦测,并输出当前运动幅度最大的一个区域的索引号。

软件分为串口型和USB型。串口型就将区域索引号送入串口。

USB型,有个Demo,即以EasyUSB模块为基础做的Demo软件(同时提供二次开发包),即,你想要看到自动跟踪摄像机系统的工作效果,所有要做的就是:准备一个USB摄像头+EasyUSB模块+下载该Demo软件。先插入两个USB设备、后运行Demo软件后,你在摄像头面前走动,EasyUSB模块上的灯就会跟随着你走的方向而点亮(用其中六个灯来分别代表监控区域中6个小区域)。

界面如下图:

 

 

程序下载地址:Demo

本程序可以使用USB型的摄像头,也可以使用枪式CCD摄像机接入的采集卡。源代码请联系作者-赛先生

视频下载1屏幕录像

视频下载2实物录像

 

赛先生科技(www.schoolboy.com.cn) 原创,引用本文需要保持原文、注明出处

      

 

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类: 无分类    |    来源: 原创

评论(0) | 阅读(104)
发表于:2008-4-16 14:57:40
标签:USB  源代码  输入输出  USB编程  

0

什么是EasyUSB模块(图)

 

简言之:它是一个由USB专用芯片做成的模块,附带了PC机上完整的应用程序(可二次开发的可编译的C++语言源代码)。

 

有人会问:这个玩意有什么呀,市面上的EZ-USB、D12不是很多这样的产品吗?

答:大大不一样。

 

无论是用EasyUSB模块,还是用它上面的USB芯片,在你开发USB产品时,不需要你查阅USB协议、不需要写Fireware(固件),所有需要做的工作就是:用C或VC++在PC的应用程序里调用几个函数读写I/O口,就能达到你设计的目的。

废话少说,以图示意:

点击开大图

 

 

该模块的预留引脚如下:

 

 

既然不需要写固件,那么我们就讨论一下唯一要做的工作:在PC上打开软件开发包,在此基础上修改调用与USB协议无关的几个函数。基本上只需要调用两个函数就能满足你的绝大部分设计要求,即一个输入一个输出函数,如下:

void EasyUSB_Set8LED(BYTE Data);

功能:设置输出J1D0~D7的电平。

参数:Databit0~bit7分别对应于D0~D7bit0=0D0引脚则为低电平

BYTE EasyUSB_GetInput();

功能:获得输入引脚的状态。

返回值:bit0~bit3分别对应于Key1~Key4bit0=0,外部引脚为低电平,表明Key1按键按下了。其中,Key3也是中断引脚,上升沿有效。

 

     如果你不需要外部中断,就不需要理解下面的函数了:

OnEasyUSB_ExtInt();

功能:当Key3中断引脚的出现上升沿时,将触发中断,程序会进入本函数处理。

 

  

    此软件包:包括芯片的驱动程序+可编译运行的二次开发包VC++源代码+Demo程序。

    下载软件包:rar

 

详情请登陆:http://www.schoolboy.com.cn/list.asp?ProdId=0001

 

 

 

 

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 原创

评论(0) | 阅读(117)
总共 , 当前 /