Blynk IoT 物聯網服務2 – 使用 Blynk 控制 Wio Terminal 與沉水馬達

本篇將延續上一篇[Blynk IoT 物聯網服務結合 Wio Terminal 開發板:建立裝置、設定儀表板、測試連線],進一步說明如何使用Blynk IoT 物聯網服務控制 Wio Terminal 沉水馬達,這相當於透過雲服務來達到跨網段控制裝置的效果。

Blynk IoT 物聯網服務結合 Wio Terminal 開發板:建立裝置、設定儀表板、測試連線

材料清單

智慧植栽套件材料清單如下,其中  5 6 項會在下一篇範例登場,本篇先用不到,在此先列出。智慧植栽嘛,一定要有相關感測器,當然也希望能透過雲服務來監控植栽的狀況囉!

  1. Wio Terminal 開發板
  2. 繼電器MOSFET模組
  3. 被實驗的盆裁跟水源
  4. 抽水馬達及對應的電源
  5. 土壤濕度感測器(建議買防水的,如果你只打算用一次,就準備便宜的就好)
  6. 溫溼度感測器(DHT11、20、22)都可以,本範例使用DHT20

示意圖如下,請注意土壤溼度感測器因為拍照關係所以拉比較高,實際使用時請插入到上下箭頭區間之間的位置。

 

情境說明

本文包含兩個範例

  1. 土壤溼度感測器控制沉水馬達
  2. Blynk 雲服務控制沉水馬達

使用設備如下,您可以依照方便選用相容的裝置,但如果不想修改程式的話,開發板還是選 Wio terminal 最快囉。

Wio Terminal

請參考本文完成 Wio Terminal 的相關設定,您需要下載 Arduino 1.8 並安裝 Wio Terminal 完成,也歡迎參考阿吉老師(就是我)所錄製的  Wio terminal tinyML 影片,使用光感測器搭配 Edge Impulse 網站來完成手勢辨識專案,很好玩。

Dfrobot 土壤溼度感測器

Gravity: 類比式防水電容式土壤濕度感測器,使用時請將金屬片插入土壤到上下箭頭區間內。

根據產品頁面說明,土壤乾燥的數值: (570, 380] / 濕潤: (380, 190] / 非常濕: (190, 0]。唯實際數值可能根據現實狀況(土質、馬達種類與您使用的植栽)而有不同。

Seeed MOSFET 控制模組與沉水馬達

以本範例來說,MOSEFET 模組的 Vin 不需要外接電源也可以順利驅動沉水馬達,請把馬達的紅黑線分別接到 MOSFET 模組的正負螺絲端子即可,請務必做好防水,操作上還蠻容易有水噴濺出來的。沉水馬達顧名思義,使用時須放在水中,否則空轉很容易燒毀。產品wiki請參考

Blynk web dashboard 設定

請根據以下資訊來完成 Blynk dashbaord 與相關 widget 設定,我們也整理出了彼此之間的關係,熟悉之後您可以自行改用。當然也可以課金解鎖(標註有 UPGRADE 的 wdiget 就須付費)更多功能啦!

 

Datastream – 虛擬腳位 – 實體裝置(Wio terminal 腳位) – dashboard widget 的關係說明如下:

指定虛擬腳位時請注意,虛擬腳位編號不重要也不需要與實體腳位編號對應,但須注意不可重複。由下圖可知即便溫度濕度來自同一個感測器,但還是要分別為溫度與濕度各自指定一個虛擬腳位,後續才能分別對應到獨立的 widget。

  • switch – V2 – MOSFET (右側 Grove port) – Switch
  • soil_moisture – V5 – 土壤溼度感測器(A2 類比輸入腳位) – Gauge 與 Label (多個 widget 取得同一筆資料來源是可以的)
  • temperture – V6 – DHT20感測器的溫度(左側 Grove port) – Gauge
  • humidity – V7 – DHT20感測器的溼度(左側 Grove port) – Gauge

有一個 slider 新增了但是沒用到,忽略即可。

範例1 土壤溼度感測器控制沉水馬達

執行時請確認土壤溼度感測器往下插到正確的位置(上下箭頭之間)、相關電路防水都做好了,水管不會亂噴等等,再上傳程式。這個程式很簡單,就是根據土壤濕度(類比讀取)來控制 MOSFET模組,進而做到控制沉水馬達。請根據實際狀況(土質、馬達種類與您使用的植栽)來調整相關數值。

注意,不要為了測試就瘋狂澆水,植物會受不了的喔!

程式碼如下

int motorPin = 0;  //Grove port - pin 0

void setup()
{
  Serial.begin(38400);
  pinMode(motorPin, OUTPUT);
  Serial.println("Grove - MOSFET Test Demo!");
}

void loop()
{
  analogWrite(motorPin, 0);  //default turn off the motor
  if (analogRead(2) > 380) {
    analogWrite(motorPin, 200); //modify if motor runs too fast
    delay(3000);
    analogWrite(motorPin, 0);
  }
  else {
    analogWrite(motorPin, 0);
  }
  delay(2000);
}
control mosfet(motor) by soil moisture

 

範例2 Blynk 雲服務控制沉水馬達

Blynk 相關設定請點我

相關注意事項如上,執行之後,您可以看到 Blynk dashboard 顯示您的裝置為 [online],這時候就可以按下 switch 控制馬達來澆水了,很酷吧!

程式碼如下

#define BLYNK_TEMPLATE_ID           ""
#define BLYNK_DEVICE_NAME           ""
#define BLYNK_AUTH_TOKEN            ""

// Comment this out to disable prints and save space
#define BLYNK_PRINT Serial

#include <rpcWiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleWioTerminal.h>

char auth[] = BLYNK_AUTH_TOKEN;

char ssid[] = "";      // wifi settings
char pass[] = "";

// built-in blynk functions when specified Vpin is changed
BLYNK_WRITE(V1) // slider
{
  int pin1Value = param.asInt(); // assigning incoming value from pin V1 to a variable
  Serial.print("V1 Slider value is: ");
  Serial.println(pin1Value);
}

BLYNK_WRITE(V2)  //switch
{
  int pin2Value = param.asInt(); 
  Serial.print("V2 switch value is: ");
  Serial.println(pin2Value);
}

void setup()
{
  // Debug console
  Serial.begin(115200);

  Blynk.begin(auth, ssid, pass);
  // You can also specify server:
  //Blynk.begin(auth, ssid, pass, "blynk.cloud", 80);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);
}

void loop()
{
  Blynk.run();
}
control MOSFET module by Blynk switch widget

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。