不知道大家有沒有上Amazon看過美國市場熱門的Bulb socket adapter
特點是使用APP遠端控制燈泡,非常有趣,價格也很有趣,小弟認識的台廠很多做這種產品
這一篇文章主要教大家自己做出遠端控制燈座的硬體,參考去光華商場買的零件
發票都貼出來了,老闆算我200元哦!!!還可以做兩組燈座!是不是賺到!?
但前提是需要有一顆Litkit7697,沒有屋頂的拍賣場只要550左右,加一加還是比Amazon的便宜!
!!!!!!!!以下實驗,一定要在專業人員協助操作下完成,以免有觸電風險!!!!!!!!
像小弟手上有一塊Arduino
YUN,就先試試文章在說些什麼
電路圖如下,分為上半部及下半部,Arduino輸出PWM至MOC3021讓Triac當作AC開關
這樣就能使AC Load燈泡亮或滅
其實也可以只接MOC3021和Triac這下半部,燈泡還是會亮,但會產生干擾
如果直視燈泡的話,它會亮的很奇怪,也就是閃爍一下下再亮
所以此時需要一個零點偵測,也就是電路的上半部
電路是使用Arduino外部中斷上緣觸發做Zero crossing detector
故Arduino 內的attachInterrupt()這個function就顯得重要了
故Arduino 內的attachInterrupt()這個function就顯得重要了
照著上面的電路焊接事小,上AC電才事大
小時候在學校實習課,曾被交流變壓器電到跳起來、嚇到合不攏嘴
從那個時候開始,對AC電源都非常的尊敬不敢造次
以下是最後做好的洞洞板正反面
以下是最後做好的洞洞板正反面
千萬要做好萬全準備,用絕緣膠布把所有AC會經過的地方全貼起來
不可以有一點輕浮的態度及看不起AC大神的舉動,順便接到Arduino Yun上面
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~科普時間~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
什麼!?你不知道被電到是什麼感覺,只知道被正妹放電是什麼感覺!!!
對人類而言,100至250伏特的交流電最容易致命
因為人身上的電阻使較低的電壓無法產生足夠的電流
而較高的電壓則使肌肉收縮,更高就足以把觸電者反彈出來(然而觸電者仍會被燒傷)
DC則不會重複的使肌肉收縮,故AC比DC來的危險
所以AC電沒事別亂玩,叔叔是有”被”練過的
哦哦!!! 不是啦!!! 我是說AC to DC轉換沒做好,就真的 Highway to Hell了
這樣也能解釋為什麼Bulb socket adapter賣這麼貴,因為除了CE/FCC認證外
還要有UL等電源認證,保證不對人體造成傷害
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
回到正題,接到Arduino Yun上發現跑的很順,所以也很清楚了原理,現在要接到MT7697上試試
結果…接到MT7697完全不會動!!! 完全不會動!!! 完全不會動!!!
Debug流程就不多做說明,後來才發現,MT7697不是硬體有問題
而是Arduino IDE裡面外部中斷的attachInterrupt()
function在MT7697居然掃瞄速度不夠快,這算是一個Bug了!
做一個實驗就知道在說什麼,以下是Arduino IDE for MT7697的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改為50,外部中斷還是可以很準確的跟著PWM 變化
最後把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
WHAT!? Arduino Yun是正常的,外部中斷可以跟的上PWM
這代表我們抓到第三個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;
}
}
由於本週被傳染感冒,咳到無法自拔,腦袋有如塞滿糨糊無法靈活運作
以下影片使用一般燈泡搭配電腦的UART實際操作,取名為近端遙控智障燈座
在UART內按下d,燈泡發亮,按下a,燈泡熄滅
因為MOC3020輸入位準一定要在4V以上,影片中其中一片洞洞板是自製的BJT放大器
將來會使用運算放大器以便縮小空間,例如LM386,故電路圖會如下
P.S.1.本週已進入硬體實際操作,有MT7697的朋友趕緊嘗試看看 ^ ^
P.S.2. Linkit7697 BUG LIST
P.S.3.小的先去睡上一覺, 將腦內糨糊取出,待製作完八月底為新創團隊演講的投影片再把APP操作補上
P.S.4.如果沒工作,我可不可以為發哥服務,當QA小弟?(Quality Assurance)
加入我們吧!
沒有留言:
張貼留言