![基于ARM的智能家居監(jiān)控系統(tǒng)詳細設(shè)計說明書_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-9/30/fc2a1445-b80a-4a6b-8550-63b8e36a4c59/fc2a1445-b80a-4a6b-8550-63b8e36a4c591.gif)
![基于ARM的智能家居監(jiān)控系統(tǒng)詳細設(shè)計說明書_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-9/30/fc2a1445-b80a-4a6b-8550-63b8e36a4c59/fc2a1445-b80a-4a6b-8550-63b8e36a4c592.gif)
![基于ARM的智能家居監(jiān)控系統(tǒng)詳細設(shè)計說明書_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-9/30/fc2a1445-b80a-4a6b-8550-63b8e36a4c59/fc2a1445-b80a-4a6b-8550-63b8e36a4c593.gif)
![基于ARM的智能家居監(jiān)控系統(tǒng)詳細設(shè)計說明書_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-9/30/fc2a1445-b80a-4a6b-8550-63b8e36a4c59/fc2a1445-b80a-4a6b-8550-63b8e36a4c594.gif)
![基于ARM的智能家居監(jiān)控系統(tǒng)詳細設(shè)計說明書_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-9/30/fc2a1445-b80a-4a6b-8550-63b8e36a4c59/fc2a1445-b80a-4a6b-8550-63b8e36a4c595.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 基于arm的智能家居監(jiān)控系統(tǒng)詳細設(shè)計說明書提交:審核: 提交:farsight審核:xxx核準:xxx 發(fā)行簽核記錄表 發(fā) 文 單 位 簽 核 發(fā) 文 單 位 簽 核北京開發(fā)中心技術(shù)管理部修改紀錄表版本發(fā)行日期修改記錄ver:1.002009-4-9基于arm的智能家居監(jiān)控系統(tǒng)詳細設(shè)計說明書1、 引言1.1 目的l 本說明書是為了程序員詳細了解基于arm的智能家居監(jiān)控系統(tǒng)l 應(yīng)該完成的功能和各模塊輸入、處理、輸出關(guān)系,指導程序員正確編碼;同時作為測試人員的參考資料使用l 面向的讀者:程序員、測試人員、評審員;1.2 項目背景n 項目名稱:基于arm的智能家居監(jiān)控系統(tǒng)。n 項目功能:使用fs2
2、410開發(fā)板和gprs模塊和usb攝像頭,完成對現(xiàn)場的監(jiān)控功能,硬件資源來源于fs2410開發(fā)板自帶的資源,比如溫度傳感器,報警器,紅外傳感器等。如果溫度傳感器特測溫度高于一定的溫度或者紅外傳感器特測有不法分子闖入,那么相應(yīng)的相應(yīng)的報警功能,滅火功能被開啟,并通過gprs模塊通知用戶現(xiàn)場情況,用戶根據(jù)具體情況采取不同的措施給系統(tǒng)。完成一個遠程監(jiān)控的主要功能。n 系統(tǒng)提出者:北京市華清遠見科技信息有限公司n 項目開發(fā)者:farsightn 項目管理者:farsightn 最終用戶:面向用戶n 其他有關(guān)背景資料。1.3 術(shù)語及縮略語定義1.3.1 術(shù)語定義:l fs2410:優(yōu)龍開發(fā)板名稱。l c
3、gi : common gate intergace,是http服務(wù)器與你的或其它機器上的程序進行“交談”的一種工具,其程序須運行在網(wǎng)絡(luò)服務(wù)器上1.3.2 縮略語定義:1.4 參考資料1.4.1 文件l 基于gprs的遠程安防監(jiān)控系統(tǒng)需求分析說明書l 基于gprs的遠程安防監(jiān)控系統(tǒng)概要設(shè)計說明書1.4.2 資料l l l l l l 優(yōu)龍開發(fā)板參考資料光盤2、 主控系統(tǒng)詳細設(shè)計2.1 程序結(jié)構(gòu)圖紅外傳感器usb攝像頭gprs滅火裝置報警存儲照片溫度傳感器火災(zāi)主控板 小偷異?,F(xiàn)象internet&手機2.1系統(tǒng)結(jié)構(gòu)圖2.2 程序說明:2.2.1 ad模塊說明程序描述:ad驅(qū)動程序名稱:s3c24
4、10-adc.c審核:farsight日期:2008-4-26輸入數(shù)據(jù):一個模擬電壓信號量輸出數(shù)據(jù):得到一個數(shù)字信號量硬件描述:ad轉(zhuǎn)換器是模擬信號源和cpu之間聯(lián)系的接口,它的任務(wù)是將連續(xù)變化的模擬信號轉(zhuǎn)化為數(shù)字信號,以便計算機和數(shù)字系統(tǒng)使用。fs2410開發(fā)板用的ad轉(zhuǎn)換器是arm s3c2410自帶的一個一路10位的ad轉(zhuǎn)換器。并且支持觸摸屏功能。最大轉(zhuǎn)化率是500k,ad轉(zhuǎn)換器頻率的計算公式為:系統(tǒng)時鐘/(比例值+1)。本電路的特點是通過改變滑動變阻器的阻值來改變模擬電壓量。 軟件是通過read,write來進行對ad的讀和寫的操作。原理圖:涉及的datasheet: (s3c2410
5、芯片手冊)具體操作根據(jù)驅(qū)動程序和datasheet來結(jié)合注冊驅(qū)動程序程alloc_chrdev_region(&devno,0,1,ad_temperature);(動態(tài))結(jié)束初始化cdev,并添加到內(nèi)核之中cdev_add(&addev.cdev,devno,1);y填充adc_remap_ops結(jié)構(gòu)體的各個域。open,release,read,writerequest_irq(irq_adc,ad_interrupt,sa_interrupt,ad,null);(中斷注冊)register_chrdev_region(devno,1,ad_temperature) 成功?序流程: 2.2
6、.1ad模塊驅(qū)動流程圖驅(qū)動設(shè)計思路:在模塊中有ad轉(zhuǎn)換驅(qū)動和蜂鳴器的驅(qū)動,ad驅(qū)動的設(shè)計為:open函數(shù)中設(shè)置為手動啟動,當應(yīng)用層調(diào)用read函數(shù)時,開啟ad轉(zhuǎn)換,然后進入可中斷的等待隊列,當中斷來的時候,喚醒等待隊列,然后讀取轉(zhuǎn)換數(shù)值,在ioctl中能控制對ad和蜂鳴器的開和關(guān)。#include #include #include #include #include #include #include #include #include #include #include n#include #include #include #include #include #include #incl
7、ude #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define radccon *(volatile unsigned int*)s3c2410_adccon#define radcdat0 *(volatile unsigned int *)s3c2410_adcdat0#define rgpbcon *(volatile unsigned int *)s3c2410_gpbcon#
8、define rgpbdat *(volatile unsigned int *)s3c2410_gpbdat#define rclkcon *(volatile unsigned int *)s3c2410_clkcon#define radctsc *(volatile unsigned int *)s3c2410_adctsc#define ad_magic k#define ad_enable _io(ad_magic,1)#define ad_disable _io(ad_magic,2)#define beep_on _io(ad_magic,3)#define beep_off
9、_io(ad_magic,4)#define ad_major 91static void ad_setup_cdev(void);static irqreturn_t ad_interrupt(int irq,void *dev_id,struct pt_regs *regs);static int ad_major = ad_major; int count = 0 ;int onoff = 0 ;struct ad_devwait_queue_head_t wait;struct semaphore semread;int temperature;struct cdev cdev;str
10、uct ad_dev addev;static void beepon(void)/開蜂鳴器 unsigned long data;unsigned long s3c2410_fclk;unsigned long s3c2410_hclk;unsigned long s3c2410_pclk;data = *(volatile unsigned long *)s3c2410_gpbcon;data &= 0x3;*(volatile unsigned *)s3c2410_gpbcon = data | 0x2;data = readl(s3c2410_tcfg0);data &= 0xff;d
11、ata |= 15;writel(data, s3c2410_tcfg0);data = readl(s3c2410_tcfg1);data &= 0xf;data |= 2;writel(data, s3c2410_tcfg1);s3c2410_fclk = s3c2410_get_pll(_raw_readl(s3c2410_mpllcon), 12*1000*1000);data = _raw_readl(s3c2410_clkdivn); s3c2410_hclk = s3c2410_fclk / (data & s3c2410_clkdivn_hdivn) ? 2 : 1);s3c2
12、410_pclk = s3c2410_hclk / (data & s3c2410_clkdivn_pdivn) ? 2 : 1);writel(s3c2410_pclk 7) / 2000, s3c2410_tcntb(0);writel( (s3c2410_pclk 7) / 2000) 1, s3c2410_tcmpb(0);data = readl(s3c2410_tcon);data &= 0x1f;data |= 0xb;writel(data, s3c2410_tcon);data &= 2;writel(data, s3c2410_tcon);static void beepo
13、ff(void)/關(guān)蜂鳴器unsigned long data;data = *(volatile unsigned *)s3c2410_gpbcon;data &= 0x3;*(volatile unsigned *)s3c2410_gpbcon = data | 0x1;*(volatile unsigned *)s3c2410_gpbdat &= 0x1;static int ad_open(struct inode *inode,struct file *filp) unsigned long data;if(count=0)/保證只有第一個進程調(diào)用是對ad進行初始化data = rc
14、lkcon;data |=(115);rclkcon = data;radcdat0 &=(114);radctsc &=(12);request_irq(irq_adc,ad_interrupt,sa_interrupt,ad,null);radccon = (114)|(2556)|(03)|(02)| (01)|(10);count+;onoff=1;return 0;static void ad_off(void)/關(guān)ad轉(zhuǎn)換通過關(guān)ad的時鐘來停止ad轉(zhuǎn)換unsigned long data;data = rclkcon;data &=(115);rclkcon = data; fre
15、e_irq (irq_adc, null);radccon |=(12) ;static void ad_on(void)unsigned long data;data = rclkcon;data |=(115);rclkcon = data;radcdat0 &=(114);radctsc &=(12);request_irq(irq_adc,ad_interrupt,sa_interrupt,ad,null);radccon &= (12);radccon |=(10);static irqreturn_t ad_interrupt(int irq,void *dev_id,struct
16、 pt_regs *regs) / wake_up_interruptible(&addev.wait);return irq_handled ;static ssize_t ad_read(struct file *filp,char _user *buf,size_t count,loff_t *ppos )if(down_interruptible(&addev.semread) return -erestartsys; radccon |= (10);interruptible_sleep_on(&addev.wait); addev.temperature = (radcdat0&0
17、x3ff); copy_to_user(buf,(char*)&addev.temperature,sizeof(addev.temperature); up(&addev.semread); return sizeof(addev.temperature);static ssize_t ad_write(struct file *filp, const char _user *buf, size_t count, loff_t *f_pos)return 0;static int ad_ioctl(struct inode *inodep,struct file *filp,unsigned
18、 int cmd,unsigned long arg )switch(cmd) case ad_disable:if(onoff =1)ad_off();onoff=0; break; case ad_enable:if(onoff = 0)ad_on(); onoff=1; break; case beep_on:beepon(); break; case beep_off:beepoff(); break; default :return - enotty; return 0;/處理ad開換和蜂鳴器開關(guān)的接口函數(shù)static int ad_release(struct inode* ino
19、de,struct file* flip)if(count = 0)radccon |=(12) ;free_irq(irq_adc,null);count-;return 0;static const struct file_operations ad_fops =.owner = this_module,.open = ad_open,.read = ad_read,.write = ad_write,.ioctl = ad_ioctl,.release = ad_release,;static void ad_setup_cdev(void)int err,devno = mkdev(a
20、d_major,0);cdev_init(&addev.cdev,&ad_fops);addev.cdev.owner = this_module;addev.cdev.ops = &ad_fops;err = cdev_add(&addev.cdev,devno,1);int ad_init(void)int result;dev_t devno = mkdev(ad_major,0);if(ad_major)result = register_chrdev_region(devno,1,ad_temperature); 注冊一個名字叫ad_temperature的字符設(shè)備result =
21、alloc_chrdev_region(&devno,0,1,ad_temperature);ad_major = major(devno);if(result0)return result;init_waitqueue_head(&addev.wait);sema_init(&addev.semread,1);ad_setup_cdev();return 0;void ad_exit(void)count -;cdev_del(&addev.cdev);unregister_chrdev_region(mkdev(ad_major,0),1);module_init(ad_init);mod
22、ule_exit(ad_exit);module_author(hong xiongfei);module_description(a/d devicer);module_license(gpl);由于我們的模塊要單獨做成一個守護進程在后臺進行,并且每個模塊單獨完成各自的功能,ad模塊的應(yīng)用程序主要的工作為:循環(huán)每分鐘讀取一次溫度,當溫度大于40度的時候就調(diào)用gprs模塊的程序發(fā)送短信;并啟動蜂鳴器。程序如下:#include #include #include #include #include #include #include #include #include #include #in
23、clude sendmessage.h#define ad_magic k#define ad_enable _io(ad_magic,1)#define ad_disable _io(ad_magic,2)#define beep_on _io(ad_magic,3)#define beep_off _io(ad_magic,4)void init_daemon(void)int pid;int i;if(pid=fork()exit(0);else if(pid0)exit(-1);setsid();if(pid=fork()exit(0);else if(pid0)exit(-1);fo
24、r(i=2;i60) & (count=0)ioctl(fd,beep_on);system(cp /web/html/pic/safe_no.jpg /web/html/pic/safe.jpg);sendmessageburning:more than 60);count =1;if(count = 1)sleep(5);delay+;if(delay =2)count=0;delay=0;ioctl(fd,beep_off);2.2.4蜂鳴器報警模塊說明程序描述:蜂鳴器驅(qū)動程序名稱:beep.c審核:farsight日期:2008-4-26輸入數(shù)據(jù):有人闖入輸出
25、數(shù)據(jù): 報警硬件描述:首先將蜂鳴器接到s3c2410處理器的一個gpb0管腳上。還上面的配置一樣。首先配置gpbcon的gpb0為輸出模式,當數(shù)據(jù)寄存器里寫入1時。蜂鳴器打開,寫0關(guān)閉蜂鳴器。軟件上是通過ioctl來進行相應(yīng)的控制的。 原理圖:所涉及的datasheet(s3c2410數(shù)據(jù)手冊):2.2.4蜂鳴器報警模塊驅(qū)動流程圖2.2.5紅外模塊說明程序描述:探測入侵程序名稱:irda.c irda_gpio.c serial.c shmgt.c審核:farsight日期:2008-11-6輸入數(shù)據(jù):有人闖入輸出數(shù)據(jù): 報警、拍照、網(wǎng)頁警告硬件描述:通過設(shè)置gpfcon來將gpf3設(shè)置為輸入
26、模式,然后讀取相應(yīng)的數(shù)據(jù)寄存器的狀態(tài)來,進行對現(xiàn)場的分析。如果有人闖入,紅外模塊輸出高電平,這個時候gpf3相應(yīng)的數(shù)據(jù)寄存器的數(shù)值為1,反之為0.原理圖:涉及的datasheet(s3c2410數(shù)據(jù)手冊):gpfcon,gpfdat三個寄存器驅(qū)動程序模塊設(shè)計: 1. irda_gpio.c/* linux/drivers/char/irda_gpio.c national semiconductor scx200 gpio driver. allows a user space process to play with the gpio pins. copyright (c) 2001,200
27、2 christer weinigel */#include #include #include #include #include #include /#include #include #include #include #include #include #include #define drvname irda_gpiomodule_author(hongbo liu );module_description(irda detector);module_license(gpl);/#define hello_magic k/聲明一個幻數(shù) /#define close_irda _io(
28、hello_magic,1)/#define open_irda _io(hello_magic,2)#define close_irda 0#define open_irda 1#define max_pins 32#define max_result 4char status = open_irda;static int major = 253;/* default to dynamic major */module_param(major, int, 0);module_parm_desc(major, major device number);/讀函數(shù),讀出紅外設(shè)備的狀態(tài),函數(shù)提供co
29、unt毫秒內(nèi)并小于128的結(jié)果,結(jié)果以字符y或n來表示狀態(tài),設(shè)備連接在gpg10端口上static ssize_t irda_gpio_read (struct file *filp, char *buff, size_t count, loff_t *offp)ssize_t result = 0;int i;char datamax_result;char status1 = yes;char status2 = no;if(status = open_irda)int k = readl(s3c2410_gpfdat);/讀gpg10端口信號if ( k & ( 13 ) )/判斷信號電
30、平strcpy(data,status1);elsestrcpy(data,status2);elsestrcpy(data,status2);/printk(kernel buf is %sn,data);if (copy_to_user (buff, data, count)return -efault;result = count;return result;/設(shè)備打開static int irda_gpio_open(struct inode *inode, struct file *file)writel(readl(s3c2410_gpfcon) &(36),s3c2410_gpf
31、con); /*設(shè)置gpg10端口為輸入端口*/status = open_irda;return 0;/設(shè)備關(guān)閉static int irda_gpio_release(struct inode *inode, struct file *file)return 0;static int irda_gpio_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg)switch(cmd)case close_irda: /writel(readl(s3c2410_gpfcon) | (1 6),
32、s3c2410_gpfcon);/writeb(readb(s3c2410_gpfdat) & (13),s3c2410_gpfdat);status = close_irda;printk(irda closedn);break;case open_irda:printk(irda openn);status = open_irda;break;default:break;return 0;/操作結(jié)構(gòu)指針static const struct file_operations irda_gpio_fileops = .owner = this_module,.read = irda_gpio_
33、read,.open = irda_gpio_open,.ioctl = irda_gpio_ioctl,.release = irda_gpio_release,;static struct cdev irda_gpio_cdev; /* use 1 cdev for irda */驅(qū)動模塊注冊static int _init irda_gpio_init(void)int rc;dev_t devid;if (major) devid = mkdev(major, 0);rc = register_chrdev_region(devid, max_pins, irda_gpio); els
34、e rc = alloc_chrdev_region(&devid, 0, max_pins, irda_gpio);major = major(devid);if (rc 0) printk(kern_warningirda_gpio chrdev_region err: %dn, rc);return rc;if(0=major)major=rc;/printk(kern_noticedebug irda device major is %dn,major);cdev_init(&irda_gpio_cdev, &irda_gpio_fileops);cdev_add(&irda_gpio
35、_cdev, devid, max_pins);return 0; /* succeed */驅(qū)動模塊卸載static void _exit irda_gpio_cleanup(void)cdev_del(&irda_gpio_cdev);/* cdev_put(&irda_gpio_cdev); */unregister_chrdev_region(mkdev(major, 0), max_pins);module_init(irda_gpio_init);module_exit(irda_gpio_cleanup);2. irda.c#include serial.h#include be
36、ep.h#include wdaemon.hint main (int argc, char *argv )char bufmax_result;char tst_buf1 = yes;char tst_buf2 = no;char status_cnt = 0;char alarm = enable;int fd,i,j;wdaemon(0);for(i=0;i= stat_tst_cnt & alarm = enable)status_cnt = 0;alarm = disable;printf(burningn);if(fork() = 0)beepon();sleep(1);beepo
37、ff();while(sendmessagewarning!) = send_fail);system(cp /web/html/pic/safe_no.jpg /web/html/pic/safe.jpg);execl(/camera/mouse_capture,/camera/mouse_capture,null);exit(0);sleep(1);return 0;3. serial.c#include #include #include #include #include #include #include #include #include #define
38、send_success 0#define send_fail -1int open_port(int fd,int comport) char *dev=/dev/s3c2410_serial0,/dev/s3c2410_serial1,/dev/s3c2410_serial2; long vdisable; if (comport=1) fd = open( /dev/s3c2410_serial0, o_rdwr|o_noctty|o_ndelay); if (-1 = fd) perror(cant open serial port); return(-1); else if(comp
39、ort=2) fd = open( /dev/s3c2410_serial1, o_rdwr|o_noctty|o_ndelay); if (-1 = fd) perror(cant open serial port); return(-1); else if (comport=3) fd = open( /dev/s3c2410_serial2, o_rdwr|o_noctty|o_ndelay); if (-1 = fd) perror(cant open serial port); return(-1); if(fcntl(fd, f_setfl, 0)0) printf(fcntl f
40、ailed!n); else printf(fcntl=%dn,fcntl(fd, f_setfl,0); if(isatty(stdin_fileno)=0) printf(standard input is not a terminal devicen); else printf(isatty success!n); printf(fd-open=%dn,fd); return fd;int set_opt(int fd,int nspeed, int nbits, char nevent, int nstop) struct termios newtio,oldtio; if ( tcg
41、etattr( fd,&oldtio) != 0) perror(setupserial 1); return -1; bzero( &newtio, sizeof( newtio ) ); newtio.c_cflag |= clocal | cread; newtio.c_cflag &= csize; switch( nbits ) case 7: newtio.c_cflag |= cs7; break; case 8: newtio.c_cflag |= cs8; break; switch( nevent ) case o: newtio.c_cflag |= parenb; ne
42、wtio.c_cflag |= parodd; newtio.c_iflag |= (inpck | istrip); break; case e: newtio.c_iflag |= (inpck | istrip); newtio.c_cflag |= parenb; newtio.c_cflag &= parodd; break; case n: newtio.c_cflag &= parenb; break; switch( nspeed ) case 2400: cfsetispeed(&newtio, b2400); cfsetospeed(&newtio, b2400); break; case 4800: cfsetispeed(&newtio, b4800); cfsetospeed(&newtio, b4800); break; case 9600: cfsetispeed(&newtio, b9600); cfsetospeed(&newtio, b96
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年實木類家具項目立項申請報告模式
- 2025年跨境電商產(chǎn)業(yè)園項目提案報告模范
- 2025年中介促成的辦公室租賃合同示例
- 2025年公司員工福利與激勵咨詢協(xié)議
- 市政綠化工程申請實施協(xié)議
- 2025年公路護欄維護保養(yǎng)合同范本
- 2025年倉儲調(diào)度員勞動合同范文
- 2025年供熱網(wǎng)絡(luò)運營維護服務(wù)合同示范文本
- 2025年農(nóng)藥使用與安全管理技術(shù)合作協(xié)議
- 2025年勞務(wù)派遣合同分析
- 安踏單店貨品管理資料課件
- 藥店信息處理與保密技巧
- 兩辦意見八硬措施煤礦安全生產(chǎn)條例宣貫學習課件
- 蒙曼品最美唐詩:全三冊
- 未成年法制安全教育課件
- 鋰電新能源項目融資計劃書
- 《體育與健康說課》課件
- 人教版化學九年級下冊同步練習:第九單元 溶液
- 眼保健和視覺健康
- 人教版六年級上冊數(shù)學數(shù)學期末應(yīng)用題訓練(含簡單答案)
- 【基層版】中國房顫中心認證標準
評論
0/150
提交評論