水滴雨水感測器由兩個零件組成,一個是檢測雨水的感應板,一個是控制模組,可用於各種天氣狀況的監測,並轉成數位信號和類比訊號輸出。
功能介紹
接上 5V 電源,PWR LED 電源指示燈亮,
DO 數位訊號輸出:檢測是否有雨(HIGH 無雨、LOW 有雨),亦可直接驅動繼電器模組做相關電器啟動。
感應板上沒有水滴時,DO 輸出為高電位,DO LED 開關指示燈滅,
下雨時雨滴上去時,DO 輸出為低電位,DO LED 開關指示燈亮,
擦掉感應板上面的水滴,DO 又恢復到輸出高電位狀態。
透過調節控制板上藍色電位器,可調整 DO 偵測水滴的靈敏度。
AO 類比訊號輸出:檢測雨量大小(雨量越多、數值越小),nodeMCU 的 A/D 轉換器解析度為 10 位元,故可呈現的數字範圍為 0 ~ 1023,當沒有水滴時數值為1023,當有水滴時水滴多寡會跟數值成反比,水量越多數值越小。
接線方式
雨滴感應板跟控制板接線無正負之分,可隨意連接。
控制板接線:
● VCC:接電源正極(3-5V)
● GND:接電源負極
● DO:數位訊號輸出(程式範例接 D7)
● AO:類比訊號輸出(接 A0)
#include "SSD1306.h" //匯入OLED程式庫
SSD1306 display(0x3C, D2, D1); //宣告使用OLED螢幕物件(位址,SDA,SCL)==SDA>D2,SCL>D1
#define rain_Pin D7 // 設定雨水感測器的數位接腳 D7 or 13
int rain_value;
String message;
long previousTime = 0; // 用來保存前一次狀態的時間
long interval = 1000; // 讀取間隔時間,單位為毫秒(miliseconds)
void setup(){
display.init(); //螢幕初始化
display.flipScreenVertically(); //螢幕垂直翻轉
display.setFont(ArialMT_Plain_16); //使用16字體
display.setTextAlignment(TEXT_ALIGN_LEFT); //靠左對齊
pinMode(rain_Pin, INPUT); // 設定 rain_Pin 為輸入模式
}
void loop(){
unsigned long currentTime = millis(); //將當前的時間存入變數currentTime
if (currentTime - previousTime > interval) { //如果當前時間扣除前一次保留時間超過間隔時間(interval)就進入執行程式
rain_value = analogRead(A0); // 讀取類比腳位 A0 的感測數值
if (digitalRead(rain_Pin) == LOW) { // 偵測到雨水時,數位輸出訊號為 LOW(0),顯示 wet
message = "Status : wet";
}
else { // 沒雨乾燥時,數位輸出訊號為 HIGH(1),顯示 dry
message = "Status : dry";
}
previousTime = currentTime; // 離開if時更新時間
}
display.clear(); //清除螢幕
display.drawString(0, 0, message); //x=0,y=0 位置顯示是否有雨水
display.drawString(0, 16, "Value : " + String(rain_value)); //x=0,y=16 位置顯示雨水的數值 0~1023,雨量越多、數值越小
display.display();//螢幕顯示畫面
}