简介
这是一款arduino兼容的溶解氧传感器,用于测量水中的溶解氧含量,反应水质状况。可应用于水产养殖、环境检测、自然科学等领域的水质检测。
俗话说,“养鱼先养水,好水养好鱼。”良好的水质,对水生物非常重要。溶解氧 (Dissolved Oxygen) 就是反应水质好坏的重要参数之一。水中的溶解氧值一旦过低,会造成水生物呼吸困难,对其生存造成威胁。
我们推出了一款arduino兼容的溶解氧传感器,用于测量水中的溶解氧含量,反应水质状况,可应用于水产养殖、环境检测、自然科学等领域的水质检测。本产品简单易用,因此DIY一套溶解氧检测仪不再是有难度的门槛。
本产品的溶解氧电极为原电池型电极,无需极化时间,随用随测。填充液与感应膜可更换,维护成本低;信号转接板具有工作电压宽、连线方便、即插即用等特点,可方便的接入到现成的控制系统中使用。
该产品简单易用、兼容性强、代码开源、配套资料详细,可快速应用到所需场景中,为你的水生物守住“生命之源”!
技术规格
溶解氧电极
- 电极类型:原电池
- 检测范围:0~20mg/L
- 温度范围:0~40℃
- 响应时间:90秒达到98%全响应(25℃)
- 压力范围:0~50PSI
- 流动条件:0.3 mL/s
- 电极芯寿命:1年(正常使用情况下)
- 维护时间:视水质状况,对于浑水,通常1~2个月需更换膜帽;对于清水,通常4~5个月需更换膜帽。电极填充液建议每个月更换一次。
- 线缆长度:2米
- 连线接口:BNC
信号转接板
- 供电电压:3.3~5.5V
- 输出电压:0~3.0V
- 电极接口:BNC
- 信号接口:Gravity接口 (PH2.0-3P)
- 板子尺寸:42mm * 32mm
引脚说明
溶解氧传感器信号转接板管脚定义
标号 | 名称 | 功能描述 |
---|---|---|
1 | A | 模拟信号输出端(0~3.0V) |
2 | + | 电源输入正极(3.3~5.5V) |
3 | - | 电源输入负极 |
4 | BNC | 溶解氧电极连线接口 |
使用教程
本教程将演示如何使用这款溶解氧传感器。配套的电极处于精密电化学传感器,请仔细阅读本教程,注意步骤与细节。
⚠警告
- 使用新的溶解氧电极前,位于电极头部的膜帽需要加入0.5mol/L氢氧化钠溶液作为电极的填充液。该溶液碱性较强,请带好防水手套后操作。如不慎滴到皮肤上,请用大量清水冲洗。
- 膜帽上透明的氧渗透膜为敏感元件,请注意保护,不能用指甲或者其他尖锐物体碰触。
- 溶解氧电极在测量过程中需要耗氧,故测量的时候,需要轻轻搅拌液体,使得溶解氧均匀分布在液体中。但不能剧烈搅拌,以免产生气泡影响测量!
准备材料
- 硬件
- 溶解氧电极(含膜帽) x1
- 0.5mol/L氢氧化钠溶液 x1
- Arduino UNO控制板 x1
- 溶解氧传感器信号转接板 x1
- Gravity 3P模拟连接线 x1
- 软件
- Arduino IDE 下载链接
准备电极
使用全新的溶解氧电极之前,需要在膜帽(位于电极头部)中加入0.5mol/L氢氧化钠溶液,作为电极的填充液。如果电极使用有一段时间后,误差明显增大时,需要更换填充液。下面将详细说明如何给溶解氧电极添加填充液。
拧开电极的膜帽盖,倒入0.5mol/L氢氧化钠溶液到膜帽盖中,倒入量大概为膜帽内部容积的三分之二,然后使电极方向与水平面方向垂直,把膜帽套到电极上再拧紧,以溢出一点氢氧化钠溶液为佳。
- 在套上加有填充液的膜帽并拧紧时,电极尽量与水平面垂直,否则会出现不均匀,导致气泡产生。
- 加入填充液时,不能把膜帽加满,否则套到电极上时,会溢出很多填充液;也不可太少,没加够填充液会导致膜帽内部产生气泡。故倒入三分之二左右,膜帽拧紧后,以溢出一点氢氧化钠溶液- 为佳。
- 膜帽上溢出的氢氧化钠溶液,请用吸水纸吸干。
- 开封过的氢氧化钠溶液瓶,需尽快密封好,防止空气中的二氧化碳对其产生影响。
接线图
电极的填充液加入完毕后,需要进行一次校准。在校准前,请按照下图所示的接线图连接:电极接到信号转接板的BNC接口上,信号转接板接到arduino主控板的模拟口上。
校准电极
为保证精度,初次使用的电极,或者使用了一段时间的电极,需要进行校准。
- 单点校准:只校准单一温度下饱和溶解氧,适用于温度变化不大时测量
- 两点校准:校准不同温度下饱和溶解氧,可以进行温度补偿计算,适用于宽温度范围测量
校准程序
将示例程序复制到Arduino IDE中,选择对应的开发板和端口上传
上传成功后打开串口监视器,设置波特率为115200,进行后续校准步骤
#include <Arduino.h>
#define VREF 5000//若ADC参考电压不为5V,请根据实际情况修改VREF
#define ADC_RES 1024//若ADC分辨率不为1024,请根据实际情况修改ADC_RES
uint32_t raw;
void setup()
{
Serial.begin(115200);
}
void loop()
{
raw=analogRead(A1);
Serial.println("raw:\t"+String(raw)+"\tVoltage(mv)"+String(raw*VREF/ADC_RES));
delay(1000);
}
单点校准
只校准单一温度下饱和溶解氧对应电压,适用于温度变化不大的测量。
获得饱和溶解氧电压有两种方法,将润湿的探头暴露在空气中,操作方便,精度较低;或将探头浸入饱和氧水中,操作复杂,精度较高。
暴露空气法
- 按步骤准备好电极
- 将探头在纯净水中润湿,并抖落多余的水珠
- 把探头暴露在空气中,保持适当空气流动(不要使用电风扇吹)
- 待输出电压稳定后,记录电压,即为当前温度下的饱和电压
饱和氧水法
- 按步骤准备电极
- 准备一杯纯净水,使用下列其中一种方法制作饱和氧水。
- 方法A:使用搅拌器、打蛋器,连续高速搅拌10分钟,使溶解氧达到饱和
- 方法B:使用气泵向水中连续充气十分钟,使溶解氧达到饱和
- 停止搅拌或充气,待气泡散尽后将溶解氧探头放入
- 放入探头后,保持均匀慢速搅拌,避免产生任何气泡。
- 待输出电压稳定后,记录温度和电压
两点校准
- 准备两杯纯净水,一杯放入冰箱中冷藏,一杯加热至稍温热,温度应控制在0-40℃之间,否则可能损坏探头。
- 取其中一杯,使用下列其中一种方法制作饱和氧水
- 方法A:使用搅拌器、打蛋器,连续高速搅拌10分钟,使溶解氧达到饱和
- 方法B:使用气泵向水中连续充气十分钟,使溶解氧达到饱和
- 停止搅拌或充气,待气泡散尽后将溶解氧探头放入
- 放入探头后,保持均匀慢速搅拌,避免产生任何气泡。
- 待输出电压稳定后,记录温度和电压
- 对另一杯水进行同样的测量,记录温度和电压
示例程序
请先进行校准,根据校准结果修改程序再上传
#include <Arduino.h>
#define DO_PIN A1
#define VREF 5000 //若ADC参考电压不为5V,请根据实际情况修改VREF
#define ADC_RES 1024 //若ADC分辨率不为1024,请根据实际情况修改ADC_RES
#define TWO_POINT_CALIBRATION 0 //单点校准设置为0,两点校准设置为1
#define READ_TEMP (25) //填写当前水温℃,如果有温度传感器可以填相应获取温度的函数
//单点校准只需要填写CAL1_V和CAL1_T
#define CAL1_V (1600) //单位为mv
#define CAL1_T (25) //单位℃
//两点校准需要填写CAL2_V与CAL2_T,CAL1是高温校准点,CAL2是低温校准点
#define CAL2_V (1300) //单位为mv
#define CAL2_T (15) //单位℃
const uint16_t DO_Table[41] = {
14460, 14220, 13820, 13440, 13090, 12740, 12420, 12110, 11810, 11530,
11260, 11010, 10770, 10530, 10300, 10080, 9860, 9660, 9460, 9270,
9080, 8900, 8730, 8570, 8410, 8250, 8110, 7960, 7820, 7690,
7560, 7430, 7300, 7180, 7070, 6950, 6840, 6730, 6630, 6530, 6410
};
uint8_t Temperaturet;
uint16_t ADC_Raw;
uint16_t ADC_Voltage;
uint16_t DO;
int16_t readDO(uint32_t voltage_mv, uint8_t temperature_c)
{
#if TWO_POINT_CALIBRATION == 0
uint16_t V_saturation = (uint32_t)CAL1_V + (uint32_t)35 * temperature_c - (uint32_t)CAL1_T * 35;
return (voltage_mv * DO_Table[temperature_c] / V_saturation);
#else
uint16_t V_saturation = (int16_t)((int8_t)temperature_c - CAL2_T) * ((uint16_t)CAL1_V - CAL2_V) / ((uint8_t)CAL1_T - CAL2_T) + CAL2_V;
return (voltage_mv * DO_Table[temperature_c] / V_saturation);
#endif
}
void setup()
{
Serial.begin(115200);
}
void loop()
{
Temperaturet = (uint8_t)READ_TEMP;
ADC_Raw = analogRead(DO_PIN);
ADC_Voltage = uint32_t(VREF) * ADC_Raw / ADC_RES;
Serial.print("Temperaturet:\t" + String(Temperaturet) + "\t");
Serial.print("ADC RAW:\t" + String(ADC_Raw) + "\t");
Serial.print("ADC Voltage:\t" + String(ADC_Voltage) + "\t");
Serial.println("DO:\t" + String(readDO(ADC_Voltage, Temperaturet)) + "\t");
delay(1000);
}
上传完成后,打开串口监视器,设置波特率为115200,可以看到如下输出结果
Temperaturet: 25 ADC RAW: 215 ADC Voltage: 1049 DO: 5413
Temperaturet: 25 ADC RAW: 214 ADC Voltage: 1044 DO: 5387
Temperaturet: 25 ADC RAW: 214 ADC Voltage: 1044 DO: 5387
Temperaturet: 25 ADC RAW: 213 ADC Voltage: 1040 DO: 5362
Temperaturet: 25 ADC RAW: 213 ADC Voltage: 1040 DO: 5362
Temperaturet
温度ADC RAW
ADC原始读数ADC Voltage
ADC原始数据转换为电压值,单位mvDO
溶解氧读数,单位μg/L,转换为常见的mg/L单位需要除以1000
校准原理
当温度固定时,电压与溶解氧浓度成线性关系。由于电极生产时的细微差异,需要先校准饱和溶解氧对应的电压,即可获得准确的数据。
但是饱和溶解氧受温度变化影响大,实际测量中也不可能长时间保持温度不变,因此需要考虑温度变化导致的溶解氧和饱和电压变化,并进行相应计算,提高精度。
饱和电压与温度大致关系如下图所示,需要测量两个不同温度下的饱和溶解氧电压,得到温度补偿曲线。
标准大气压下温度与饱和溶解氧对应关系已知,即可通过测量温度确定当前温度饱和溶解氧浓度和对应电压,进而计算溶解氧。
Mind+(基于Scratch3.0)图形化编程
- 下载及安装软件。下载地址:https://www.mindplus.cc 详细教程:Mind+基础wiki教程-软件下载安装
- 切换到“上传模式”。 详细教程:Mind+基础wiki教程-上传模式编程流程
- “扩展”中选择“主控板”中的“Arduino Uno”。 "扩展"“传感器”中搜索选择“模拟DO计”。详细教程:Mind+基础wiki教程-加载扩展库流程
- 进行编程,程序如下图:
- 菜单“连接设备”,“上传到设备”
- 程序上传完毕后,打开串口即可看到数据输出。详细教程:Mind+基础wiki教程-串口打印
常见问题
Q1. 如何配制饱和氧水?
- A. 一般情况下,往蒸馏水里充空气冒泡20分钟。这样就会使空气与氧气在水中达到饱和,从而制出了100%的溶氧校准标液。
Q2. 如何配置无氧水?
- A. 一般情况下,往蒸馏水里加亚硫酸钠直至亚硫酸钠饱和,消耗掉水中的氧气,从而制得无氧水。
Q3. 电极不使用了,如何保存?
- A.
- 短期(过夜或者一周): 装配好的电极应该存放在去离子水或蒸馏水中,防止填充液蒸发。任何不用的时候需要把它从仪器设备上拔下来。
- **长期:**将电极的膜帽拧下来,用去离子水或蒸馏水冲洗电极芯(阴极:白金,阳极:铅)和膜帽组件。再用吸水纸将所有部件吸干。膜帽也可以放置电极上,但是它必须被存放在无填充液的状况下,以防止电极正极的消耗。把所有部件安全地保存在原有的电极盒里。
Q4. 如何配制电极填充液(氢氧化钠溶液(NaOH),浓度为0.5mol/L)?
- A. 在使用本传感器前,可能需要配置氢氧化钠溶液(NaOH), 浓度为0.5mol/L,且每100mL氢氧化钠溶液中,添加1~2滴甘油。此溶液作为电极填充液,需要加入电极中,电极才能使用。如无法购买或配置好氢氧化钠溶液,本产品将不能正常使用!
Q5. 常见的故障有哪些?怎么处理? |
- A. 如果电极在无氧水中的读数不在零或不是非常接近零,请对电极芯头部(阴极)抛光。如果电极读数不在正常读数范围,或者电极读数漂移,请检测膜帽上的薄膜。如果膜帽上的薄膜有可看得见的破裂、穿孔、或污染,请更换膜帽。
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。