「未來家庭走向智能化,以App就能讓手機、平板電腦化身為遙控器,無線控制家中的電視、電燈、冷氣、窗簾等設備開關,讓居家生活更智慧與便利。」…
(歐吉尚覺得此外還可以程式化,結合Big Data分析使用者行為反應,以更貼近使用者習性)
(歐吉尚覺得此外還可以程式化,結合Big Data分析使用者行為反應,以更貼近使用者習性)
以上類似的台詞或許常被Startup使用在一些如Kickstarter的募資平台上,宣傳他們的智能家庭設備的Idea,期望能募得資金並將之商品化。
但,世界真的是又平且運轉的極高速呀! 成千上萬的感測原件與微控器的普及、Maker成為顯學、再加上中國大陸的崛起,事實上世界各地很多相同的Idea(有些或許也能在募資平台上看得到),很可能都已經商品化了! 例如,前一陣子在Kickstarter上募資的「App遙控智能插座」概念性產品,隔沒多久淘寶就已經在賣了! 平均價位在200~500人民幣。
前一陣子有顆小夜燈被小朋友玩壞掉,剛好這顆小夜燈是吃市電(110V, AC),有個硬體開關而且LED還可以用!
想成為Maker,當然逮到這種天賜的良機,就來改造屬於我個人的「App遙控智能插座」囉! 為了這次的Project還跑到電子材料行買了一堆「給西」,花了一千四百塊(痛),比整個Arduino與藍芽模組在內的完成品還貴(就為了焊那兩條電線)。還有,想當Maker的衝動是無價的!
Arduino的輸出電流約40 mA,因此想要切換較大電流/電壓的家電設備(例如燈泡、電視、音響或風扇)等開關時,最簡單的辦法是使用繼電器(Relay)。關於繼電器的工作原理與種類,大家可以自行上網Google或在Wiki上找到。
Source: Wiki, 繼電器的工作原理
透過繼電器,我們便可以使用Arduino的小電壓/電流(~5V/40m A)來控制大電壓/電流(~110V/10A )的家電產品。我用的是單路10A (工作電壓範圍可至250V)的繼電器,大約50元台幣。
改造前先將它拆開來研究一下線路佈局,跟猜想的一樣,一顆按鍵開關(Switch Button)、很簡單的限流電阻加二極體與電容形成的穩壓電路。按鍵式小夜燈內部結構示意圖,我簡單地畫了一下。
用電表確認按鍵開關(Switch Button)的接腳之後,用線材把它焊接出來。(我手藝不巧,需要先用膠帶固定)
銲接完成,先將LED開關接到繼電器模組(取帶原本的硬體開關),再將繼電器模組接回Arduino板。從這張圖可以看出來,從前兩回專案開始,程式(BTCom)與電路我完全延用也沒拆。(非常環保,重複利用)
接線完成並將程式燒錄至Arduino後,我們將板子的USB電源移除改以9V(DC)電池取代。
請注意! 繼電器另一頭,我們接的是市電(110V, AC),因此操作時請務必非常小心! 尤其是Arduino板子跟繼電器模組的板子底部本身都沒有絕緣,手指頭觸摸很容易會不小心將任意兩銲接點給導通了! (我用包裝泡棉隔離)
請注意! 繼電器另一頭,我們接的是市電(110V, AC),因此操作時請務必非常小心! 尤其是Arduino板子跟繼電器模組的板子底部本身都沒有絕緣,手指頭觸摸很容易會不小心將任意兩銲接點給導通了! (我用包裝泡棉隔離)
當整個Arduino+DC電源測試完成之後,我隨手到廚房撿一個大小差不多,資源回收的盒子將整個系統包起來。
再次提醒! 繼電器另一頭,我們接的是市電(110V, AC)! 尤其是Arduino板子跟繼電器模組的板子底部本身都沒有絕緣,組裝時請勿用手指頭觸摸!!
再次提醒! 繼電器另一頭,我們接的是市電(110V, AC)! 尤其是Arduino板子跟繼電器模組的板子底部本身都沒有絕緣,組裝時請勿用手指頭觸摸!!
完工! 很醜嗎? 沒關係,我們印一個殼給它,就叫「智慧家電控制中心」!
(Maker有這麼偷懶的嗎? 或許該用3D印表機印個Fashion的外殼吧?)
看到這兒,可能有人覺得毆吉尚鬼扯蛋。但真的沒有,因為此時Arduino還有好多數位與類比接腳還沒使用到,可以用來接溫濕度感測器與RTC時鐘模組並用LCD顯示。它真的非常容易變成擴充成為家用控制中心,追加成本不會超過40塊人民幣! 課本有的,我就不寫了!…
BOM表 (這次我們把虛擬通路也一起放進來Survey)
項目(不含運費)
|
台灣(台幣)
|
淘寶(人民幣)
|
Arduino UNO R3
|
290~450
|
12~40
|
Bluetooth HC-06
|
210~350
|
17~30
|
單路
|
50~180
|
3.5~12
|
4路
|
180~~390
|
13~24
|
溫濕度感測器
|
100~220
|
5~10
|
LCD1602(I
|
90~190
|
7~20
|
RTC時鐘模組
|
90~300
|
7~20
|
MIT AI2 Companion (Android)
|
Free
| |
MIT App Inventor 2 (Windows)
|
Free
|
Android程式規劃
Android手機程式仍然跟上一回一樣使用BTCom,程式碼不用變(非常環保,重複利用)。
如果懶得寫程式可以使用下面QR Code下載,若有Bug煩請告知,感恩!
不過這支App會被Android手機歸屬於來路不明的程式,安裝前請先將安全性設為允許不明來源的安裝,請放心! 不會收集用戶端資訊的! 安裝完成請記得取消允許不明來源的安裝,以免產生安全漏洞。
Arduino Uno端系統與程式規劃
繼上一回BTCom Project--用Android手機傳送命令(簡訊)到Arduino板子後。這一回,我們示範用Android手機App,透過藍芽遠程控制電源開關。我們可以「安全、便宜又簡單」地實做一個屬於自己的「App遠程遙控智慧家電控制中心」,其概念與系統接線如下如所示。
Arduino程式的部份,我們沿用BTCom App的藍芽控制,因此保留對應TV的控制處理繼電器,來開關遠端的插座電源。設計者當然也可以重新另取一個名子。
Arduino BTCom範例程式:
#include <SoftwareSerial.h>
#define MAX_BTCMDLEN 128
#define BTSW_TV 7 // pin7 當 BlueTooth Switch for TV
//#define BTSW_Sound 6 // pin6 當 BlueTooth Switch for Sound
//#define BTSW_Room 5 // pin5 當 BlueTooth Switch for Room
//#define BTSW_Fan 4 // pin4 當 BlueTooth Switch for Fan
#define BTSW_Rely 12 // 繼電器
// 建立一個軟體模擬的序列port
SoftwareSerial BTSerial(10,11); // HC-06/TX-->PIN10(Arduino/RX), HC-06/RX-->PIN11(Arduino/TX)
byte btCmdBuff[MAX_BTCMDLEN]; // up to 128 bytes BT command received from the Android system
int btCmdLen = 0; // received BT command length
void setup() {
//Serial.begin(9600); // serial port for debugging
BTSerial.begin(9600); // 建立藍芽軟體串列埠
pinMode(BTSW_TV,OUTPUT); // 設定電視開關
pinMode(BTSW_Rely,OUTPUT); // 設定繼電器
digitalWrite(BTSW_TV,LOW);
digitalWrite(BTSW_Rely,LOW);
}
void loop() {
listenBTCmd();
//showBTCmd(); // for debugging
executeBTCmd();
}
void executeBTCmd() {
char cmd[MAX_BTCMDLEN];
if ( btCmdLen>0 ) {
sprintf(cmd,"%s",btCmdBuff);
//Serial.println(cmd);
// 我們沿用對TV的藍芽控制處理繼電器
if ( strcmp("tv,on",cmd)==0 ) {
digitalWrite(BTSW_TV,HIGH);
digitalWrite(BTSW_Rely,HIGH); // 開啟插座電源
}
if ( strcmp("tv,off",cmd)==0 ) {
digitalWrite(BTSW_TV,LOW);
digitalWrite(BTSW_Rely,LOW); // 關閉插座電源
}
}
}
void listenBTCmd() {
char tmp;
btCmdLen = 0;
memset(btCmdBuff,0,MAX_BTCMDLEN);
while( BTSerial.available()>0 ) {
if( (tmp=BTSerial.read())=='O' ){
btCmdLen = 0;
}
btCmdBuff[(btCmdLen++)%MAX_BTCMDLEN] = tmp;
}
}
void showBTCmd() {
char cmd[MAX_BTCMDLEN];
if ( btCmdLen>0 ) {
sprintf(cmd,"%s",btCmdBuff);
Serial.println(cmd);
}
|
下次我們開始「自做」飛行器吧! 正式跨入小學堂!