当前位置:首页 > 单片机 > 单片机
[导读]0 前言随着社会的发展,人们对安全防范工作日益重视,监控产品也从以前只在重要单位使用发展到各个领域都在应用。监控产品的技术也从模拟向数字和网络技术发展。网络监控产品使用较多的是硬盘录像机,但价格比较高。

0 前言

随着社会的发展,人们对安全防范工作日益重视,监控产品也从以前只在重要单位使用发展到各个领域都在应用。监控产品的技术也从模拟向数字和网络技术发展。网络监控产品使用较多的是硬盘录像机,但价格比较高。有些场合对监控的要求并不高,也不需要录像,但有时又要在远程了解一下当地的画面,这时就希望使用一种低价的,又能实现远程操作的监控产品。所以就计划设计IPCamera(网络照相机),它能够接受网络或手机短信发来的命令进行拍照,并将照片发布到Web服务器上或手机上供用户浏览。

1  IPCamera系统总体设计

IPCamera系统的总体设计思路是:采用ARM9作为系统的处理器,利用普通USB摄像头完成图像采集。系统设计一块网卡和一个GPRS模块,用户可以根据需要决定选用其中的一种、或者二种同时使用。手机能够通过GSM网向IPCamera的GPRS发送拍照控制命令,系统会自动将拍下的照片通过 GPRS模块发回给手机;网络用户可以利用telnet协议向IPCamera发送拍照控制命令,然后再利用浏览器查看IPCamera上的照片。

2  IPCamera的硬件设计

在设计IPCamera时,考虑到系统的稳定性和成本等因素,因此将系统硬件设计为3个部分,即核心板、主板和GPRS模块,如图1所示。

核心板采用三星公司生产的S3C2410处理器;SDRAM采用2片HY57V561620AT-H构成64M;将它连接到系统nGCS6,所以它的起始地址为:0x03000000。NAND FLASH 采用SAMSUNG K9F1208芯片,FLASH芯片连接到系统的nGCS0,所以它的起始地址为:0x00000000。要系统从NAND FLASH启动,应将S3C2410的OM0和OM1引脚都接地。

主板主要是一些接口电路。串行接口采用MAX3232芯片,由于本系统只使用一个串口,所以和S3C2410的TXD0和RXD0相连,构成第一个串口电路。JTAG接口直接由S3C2410处理器控制,只不过在连接电路上要加上接电阻。USB接口电路直接采用S3C2410内部的USB主机控制器,然后接上限流电阻和保险丝和USB插座。网卡采用AX88796-X86芯片,接在BANK2的位置上,所以片选接处理器的nGCS2信号,其地址为 0X200,所以IO_BASE0、IO_BASE1、IO_BASE2三个引脚悬空,中断选用INT2。网卡的逻辑地址是0x10000200。

GPRS模块采用SIMCOM公司生产的SIM100-E芯片。通过第三个串口信号线TXD2和RXD2和处理器相连接。


图1 IPCamera硬件结构图

3  IPCamera引导程序、操作系统和驱动程序

IPCamera引导程序选用韩国Mizi公司开发的vivi。vivi必须经过裁剪、交叉编译、下载到IPCamera等几个过程。首先使用 make menuconfig命令裁剪vivi,然后make命令编译生成vivi的二进制镜像文件,使用的编译器是armv4l-unknown-linux- gcc和armv4l-unknown-linux-as,最后使用JTAG将vivi烧写到IPCamera的flash芯片上。

考虑到成本,以及系统对实时性的要求不高等因素,所以决定选用Linux操作系统。目前发行的Linux操作系统都能支持ARM机的体系结构,所以只要根据平台的具体结构进行移植。系统移植主要包括建立交叉编译环境、修改内核源码、内核裁剪和内核编译4等个环节。内核裁剪时,要让系统包括 telnet和ftp服务。telnet服务主要实现能够对IPCamera远程操作,ftp服务主要实现IPCamera的文件上传和下载。最后将编译好的内核映象文件利用vivi软件烧写到IPCamera的flash芯片上。

IPCamera需要串口、USB、视频设备和网卡等多个设备驱动程序[2],由于这些设备都是标准设备,所以可以到厂家去下载相应的设备驱动源程序,然后交叉编译成Linux下的驱动程序,最后通过insmod[3]命令向内核加载驱动程序。如:Linux系统提供了视频设备的内核驱动video4linux(简称V4L),它为视频设备的应用程序编程提供一系列接口函数,所以USB摄像头

就可以采用V4L驱动程序。

4  IPCamera应用程序的设计

IPCamera主要包括3个应用程序,即:USB摄像头拍照、Web服务和GPRS操作控制等程序。这些应用程序都是用C语言来编写,然后通过交叉编译生成可执行文件。

4.1  USB摄像头拍照程序的设计

USB摄像头采用video4linux驱动,V4L图像采集的方法有两种,即overlay和mmap。本系统采用mmap,这种方法是通过将设备文件影射到内存的方法,直接通过指针操作内存的方式读取摄像头采集到的图像数据。控制拍照功能函数如下:

int cap(char * fileName)
{┅
       /***初始化设备***/
if (device_init(DEFAULT_DEVICE, &vd, 0, 3) == -1)www.51kaifa.com
    {   perror("device_init: failed...");
        return -1;  }
        /***内存映射***/
    if (v4l_grab_frame(&vd, 0))
            return -1;
    if (v4l_grab_sync(&vd))
            return -1;
    img = device_get_address(&vd);
        /***读取图像数据***/
    p=img;
    for (i=0;i<PAL_NC_HEIGHT;i++)
        for (j=0;j<PAL_NC_WIDTH;j++)
            { tmpc=*(p);
              *(p)=*(p+2);
              *(p+2)=tmpc;
              p+=3;  }
/***转换图像数据格式,保存为jpg文件***/
    if (write_jpeg(fileName, img, 70, 0))www.51kaifa.com
        return -1;

}

4.2  Web服务程序的设计

Web服务是通过http协议与客户端通信,工作流程如图2所示。http是一个请求、响应协议,即客户端发出一个请求,服务器端则响应这个请求。http利用可靠的TCP协议连接,默认使用80端口。目前市场上有许多Web 服务程序,但要将其移植到本系统中需要一定的工作量,所以可以设计一个简单的Web服务程序。程序的主函数如下:



int main(int argc, char *argv[])
{┅
  /*设置信号处理句柄*/
  signal(SIGCHLD, SIG_IGN);
  signal(SIGPIPE, SIG_IGN);
   ┅
  /*建立TCP流SOCKET*/
  if (argc > 1 && !strcmp(argv[1], "-i")) {
    fclose(stderr);
    HandleConnect(0);
    exit(0);
  }
  if((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
    perror("Unable to obtain network");
    exit(1);
  }
  if((setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void *)&true,
         sizeof(true))) == -1) {
    perror("setsockopt failed");
    exit(1);
  }
  server_sockaddr.sin_family = AF_INET;
  server_sockaddr.sin_port = htons(SERVER_PORT);
  server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  /*绑定监听端口*/
  if(bind(s, (struct sockaddr *)&server_sockaddr,
      sizeof(server_sockaddr)) == -1)  {
    perror("Unable to bind socket");
    exit(1);
  }
 /*设置允许客户连接数*/
  if(listen(s, 8*3) == -1) {
    perror("Unable to listen");
    exit(4);
  }
/*侦听客户连接请求并进行处理*/
   while (1) {
    len = sizeof(ec);
    if((fd = accept(s, (void *)&ec, &len)) == -1) {
      exit(5);
      close(s);
    }
    HandleConnect(fd);
 }

4.3 GPRS操作控制程序设计

GPRS操作程序主要任务是监视手机短信,然后根据短信决定具体操作。程序主要利用GPRS的AT命令和SOCKET套接字来完成短信发送和图片传输。GPRS操作程序主函数如下:
main()
{┅
    { /**根据条件拍照***/
    if(TakePicture==TRUE)
      { remove("1.jpg");
        rename("2.jpg","1.jpg");
        ┅
        rename("6.jpg","5.jpg");
        cap("6.jpg");
      }
 /**根据条件给手机发图片***/
   if(SendPicture==TRUE)
        SendPicToMob("6.jpg");
}

}

5 结束语

在样机中,硬件由3部分组成,即:核心板、主板和GPRS模块;引导使用vivi;操作系统采用linux2.6.0。系统经过测试,效果较好。本文作者创新点是:利用GSM网络和Internet网络控制远程拍照,并将拍下的照片发布在Internet供用户浏览。这种产品体积小、可靠性高、无需专人管理,非常适合于无人值守的环境。它将会有较好的应用前景。

参考文献:
[1] 李军华,尹文明.基于GPRS的大棚智能监控系统[J].电子技术应用,2006,8:83-85.
[2] 朱华生,叶军. 嵌入式系统IIC设备驱动程序设计与实现[J].微计算机信息,2006,(10-2):120-123.
[3] 朱华生,胡凯利.基于Linux系统的HHARM9电机驱动程序设计[J].南昌工程学院学报.2005,4:51-53.
 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭