0-5V电导率传感器读取-Arduino中文社区 - Powered by Discuz! Archiver

王大富 发表于 2021-2-23 14:10

0-5V电导率传感器读取

本帖最后由 王大富 于 2021-2-23 14:12 编辑

1.首先得到测试仪器的校正系数,机械校正系数=已知校正溶液的电导率/实际测试得到的电导率, 两种标准溶液
compECsolution = 1.413*(1.0+0.0185*(temperature-25.0)); kvalueLow = compECsolution/(1000.0*voltage/820.0/200.0);
compECsolution = 12.88*(1.0+0.0185*(temperature-25.0));   kvalueHigh = compECsolution//(1000.0*voltage/820.0/200.0);反过来,溶液真实电导率值=机械校正系数*溶液实测电导率值;

2.其次,通过Arduino模拟串口读取电导率传感器的电压值
voltage=analogRead(EC_PIN) / 1024.0 * 5000,单位为mV,
然后通过已知的电压值和电导率的关系计算T温度下的溶液实测电导率值
rawEC = 1000 * voltage / 820.0 / 200.0,
再然后根据第一步中得到的机械校正系数计算T温度下测试溶液真实电导率值
value = rawEC * (1, kvalueLow 或 kvalueHigh);

3.最后通过温度修正将T温度下的真实电导率标准化为25摄氏度下的溶液真实电导率
temperature = dht.getTemperature();ecValue = value / (1.0 + 0.0185 * (temperature - 25.0));#include "Arduino.h"
#include "DHTesp.h"                              //温度DHT11模块函数库
#define EC_PIN A0
float voltage, ecValue, temperature = 25.0;
float _kvalueLow = 1, _kvalueHigh = 1, _kvalue = 1, rawEC, valueTemp, value;
DHTesp dht;                                    //温度


void setup()
{
pinMode(A0, INPUT);
Serial.begin(115200);
dht.setup(3, DHTesp::DHT11);               //温湿度模块DHT11初始化,D4脚位
}

void loop()
{
    _kvalue = 1;
static unsigned long timepoint = millis();
if (millis() - timepoint > 1000U)
{ timepoint = millis();
    Serial.print("A0="); Serial.print(analogRead(EC_PIN));
    voltage = analogRead(EC_PIN) / 1024.0 * 5000;//电压毫伏
    Serial.print(" voltage="); Serial.print(voltage);
    rawEC = 1000 * voltage / 820.0 / 200.0;//原始电导率,电压与电导率的线性比列关系,有先前实验得到
    Serial.print(" rawEC="); Serial.print(rawEC);
    value = rawEC * _kvalue;//初始不计算仪器引起的误差
    if (valueTemp > 2.5) {
      _kvalue = _kvalueHigh;//高校正值
    }
    else if (valueTemp < 2.0) {
      _kvalue = _kvalueLow;//低校正值
    }
    value = rawEC * _kvalue;//校正机械误差后的电导率,_kvalueLow和_kvalueHigh由实际的电导率比上测试得到的电导率
    temperature = dht.getTemperature();//校正后的电导率
    ecValue = value / (1.0 + 0.0185 * (temperature - 25.0));//修正后的电导率,修正完以后都是25摄氏度下的数据,因此用除
    Serial.print(" temperature:");Serial.print(temperature, 1);Serial.print("^CEC:");
    Serial.print(ecValue, 2);Serial.println("ms/cm");
}
}

float readTemperature()
{
//add your code here to get the temperature from your temperature sensor
}


//用于计算机械误差
//    if()
//    {if (rawEC>0.9 && rawEC<1.9)
//      {compECsolution = 1.413*(1.0+0.0185*(temperature-25.0));//通过温度校正后的到的真实值
//      kvalueLow = compECsolution/(1000.0*voltage/820.0/200.0);//机械校正系数为已知校正溶液的电导率比上实际测试得到的电导率   
//      round(kvalueLow,2);}
//    else if (rawEC>9 && rawEC<16.8)
//      {compECsolution = 12.88*(1.0+0.0185*(temperature-25.0));
//      kvalueHigh = compECsolution//(1000.0*voltage/820.0/200.0);//反过来如果已知了测试值想要得到真实值则应该乘以机械修正系数
//      round(kvalueHigh,2);}
//   }





ok5555 发表于 2021-8-18 17:26


https://www.picbed.cn/images/2021/08/14/76577414_202108131513100035939254.png



https://www.picbed.cn/images/2021/08/14/76577414_202108131514050347284613.png



https://www.picbed.cn/images/2021/08/14/76577414_202108131514540660795518.png



https://www.gejiba.com/view.php/43a8f8ba9f2fd7d26c9a58f000c42ef9.png



https://www.gejiba.com/view.php/fcf6e364656fdbee2b079f85e50a5da3.png



https://www.gejiba.com/view.php/d7ede42878a19f1e42b42c481132acb8.png







沈梁 发表于 2021-12-7 10:09

你好,我最近也在做水质类,是否可以交流下,我wx是18248611830,谢谢楼主分享
页: [1]
查看完整版本: 0-5V电导率传感器读取