楊靜
摘要
運(yùn)用Arduino和AppInventor2開發(fā)空氣溫濕度檢測(cè)系統(tǒng),將傳統(tǒng)交互設(shè)計(jì)教學(xué)中的界面與硬件相聯(lián)系,能夠更好的理解交互設(shè)計(jì)與如何增強(qiáng)用戶體驗(yàn)。該系統(tǒng)主要由溫濕度傳感器、Arduino UNO開發(fā)板、藍(lán)牙通信模塊、手機(jī)App等構(gòu)成,具有結(jié)構(gòu)簡(jiǎn)單、成本低廉、綜合能力要求較高的特點(diǎn),適合作為項(xiàng)目教學(xué)案例應(yīng)用于交互設(shè)計(jì)專業(yè)和創(chuàng)客教育中。
【關(guān)鍵詞】Arduino App Inventor2 溫濕度藍(lán)牙通信 交互設(shè)計(jì)
智能家居作為物聯(lián)技術(shù)在居住環(huán)境中的綜合體現(xiàn),現(xiàn)今己被越來越多的中國消費(fèi)者所接受。環(huán)境監(jiān)測(cè)作為其中的一項(xiàng)重要組成部分,通常會(huì)通過各種傳感器對(duì)空氣溫度、濕度、燃?xì)鉂舛?、火焰探測(cè)等項(xiàng)目進(jìn)行監(jiān)測(cè)。其中空氣溫濕度的智能檢測(cè)常作為附加功能應(yīng)用于空調(diào)、加濕器、除濕器等家電,需要啟動(dòng)體量較大的家電才能實(shí)現(xiàn)檢測(cè),成本較高;而傳統(tǒng)的簡(jiǎn)易物理溫濕度測(cè)量?jī)x不具備手機(jī)實(shí)時(shí)顯示的功能,便捷性較低。本文設(shè)計(jì)提出的基于Arduino和APP Inventor2的空氣溫濕度檢測(cè)系統(tǒng),具有通過手機(jī)APP遠(yuǎn)程控制并實(shí)時(shí)顯示空氣溫濕度訊息的功能,具備系統(tǒng)結(jié)構(gòu)簡(jiǎn)易、硬件連接簡(jiǎn)單、軟件制作便捷、APP軟件界面用戶體驗(yàn)順暢、成本較低的優(yōu)點(diǎn),十分適合作為項(xiàng)目教學(xué)案例應(yīng)用于交互設(shè)計(jì)專業(yè)和創(chuàng)客教育中的編程教育中。
1 系統(tǒng)結(jié)構(gòu)
本系統(tǒng)由檢測(cè)對(duì)象、溫濕度傳感器、Arduino開發(fā)板、無線通信模塊、手機(jī)川,P等部分構(gòu)成。檢測(cè)對(duì)象為空氣溫濕度信息;傳感器把在空氣中獲取的溫濕度信息轉(zhuǎn)變?yōu)殡娦盘?hào)輸出至Arduino開發(fā)板;開發(fā)板首先將接收到的空氣溫濕度信息進(jìn)行數(shù)據(jù)處理,通過比特與數(shù)值的換算公式,輸出可直接讀取的溫濕度數(shù)字和符號(hào)信息,例如“32℃78%”;然后開發(fā)板通過無線通信模塊與控制手機(jī)相連接,手機(jī)APP接收并顯示開發(fā)板輸出的溫濕度信息。
2 Arduino的硬件連接與編程
本文設(shè)計(jì)中使用的電路硬件有ArduinoUNO板、DHT11溫濕度傳感器以及HC-06無線藍(lán)牙通信模塊。Arduino是一個(gè)集合開發(fā)板硬件、Arduino IDE程序開發(fā)環(huán)境、Arduino編程語言,三個(gè)部分的開源工作平臺(tái),擁有適合編程零基礎(chǔ)的學(xué)生學(xué)習(xí)的編程語言和強(qiáng)大的控制器,因其跨平臺(tái)、開源性、易學(xué)性、靈活性、可擴(kuò)展、硬件成本低等特點(diǎn),活躍于國內(nèi)外的交互設(shè)計(jì)教育中。Arduino UNO是Arduino硬件家族中最為適宜初學(xué)者使用的開發(fā)板,主要由處理器、電源接口、擴(kuò)展插槽,三大部分組成。DHT11溫濕度傳感器是一款可輸出數(shù)字信號(hào)的溫濕度復(fù)合傳感器,穩(wěn)定性較強(qiáng),它的濕度精度為+-5%RH,量程為20%-90%,溫度精度為+-2℃,量程為0℃-50℃。由于本文設(shè)計(jì)中使用的APP hiventor2平臺(tái)支持的無線通信連接方式僅支持藍(lán)牙,所以選擇HC-06作為通信硬件。HC-06藍(lán)牙模塊是一個(gè)從機(jī)模式無線藍(lán)牙數(shù)據(jù)傳輸器件,具有低耗能、低成本、傳輸速率高等優(yōu)點(diǎn),通電后可自動(dòng)進(jìn)入AT模式,快速閃爍紅色小燈,有藍(lán)牙設(shè)備接入時(shí)紅燈一直亮,本設(shè)計(jì)中用于接收和傳遞來自Arduino和手機(jī)APP的指令。
DHT11溫濕度傳感器與Arduino UNO的接線方式為:VCC接Arduino的5V;GND接Arduino的GND;NC為不連接空腳;DATA接Arduino的數(shù)字I/O腳位2。
HC-06藍(lán)牙模塊與Arduino UNO的接線方式為:VCC接Arduino的5V;GND接Arduino的GND;TXD發(fā)送端接Afduino的數(shù)字I/O腳位0(RN);RXD接收端接Arduino的數(shù)字I/O腳位1(TX)。
本設(shè)計(jì)中有關(guān)于Arduino的編程使用Arduino IDE進(jìn)行開發(fā),用于程序驗(yàn)證、上傳、調(diào)試和下載的操作,可在電腦端的串口監(jiān)視器中讀取實(shí)時(shí)采集到的空氣溫濕度數(shù)值。程序主要由定義變量及接口名稱、設(shè)置通信波特率、定義串口指令、獲取數(shù)據(jù)、校對(duì)數(shù)據(jù)、處理數(shù)據(jù)、空氣溫濕度數(shù)據(jù)顯示等部分構(gòu)成,在串口監(jiān)視器中輸入“A”時(shí)開始檢測(cè)溫濕度,輸入“B”時(shí)停止檢測(cè),每隔1秒向串口監(jiān)視器發(fā)送一次溫濕度數(shù)據(jù),程序代碼如下所示:
#include
#define pin 2
int temp;//溫度
int hurni;//濕度
int tol;//校對(duì)碼
int j;
unsigned int loopCnt;
int chr[40]={0};//創(chuàng)建數(shù)字?jǐn)?shù)組存儲(chǔ)數(shù)據(jù)
unsigned long time;
char flag_on=0;
void setupo(){Serial.begin(9600);//設(shè)置波特率為9600}
void loop()
{
while(Scrial.available()>0){
char c=Serial.read();
if(c=='A'){flag_on=1;//設(shè)置開}
else if(c=='B'){flag_on=0://設(shè)置關(guān)}
}
if(flag_on)//設(shè)置溫濕度檢測(cè){
bgn:
delay(2000);
pinMode(pin,OUTPUT);//設(shè)置2號(hào)接口為輸出模式
digitalWrite(pin,LOW);//輸出低電平
delay(20);
digitalWrite(pin,HIGH);//輸出高電平
delayMicroseconds(40);
digitalWrite(pin,LOW);
piliMode(pin,INPUT);//設(shè)置2號(hào)接口為輸入模式
//高電平響應(yīng)信號(hào)
loopCnt=10000;
while(digitaiRead(pin)!=HIGH){
if(loopCnt--==0){
//若不返回高電平,輸出提示從新開始
Scrial.println("HIGH");
goto bgn;
}
}
//低電平響應(yīng)信號(hào)
loopCnt-30000;
while(digitalRead(pin)!=LOW){
if(loopCnt--==0){
//若不返回低電平,輸出提示從新開始
Serial.println("LOW");
goto bgn;
}
}
for(int i=0;i<40;i++){
while(digitaiRead(pin)==LOW){}
time=micros();
while(digitaiRead(pin)==HIGH){}
if(micros()-time>50){chr[i]=1;}
else{chr[i]=0;}
}
//將濕度的8位bit轉(zhuǎn)換為數(shù)值
humi=chr[0]*128+chr[1]*64+chr[2]*32+chr[3]*16+chr[4]*8+chr[5]*4+chr[6]*2+chr[7];
//將溫度的9位的bit轉(zhuǎn)換為數(shù)值
temp=chr[16]*128+chr[17]*64+chr[18]*32+chr[19]*16+chr[20]*8+chr[2]]*4+chr[22]*2+chr[23];
//將校對(duì)碼的8位的bit轉(zhuǎn)換為數(shù)值
tol=chr[32]*128+chr[33]*64+chr[34]*32+chr[35]*16+chr[36]*8+chr[37]*4+chr[38]*2+chr[39];
//輸出溫度和濕度
Serial.print(temp);
Serial.print("°C");
Serial.print(humi);
Serial.print("%");
delay(1000);
}
}
3 手機(jī)APP軟件設(shè)計(jì)
本文設(shè)計(jì)中采用APP Inventor2作為制作手機(jī)APP軟件的平臺(tái)。APP Inventor2是一個(gè)最初由谷歌公司發(fā)布,后移交給MIT進(jìn)行維護(hù)的圖形可視化安卓手機(jī)應(yīng)用制作平臺(tái),廣泛應(yīng)用于非計(jì)算機(jī)專業(yè)的手機(jī)應(yīng)用制作中與樂高機(jī)器人創(chuàng)客活動(dòng)中。該平臺(tái)的軟件設(shè)計(jì)工作區(qū)由組件設(shè)計(jì)和邏輯設(shè)計(jì)兩大部分組成,用戶可通過拖拽模塊進(jìn)行積木式的拼接實(shí)現(xiàn)設(shè)計(jì)與編程,還可使用平臺(tái)附帶的AI伴侶或安卓模擬器進(jìn)行實(shí)時(shí)調(diào)試,極大程度上的降低了學(xué)生的學(xué)習(xí)成本,提高了編程工作者的工作效率。據(jù)研究公司Gartner于2018年2月分享的數(shù)據(jù)表明,2017年全球銷售的智能手機(jī)中Android占據(jù)了86%的份額,本文設(shè)計(jì)中僅設(shè)計(jì)安卓應(yīng)用符合手機(jī)應(yīng)用市場(chǎng)趨勢(shì)。
手機(jī)App客戶端功能包括選擇藍(lán)牙設(shè)備、連接/斷開藍(lán)牙、開啟\關(guān)閉空氣溫度和濕度檢測(cè)、顯示溫濕度的數(shù)值4個(gè)功能模塊。在組件設(shè)計(jì)部分中,需要使用組件面板中的按鈕、列表選擇框、標(biāo)簽、對(duì)話框、圖像、水平布局、垂直布局、藍(lán)牙客戶端、計(jì)時(shí)器8種組件,組件列表與實(shí)際手機(jī)App初始化界面如圖1所示,“開關(guān)關(guān)”組件屬性為不顯示,右側(cè)初始化界面中的自適應(yīng)手機(jī)界面效果可通過調(diào)整組件列表中水平與垂直布局的組件屬性實(shí)現(xiàn)。
邏輯設(shè)計(jì)主要分為5個(gè)部分軟件初始化、藍(lán)牙設(shè)備的選擇、藍(lán)牙設(shè)備的連接、設(shè)置按鍵、數(shù)值信息接收。(圖2一圖5)為增強(qiáng)用戶體驗(yàn),在整個(gè)用戶操作過程中增加了多個(gè)狀態(tài)與提示的消息彈出框的設(shè)計(jì),并設(shè)置界面中的按鈕按照操作步驟的順序啟用,啟用狀態(tài)下文字呈現(xiàn)黑色。按鈕填充色為深灰色,禁用狀態(tài)下文字與按鈕呈淺灰色,使界面視覺為界面操作順序進(jìn)行正確的引導(dǎo)。
(1)軟件初始化。彈出一個(gè)消息框顯示“歡迎使用!”,界面中僅“選擇設(shè)備”列表選擇框可被點(diǎn)擊,其他按鍵皆不可用,溫濕度數(shù)值無顯示。
(2)藍(lán)牙設(shè)備的選擇。點(diǎn)擊“選擇設(shè)備”列表選擇框,選擇藍(lán)牙設(shè)備,彈出“請(qǐng)確認(rèn)手機(jī)己和對(duì)方配對(duì)!”的消息框,“連接”按鈕啟用。在實(shí)際手機(jī)應(yīng)用中操作時(shí),首先需要完成手機(jī)藍(lán)牙與HC-06藍(lán)牙之間的配對(duì),待配對(duì)成功后,方可利用平臺(tái)的藍(lán)牙客戶端組件進(jìn)行藍(lán)牙設(shè)備的選擇。
(3)藍(lán)牙設(shè)備的連接。當(dāng)“連接”按鈕被點(diǎn)擊時(shí),如果藍(lán)牙為非連接狀態(tài),消息框提示“藍(lán)牙連接成功”,“連接”按鈕文本變?yōu)椤皵嚅_連接”,啟用兩個(gè)開關(guān)按鈕,關(guān)閉按鈕不顯示;如果藍(lán)牙為連接狀態(tài),消息框提示“藍(lán)牙己斷開”,“連接”按鈕文本變?yōu)椤罢?qǐng)連接”,禁用兩個(gè)開關(guān)按鈕和計(jì)時(shí)器。
(4)設(shè)置按鍵。點(diǎn)擊“開關(guān)開”,調(diào)用藍(lán)牙客戶端組件發(fā)送文本"A",啟用計(jì)時(shí)器,“開關(guān)開”隱藏,“開關(guān)關(guān)”顯示,Arduino端開始檢測(cè)空氣溫濕度;點(diǎn)擊“開關(guān)關(guān)”,調(diào)用藍(lán)牙客戶端組件發(fā)送文本“B”,關(guān)閉計(jì)時(shí)器,“開關(guān)關(guān)”隱藏,“開關(guān)關(guān)”顯示,Arduino端中止檢測(cè)溫濕度。
(5)數(shù)值信息接收。啟用計(jì)時(shí)器時(shí),每100毫秒調(diào)用藍(lán)牙客戶端組件接收Arduino端發(fā)送的溫濕度數(shù)值,在“溫濕度數(shù)值”標(biāo)簽處進(jìn)行顯示。
4 結(jié)語
運(yùn)用Arduino和APP Inventor2開發(fā)空氣溫濕度檢測(cè)系統(tǒng),將傳統(tǒng)交互設(shè)計(jì)教學(xué)中的界面與硬件相聯(lián)系,能夠幫助學(xué)生更好的理解交互設(shè)計(jì)與如何增強(qiáng)用戶體驗(yàn),提升學(xué)生綜合思考問題的能力。實(shí)際教學(xué)中可依據(jù)該項(xiàng)目引導(dǎo)學(xué)生進(jìn)行溫濕度條件提示、溫度或濕度的單一應(yīng)用、與其它電路器件組合等方向的編程與界面的設(shè)計(jì)探究。
參考文獻(xiàn)
[1]王登宏,歷佳男,賀雪輝等,基于Arduino的手機(jī)同步顯示溫濕度檢測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].工業(yè)控制計(jì)算機(jī),2016,29(07):43-49.
[2]張展瑋,唐細(xì)永,葉展鵬,申耀武.基于Arduino控制的移動(dòng)平臺(tái)設(shè)計(jì)[J].無線互聯(lián)科技,2017(02):48-49+57.
[3]劉彥,王倩,王可.Arduino單片機(jī)在產(chǎn)品交互原型設(shè)計(jì)課程中的實(shí)驗(yàn)教學(xué)實(shí)踐[J].藝術(shù)科技,2016(12):1-3.