Posted in

การใช้งาน NodeMCU ESP8266 ร่วมกับเซนเซอร์ TDS (วัดคุณภาพน้ำ)

การใช้งาน NodeMCU ESP8266 ร่วมกับเซนเซอร์ TDS (วัดคุณภาพน้ำ)

ในบทความนี้ คุณจะได้เรียนรู้วิธีการใช้เซนเซอร์ TDS Meter (Total Dissolved Solids) ร่วมกับบอร์ด ESP8266 NodeMCU เพื่อวัดค่าสารละลายรวมที่ละลายอยู่ในน้ำ เช่น เกลือ แร่ธาตุ และโลหะหนัก ซึ่งค่านี้สามารถใช้เป็นตัวบ่งชี้คุณภาพน้ำในเบื้องต้น และใช้เปรียบเทียบน้ำจากแหล่งต่างๆ ได้ โดยแอปพลิเคชันยอดนิยมคือการตรวจสอบคุณภาพน้ำในตู้ปลาหรืองานไฮโดรโปนิกส์


รู้จักกับ TDS Meter

TDS Meter ทำหน้าที่วัดจำนวนสารละลายรวมที่ละลายอยู่ในน้ำ เมื่อจำนวนสารละลายเพิ่มขึ้น ค่าการนำไฟฟ้าของน้ำก็จะสูงขึ้นตาม ซึ่งช่วยให้เราสามารถคำนวณค่าสารละลายรวมออกมาเป็นหน่วย ppm (mg/L) ได้

⚠️ ข้อควรระวัง: แม้ว่าค่า TDS จะเป็นตัวบ่งชี้คุณภาพน้ำที่ดี แต่ไม่ได้ทำหน้าที่วัดสารปนเปื้อน (Contaminants) ทั้งหมด ดังนั้นจึงไม่ควรใช้ค่านี้เพียงอย่างเดียวในการตัดสินว่าน้ำนั้นปลอดภัยสำหรับการบริโภคหรือไม่

การใช้งานที่เหมาะสม: สระว่ายน้ำ, ตู้ปลา, บ่อเลี้ยงปลา, การปลูกพืชไฮโดรโปนิกส์ และระบบกรองน้ำ


📋 คุณสมบัติและสเปกของเซนเซอร์ (Keyestudio TDS V1.0)

  • แรงดันไฟฟ้าขาเข้า: DC 3.3 ~ 5.5V
  • แรงดันไฟฟ้าขาออก: 0 ~ 2.3V
  • กระแสไฟฟ้าขณะทำงาน: 3 ~ 6mA
  • ช่วงการวัด TDS: 0 ~ 1000ppm
  • ความแม่นยำ: ± 10% F.S. (ที่อุณหภูมิ 25 ℃)
  • หัวโพรบ (Probe): กันน้ำ (Waterproof), สายยาว 60 ซม.

🔌 การต่อวงจร TDS Sensor กับ ESP8266

เนื่องจากเซนเซอร์ส่งสัญญาณออกมาเป็น Analog เราจะใช้ขา A0 ของ NodeMCU ในการรับค่า:

TDS Sensor Pin NodeMCU (ESP8266) Pin
GND GND
VCC 3.3V
Data / Signal A0

💻 โค้ดโปรแกรม (Arduino IDE)

โค้ดนี้มีการใช้ Median Filtering Algorithm เพื่อช่วยให้ค่าที่อ่านได้มีความนิ่งและแม่นยำมากขึ้น อัปโหลดโค้ดนี้ลงในบอร์ดของคุณ:


#define TdsSensorPin A0
#define VREF 3.3              // แรงดันอ้างอิงของ ADC (ใช้ 3.3V สำหรับ NodeMCU)
#define SCOUNT  30            // จำนวนจุดตัวอย่างเพื่อหาค่าเฉลี่ย

int analogBuffer[SCOUNT];    
int analogBufferTemp[SCOUNT];
int analogBufferIndex = 0;
int copyIndex = 0;
float averageVoltage = 0;
float tdsValue = 0;
float temperature = 25;       // กำหนดอุณหภูมิปัจจุบัน (ใช้สำหรับการชดเชยค่า)

// อัลกอริทึม Median Filter เพื่อลดสัญญาณรบกวน
int getMedianNum(int bArray[], int iFilterLen){
  int bTab[iFilterLen];
  for (byte i = 0; i<iFilterLen; i++) bTab[i] = bArray[i];
  int i, j, bTemp;
  for (j = 0; j < iFilterLen - 1; j++) {
    for (i = 0; i < iFilterLen - j - 1; i++) {
      if (bTab[i] > bTab[i + 1]) {
        bTemp = bTab[i];
        bTab[i] = bTab[i + 1];
        bTab[i + 1] = bTemp;
      }
    }
  }
  if ((iFilterLen & 1) > 0) bTemp = bTab[(iFilterLen - 1) / 2];
  else bTemp = (bTab[iFilterLen / 2] + bTab[iFilterLen / 2 - 1]) / 2;
  return bTemp;
}

void setup(){
  Serial.begin(115200);
  pinMode(TdsSensorPin, INPUT);
}

void loop(){
  static unsigned long analogSampleTimepoint = millis();
  if(millis() - analogSampleTimepoint > 40U){     // อ่านค่าทุก 40 มิลลิวินาที
    analogSampleTimepoint = millis();
    analogBuffer[analogBufferIndex] = analogRead(TdsSensorPin);    
    analogBufferIndex++;
    if(analogBufferIndex == SCOUNT) analogBufferIndex = 0;
  }   
  
  static unsigned long printTimepoint = millis();
  if(millis() - printTimepoint > 800U){
    printTimepoint = millis();
    for(copyIndex=0; copyIndex<SCOUNT; copyIndex++)
      analogBufferTemp[copyIndex] = analogBuffer[copyIndex];
      
    // คำนวณแรงดันไฟฟ้าเฉลี่ย
    averageVoltage = getMedianNum(analogBufferTemp, SCOUNT) * (float)VREF / 1024.0;
    
    // สูตรชดเชยอุณหภูมิ (Temperature Compensation)
    float compensationCoefficient = 1.0 + 0.02 * (temperature - 25.0);
    float compensationVoltage = averageVoltage / compensationCoefficient;
    
    // แปลงค่าแรงดันไฟฟ้าเป็นค่า TDS (ppm)
    tdsValue = (133.42 * pow(compensationVoltage, 3) - 255.86 * pow(compensationVoltage, 2) + 857.39 * compensationVoltage) * 0.5;
    
    Serial.print("TDS Value: ");
    Serial.print(tdsValue, 0);
    Serial.println(" ppm");
  }
}

✨ บทสรุป

เซนเซอร์ TDS เป็นเครื่องมือที่ยอดเยี่ยมในการตรวจสอบคุณภาพน้ำเบื้องต้น โดยให้ผลลัพธ์เป็นหน่วย ppm คุณสามารถนำไปประยุกต์ใช้ร่วมกับเซนเซอร์อุณหภูมิ DS18B20 แบบกันน้ำ เพื่อสร้างระบบมอนิเตอร์ตู้ปลาอัจฉริยะที่ส่งข้อมูลผ่าน Wi-Fi ไปยังแอปพลิเคชันบนมือถือได้อีกด้วย!

หากคุณสนใจอยากให้สอนทำ Web App สำหรับควบคุมอุณหภูมิและคุณภาพน้ำในตู้ปลาผ่าน ESP8266 สามารถคอมเมนต์บอกกันไว้ได้เลยนะครับ!