2017年8月2日 星期三

使用Linkit 7697打造遠端遙控智能燈座

不知道大家有沒有上Amazon看過美國市場熱門的Bulb socket adapter

這裡貼兩組讓大家研究研究  Emberlight與 iDevices

特點是使用APP遠端控制燈泡,非常有趣,價格也很有趣,小弟認識的台廠很多做這種產品

這一篇文章主要教大家自己做出遠端控制燈座的硬體,參考去光華商場買的零件

發票都貼出來了,老闆算我200元哦!!!還可以做兩組燈座!是不是賺到!? 

但前提是需要有一顆Litkit7697,沒有屋頂的拍賣場只要550左右,加一加還是比Amazon的便宜!

!!!!!!!!以下實驗,一定要在專業人員協助操作下完成,以免有觸電風險!!!!!!!!

文章參考網路上的Arduino AC dimmer修改成MT7697 AC dimmer

像小弟手上有一塊Arduino YUN,就先試試文章在說些什麼

電路圖如下,分為上半部及下半部,Arduino輸出PWMMOC3021Triac當作AC開關

這樣就能使AC Load燈泡亮或滅

其實也可以只接MOC3021Triac這下半部,燈泡還是會亮,但會產生干擾

如果直視燈泡的話,它會亮的很奇怪,也就是閃爍一下下再亮

所以此時需要一個零點偵測,也就是電路的上半部

關於Zero crossing detector請參閱維基百科

電路是使用Arduino外部中斷上緣觸發做Zero crossing detector

Arduino 內的attachInterrupt()這個function就顯得重要了

照著上面的電路焊接事小,上AC電才事大

小時候在學校實習課,曾被交流變壓器電到跳起來、嚇到合不攏嘴

從那個時候開始,對AC電源都非常的尊敬不敢造次

以下是最後做好的洞洞板正反面
 

千萬要做好萬全準備,用絕緣膠布把所有AC會經過的地方全貼起來

不可以有一點輕浮的態度及看不起AC大神的舉動,順便接到Arduino Yun上面

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~科普時間~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

什麼!?你不知道被電到是什麼感覺,只知道被正妹放電是什麼感覺!!!

對人類而言,100至250伏特的交流電最容易致命

因為人身上的電阻使較低的電壓無法產生足夠的電流

而較高的電壓則使肌肉收縮,更高就足以把觸電者反彈出來(然而觸電者仍會被燒傷)

快打旋風裡面的人物被布蘭卡電到離不開,代表布蘭卡應是帶AC

DC則不會重複的使肌肉收縮,故ACDC來的危險

所以AC電沒事別亂玩,叔叔是有練過的

AC/DC代表什麼

代表著Hard Rock經典 Highway to Hell

哦哦!!! 不是啦!!! 我是說AC to DC轉換沒做好,就真的  Highway to Hell

這樣也能解釋為什麼Bulb socket adapter賣這麼貴,因為除了CE/FCC認證外

還要有UL等電源認證,保證不對人體造成傷害
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

回到正題,接到Arduino Yun上發現跑的很順,所以也很清楚了原理,現在要接到MT7697上試試

結果接到MT7697完全不會動!!! 完全不會動!!! 完全不會動!!!

Debug流程就不多做說明,後來才發現,MT7697不是硬體有問題

而是Arduino IDE裡面外部中斷的attachInterrupt() functionMT7697居然掃瞄速度不夠快,這算是一個Bug!

做一個實驗就知道在說什麼,以下是Arduino IDE for MT7697code

可以看到開了一個PWM(pin9)output LEDpin14,而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 上升下降改變輸出的波形

delay500時,外部中斷可以很準確的跟著PWM 一起變化

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

最後把delay改為

!!! 花黑噴!!!

把同樣delay5放到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 

這代表我們抓到第三個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輸出pwm0, low的意思
     flag2=0;
  }
}

由於本週被傳染感冒,咳到無法自拔,腦袋有如塞滿糨糊無法靈活運作

故沒有買調光式燈泡以及寫APP(這裡要感謝韌體之神豐哥提供支援)

以下影片使用一般燈泡搭配電腦的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)


加入我們吧!




沒有留言:

張貼留言

FB設定搶先看的方式

設定搶先看的兩種方式 A1. 先到我家的日常粉絲團按下 …( 紅框處 ) A2. 按下追蹤中 ( 紅框處 ) A3. 按下搶先看 ( 紅框處 ) A4. 完成!!! 另一種方式 ...