前言
本文將說明如何使用 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)
接著再將杜邦線的另一端,按照對應的顏色與土壤溼度感測器的線連接。(橘>橘、紅>紅、黑>黑)
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);
}
相關文章
Post Views: 422