TDS là gì

TDS là gì ???

TDS là viết tắt của “Total Dissolved Solids”, có thể gọi nôm na là Tổng chất rắn hòa tan.

TDS là một trong những chỉ số dùng để kiểm tra chất lượng của nước, hàm lượng tất cả các chất hữu cơ, vô cơ chứa trong chất lỏng (cụ thể là nước)

Đơn vị TDS: mg/l (minigrams/liter) hoặc ppm (part/million)

Chỉ số TDS càng nhỏ thì nước càng sạch, nhưng nếu nhỏ quá mức thì nước gần như không có khoáng chất, tuy nhiên không phải chỉ số TDS cao là nước bẩn

TDS không được coi là chỉ số gây ô nhiễm, nó là chỉ số tổng hợp về sự hiện diện của các hợp chất hóa học.

Dưới đây là thang chỉ số TDS áp dụng cho nước sinh hoạt

 

Một project nhỏ giúp đo chỉ số TDS của nước, truyền hiển thị dữ liệu lên máy tính thông qua cổng UART

Phần cứng cần chuẩn bị

1 Kit Arduino Uno 

http://mlab.vn/1697809-uno-vn01-arduino-uno-phien-ban-viet-nam.html

Hoặc http://mlab.vn/2356225-dfrduino-uno-r3-arduino-uno-r3-compatible.html

1 Cảm biến TDS đo tổng chất rắn hòa tan

http://mlab.vn/2458624-cam-bien-tds-do-tong-chat-ran-hoa-tan.html

1 Cốc nước để đo TDS

Kết nối

Code mẫu

#define TdsSensorPin A1
#define VREF 5.0      // analog reference voltage(Volt) of the ADC
#define SCOUNT  30           // sum of sample point
int analogBuffer[SCOUNT];    // store the analog value in the array, read from ADC
int analogBufferTemp[SCOUNT];
int analogBufferIndex = 0,copyIndex = 0;
float averageVoltage = 0,tdsValue = 0,temperature = 25;

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

void loop()
{
   static unsigned long analogSampleTimepoint = millis();
   if(millis()-analogSampleTimepoint > 40U)     //every 40 milliseconds,read the analog value from the ADC
   {
     analogSampleTimepoint = millis();
     analogBuffer[analogBufferIndex] = analogRead(TdsSensorPin);    //read the analog value and store into the buffer
     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; // read the analog value more stable by the median filtering algorithm, and convert to voltage value
      float compensationCoefficient=1.0+0.02*(temperature-25.0);    //temperature compensation formula: fFinalResult(25^C) = fFinalResult(current)/(1.0+0.02*(fTP-25.0));
      float compensationVolatge=averageVoltage/compensationCoefficient;  //temperature compensation
      tdsValue=(133.42*compensationVolatge*compensationVolatge*compensationVolatge - 255.86*compensationVolatge*compensationVolatge + 857.39*compensationVolatge)*0.5; //convert voltage value to tds value
      //Serial.print("voltage:");
      //Serial.print(averageVoltage,2);
      //Serial.print("V   ");
      Serial.print("TDS Value:");
      Serial.print(tdsValue,0);
      Serial.println("ppm");
   }
}
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;
}

Và đây là kết quả

Viết đánh giá

Họ và tên:


Đánh giá của bạn: Lưu ý: Không hỗ trợ HTML!

Bình chọn: Dở            Hay

Nhập mã bảo vệ: