跳到主要內容

 自 109 / 2 /25 起啟用

物聯網 / 雨水感測器

雨水感測器
水滴雨水感測器由兩個零件組成,一個是檢測雨水的感應板,一個是控制模組,可用於各種天氣狀況的監測,並轉成數位信號和類比訊號輸出。
 
功能介紹
接上 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();//螢幕顯示畫面
}

消息公佈欄

時間類別單位標題發佈點閱
跳至網頁頂部