【ESP32】盆栽自動澆水測試,透過ThinkSpeak紀錄觀察。

esp32盆栽自動澆水

俗話說的好,先求有再求好,用最直覺最簡單的方式開始。

這次嘗試先用最土炮的方式實驗看看盆栽自動澆水,簡單製作一個澆水的裝置,再來設定土壤濕度的感測值界線,等低於某濕度值,就控制馬達澆水。

另外固定時間將土壤溼度上傳ThinkSpeak,來觀察土壤濕度變化,看看是否真的能照心中所想的去澆水😂

整體架構

我們可以由土壤濕度來判斷是否該澆水。

ESP32也會將土壤濕度上傳ThinkSpeak,而透過觀察ThinkSpeak上的數據,就可以知道我們自動澆水系統是否有真的達到濕潤土壤的效果。

另外最怕的就是不停的澆水澆到滿出來,就讓我們來實驗看看吧~

澆水系統製作

某天在家裡準備要回收的地方,發現了一個適合的塑膠盒,於是就撿來當作水箱了,會挑他的原因主要是大小剛好,且塑膠好加工,最後弄起來感覺也算適合。

而澆水水管的設計,是看到Hedgehog刺蝟幫分享的影片“30分鐘DIY自動感應酒精消毒機”,把較硬的銅線塞進水管內,就可以隨意的折出自己想要的彎度,讓水確實澆到盆栽上。

把水泵接上水管後,丟進水箱內,把線路接上繼電器,之後就可以用繼電器來控制水泵動作了。

自動澆水影片:

Arduino程式碼

#include<WiFi.h>
#include <HTTPClient.h>
const char ssid[]="WiFi網路名稱"; //修改為你家的WiFi網路名稱
const char pwd[]="WiFi密碼"; //修改為你家的WiFi密碼

#define pumpPin 21    //水泵腳位
#define SensorPin A0  //土壤濕度感測器腳位

int sensorValue; 
int watering; 

String url = "https://api.thingspeak.com/update?api_key=你的api密碼"; //修改成你的api密碼


//讀取土壤濕度感測器
void ReadSensor(){
  sensorValue=analogRead(SensorPin); //讀取感測器回傳值
  Serial.print("value:");
  Serial.println(sensorValue);
}


//將資料上傳ThinkSpeak
void UploadData(){ 
  
  //建立一個網頁
  HTTPClient http;  

  //把土壤濕度數值寫入網址
  String url1= url+"&field1="+(int)sensorValue+"&field2="+(int)watering;

  //提交網址
  http.begin(url1);

  //讀取網頁內容
  int httpCode = http.GET();
  if(httpCode == HTTP_CODE_OK){
    String payload = http.getString();
    Serial.print("網頁內容=");
    Serial.println(payload);
  } 
  else{
     Serial.println("網路傳送失敗");
  }

  //關閉網頁
  http.end(); 
  
}

void setup() {
  
  pinMode(SensorPin,INPUT);
  pinMode(pumpPin,OUTPUT);
  digitalWrite(pumpPin,HIGH);
  
  Serial.begin(115200);
  
  WiFi.mode(WIFI_STA); //設置WiFi模式
  WiFi.begin(ssid,pwd); 

  Serial.print("WiFi connecting");

  //當WiFi連線時會回傳WL_CONNECTED,因此跳出迴圈時代表已成功連線
  while(WiFi.status()!=WL_CONNECTED){
    Serial.print(".");
    delay(500);   
  }

  Serial.println("");
  Serial.print("IP位址:");
  Serial.println(WiFi.localIP()); //讀取IP位址
  Serial.print("WiFi RSSI:");
  Serial.println(WiFi.RSSI()); //讀取WiFi強度

}

void loop() {

  //讀取土壤濕度
  ReadSensor();

  //判斷是否需要澆水
  if(sensorValue<900){
    Serial.println("water");
    digitalWrite(pumpPin,LOW);
    delay(500);
    digitalWrite(pumpPin,HIGH);
    delay(500);
    watering=1; //用來記錄澆水
  }
  UploadData(); //上傳資料到ThinkSpeak
  watering=0; //將澆水紀錄歸零
  
  delay(60000);
}

測試紀錄

左圖是土壤溼度的感測數據,右圖是當水泵啟動時的紀錄。

從圖中可以看出當水泵打水後,土壤濕度確實是有上升,而當濕度下降超過設定的數值時,也的確會再次打水,以這次實驗來說,成功!!!‧★,:*:‧\( ̄▽ ̄)/‧:‧°★

不過盆栽中的小植物其實是死掉的(擺好看的><),測試時我試種過綠豆,但是不曉得是不是一直放在房間沒拿出去曬太陽,所以最後下場也是…,就跟你想的一樣~

還有我也不太敢真的一直接上電放一整天,通常是我下班回家上電或睡覺晚上上電,真的會怕發生水災或是有個甚麼萬一。

所以目前需要改進的地方有:

  • 將外觀整合,線路整理,讓他可以放到陽台去。
  • 澆水保護,水箱沒水或是有異常時會跳通知。

最後!! 如果你喜歡這篇文章,或是這篇文章對你有幫助的話,也歡迎分享出去給需要的人,訂閱免費電子報獲得最新資訊😄😄😄

發佈留言

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