Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Arduino Yun 物聯網 Lesson 3

5,868 views

Published on

認識DHT11數位溫溼度感測器。
將此資料傳送至Google Docs試算表
自動寄送電子郵件

Published in: Devices & Hardware
  • Hey guys! Who wants to chat with me? More photos with me here 👉 http://www.bit.ly/katekoxx
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Arduino Yun 物聯網 Lesson 3

  1. 1. Arduino Yun物聯網應用 Lesson 3 RestfulAPI 控制繼電器 Web 介面 發布 Facebook 動態
  2. 2. 本日進度 • Arduino Yún 接上繼電器,並透過Yún REST API來使用網路瀏覽器遙控此繼電器。 • 使用類比電流感測器來測接接在繼電器的 設備電力消耗量,並計算電力即時消耗量。 • 將此資料傳送至Google Docs試算表以方便 從任何瀏覽器或是手機應用程式來遠端存 取。 • 製作簡易網路介面以方便使用電腦、智慧 型手機或平板來遙控檯燈。
  3. 3. 範例列表 • EX_1:sensor_test – 透過網路瀏覽器下指令來控制繼電器開關。 – 顯示感測器值於 Serial Monitor • EX_2:energy_log – 等待網路指令來開關繼電器。 – 將資料定期發送到Google Docs 試算表。 • EX_3:webinterface – 使用網路介面來遙控(電腦或手機皆可)
  4. 4. 專題1 [遠距耗能監控裝置]
  5. 5. 所需硬體 • Arduino Yun • 類比電流感測器  Arduino A0 • 繼電器模組  Arduino D8 • 公/母電線接頭
  6. 6. 繼電器 • 繼電器是一個電磁開 關,當我們需要用小 電壓(Arduino開發 板的5V)的指令訊 號來開關相當大的電 壓(110V或230V) 時便會派上用場。 • 訊號Arduino D8, GNDArduino GND
  7. 7. 類比電流感測器 • 是由印刷電路板、晶片本體與其 它元件(電阻和電容等)組成。 • 這個感測器會輸出與測得電流量 成正比的類比訊號。 • 訊號Arduino A0, GNDArduino GND
  8. 8. 接線完成 繼電器為HIGH時,電路接通 電流感測器與電線串聯
  9. 9. REST API • 請到Arduino Yun 的設定頁面最下方,把 REST API ACCESS 改為 OPEN。 • 不然會一直要您輸入密碼,而且沒反應… • 由 sketch 中的 void process(YunClient client) 來處理 API call。
  10. 10. 如果發生這種狀況 • 請把 Line35 的 server.listenOnLocalhost(); 註解掉
  11. 11. 測試 D13 with LED • <網址>/arduino/digital/腳位/1 or 0
  12. 12. 讀取數位腳位狀態
  13. 13. 也可以類比寫入 • <網址>/arduino/analog/腳位/0~255
  14. 14. 讀取類比腳位狀態 • A0 腳位對應的編號為14 • http://playground.arduino.cc/Learning/Pins
  15. 15. 設定數位腳位狀態 • <網址>/arduino/mode/input 或 output
  16. 16. EX_1 網路控制繼電器與抓感測器值 / sensor_test 透過網路瀏覽器下指令來控制繼電器 開關。 還可把感測器值顯示於 Serial Monitor
  17. 17. 修改電壓 230  110 (V) • float effective_voltage = 230;
  18. 18. getSensorValue()函式 移動平均(取100筆) for (int i = 0; i < nb_measurements; i++) { sensorValue = analogRead(CURRENT_SENSOR); avgSensor = avgSensor + float(sensorValue); } avgSensor = avgSensor/float(nb_measurements); return avgSensor //回傳計算結果
  19. 19. 功率量測:Line59 • // Perform power measurement • float sensor_value = getSensorValue(); • Serial.print("Sensor value: "); • Serial.println(sensor_value);
  20. 20. 轉換為電流:Line64 • // Convert to current • amplitude_current =(float)(sensor_value- zero_sensor)/1024*5/185*1000000; • effective_value=amplitude_current/1.414; //電流振幅÷根號2即為有效電流
  21. 21. 轉換為有效功率:Line74 • abs(effective_value*effective_voltage/1000) • 功率 = 電流 * 電壓 // P = IV
  22. 22. 開始測試 • 確認您的Yun與電腦都在同一個無線網路 • 在瀏覽器輸入 xx.local/arduino/digital/8/1 • 透過REST API來呼叫digitalWrite(8,HIGH) 指 令。您應該馬上會聽見繼電器切換的聲音, 並看見燈光亮起。 • 請用 …/8/0 來關閉檯燈
  23. 23. 檢視電流量測值 • 把Arduino Yun 用 USB 接回電腦 • 在Serial Monitor 中檢 查以下數值
  24. 24. EX_2 傳送資料到Google Doc /energy_log 等待網路指令來開或關上繼電器; 將資料依固定時間區間傳送到Google Docs 試算表,方便追蹤能量消耗值。
  25. 25. 建立Google Docs試算表 • 試算表名稱任意,本範例為 Power (Line42) • 欄位: Time、Interval、Power和Energy
  26. 26. 公式說明 • Energy = Power x Time • 能量 = 功率 x 時間 • 在此其實要用到積分,但我們改用梯形公 式來近似即可。 • Energy= (PowerMeasurement + NextPowerMeasurement)*TimeInverval/2 • D2 = (B2 + B3)*C2/2
  27. 27. 申請Temboo帳號 https://www.temboo.com/
  28. 28. 註冊流程 • 在主頁面中,請輸入您的電子郵件地址來 註冊並點選 Sign up。 • 建立您的第一個應用程式。請記錄以下資 料:應用程式的名稱,還有系統指派給您 的金鑰;本書之後都會用到它們。
  29. 29. ACCOUNT/新增一個 Application • 建立您的第一個應用程式。請記錄以下資 料:應用程式的名稱,還有系統指派給您 的金鑰;本書之後都會用到它們。
  30. 30. ACTIVITY/流量監控畫面
  31. 31. Temboo Choreo 物件 • 用來與指定web service 互動,本範例為 Google Docs • 另外也可用於 Gmail、Twitter等
  32. 32. 在程式中加入Google account • Line40 • const String GOOGLE_USERNAME = "yourGoogleUsername"; • const String GOOGLE_PASSWORD = "yourGooglePass"; • const String SPREADSHEET_TITLE = "Power";
  33. 33. 在TembooAccount.h中修改 • #define TEMBOO_ACCOUNT "temboo_accout_name" //Temboo 帳號名稱 • #define TEMBOO_APP_KEY_NAME " temboo_app_name " //Temboo app 名稱 • #define TEMBOO_APP_KEY " temboo_api_key " //Temboo app 金鑰
  34. 34. 檢查是否該量測電流了 • if (power_measurement_cycles > power_measurement_cycles_max) • float sensor_value = getSensorValue();
  35. 35. 計算 • // 轉換為電流 • amplitude_current=(float)(sensor_value- zero_sensor)/1024*5/185*1000000; • effective_value=amplitude_current/1.414; • // 計算功率 • float effective_power = abs(effective_value * effective_voltage/1000);
  36. 36. 傳送資料,計數器歸零 • runAppendRow(measurements_interval,effect ive_power); • power_measurement_cycles = 0;
  37. 37. 組合資料並送出 • // Format data – L149 • String data = ""; • data = data + timeString + "," + String(measurements_interval) + "," + String(effectiveValue); • // Set Choreo inputs • AppendRowChoreo.addInput("RowData", data); • // Run the Choreo • unsigned int returnCode = AppendRowChoreo.run();
  38. 38. 檢查Google Docs 有沒有資料進來
  39. 39. EX_3 使用網路介面來遙控 /webinterface Arduino 程式沿用 EX_2
  40. 40. 網路介面包含了那些東西 • Interface.html • jquery-2.0.3.min.js • script.js • style.css • update_state.php
  41. 41. interface.html • <script src="jquery-2.0.3.min.js"></script> • <script src="script.js"></script> • <link rel="stylesheet" type="text/css" href="style.css"> //匯入 JS 函式庫與css樣式檔 • <input type="button" id="on" class="commandButton" value="On" • onClick=“relayOn()”/> //按下ON按鈕呼叫 relayOn() 函式
  42. 42. style.css 中定義版面配置與顏色等 body { font-family: Helvetica; } #relay { text-align: center; } .commandButton { background-color: orange; border: 1px solid black; font-size: 40px; cursor: pointer; border-radius: 10px; width: 300px; height: 100px; } @media screen and (max-device-width: 400px) { .commandButton { width: 100%; height: 200px; border: 2px solid black; font-size: 80px; margin-bottom: 50px; text-align: center; background-color: orange; } }
  43. 43. JavaScript 用來溝通 html 與 php • function relayOn(){ • $.get( "update_state.php", { command: "1"} ); • }
  44. 44. update_state.php 中則是實際動作 <?php // Create cURL call, make sure to change it with your Yun name $service_url = 'http://myarduinoyun.local/arduino/digital/8/' . $_G $curl = curl_init($service_url); // Send cURL to Yun board curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE $curl_response = curl_exec($curl); //執行 curl_close($curl); ?>
  45. 45. 自行架設php server • 安裝 Appserv 之後,把 webinterface 資料夾 中所有檔案都放到 C:AppServwww 中 • 在 cmd 中使用 ipconfig 指令查找本機 IP,這 樣才可以用手機等外部裝置連入。 • 在瀏覽器中輸入 http://localhost/index.php 可看到預設畫面
  46. 46. AppServ 預設畫面
  47. 47. 操作 • 打開瀏覽器,輸入您的電腦IP或網路名稱, 應該會看見專案中的各檔案顯示出來。 • http://localhost/interface.html • http://YourIP/interface.html
  48. 48. 手機端操作 • 如果是智慧型手機,則介 面會自動調整螢幕大小
  49. 49. Facebook 發布動態 Temboo 連結 Facebook app
  50. 50. Temboo 網站左側的 Facebook • Facebook / Publishing/SetStatus
  51. 51. 目標:先取得 OAuth Tokens 再取得 AccessToken
  52. 52. 0. 記得開 IoT Mode / Arduino Yun • Arduino + 網路擴充板 • Arduino Yun • 德儀 LaunchPad
  53. 53. 1. 先在Facebook Developer建立一個app
  54. 54. 2. 設定FB app 的 Callback URL
  55. 55. 在Settings 下設定完成
  56. 56. 3. 填入App ID 與 App Secret
  57. 57. 4. 啟動認證 – 同意外部連結
  58. 58. 5. 取得 AccessToken
  59. 59. 6. 輸入AccessToken 與 Message
  60. 60. 畫面下方會自動產生Arduino code
  61. 61. 發布完成!
  62. 62. 參考資料 • RESTAPI – http://android.serverbox.ch/?p=1039 – https://learn.adafruit.com/a-rest-api-for-arduino-and-the- cc3000-wifi-chip/overview – http://yehnan.blogspot.tw/2014/04/arduino- yunbridgeyunserveryunclient.html • PHP – http://blog.xuite.net/arcloveangel/lovestore/22930165- Appserv%E6%9E%B6%E7%AB%99%E6%95%99%E5%AD%B8- %E5%AE%8C%E6%95%B4%E5%AE%89%E8%A3%9D%E8%A8%A D%E5%AE%9A%E6%8C%87%E5%8D%97 – http://mark528.pixnet.net/blog/post/7267604- %E5%9C%A8windows%E5%AE%89%E8%A3%9Dphp%E9%96%8 B%E7%99%BC%E7%92%B0%E5%A2%83

×