Arduino连接pH计
关于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值与电流值的线性关系非常好。
把电路图放一下,说不定以后有用.....