前言
本文延續 [ [Wio Terminal] 組裝!智慧植栽實驗套件(使用DHT20) ] 一文, 差別在於改用 Grove DHT22 溫溼度感測器。完成硬體組裝之後,歡迎跟著以下兩篇教學文來實作您的智慧植栽系統喔:
在開始之前,請先準備好十字螺絲起子、剪刀(或斜口鉗)。由於部分組裝有方向的問題,為了講述方便,本文會將 Wio Terminal LCD 螢幕的那面稱為正面,而有接腳的那一面則稱之為背面,組裝時還請多注意,所有材料都可以在機器人王國商城一次買齊喔
撰寫/攝影 |
邱柏憲 |
時間 |
15 分鐘,輕輕鬆鬆 |
材料表
(購買) |
- Wio Terminal 開發板 x1
- Grove – 溫溼度感測器(DHT22) x1
- Grove – MOSFET模組 x1
- Gravity: 類比式防水電容式土壤濕度感測器 x1
- 直流沉水式抽水馬達 x1
- PVC管(已挖洞)25公分
- 矽膠管50公分
- 雷射切割壓克力背板
- 杜邦線(公公) 3條
- Grove轉杜邦公接頭
- 訊號線 1條
- 金屬螺絲M2*8 2個
- 塑膠螺絲M2*5 3個
- 塑膠六角隔離柱205 6個
- 塑膠M2螺帽 3個
- 小束線帶 2條
- 大束線帶 1條
|
難度 |
1.5(滿分5) |
本文
首先看到零件圖,零件不算多,但螺絲螺帽螺柱比較小,組裝時要注意,掉了很容易找不到

請跟著以下步驟來組裝:
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須朝外,完成後將壓克力板翻至正面,如下兩圖


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

STEP 5
使用一條Grove線,將 MOSFET 模組接到 Wio Terminal 的左側(LCD面朝下) Grove插槽,多餘的線可以用原本的橡皮筋固定,線會比較整齊。

STEP 6
拿出Grove轉杜邦公接頭,將對應的顏色的杜邦線分別插入Wio Terminal的背面孔位,也為 Wio Terminal 腳位配置也請參考下圖。
- 紅線接於下排右1的位置(1)->3.3V
- 黑線接於下排右5的位置(9)->GND
- 白線接於上排右7的位置(14)->其實不需要接,只是接了可以將線固定
- 黃線接於上排右9的位置(18)->訊號D3


完成後正面圖如下:

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

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

STEP 8
使用杜邦線(公公)與土壤溼度感測器的腳位連接,連接的方式如下圖。公公杜邦線的顏色可能會不同,因此請根據土壤感測器的線的顏色來對應 Wio Terminal 腳位,就是 5V、GND 與訊號等三條線。

完成後將杜邦線(公公)的另一端與Wio Terminal腳位連接,也可查詢上面的 Wio Terminal 腳位圖自行更改接線:
- 紅線接於上排右1的位置(2) ->5V
- 黑線接於上排右3的位置(6) ->GND
- 黃線接於上排右8的位置(16) ->D2
完成如下圖,由於線路已經有點複雜,因此繪製比較簡易的接線圖,完成後可以再檢查一次,確保接線都正確

STEP 9
拿出沉水馬達,將紅黑兩條線分別接在MOSFET模組的OUT和GND端(紅黑圈)。紅色(正極)接OUT,黑色(負極)接GND。

接完線路後再將矽膠管與沉水馬達對接,這樣馬達這一段就完成了。
矽膠管不太好裝須多用點力氣,要注意一下有沒有裝緊,紅圈處請確認有卡進去。如果太鬆,可能會在運作時鬆脫,水就會到處流啦!

STEP 10 (完成)
將土壤濕度感測器剩餘的線和較長的杜邦線用大束線帶綁在水管上,您可以視使用的環境來決定線要留多長。
使用此裝置時請依照實際情況調整線的長度,沉水馬達必須在水中使用否則容易損毀。PVC水管需插入土中一定深度否則可能整根裝置會倒下。希望大家都順利完成您的智慧植栽系統喔!

範例程式
在此提供範例程式,可於 wio terminal LCD 上顯示各感測器讀數,也可控制 MOSFET 模組所連接的沉水馬達。
#include "Wire.h"
#include "TFT_eSPI.h" //TFT LCD library
#include "DHT.h" // DHT library
#define DHTTYPE DHT22 //Define DHT sensor type
#define DHTPIN 3
DHT dht(DHTPIN,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
//Setting 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);
//Setting 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);
//Setting soil moisture
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);
//Setting light
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);
}
相關文章
Post Views: 276