[Wio Terminal] 組裝!智慧植栽實驗套件(使用DHT20)

前言

本文將說明如何使用 Wio Terminal 搭配相關周邊裝置來組裝智慧植栽系統,材料清單請參考以下:

撰寫/攝影 邱柏憲
前情提要
時間 2小時 材料表
  • Wio Terminal 開發板 x1
  • Grove – 溫溼度感測器(DHT20) x1
  • Grove – MOSFET模組 x1
  • Gravity: 類比式防水電容式土壤濕度感測器 x1
  • 直流沉水式抽水馬達 x1
  • PVC管(已挖洞)25公分
  • 矽膠管50公分
  • 雷射切割壓克力背板
  • 杜邦線(公公) 3條
  • 金屬螺絲M2*8 2個
  • 塑膠螺絲M2*5 3個
  • 塑膠六角隔離柱205 6個
  • 塑膠M2螺帽 3個
  • 小束線帶 2條
  • 大束線帶 1條
成本  請到機器人王國商城選購 難度  **** (最高10顆星)

 

先前已經介紹過許多 wio terminal 智慧植栽的應用,但最重要的硬體要如何架設呢?

在開始之前,請先準備好十字螺絲起子、剪刀(或斜口鉗)以及您覺得順手的工具。由於部分組裝有方向的問題,為了講述方便,本文會以 Wio Terminal 螢幕的那面稱為正面,而有接腳的稱為背面,組裝時還請多多注意。請做好安全防護措施並按照以下步驟組裝,開始吧!

組裝步驟

STEP 1.
撕取壓克力背板的保護膜(如果有的話),再將Wio Termial用金屬螺絲M2*8鎖在壓克力板上。這裡要注意上下不要顛倒,且Wio Termial背面的腳位需對準壓克力挖空的部分。

STEP 2.
把剛剛的壓克力板先放到一邊。用M2*5塑膠隔離柱3個和M2*5塑膠螺帽3個如圖2所示個別鎖在MOSFET模組上。

STEP 3.

把STEP1完成的壓克力拿過來轉到背面,接著將MOSFET模組利用M2*5塑膠隔離柱3個鎖於壓克力板上,要特別注意MOSFET模組的OUT和GND須朝外才能順利接上沉水馬達,如圖3-1所示

完成後將壓克力板翻至正面應如圖3-2所示

 

STEP 4.
下一步拿出DHT20模組並利用塑膠螺絲M2*5鎖在塑膠隔離柱上,完成後如圖4所示。

 

STEP 5.
使用兩條GROVE線,分別將DHT20與MOSFET模組跟Wio Terminal連接,請注意接線的位置。以Wio Terminal面朝自己的情況,DHT20接左邊,MOSFET接右邊,如下圖

STEP 6.

完成後拿出PVC水管將孔離邊緣較近的那端朝上,接著將束線帶穿過PVC水管的對位的兩個孔,再穿過壓克力板上對位的兩孔,成功後拉緊束線帶以確保PVC水管不會輕易晃動。

上端完成後下端也是相同的做法,兩端都完成再確認水管不會輕易晃動後,將束線帶多餘的部分剪掉,如下兩圖

STEP 7.
先使用杜邦線(公公)與Wio Terminal的腳位連接,連接的位置如下:(也可查詢Wio Terminal的腳位圖自行更改接線)

  • 紅線接於上排右2的位置 (5V)
  • 黑線接於上排右3的位置 (GND)
  • 黃線接於上排右8的位置 (A2)

 

Buy Seeed Studio Wio Terminal ATSAMD51 Core with Realtek RTL8720DN BLE5.0 Dev Board, Wireless Microcontroller Python Terminal Device Compatible with Raspberry Pi for Arduino, Micropython, and TinyML Online in Taiwan. B087LNFZ2T

接著再將杜邦線的另一端,按照對應的顏色與土壤溼度感測器的線連接。(橘>橘、紅>紅、黑>黑)

STEP 8.
拿出沉水馬達,將紅黑兩條線分別接在MOSFET模組的OUT端。紅色(正極)接OUT,黑色(負極)接GND。接完線路後再將矽膠管與沉水馬達對接就完成了。矽膠管不太好裝須多用點力氣,要注意一下有沒有裝緊,太鬆在運作時有可能會鬆脫,導致水到處噴喔

STEP 9.
將土壤濕度感測器剩餘的線用大束線帶綁在水管上,您可以視使用的環境來決定線要留多長。

使用此裝置時請依照實際情況調整相關線材的長度,沉水馬達運作時一定要放在水中,否則容易損毀。PVC水管需插入土中到一定深度,否則可能會讓裝置不穩倒下。預祝大家照著本文說明都能順利完成。

實際安裝圖片如下,歡迎與我們分享您的智慧植栽喔!

範例程式

在此提供範例程式,可於 wio terminal LCD 上顯示各感測器讀數,也可控制 MOSFET 模組所連接的沉水馬達。

smart graden with pump control - wio terminal
#include "Wire.h"
#include "TFT_eSPI.h" //TFT LCD library
#include "DHT.h" // DHT library
#define DHTTYPE DHT20 //Define DHT sensor type
DHT dht(DHTTYPE);

TFT_eSPI tft; //Initializing TFT LCD
TFT_eSprite spr = TFT_eSprite(&tft); //Initializing buffer

//Soil Moisture Sensor definitions
int motorPin = 0; //Grove port - pin 0
int sensorPin = A2; //Define variable to store soil moisture sensor pin
int sensorValue = 0; //Define variable to store soil moisture sensor value

void setup() {
Serial.begin(9600); //Start serial communication
Wire.begin();
pinMode(WIO_LIGHT, INPUT); //Set light sensor pin as INPUT
pinMode(WIO_BUZZER, OUTPUT); //Set buzzer pin as OUTPUT
pinMode(motorPin, OUTPUT);
dht.begin(); //Start DHT sensor
tft.begin(); //Start TFT LCD
tft.setRotation(3); //Set TFT LCD rotation
spr.createSprite(TFT_HEIGHT,TFT_WIDTH); //Create buffer
}

void loop() {
analogWrite(motorPin, 0); //default turn off the motor
int t = dht.readTemperature(); //Assign variable to store temperature
int h = dht.readHumidity(); //Assign variable to store humidity
int light = analogRead(WIO_LIGHT); //Assign variable to store light sensor values
Serial.println(t);
//Setting the title header
spr.fillSprite(TFT_WHITE); //Fill background with white color
spr.fillRect(0,0,320,50,TFT_DARKGREEN); //Rectangle fill with dark green
spr.setTextColor(TFT_WHITE); //Setting text color
spr.setTextSize(3); //Setting text size
spr.drawString("Smart Garden",50,15); //Drawing a text string

spr.drawFastVLine(150,50,190,TFT_DARKGREEN); //Drawing verticle line
spr.drawFastHLine(0,140,320,TFT_DARKGREEN); //Drawing horizontal line

//show temperature
spr.setTextColor(TFT_BLACK);
spr.setTextSize(2);
spr.drawString("Temperature",10,65);
spr.setTextSize(3);
spr.drawNumber(t,50,95); //Display temperature values
spr.drawString("C",90,95);

//show humidity
spr.setTextSize(2);
spr.drawString("Humidity",25,160);
spr.setTextSize(3);
spr.drawNumber(h,30,190); //Display humidity values
spr.drawString("%RH",70,190);

//show soil moisture status
sensorValue = analogRead(sensorPin); //Store sensor values
sensorValue = map(sensorValue,1023,400,0,100); //Map sensor values
spr.setTextSize(2);
spr.drawString("Soil Moisture",160,65);
spr.setTextSize(3);
spr.drawNumber(sensorValue,200,95); //Display sensor values as percentage
spr.drawString("%",240,95);

//show light status
spr.setTextSize(2);
spr.drawString("Light",200,160);
spr.setTextSize(3);
light = map(light,0,1023,0,100); //Map sensor values
spr.drawNumber(light,205,190); //Display sensor values as percentage
spr.drawString("%",245,190);

//Condition for low soil moisture
if(sensorValue < 50){
spr.fillSprite(TFT_RED);
spr.drawString("Time to water!",35,100);
analogWrite(motorPin, 200); //modify if motor runs too fast
analogWrite(WIO_BUZZER, 150); //beep the buzzer
delay(1000);
analogWrite(WIO_BUZZER, 0); //Silence the buzzer
delay(1000);
}
else{
analogWrite(motorPin, 0);
}

spr.pushSprite(0,0); //Push to LCD
delay(50);
}

相關文章

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *