跳到主要內容
物聯網 / 水濁度感測器
turbidity
Gravity: Analog Turbidity Sensor 
濁度感測器利用光學原理,通過測量溶液中的透光率和散射率來綜合判斷溶液濁度情況,從而達到檢測水質的目的。
感測器內部是一個紅外線對管,當光線穿過一定量的水時,光線的透過量取決於該水的污濁程度,水越污濁,透過的光就越少。
感測器可以用於洗衣機、洗碗機,魚缸等產品的水污濁程度的測量。通過測量水的污濁程度來判斷溶液的潔淨程度,確定換水時間,達到減少能耗和節約用水的目的。也可以用於河流,污水的測量,澄清池檢測和水質研究等等。
 
感測器經由 A / D 切換開關,可選擇類比信號輸或是數位信號輸出模式。
“A” 類比訊號模擬量輸出:水的污濁程度(濁度越高,數值越小),nodeMCU 的 A/D 轉換器解析度為 10 位元,故可呈現的數字範圍為 0 ~ 1023,輸出數值會隨著液體濁度的增大而減小
“D” 數位訊號輸出:通過模組上的電位器調節觸發閾值,當濁度達到設置好的閾值後,Dout 指示燈亮,感測器模組輸出由高電位變成低電位,通過監測該電位的變化,就可以知道水的濁度超標,從而預警或者聯動其他設備。
閾值設定:調節藍色電位器旋鈕可調整觸發高低電位的臨界值。
注意:感測器探頭頂端不防水,勿浸沒使用。
 
接線方式
●  VCC 紅線:接電源
●  GND 黑線:接地
●  OUT 藍線:訊號輸出(接 A0)
 
 
類比訊號輸出接 A0 腳位(水的污濁程度):濁度越高,數值越小
 
#include "SSD1306.h" //匯入OLED程式庫
SSD1306  display(0x3C, D2, D1);    //宣告使用OLED螢幕物件(位址,SDA,SCL)==SDA>D2,SCL>D1
 
int turbidity = 0;   // 定義要儲存水濁度的變數 turbidity
long previousTime = 0;          // 用來保存前一次狀態的時間
long interval = 1000;           // 讀取間隔時間,單位為毫秒(miliseconds)
 
void setup()
{
  display.init(); //螢幕初始化
  display.flipScreenVertically();  //螢幕垂直翻轉 
  display.setFont(ArialMT_Plain_16);    //使用16字體
  display.setTextAlignment(TEXT_ALIGN_LEFT);   //靠左對齊
}
 
void loop()
{
  unsigned long currentTime = millis();  //將當前的時間存入變數currentTime
  if(currentTime - previousTime > interval) {  //如果當前時間扣除前一次保留時間超過間隔時間(interval)就進入執行程式
    turbidity = analogRead(A0);  //將A0讀取到的數據存入水濁度變數 turbidity
    previousTime = currentTime;  // 離開if時更新時間
  }   
  display.clear(); //清除螢幕
  display.drawString(0, 0, "Turbidity:"+String(turbidity)); //x=0,y=0 位置顯示水濁度的感測數值
  display.display();//OLED螢幕顯示畫面
}
 
 
數位訊號輸出,通過調節電位器來提高/降低觸發條件
 
#include "SSD1306.h" //匯入OLED程式庫
SSD1306  display(0x3C, D2, D1);    //宣告使用OLED螢幕物件(位址,SDA,SCL)==SDA>D2,SCL>D1
 
#define turbidity_Pin D7  // 設定水濁度感測器的數位接腳 D7 or 13 
 
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(turbidity_Pin, INPUT);   // 設定 turbidity_Pin 為輸入模式
}
 
void loop(){
  unsigned long currentTime = millis();  //將當前的時間存入變數currentTime
  if (currentTime - previousTime > interval) {  //如果當前時間扣除前一次保留時間超過間隔時間(interval)就進入執行程式
      if (digitalRead(turbidity_Pin) == LOW) {   //水濁度感測值高於設定閾值時,數位輸出訊號為 LOW(0),顯示 Turbid
          message = "Status : Turbid"; 
      }
      else {  // 水濁度感測值低於設定閾值時,數位輸出訊號為 HIGH(1),顯示 Clean
          message = "Status : Clean";
      } 
      previousTime = currentTime;  // 離開if時更新時間
  }   
  display.clear(); //清除螢幕
  display.drawString(0, 0, message); //x=0,y=0 位置顯示水濁度的好壞
  display.display();//螢幕顯示畫面
}
 
water
 
tea
youtube

消息公佈欄

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