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();//螢幕顯示畫面
}