其他:防水探头
包裹包括1 x TDS 信号转接板
1 个防水 TDS 探头
1 x 模拟传感器线
源代码:
#define TdsSensorPin A1
#define kValue 1.8 //kValue = 校准器 TDS 的值 / 测量得到 TDS
#define VREF 5.0 // ADC 的模拟参考电压(Volt)
#define SCOUNT 30 // 采样点的总和
Int 模拟缓冲区[SCOUNT]; // 将模拟值存储在数组中,从 ADC 中读取
诠释模拟缓冲区温度[SCOUNT];
Int 模拟缓冲区索引 = 0,复制索引 = 0;
浮动平均电压 = 0,tdsValue = 0,温度 = 25;
无效设置()
{
序列号.开始(115200);
pinMode(TdsSensorPin,输入);
}
无效循环()
{
静态无符号长模拟样本时间点 = 毫秒();
if(millis()-analogSampleTimepoint > 40U) //每 40 毫秒,从 ADC 读取模拟值
{
模拟采样时间点 = 毫秒();
模拟缓冲区[模拟缓冲区索引] = 模拟读取(TdsSensorPin); //读取模拟值并存入缓冲区
模拟缓冲区索引++;
如果(模拟缓冲区索引 == SCOUNT)
模拟缓冲区索引 = 0;
}
静态无符号长 printTimepoint = millis();
if (millis() - printTimepoint>800U)
{
打印时间点 = 毫秒 ();
For(copyIndex=0;copyIndex;复制索引++)
模拟缓冲区临时[复制索引]=模拟缓冲区[复制索引];
averageVoltage = getMedianNum(analogBufferTemp,SCOUNT) * (float)VREF / 1024.0; // 通过中值滤波算法读取更稳定的模拟值,并转换为电压值
浮动补偿系数 = 1.0 + 0.02 * (温度-25.0); // 温度补偿公式:fFinalResult (25 ^ C) = fFinalResult (current) / (1.0 + 0.02 * (fTP-25.0));
浮动补偿Volatge=averageVoltage/compensationCoefficient; //温度补偿
tdsValue=(133.42*compensationVolatge*compensationVolatge*compensationVolatge - 255.86*compensationVolatge*compensationVolatge + 857.39*compensationVolatge)*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)
{
诠释 bTab[iFilterLen];
对于 (字节 i = 0; 我;>
bTab [i] = bArray [i];
诠释 i, j, bTemp;
对于 (j = 0; j< iFilterLen - 1; j++)
{
对于 (i = 0; 我< iFilterLen - j - 1; i++)
{
如果 (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;
}