首页 > 技术文章 > Arduino连接pH计

sowhat4999 2015-04-23 22:18 原文

关于arduino连接ph,核心的东西就是对ph传感器返回的信号值进行一系列的操作,注意因为返回的信号很弱,而且外部环境对其影响也很大,所以需要在电路设计上加入一些功能,比如信号放大、滤波等,电路设计这一块我是不太熟悉,毕竟不是科班出生,不过今天偶然看到了有的厂家已经做出了运放模块,心里很是激动,但是看到价格优点失望(贵),单独的板子还不卖,我猜想可能是和传感器的信号值与ph值之间的线性关系有关,关于这一点等会在代码中说明,先来看张图:

这个图很简单,具体的有感兴趣的朋友可以参考下这个网站,点击打开(我没有打广告的意思),不过在某宝上询问卖家都说没货,具体原因不清楚。下面主要看下arduino中的代码:

 1 #define SensorPin 0          //pH计模拟输出到arduino的模拟输入端口0
 2 #define Offset 0.00            //偏差补偿
 3 unsigned long int avgValue;  //存储传感器反馈的平均值
 4 void setup()
 5 {
 6   pinMode(13,OUTPUT);//端口输出  
 7   Serial.begin(9600); //波特率9600 
 8   Serial.println("Ready");    //测试端口监视器
 9 }
10 void loop()
11 {
12   int buf[10];                //用于读取模拟数据的缓冲区
13   for(int i=0;i<10;i++)       //从传感器获取10个采样值**平滑
14   { 
15     buf[i]=analogRead(SensorPin);//SensorPin对应的端口
16     delay(10);
17   }
18   for(int i=0;i<9;i++)        //按从小到大的顺序排序模拟值
19   {
20     for(int j=i+1;j<10;j++)
21     {
22       if(buf[i]>buf[j])
23       {
24         int temp=buf[i];
25         buf[i]=buf[j];
26         buf[j]=temp;
27       }
28     }
29   }
30   avgValue=0;
31   for(int i=2;i<8;i++)                      //得到6中心样品的平均值
32     avgValue+=buf[i];
33   float phValue=(float)avgValue*5.0/1024/6; //将模拟值转换毫伏值
34   phValue=3.5*phValue+Offset;                      //毫伏值转换成pH值,3.5对应的是线性斜率
35   Serial.print("    pH:");  
36   Serial.print(phValue,2);
37   Serial.println(" ");
38   digitalWrite(13, HIGH);//设置引脚的输出电压为高\低电平,以此点亮小灯       
39   delay(800);
40   digitalWrite(13, LOW); 
41 }

注释写的很清楚了,就不多解释了,不过上面的那个3.5需要注意下,我也在备注后面标注了,具体对不对还望高手指点,原理上ph值与电流值的线性关系非常好。

把电路图放一下,说不定以后有用.....

推荐阅读