查看: 135|回复: 0

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

[复制链接]

签到天数: 11 天

[LV.3]偶尔看看II

发表于 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. //     }
复制代码






您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

【花雕动手做】快餐盒盖,极低成本搭建机器人实验平台
【花雕动手做】快餐盒盖,
吃完快餐粥,除了粥的味道不错之外,我对个快餐盒的圆盖子产生了兴趣,能否做个极低成
【教程】M5StickV深度学习之微信跳一跳
【教程】M5StickV深度学习
M5StickV深度学习之微信跳一跳 【故事】 M5StickV以及后续的Unit-V都是M5Stack.co
AT固件编译出错怎么回事?
AT固件编译出错怎么回事?
在IDE里添加了Blinker的库,然后烧录AT固件的时候说编译出错 啥都没改动,就出错了,
DIY宠物喂食器,竟如此简单,更有硬件开发工具免费领!
DIY宠物喂食器,竟如此简
去年疫情突发,封城、封小区以及人员隔离,让原本享受千般宠爱的主子们变成了靠吃猫砂
ps2遥控小车——uno实现
ps2遥控小车——uno实现
前几天在阁楼发现了好久以前3d打印,激光切割的底盘,于是决定做这个东西 正好手上又
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表