2019年7月11日 星期四
2019年7月10日 星期三
用wemos di dimi 玩物聯網(10)實作智能雲端澆灌系統
一、教學目標:整合土壤的溼度感測器、繼電器、抽水馬達、液晶顯示器等,建置一雲端澆灌控制系統,並將土壤溼度值記錄雲端
二、接線圖
(一)土壤溼度感測器
感測器腳位 D1 mini 接法
VCC→5V(電源腳位)
GND→GND(接地腳位)
AO→A0
(二)2x16LCD顯示器
D1 Mini LCD1602
GND GND
3v3 VCC
D2 SDA
D1 SCL
(三)繼電器
感測器腳位 d1 mini 接法
1. DC+→3.3V或5V(電源腳位)
2. DC-→GND(接地腳位)
3. IN→D6(數位腳位)
com:接馬達負極
NO:接電源負極
三、程式碼
1.整合成智能澆灌系統
2.將資料送至雲端記錄
二、接線圖
(一)土壤溼度感測器
感測器腳位 D1 mini 接法
VCC→5V(電源腳位)
GND→GND(接地腳位)
AO→A0
(二)2x16LCD顯示器
D1 Mini LCD1602
GND GND
3v3 VCC
D2 SDA
D1 SCL
(三)繼電器
感測器腳位 d1 mini 接法
1. DC+→3.3V或5V(電源腳位)
2. DC-→GND(接地腳位)
3. IN→D6(數位腳位)
com:接馬達負極
NO:接電源負極
三、程式碼
1.整合成智能澆灌系統
#include <Wire.h> #include <esp_LiquidCrystal_I2C.h> esp_LiquidCrystal_I2C mylcd(0x27, 16, 2); const int AnalogIn = A0; //設定類比腳位 int readingIn = 0; //測量值 int no = 0;//計數器 int relayPin = 12; //繼電器引腳 int limitValue = 700; //限值(需要調整), //在空氣中的溼度感測器時是1024 或是 0 void setup() { Serial.begin(9600); pinMode(relayPin , OUTPUT); mylcd.init(); mylcd.backlight(); mylcd.setCursor(0, 0); mylcd.print("Welcome to"); mylcd.setCursor(0, 1); mylcd.print("My sensor"); delay(1000); } void loop() { no++; readingIn = analogRead(AnalogIn); //讀取數值 Serial.println(readingIn); mylcd.clear(); mylcd.setCursor(0, 0);//移到第一行第一個位置 mylcd.print("NO:"); mylcd.print(no); mylcd.setCursor(0, 1);//移到第二行第一個位置 mylcd.print(readingIn); if (readingIn > limitValue) { digitalWrite(relayPin , HIGH); mylcd.setCursor(7, 1);//移到第二行第8個位置 mylcd.print("Pump ON"); delay(1000); } else { digitalWrite(relayPin , LOW); mylcd.setCursor(7, 1);//移到第二行第8個位置 mylcd.print("Pump Off"); delay(1000); } delay(1000);//每秒測量一次 }
2.將資料送至雲端記錄
#include <Wire.h> #include <esp_LiquidCrystal_I2C.h> #include <ESP8266WiFi.h> const char* ssid = "mywifi"; //wifi 帳號 const char* password = "aaaa";// wifi 密碼 const char* safekey = "1234";//檢查碼 const uint16_t port = 80; //上傳的主機port const char* host = "192.168.0.100"; //上傳的主機ip const char* php_url = "/myfarm/t2.php";//上傳在主機的程式 byte sensor_id = 1; //偵測器ID esp_LiquidCrystal_I2C mylcd(0x27, 16, 2); const int AnalogIn = A0; //設定類比腳位 int readingIn = 0; //測量值 int no = 0;//計數器 int relayPin = 12; //繼電器引腳 int limitValue = 800; //限值(需要調整)0 WiFiClient client; void setup() { Serial.begin(9600); pinMode(relayPin , OUTPUT); mylcd.init(); mylcd.backlight(); mylcd.clear(); mylcd.setCursor(0, 0); mylcd.print("System start!"); WiFi.begin(ssid, password); Serial.println(""); int t = 0; mylcd.setCursor(0, 1); while (WiFi.status() != WL_CONNECTED) { t++; if (t > 15) break; Serial.print("."); mylcd.print("."); delay(500); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); mylcd.setCursor(0, 1); mylcd.print(WiFi.localIP()); delay(2000); mylcd.clear(); } void loop() { no++; readingIn = analogRead(AnalogIn); //讀取數值 Serial.println(readingIn); if (readingIn > 0) { no++; String things_request = "GET " + String(php_url); things_request += "?safekey=" + String(safekey); things_request += "&sensor_id=" + String(sensor_id); things_request += "&hh=" + String(readingIn) + "\r\n\r\n"; Serial.println(things_request); if (client.connect(host, port)) { client.print(things_request); Serial.println("Request: [ok]"); client.stop(); } else { Serial.println("Request: [error]"); } mylcd.clear(); mylcd.setCursor(0, 0); mylcd.print(no); mylcd.setCursor(7, 0); mylcd.print(String("H:") + String(readingIn)); if (readingIn > limitValue) { digitalWrite(relayPin , HIGH); mylcd.setCursor(0, 1);//移到第二行第8個位置 mylcd.print("Pump ON"); delay(1000); } else { digitalWrite(relayPin , LOW); mylcd.setCursor(0, 1);//移到第二行第8個位置 mylcd.print("Pump Off"); delay(1000); } delay(5000);//間隔5秒送一次資料,建議修改 } }四、執行結果
用wemos di dimi 玩物聯網(9)繼電器的使用
一、教學目標:學習繼電器的操作與控制抽水馬達。
繼電器是一種電子控制器件,是用小的電流去控制較大電流的一種「自動開關」。因為抽水馬達所需的電流比較大,故無法直接利用di mini 的電源去推動。故我們增加了一個麵包板電源模組進行供電。並將其接地線(負極與 d1 mini 上的G 腳位相接)
1.繼電器規格:
模組工作電壓:+5VDC
RELAY 規格:10A 250VAC, 10A 125VAC, 10A 30VDC
com:共用端
NO:常開端
NC:常閉端
(1)繼電器沒有電壓時,是公共端與常閉端 接通。
(2)繼電器 有 電壓時,是公共端與常開端 接通。
2.麵包板電源模組規格
輸入電壓:6.5-12V﹝直流﹞或USB供電
輸出電壓:3.3V、5V可切換
最大輸出電流:<700ma
上下兩路獨立控制,可切換為0V、3.3V、5V
板載兩組3.3V、5V直流輸出插針,方便引用,並有電源指示led燈
3.抽水馬達規格
電流:接12V時300 ma 功率:3.6W(4.5~12V)
流量:12V時 2L/分鐘
進水口:內徑7.5mm 外徑10mm
出水口:內徑5.5mm 外徑8mm
二、接線圖
感測器腳位 d1 mini 接法
1. DC+→3.3V或5V(電源腳位)
2. DC-→GND(接地腳位)
3. IN→D6(數位腳位)
com:接馬達負極
NO:接電源負極
三、程式碼
1.每3秒鐘,讓繼電器起動一次,並讓抽水馬達
四、執行結果
五、參考資料
https://tutorials.webduino.io/zh-tw/docs/basic/component/relay.html
https://www.icshop.com.tw/product_info.php/products_id/26022/Twesid/5857e09e18c2ab428f8b7fb52cc92b5c
繼電器是一種電子控制器件,是用小的電流去控制較大電流的一種「自動開關」。因為抽水馬達所需的電流比較大,故無法直接利用di mini 的電源去推動。故我們增加了一個麵包板電源模組進行供電。並將其接地線(負極與 d1 mini 上的G 腳位相接)
1.繼電器規格:
模組工作電壓:+5VDC
RELAY 規格:10A 250VAC, 10A 125VAC, 10A 30VDC
com:共用端
NO:常開端
NC:常閉端
(1)繼電器沒有電壓時,是公共端與常閉端 接通。
(2)繼電器 有 電壓時,是公共端與常開端 接通。
2.麵包板電源模組規格
輸入電壓:6.5-12V﹝直流﹞或USB供電
輸出電壓:3.3V、5V可切換
最大輸出電流:<700ma
上下兩路獨立控制,可切換為0V、3.3V、5V
板載兩組3.3V、5V直流輸出插針,方便引用,並有電源指示led燈
3.抽水馬達規格
電流:接12V時300 ma 功率:3.6W(4.5~12V)
流量:12V時 2L/分鐘
進水口:內徑7.5mm 外徑10mm
出水口:內徑5.5mm 外徑8mm
二、接線圖
感測器腳位 d1 mini 接法
1. DC+→3.3V或5V(電源腳位)
2. DC-→GND(接地腳位)
3. IN→D6(數位腳位)
com:接馬達負極
NO:接電源負極
三、程式碼
1.每3秒鐘,讓繼電器起動一次,並讓抽水馬達
// 繼電器控制練習 //1、DC+:接電源正極 5v //2、DC-:接電源負極 //3、IN:D6 (gpio 12) int relayPin = 12; //繼電器引腳 void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(relayPin , OUTPUT); } void loop() { digitalWrite(relayPin , HIGH); delay(3000); digitalWrite(relayPin , LOW); delay(3000); }
四、執行結果
五、參考資料
https://tutorials.webduino.io/zh-tw/docs/basic/component/relay.html
https://www.icshop.com.tw/product_info.php/products_id/26022/Twesid/5857e09e18c2ab428f8b7fb52cc92b5c
用wemos di dimi 玩物聯網(8)土壤溼度感測器的使用
一、教學目標:學習類比輸入,將土壤的溼度作立即的測量,並顯示於顯示器
二、接線圖
感測器腳位 d1 mini 接法
1. VCC→3.3V或5V(電源腳位)
2. GND→GND(接地腳位)
3. DO→D1~D9(數位腳位) 可以設定邊界值(藍色的可變電阻是用於土壤濕度的閥值調節)4. AO→A0(類比腳位), 本範例是接在此腳位A0
三、程式碼
1.利用serial monitor(序串埠監視窗)顯示結果
2.將測量結果顯示在2x16LCD上
五、參考資料
http://lihan.shinyo.bixone.com/Arduino/arduino-2015.10.13-5.html
二、接線圖
感測器腳位 d1 mini 接法
1. VCC→3.3V或5V(電源腳位)
2. GND→GND(接地腳位)
3. DO→D1~D9(數位腳位) 可以設定邊界值(藍色的可變電阻是用於土壤濕度的閥值調節)4. AO→A0(類比腳位), 本範例是接在此腳位A0
三、程式碼
1.利用serial monitor(序串埠監視窗)顯示結果
const int AnalogIn = A0; //設定類比腳位 int readingIn = 0; //測量值 void setup() { Serial.begin(9600); } void loop() { readingIn = analogRead(AnalogIn); //讀取數值 Serial.println(readingIn); delay(500); }
2.將測量結果顯示在2x16LCD上
#include <Wire.h> #include <esp_LiquidCrystal_I2C.h> esp_LiquidCrystal_I2C mylcd(0x27, 16, 2); const int AnalogIn = A0; //設定類比腳位 int readingIn = 0; //測量值 int no = 0;//計數器 void setup() { Serial.begin(9600); mylcd.init(); mylcd.backlight(); mylcd.setCursor(0, 0); mylcd.print("Welcome to"); mylcd.setCursor(0, 1); mylcd.print("my sensor"); delay(2000); } void loop() { no++; readingIn = analogRead(AnalogIn); //讀取數值 Serial.println(readingIn); mylcd.clear(); mylcd.setCursor(0, 0);//移到第一行第一個位置 mylcd.print("NO:"); mylcd.print(no); mylcd.setCursor(0, 1);//移到第二行第一個位置 mylcd.print(readingIn); delay(1000);//每秒測量一次 }四、執行結果
五、參考資料
http://lihan.shinyo.bixone.com/Arduino/arduino-2015.10.13-5.html
訂閱:
文章 (Atom)