作者:Ches拔
不知道大家有沒有上 Amazon 看過美國市場熱門的Bulb socket adapter?這裡提供兩組讓大家研究研究 — Emberlight 與 iDevices。
其特點非常有趣,是使用 APP 遠端控制燈泡,我認識的台廠很多做這種產品,這一篇文章主要教大家自己做出遠端控制燈座的硬體;參考我在光華商場買的零件,價格也相當有趣,瞧瞧發票,老闆只算我200元哦!還可以做兩組燈座,是不是感覺賺到?

發票與購買到的材料
但前提是需要有一顆 LinkIt 7697,沒有屋頂的拍賣場只賣550元左右,加一加還是比 Amazon 的便宜。
以下實驗,一定要在專業人員協助操作下完成,以免有觸電風險
可以參考網路上的文章,將文章中必須使用「Arduino AC dimmer」之處,改成使用「LinkIt 7697 AC dimmer」。正巧我手上有一塊Arduino YUN,現在就先來試試文章提供的做法吧!
電路圖如下,分為上半部及下半部,Arduino 輸出 PWM 至 MOC3021 讓 Triac 當作 AC 開關,這樣就能使 AC Load 燈泡亮或滅。

電路圖
其實也可以只接 MOC3021 和 TRIAC 下半部,然而,雖然燈泡還是會亮,但會產生干擾。如果直視燈泡的話,它會亮的很奇怪,也就是閃爍一下下再亮,所以此時需要一個零點偵測,也就是電路的上半部。關於 Zero crossing detector 請參閱維基百科。
電路是使用Arduino外部中斷上緣觸發做 Zero crossing detector,故 Arduino 內的 attachInterrupt() 這個 function 就顯得重要了。照著上面的電路焊接事小,上 AC 電才事大,小時候在學校實習課,曾被交流變壓器電到跳起來,還嚇得「合不攏嘴」,從那個時候開始,對AC電源都非常尊敬不敢造次。
以下是最後做好的洞洞板正反面:

洞洞板正面

洞洞板反面
千萬要做好萬全準備,用絕緣膠布把所有AC會經過的地方全貼起來,不可以有一點輕浮的態度及看不起AC大神的舉動,順便接到 Arduino Yun 上面。

用絕緣膠布把所有AC會經過的地方全貼起來
電流科普時間
什麼?你不知道被電到是什麼感覺,只知道被正妹放電到的感覺?!那你更不能錯過科普時間。
對人類而言,100至250伏特的交流電最容易致命,因為人身上的電阻,會使較低的電壓無法產生足夠的電流,而較高的電壓則使肌肉收縮的程度足以把觸電者反彈出來(但觸電者仍會被燒傷)。舉個例子:快打旋風裡面的人物被布蘭卡電到離不開,代表布蘭卡應是帶AC電。

布蘭卡
DC不會重複地使肌肉收縮,故AC比DC來的危險,所以AC電沒事別亂玩,叔叔是有「被」練過的。
那AC/DC代表什麼?代表著 Hard Rock 經典歌曲 Highway to Hell⋯⋯不是啦,我是說 AC to DC 轉換沒做好,就真的 Highway to Hell 了。這樣也能解釋為什麼 Bulb socket adapter 賣這麼貴,因為除了CE/FCC認證外,還要有UL等電源認證,保證不對人體造成傷害。
使用LinkIt 7697實測
回到正題,接到 Arduino Yun 上發現跑得很順,也清楚了解原理,現在要接到 LinkIt 7697 上試試,結果⋯⋯接到 LinkIt 7697 完全不會動!完全不會動!!完全不會動!!!
Debug 流程就不多做說明,後來才發現,LinkIt 7697 不是硬體有問題,而是 Arduino IDE 裡面外部中斷的 attachInterrupt() function 在 LinkIt 7697 居然掃瞄速度不夠快,這算是一個 Bug 了!
做一個實驗就能知道我在說什麼,以下是 Arduino IDE for LinkIt 7697 的 code,可以看到開了一個 PWM(pin9),output LED 為 pin14,而 attachInterrupt() 使用 pin2 當觸發,注意紅字的 delay():
int pinLed = 14;
int PWM = 9; // PWM pin
volatile int state = LOW;
void setup()
{
pinMode(pinLed, OUTPUT);
attachInterrupt(2, interrupt, CHANGE);
Serial.begin(9600);
}
void loop()
{
analogWrite(PWM, 255); // PWM最大值
digitalWrite(pinLed, state);
delay (500);
analogWrite(PWM, 0); // PWM最小值
digitalWrite(pinLed, state);
delay (500);
}
void interrupt()
{
state = !state;
Serial.println(“Interrupt”);
}
首先我們將 delay 設為500,上面黃色波形是 pin14 PWM 輸出,下面綠色波形是 pin2 跟著 PWM 上升下降改變輸出的波形。在 delay 為500時,外部中斷可以很準確的跟著 PWM 一起變化:

delay 為500時
接著將 delay 改為50,外部中斷還是可以很準確的跟著 PWM 變化:

將 delay 改為50
最後把 delay 改為5:

把 delay 改為5
咦?花黑噴?把同樣 delay 為5放到 Arduino Yun 上面,再修正一點點 code 試試:
int pinLed = 13;
int PWM = 9; // PWM pin
volatile int state = LOW;
void setup()
{
pinMode(pinLed, OUTPUT);
attachInterrupt(0, interrupt, CHANGE);
Serial.begin(9600);
}
void loop()
{
analogWrite(PWM, 255); // PWM最大值
digitalWrite(pinLed, state);
delay (5);
analogWrite(PWM, 0); // PWM最小值
digitalWrite(pinLed, state);
delay (5);
}
void interrupt()
{
state = !state;
Serial.println(“Interrupt”);
}
WHAT!? Arduino Yun是正常的,外部中斷可以跟的上PWM:

把同樣 delay 為5放到 Arduino Yun 上面,再修正一點點 code,此時抓到第三個LinkIt 7697的Bug
這代表我們抓到第三個LinkIt 7697的Bug!在漫畫裡集滿7顆龍珠能夠許願,目前集滿3個Bug能不能請求FAE支援(開玩笑的)好吧!既然不能用 attachInterrupt(),那我們就改用別的方法。
修正後的code如下:
int PWM = 14; // PWM pin
int flag1=0,flag2=0;
void setup(){
Serial.begin(9600);
pinMode(2, INPUT);
Serial.println(“Hello”);
}
void loop(){
int switchStatus = digitalRead(2);
String s = “”;
while (Serial.available()) {
char c = (char) Serial.read();
if(c!=’\n’)
{
s += c;
}
delay(1);
}
if(s==”d”){
flag1=1;
Serial.println(s);
}
if(s==”a”){
flag2=1;
Serial.println(s);
}
if(switchStatus==HIGH && flag1==1)
{
Serial.println(“ddd”);
analogWrite(PWM, 255); // 設定pin14輸出pwm,最大值為255
flag1=0;
}
if(switchStatus==HIGH && flag2==1)
{ Serial.println(“aaa”);
analogWrite(PWM, 0); // 設定pin14輸出pwm為0, low的意思
flag2=0;
}
}
由於本週被傳染感冒,咳到無法自拔,腦袋有如塞滿糨糊無法靈活運作,故沒有買調光式燈泡以及寫APP(這裡特別感謝韌體之神豐哥提供支援)。
以下影片使用一般燈泡搭配電腦的UART實際操作,取名為「近端遙控智障燈座」。在UART內按下d,燈泡發亮;按下a,燈泡熄滅。
因為MOC3020輸入位準一定要在4V以上,影片中其中一片洞洞板是自製的BJT放大器,將來會使用運算放大器以便縮小空間,例如LM386。電路圖如下:

電路圖
本次測試已進入硬體實際操作階段,有 LinkIt 7697 的朋友趕緊嘗試看看吧!
另外總結一連串測試下來的 LinkIt 7697 BUG LIST 給各位參考使用:
1、7697 Arduino IDE的WiFi設定,無法AP/Station轉換
2、 LinkIt 7697 Arduino IDE內的BLE Characteristic最多只能4個,再多就當機
3、 LinkIt 7697 Arduino IDE內的attachInterrupt(),掃瞄速度不夠快,會直接罷工,也就是本篇
小結
小的先去睡上一覺,將腦內糨糊取出,待製作完八月底為新創團隊演講的投影片再把APP操作補上。另外想偷偷問下⋯⋯如果沒工作,我可不可以為發哥服務,當QA(Quality Assurance)小弟啊?
(本文同步發表於作者部落格「物聯網學習筆記1」,文章連結;責任編輯:林佳盈)
◎加入我們的Line,獲得更多及時文章更新&活動資訊→
- 【育教於樂】我家日常的康達效應 - 2019/04/25
- 【Tutorial】一起走進 ROS 的世界吧(5) - 語音辨識篇 - 2018/12/26
- 【Tutorial】一起走進 ROS 的世界吧(4) — 視覺辨識篇 - 2018/11/14
訂閱MakerPRO知識充電報
與40000位開發者一同掌握科技創新的技術資訊!