freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于android的智能家居系統(tǒng)設(shè)計畢業(yè)論文-文庫吧

2025-06-11 13:18 本頁面


【正文】 傳燈光的狀態(tài)以便LED燈和按鍵的狀態(tài)保持一致。鬧鐘界面中我們提供一個定時鬧鐘可以設(shè)定在24小時內(nèi)使蜂鳴器動作一次。并且可以再鬧鐘發(fā)出聲響之前取消。在空調(diào)界面中由于也需要用到顯示溫度,可以通過溫度控制空調(diào)的開啟,另外由于硬件上的限制,空調(diào)在演示中也是以LED燈的形式演示。窗簾界面可以提供兩種控制窗簾的方法,包括手動直接控制窗簾和通過光照值控制窗簾的開關(guān),為了方便用戶設(shè)定合適的光照值,界面中有對當(dāng)前光感的監(jiān)控。安防系統(tǒng)需要通過RFID的認(rèn)證才能進(jìn)入,此界面主要提高的安防功能是紅外和煙霧警報,警報的方式都分別分為蜂鳴器警報和短信警報,而且此界面也可以對已綁定的手機(jī)號碼和RFID卡進(jìn)行更換。本系統(tǒng)的界面使用Android寫成,把用戶需要求的數(shù)據(jù)傳到C語言層,最后由C語言層操控硬件。而C語言和JAVA之間的通信側(cè)是通過JNI來完成的。(如圖12)圖 12 2 總括 硬件本文所用到的主要硬件有:搭載CortexA8的GEC210嵌入式開發(fā)板,7英寸電阻屏,以及一塊硬件拓展版。下面是智能家居系統(tǒng)原理圖。 CortexA8本開發(fā)板GEC210搭載的主芯片為CortexA8,又名“蜂鳥”,是三星推出的一款適用于智能手機(jī)和平板計算機(jī)等多媒體設(shè)備的應(yīng)用處理器,CortexA8和S5PC110功能一樣,110小封裝適用于智能手機(jī),210封裝較大,主要用于平板計算機(jī)和上網(wǎng)本。圖21CortexA8采用了ARM CortexTMA8內(nèi)核,ARM V7指令集,主頻可達(dá)1GHZ,64/32位內(nèi)部總線結(jié)構(gòu),32/32KB的數(shù)據(jù)/指令一級緩存,512KB的二級緩存,可以實(shí)現(xiàn)2000DMIPS(每秒運(yùn)算2億條指令集)的高性能運(yùn)算能力。ARM cortexA8 CPU原理如圖21所示。 拓展板拓展版主要是為了拓展在GEC210上所沒有的硬件需求,以滿足智能家居的實(shí)驗需要。具體包括:紅外模塊、繼電器模塊、步進(jìn)電機(jī)、直流電機(jī)、氣體傳感器、溫濕度傳感器、光敏感測器、GPRS模塊和RFID模塊。原理圖及IO引腳分配如圖22所示:圖22 RFID模塊芯片拓展版所用的RFID具體型號為MF RC522 , 非接觸式通信中高集成度讀寫卡系列芯片中的一員。是NXP 公司針對“三表”應(yīng)用推出的一款低 電壓、低成本、體積小的非接觸式讀寫卡芯片,是智能儀表和便攜 式手持設(shè)備研發(fā)的較好選擇。MF RC522 利用了先進(jìn)的調(diào)制和解調(diào)概念, 下所有類型的被動非接觸式通信方式和協(xié)議。支持 ISO14443A 的多層應(yīng)用。其內(nèi)部發(fā)送器部分可驅(qū)動讀寫器天線與ISO 14443A/MIFARE卡和應(yīng)答機(jī)的通信,無需其它的電路。接收器部分提供一個堅固而有效的解調(diào)和解碼電路,用于處理ISO14443A 兼容的應(yīng)答器信號。數(shù)字部分處理ISO14443A 幀和錯誤檢測(奇偶 amp。CRC)。此外,它還支持快速CRYPTO1 加密算法,用于驗證MIFARE 系列產(chǎn)品。MFRC522 支持MIFARE?更高速的非接觸式通信,雙向數(shù)據(jù)傳輸速率高達(dá)424kbit/s。 JNIJNI是Java Native Interface的縮寫,中文名JAVA的本地調(diào)用。,Java Native Interface(JNI)標(biāo)準(zhǔn)成為java平臺的一部分,它允許Java代碼和其他語言寫的代碼進(jìn)行交互。JNI一開始是為了本地已編譯語言,尤其是C和C++而設(shè)計的,只要調(diào)用約定受支持就可以了。使用java與本地已編譯的代碼交互,通常會喪失平臺可移植性。但是,有些情況下這樣做是可以接受的,甚至是必須的,比如,使用一些舊的庫,與硬件、操作系統(tǒng)進(jìn)行交互,或者為了提高程序的性能。JNI標(biāo)準(zhǔn)至少保證本地代碼能工作在任何Java虛擬機(jī)實(shí)現(xiàn)。JNI在程序中作用的是Java和C的翻譯,在本設(shè)計中起到的作用是,讓C語言層得知Java的調(diào)用,以及把各種硬件信息通過實(shí)時刷新的方式不斷反饋到Java中。關(guān)系如圖23示:圖23 3 功能設(shè)計 主界面 溫濕度監(jiān)控顯示顯示溫濕度是智能家居的最基本功能,通過熒幕用戶可以隨時從中獲知當(dāng)前的溫度和濕度。由于溫濕度顯示并不需要觸發(fā)事件,因此打開程序的時候就會自動觸發(fā)。溫濕度的顯示需要不斷地刷新,也為了方便其他數(shù)值的傳遞,我們定義了一個叫cflags的數(shù)組,定義clags的[1][2]是用于存放溫濕度的數(shù)值。另外光感應(yīng)驅(qū)動也在這里打開,方便在同一個地方把需要隨時刷新的值都得到并及時更新到cflags里面去。在監(jiān)控溫濕度的線程中,首先根據(jù)驅(qū)動給的借口,取得溫濕度傳感器的檔描述符fdtemperature,通過IO控制函數(shù)temperature_ioctl(fdtemperature , amp。cflags[1])。還有emperature_ioctl(fdtemperature , amp。cflags[0])。不斷循環(huán)并取得當(dāng)前的溫濕度數(shù)值。在取得數(shù)值之后,通過安卓里面的handler隨時刷新數(shù)值,而C層需要做的就是不斷更新數(shù)組里面的所有數(shù)據(jù)并通過JNI傳到上層以達(dá)到界面層和運(yùn)算層的實(shí)時通信。首先需要在初始化時把HANDLER的屬性對象保存起來,先定義兩個全局變量jobject g_obj = NULL。和JavaVM *g_vm = NULL。然后在JNI執(zhí)行初始化是進(jìn)行環(huán)境變量的保存(*env)GetJavaVM(env,amp。g_vm)。和g_obj= (*env)NewGlobalRef(env,obj)。在更新線程中釋放之前保存的全局變量以便找到JAVA中的對象即對應(yīng)的JAVA數(shù)組并轉(zhuǎn)換上傳,具體操作是:jclass gasdevclazz = (*g_env)GetObjectClass (g_env, g_obj)。 jfieldID fieldID = (*g_env)GetFieldID (g_env, gasdevclazz, flags, [I)。 jflags = (*g_env)GetObjectField (g_env, g_obj,fieldID)。 jclass iclass = (*g_env)GetObjectClass(g_env, g_obj)。 jmethodID methodId = (*g_env)GetMethodID(g_env, iclass, HandlerArray, (I)V)。 在家模式和外出模式的切換由于在出門的時候用戶經(jīng)常需要關(guān)閉很多的用電器,整合一個外出模式就能為用戶提供極大的便利。外出系統(tǒng)的主要功能是在用戶切換到外出功能的10秒后,關(guān)閉室內(nèi)的所有可控制用電器并打開所有可用警報的短信通知。在家模式和外出模式,根據(jù)界面需求,只設(shè)置一個觸發(fā)動作的界面,具體操作是當(dāng)用戶按下外出模式按鈕C語言層接受到觸發(fā)命令,在C語言層通過利用pthread_create創(chuàng)建兩個線程:第一個線程首先利用線程分離函數(shù)pthread_detach(pthread_self())進(jìn)行線程的分離,使用sleep(10)等待10秒后,若10秒之內(nèi)判斷到外出模式的標(biāo)志位cflags[3]依然是1,就通過包裝過的驅(qū)動界面把用電器關(guān)閉,把標(biāo)志紅外入侵警報的cflags[4]和標(biāo)志有毒氣體警報的clags[5]都設(shè)置成短信通知,并把所有存儲用電器狀態(tài)值的cflags中的相關(guān)數(shù)值進(jìn)行刷新,最后關(guān)閉線程;另一個線程則是負(fù)責(zé)不斷監(jiān)聽RFID,也是先通過分離線程,然后使用while(1)不斷循環(huán),在循環(huán)體內(nèi)打開rfid驅(qū)動,用if判斷語句當(dāng)識別到用戶綁定的ID卡時切換為在家模式把紅外警報和氣體警報標(biāo)志位置成關(guān)閉狀態(tài),并關(guān)閉線程。工作原理流程圖如31所示。等待10秒用戶點(diǎn)擊切換成外出模式關(guān)閉用電器并打開警報是否刷正確的ID卡切換成在家模式NY圖31圖31 進(jìn)入安防界面在進(jìn)入安防界面的時候需要用到RFID卡的認(rèn)證,為上層界面提供了一個觸發(fā)界面,具體操作是當(dāng)接收到界面?zhèn)鱽淼倪M(jìn)入安防界面動作時,在C語言層開辟一個安防進(jìn)入的線程,利用for循環(huán)輪詢,然后用if語句把存儲有綁定的有效rfid卡ID的cfags[17]與rfid識別到的卡號進(jìn)行比對,當(dāng)一致時把cfags[6]置成ID卡號表示進(jìn)入安防界面成功,如果在5秒內(nèi)未能識別正確的ID卡號,就把cfags[6]置成1表示進(jìn)入安防界面失敗。如流程圖32所示。NYYN點(diǎn)擊進(jìn)入安防界面彈出刷卡提示是否超過10秒是否識別正確ID卡進(jìn)入安防界面失敗成功進(jìn)入安防界面圖32 鬧 鐘鬧鐘是智能家居中一個重要的功能,此鬧鐘可以設(shè)定在24小時內(nèi)使蜂鳴器發(fā)出一次聲響,并且能夠隨時取消并重新設(shè)置。此界面給上層提供的界面是傳遞一個字符串,通過算法把字符串提取成數(shù)字并作為設(shè)定時間。若當(dāng)前時間和設(shè)定時間一致則蜂鳴器動作。每次判斷蜂鳴器是否動作之前都需要先判斷標(biāo)志位,看看用戶是否取消鬧鐘。是的話就停止減少時間并跳出該段程序。 具體操作是在初始化的時候先建立好鬧鐘線程(后面會說到鬧鐘線程還整合了其他功能),然后分離線程,通過time_t tp。和struct tm *s_tm。定義時間結(jié)構(gòu)體并且通過tp = time(NULL)。和s_tm = localtime(amp。tp)。兩個函數(shù)取得當(dāng)前時間,同時通過以下if語句判斷:if(((cflags[16]/10000)==1)amp。amp。((s_tmtm_hour)==(cflags[16]%10000/100))amp。amp。((s_tmtm_min)==(cflags[16]%100)))其中cflags[16]中,后面四位是表示用戶設(shè)定的時間和分鐘,第一位是指是否設(shè)定鬧鐘的標(biāo)志位,如果標(biāo)志鬧鐘的clags[16]不為0而當(dāng)前的時分與用戶設(shè)定的時分又是一致的話,就直接通過蜂鳴器的包裝驅(qū)動設(shè)置蜂鳴器的合適占空比和周期,并持續(xù)動作10秒,之后則把鬧鐘標(biāo)志位clags[16]置0。該流程如圖33所示:NYYN用戶輸入一個字符串串轉(zhuǎn)換成設(shè)定時間是否取消鬧鐘是否到達(dá)設(shè)定時間鬧鐘取消蜂鳴器動作圖33 燈 光燈光的直接控制就是通過用戶直接點(diǎn)擊上層按鈕,傳到下層直接打開驅(qū)動進(jìn)行操作,操作完成后刷新標(biāo)志位。可以每次控制一個LED燈或者是一次控制所有的LED燈,方便用戶控制。在燈光界面我們給上層界面只需要提供一個界面,傳進(jìn)來一個int型數(shù),就可以知道用戶的意圖,通過if語句判斷,當(dāng)傳進(jìn)來的數(shù)是13或者14,我們就把對應(yīng)的房間或者客廳LED燈取反,如果傳進(jìn)來的數(shù)是0,就把所有LED燈關(guān)掉,1則是打開所有的LED燈,在開關(guān)后必須把標(biāo)志燈光狀態(tài)的標(biāo)志位更新。另外,出于環(huán)保的考慮,我們默認(rèn)設(shè)置了,當(dāng)光照值大于4000的時候,燈光會自動關(guān)閉。 窗 簾 光感監(jiān)控用戶在燈光界面可以看到當(dāng)前的光照值,以便對光感控制窗簾中的光感強(qiáng)度有更具體的概念。由于這個監(jiān)控也是不需要任何的觸發(fā)動作,當(dāng)用戶切換到此頁面是就會不斷刷新數(shù)值,因此也不提供任何界面,而刷新光感的具體動作也是通過同一個HANDLER不斷地取得在驅(qū)動中獲取的當(dāng)前光照值并上傳到上層界面。 控制窗簾在窗簾界面提供直接窗簾的界面,只需要傳遞一個整數(shù),0的時候打開,1的時候關(guān)閉,用戶可以根據(jù)當(dāng)前的光照值設(shè)定當(dāng)光照值大于某設(shè)定值時,窗簾進(jìn)行關(guān)閉動作,以及當(dāng)前光照值少于設(shè)定值時,窗簾開啟并屋內(nèi)的燈光。具體操作也是在初始化的時候就建立并分離線程,用while(1)每隔兩秒判斷一次,我們把預(yù)設(shè)光感值cflags[9]初始值設(shè)為最大值5000,低于設(shè)定值開用語句if((cflags[7]==2)amp。amp。(cflags[8]==0)amp。amp。(cflags[9]cflags[10]))進(jìn)行判斷,高于設(shè)定值關(guān)則用也是用一個類似的語句來判斷,具體是:if((cflags[7]==1)amp。amp。(cflags[8]==1)amp。amp。(cflags[9]cflags[10])),然后通過描述符操作步進(jìn)電機(jī)的動作完成用戶的指令。而直接操作窗簾的線程只在用戶層有指令傳送下來的時候存在,通過一個if語句判斷是開還是關(guān),然后直接操作驅(qū)動,最后刷新標(biāo)志位并關(guān)閉線程。需要注意的是,由于步進(jìn)電機(jī)的特性問題,而打開和關(guān)閉的動作也需要轉(zhuǎn)動一定的步數(shù),因此在短時間內(nèi)進(jìn)行打開和關(guān)閉,會導(dǎo)致步進(jìn)電機(jī)的停止動作,為了防止這一情況的發(fā)生,我們規(guī)定,用信號量去加鎖,當(dāng)完成打開或者關(guān)閉動作時,再執(zhí)行下一個動作,避免了錯誤的發(fā)生。實(shí)際操作是我們在當(dāng)接收到用戶需要操作窗簾時會新建并分離一個線程,用if語句判斷如果進(jìn)行動作與窗簾當(dāng)前狀態(tài)一致則不動作,或者當(dāng)信號量小于0時,利用sem_trywait()函數(shù)阻塞,直到上一個動作完成為止。光感控制窗簾開關(guān)原理流程圖如圖34所示。用戶設(shè)定光照值和動作是否大于/小于設(shè)定值取得當(dāng)前光照值關(guān)閉/打開窗簾圖34YNY 空調(diào)及排氣扇 空調(diào)和排氣扇的直接控制空調(diào)和排氣扇的直接控制是用戶對界面進(jìn)行操作對空調(diào)和排氣扇直接進(jìn)行直接的操作。界面?zhèn)鬟f一個整形數(shù),分別直接控制空調(diào)和排氣扇的開關(guān)。具體操作是在借口程序里面打開驅(qū)動取得表示空調(diào)的LED燈
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1