Arduino溶液检测传感器-Analog ORP Meter 模拟ORP计

概述

  • 想DIY一个ORP计吗?还在为没有一款价格低廉、使用方便的ORP计而烦恼吗?我们推出了一款专为Arduino控制器设计的模拟ORP计,具有连线简单、方便实用等特点。按照示意图连线后,再通过程序控制,就可以非常方便的测量溶液的ORP。
  • ORP是英文Oxidation-Reduction Potential的缩写,即氧化还原电位。ORP是氧化还原能力的测量指标,表征氧化性或还原性的相对程度,其单位是mV。氧化还原电位越高,氧化性越强;氧化还原电位越低,氧化性越弱。电位为正表示介质显示出一定的氧化性,电位为负则说明介质显示出一定的还原性。
  • ORP是水质检测中一个重要的指标,它虽然不能独立反应水质的好坏,但是能够综合其他水质指标来反映水族系统中的生态环境。
  • 测量元件是ORP复合电极,由金或铂电极与参比电极组合成复合电极,用以测量溶液的氧化还原电位。

技术指标

  • 模块电源:+5.00V
  • 模块尺寸:40mmX27mm
  • 测量范围:-2000mV—2000mV
  • 适用温度:5-70℃
  • 精度:±10mV(25℃)
  • 响应时间:≤20sec
  • BNC接口型ORP电极
  • PH2.0接口(3脚贴片)
  • 零点校准按钮
  • 电源指示灯

ORP标准溶液温度系数特性

ORP mV.jpg
ORP计的使用

连接图

ORP meter 2.png

使用步骤

注意:

  • 请使用高品质开关电源,电压尽量接近+5.00V,电压越准,精度越高!
  • ORP电极使用时无需标定,直接使用即可。只有对ORP电极的品质或测试结果有疑问时,可用ORP标准溶液检查电极电位,以判断ORP电极或仪器的好坏。
  • ORP电极每测一种溶液,都需要使用清水清洗,建议使用去离子水清洗。
  • ORP电极连接到ORP meter电路板上时,严禁按下calibration按键,否则会损坏ORP电极!

(1)用模拟连接线,把ORP meter电路板右边的接口连接到Arduino主控器的模拟口1,对Arduino主控器供电后,可以看到ORP meter电路板的蓝色指示灯变亮。

(2)对Arduino主控器烧写样例代码(注意:此时样例程序中应该是#define OFFSET 0)。

(3)打开Arduino IDE的串口监视器,可以看到当前打印出的ORP值。按下ORP meter电路板上的calibration按键保持不放,应该能看到打印出的值是一个很小的值,然后根据这个打印值,修改样例程序中的偏移量。比如,串口打印出:“ORP: 8mV”,那么把样例程序中的“#define OFFSET 0”修改成“#define OFFSET 8”即可。修改偏移量的目的是为了消除运算放大器产生的零漂电压,提高测量精度。修改完样例程序后,重新编译下载即可,这样便完成了校准。

(4)把ORP电极连接到ORP meter电路板的BNC接口。完整的连线图请对照连接示意图。经过校准后,ORP电极就能测量溶液的ORP值了,通过串口监视器,能很方便的查看当前溶液的ORP值。

样例代码

下载样例代码后,打开Arduino IDE的串口监视器,即可看到结果。

/*
# This sample codes is for testing the ORP meter V1.0.
 # Editor : YouYou
 # Date   : 2013.11.26
 # Product: ORP meter V1.0
 # SKU    : SEN0165
*/
#define VOLTAGE 5.00    //system voltage
#define OFFSET 0        //zero drift voltage
#define LED 13         //operating instructions

double orpValue;

#define ArrayLenth  40    //times of collection
#define orpPin 1          //orp meter output,connect to Arduino controller ADC pin

int orpArray[ArrayLenth];
int orpArrayIndex=0;

double avergearray(int* arr, int number){
  int i;
  int max,min;
  double avg;
  long amount=0;
  if(number<=0){
    printf("Error number for the array to avraging!/n");
    return 0;
  }
  if(number<5){   //less than 5, calculated directly statistics
    for(i=0;i<number;i++){
      amount+=arr[i];
    }
    avg = amount/number;
    return avg;
  }else{
    if(arr[0]<arr[1]){
      min = arr[0];max=arr[1];
    }
    else{
      min=arr[1];max=arr[0];
    }
    for(i=2;i<number;i++){
      if(arr[i]<min){
        amount+=min;        //arr<min
        min=arr[i];
      }else {
        if(arr[i]>max){
          amount+=max;    //arr>max
          max=arr[i];
        }else{
          amount+=arr[i]; //min<=arr<=max
        }
      }//if
    }//for
    avg = (double)amount/(number-2);
  }//if
  return avg;
}


void setup(void) {
  Serial.begin(9600);
  pinMode(LED,OUTPUT);
}

void loop(void) {
  static unsigned long orpTimer=millis();   //analog sampling interval
  static unsigned long printTime=millis();
  if(millis() >= orpTimer)
  {
    orpTimer=millis()+20;
    orpArray[orpArrayIndex++]=analogRead(orpPin);    //read an analog value every 20ms
    if (orpArrayIndex==ArrayLenth) {
      orpArrayIndex=0;
    }   
    orpValue=((30*(double)VOLTAGE*1000)-(75*avergearray(orpArray, ArrayLenth)*VOLTAGE*1000/1024))/75-OFFSET;   //convert the analog value to orp according the circuit
  }
  if(millis() >= printTime)   //Every 800 milliseconds, print a numerical, convert the state of the LED indicator
  {
    printTime=millis()+800;
    Serial.print("ORP: ");
    Serial.print((int)orpValue);
        Serial.println("mV");
        digitalWrite(LED,1-digitalRead(LED));
  }
}

维护及注意事项

  • 测量前和测量后,都应用去离子水清洗电极,以保证测量精度,在粘稠试样中测定时,电极需用热去离子水反复冲洗几次,以除去黏在铂金片上的试样,或先用适宜的溶剂清洗,再用去离子水洗去溶剂。
  • 电极经长期使用后会发生钝化,其现象是敏感梯度降低,响应变慢,读数不准,此时可将电极下端铂金片用0.1M稀盐酸浸泡24小时。
  • 电极污染或者液接面堵塞,也会使电极钝化,此时,应根据污染物的性质选择适当溶液清洗,如下(仅供参考):
    Clean.jpg
  • 电极使用周期为一年左右,老化后应及时更换新的电极。

相关文档

资料包(原理图、布局图、样例代码、ORP复合电极使用说明书)

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: none