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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3611|回复: 2

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

[复制链接]
发表于 2021-2-23 14:10 | 显示全部楼层 |阅读模式
本帖最后由 王大富 于 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));
  1. #include "Arduino.h"
  2. #include "DHTesp.h"                              //温度DHT11模块函数库
  3. #define EC_PIN A0
  4. float voltage, ecValue, temperature = 25.0;
  5. float _kvalueLow = 1, _kvalueHigh = 1, _kvalue = 1, rawEC, valueTemp, value;
  6. DHTesp dht;                                      //温度


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

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

  38. float readTemperature()
  39. {
  40.   //add your code here to get the temperature from your temperature sensor
  41. }


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






发表于 2021-8-18 17:26 | 显示全部楼层





























发表于 2021-12-7 10:09 | 显示全部楼层
你好,我最近也在做水质类,是否可以交流下,我wx是18248611830,谢谢楼主分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 06:41 , Processed in 0.242571 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表