메모:TDS 프로브는 55°C 이상의 물에서 사용할 수 없습니다.
디스플레이에 영향을 미치므로 TDS 프로브를 컨테이너 가장자리에 너무 가깝게 배치해서는 안 됩니다.
TDS 프로브의 헤드와 리드는 방수 처리되어 물에 잠길 수 있지만 연결 인터페이스와 신호 어댑터 보드는 방수 처리가 되어 있지 않습니다. 이용에 주의해 주십시오.
1 x TDS 신호 어댑터 보드
1 x 방수 TDS 프로브
1 x 아날로그 센서 라인
소스 코드:
#define TdsSensorPin A1
#define kValue 1.8 //kValue = 교정기 TDS의 값 / TDS를 얻기 위한 측정
#define VREF 5.0 // ADC의 아날로그 기준 전압(Volt)
#define SCOUNT 30 // 샘플 포인트의 합
Int analogBuffer[SCOUNT]; // 아날로그 값을 배열에 저장하고 ADC에서 읽습니다.
Int analogBufferTemp[SCOUNT];
Int analogBufferIndex = 0, copyIndex = 0;
Float averageVoltage = 0, tdsValue = 0, 온도 = 25;
무효 설정()
{
Serial.begin(115200);
pinMode(TdsSensorPin, INPUT);
}
무효 루프()
{
정적 부호 없는 긴 analogSampleTimepoint = millis();
If(millis()-analogSampleTimepoint > 40U) //40밀리초마다 ADC에서 아날로그 값을 읽습니다.
{
analogSampleTimepoint = 밀리스();
analogBuffer[analogBufferIndex] = analogRead(TdsSensorPin); //아날로그 값을 읽고 버퍼에 저장
analogBufferIndex++;
If(analogBufferIndex == SCOUNT)
analogBufferIndex = 0;
}
정적 부호 없는 긴 printTimepoint = millis();
If(millis()-printTimepoint > 800U)
{
printTimepoint = 밀리스();
For(copyIndex=0;copyIndex;카피인덱스++)
analogBufferTemp[copyIndex]= analogBuffer[copyIndex];
averageVoltage = getMedianNum(analogBufferTemp,SCOUNT) * (부동)VREF / 1024.0; // 메디안 필터링 알고리즘으로 보다 안정적인 아날로그 값을 읽어서 전압 값으로 변환
플로트 보상 계수=1.0+0.02*(온도-25.0); //온도 보상 공식: fFinalResult(25^C) = fFinalResult(current)/(1.0+0.02*(fTP-25.0));
플로트 보상전압=평균전압/보상계수; //온도 보상
tdsValue=(133.42*보상전압*보상전압*보상전압 - 255.86*보상전압*보상전압 + 857.39*보상전압)*0.5*kValue; //전압 값을 tds 값으로 변환
//Serial.print("전압:");
//Serial.print(averageVoltage,2);
//Serial.print("V");
Serial.print("TDS 값:");
Serial.print(tdsValue,0);
Serial.println("ppm");
}
}
Int getMedianNum(int bArray[], int iFilterLen)
{
Int bTab[iFilterLen];
(바이트 i = 0; i;>
bTab[i] = bArray[i];
Int i, j, bTemp;
(j = 0; j에 대해< iFilterLen - 1; j++)
{
(i = 0; 나는< iFilterLen - j - 1; i++)
{
If (bTab[i] > bTab[i + 1])
{
bTemp = bTab[i];
bTab[i] = bTab[i + 1];
bTab[i + 1] = bTemp;
}
}
}
((iFilterLen & 1) > 0)인 경우
bTemp = bTab[(iFilterLen - 1) / 2];
또 다른
bTemp = (bTab[iFilterLen / 2] + bTab[iFilterLen / 2 - 1]) / 2;
bTemp를 반환합니다.
}