你的位置: 首页 > 仪器仪表 > 电工仪器仪表

如何制作一个Arduino pH计

2023-08-15 11:26:23 | 人围观 | 评论:

  pH标度用于测量液体的酸度和碱度。它的读数范围为 1-14,其中 1 表示酸性最强的液体,14 表示最基本的液体。7 pH 适用于既非酸性也非碱性的中性物质。现在,pH 在我们的生活中扮演着非常重要的角色,它被用于各种应用。例如,它可以在游泳池中用于检查水质。同样,pH 测量用于农业、废水处理、工业环境监测等多种应用。

  在这个项目中,我们将制作一个Arduino pH 计,并学习如何使用重力 pH 传感器和 Arduino 测量液体溶液的 pH 值。16x2 LCD用于在屏幕上显示 pH 值。我们还将学习如何校准 pH 传感器以确定传感器的精度。所以让我们开始吧!

  所需组件

  阿杜诺乌诺

  16*2 字母数字液晶屏

  LCD用I2C模块

  重力模拟 pH 传感器

  连接线

  面包板

  什么是pH值?

  我们用来测量物质酸度的单位称为pH 值。术语“H”定义为氢离子浓度的负对数。pH 值的范围可以是 0 到 14。pH 值 7 是中性的,因为纯水的 pH 值正好是 7。低于 7 的值是酸性的,高于 7 的值是碱性或碱性的。

poYBAGL2EXSAEs5ZAABkldtLexc706.png

  重力模拟 pH 传感器如何工作?

  模拟 pH 传感器旨在测量溶液的 pH 值并显示物质的酸度或碱度。常用于农业、污水处理、工业、环境监测等多种应用。模块板载稳压芯片,支持3.3-5.5V DC宽电压供电,兼容5V和Arduino等任何控制板的3.3V。输出信号硬件低抖动过滤。

  技术特点:

  信号转换模块:

  供电电压:3.3~5.5V

  BNC 探头连接器

  高精度:±0.1@25°C

  检测范围:0~14

  PH电极:

  工作温度范围:5~60°C

  零(中性)点:7±0.5

  轻松校准

  内阻:《250MΩ

poYBAGL2EW-AHCeYAAVAbCq6UCY726.png

  pH 信号转换板:

pYYBAGL2EWmAdVcbAANRAHvhCg0111.png

  引脚说明:

  V+: 5V直流输入

  G:接地引脚

  Po: pH模拟输出

  做: 3.3V直流输出

  至:温度输出

  pH电极结构:

poYBAGL2EWaAO5tgAABbU0w3db0801.png

  pH 传感器的结构如上图所示。pH 传感器看起来像一根通常由玻璃材料制成的杆,其尖端称为“玻璃膜” 。该膜填充有已知 pH 值(通常 pH = 7)的缓冲溶液。这种电极设计确保了在玻璃膜内部不断结合 H+ 离子的环境。当探针浸入待测溶液时,测试溶液中的氢离子开始与玻璃膜上的其他带正电离子交换,从而在膜上产生电化学电位,该电位被馈送到测量电位的电子放大器模块在两个电极之间并将其转换为pH 单位。 这些电位之间的差异决定了基于 Nernst 方程的 pH 值。

  能斯特方程:

  Nernst 方程给出了电化学电池的电池电位、温度、反应商和标准电池电位之间的关系。在非标准条件下,Nernst 方程用于计算电化学电池中的电池电位。Nernst 方程还可用于计算全电化学电池的总电动势 (EMF)。该方程也用于计算溶液的 PH 值。玻璃电极响应由 Nernst 方程控制,可以给出:

 E = E0 - 2.3 (RT/nF) ln Q

 


在哪里
Q=反应系数
E = 电极的 mV 输出
E0 = 电极的零偏移
R = 理想气体常数 = 8.314 J/mol-K
T = 温度,单位 ºK
F = 法拉第常数 = 95,484.56 C/mol
N = 离子电荷

 

  Arduino pH计电路图

  这个Arduino pH计项目的电路图如下:

pYYBAGL2EWCARUPSAADwPB_qltk077.png

  pH信号转换板与Arduino的连接:

  Arduino与PH信号转换板的连接如下表所示。

poYBAGL2EVyAPnd9AAAJRNrSK2Y412.png

pYYBAGL2EViATasSAAZgN2KbHBw321.png

为 pH 计编程 Arduino

硬件连接成功后,现在是对 Arduino 进行编程的时候了。这个带有 Arduino 的 pH 计的完整代码在本教程的底部给出。该项目的逐步解释如下。

在程序中要做的第一件事是包含所有必需的库。在我的例子中,我包含了用于使用 LCD 显示器的 I2C 接口的“ LiquidCrystal_I2C.h”库和用于在 Arduino 上使用 I2C 功能的“ Wire.h ”。

 

#include 
#include 
LiquidCrystal_I2C lcd(0x27, 16, 2);

 

接下来,定义校准值,可以根据需要对其进行修改,以获得准确的溶液 pH 值。(这在文章后面会解释)

 

浮动校准值 = 21.34;

 

在setup() 中,编写了 LCD 命令用于在 LCD 上显示欢迎消息。

 

  液晶显示器();
  lcd.begin(16, 2);
  液晶背光();
  lcd.setCursor(0, 0);
  lcd.print("欢迎来到");
  lcd.setCursor(0, 1);
  lcd.print("电路文摘");
  延迟(2000);
  lcd.clear();

 

在loop() 内部,读取 10 个样本模拟值并将它们存储在一个数组中。这是平滑输出值所必需的。

 

for(int i=0;i<10;i++)
 {
 buffer_arr[i]=analogRead(A0);
 延迟(30);
 }

 

然后,按升序对接收到的模拟值进行排序。这是必需的,因为我们需要在后期计算样本的运行平均值。

 

for(int i=0;i<9;i++)
 {
 for(int j=i+1;j<10;j++)
 {
 如果(buffer_arr[i]>buffer_arr[j])
 {
 temp=buffer_arr[i];
 buffer_arr[i]=buffer_arr[j];
 buffer_arr[j]=温度;
 }
 }
 }

 

最后,计算一个 6 个中心样本 Analog 值的平均值。然后将该平均值转换为实际的 pH 值并打印在 LCD 显示器上。

 

for(int i=2;i<8;i++)
 avgval+=buffer_arr[i];
 浮动电压=(浮动)avgval*5.0/1024/6;
 浮动 ph_act = -5.70 * 伏特 + 校准值;
 lcd.setCursor(0, 0);
 lcd.print("pH值:");
 lcd.setCursor(8, 0);
 lcd.print(ph_act);
 延迟(1000);
}

 

  pH电极的校准

  PH 电极的校准在这个项目中非常重要。为此,我们需要一个我们知道其价值的解决方案。这可以作为传感器校准的参考解决方案。

  假设我们有一个 PH 值为 7 的溶液(蒸馏水)。现在将电极浸入参比溶液中,LCD 上显示的 PH 值为 6.5。然后校准它,只需在代码中的校准变量“ calibration_value”中添加7-6.5=0.5。即使值21.34 + 0.5=21.84。进行这些更改后,再次将代码上传到 Arduino 并通过将电极浸入参考溶液中重新检查 pH 值。现在 LCD 应该显示正确的 pH 值,即7(变化很小)。同样,调整此变量以校准传感器。然后检查所有其他解决方案以获得准确的输出。

  测试 Arduino pH 测试仪

  我们已经将这款 Arduino pH 计浸入纯水和柠檬水中,您可以看到下面的结果。

  纯净水:

poYBAGL2EVKANfU9AAW_YKoP0ow538.png

  柠檬水:

pYYBAGL2EU6AGEmlAAasXa_dam8190.png

  这就是我们如何使用 Arduino 构建 pH 传感器并使用它来检查各种液体的 pH 值。

#include
#include
LiquidCrystal_I2C lcd(0x27, 16, 2);
浮动校准值 = 21.34;
int phval = 0;
unsigned long int avgval;
int buffer_arr[10],温度;
无效设置()
{
序列号.开始(9600);
液晶显示器();
lcd.begin(16, 2);
液晶背光();
lcd.setCursor(0, 0);
lcd.print("欢迎来到");
lcd.setCursor(0, 1);
lcd.print("电路文摘");
延迟(2000);
lcd.clear();
}
无效循环(){
for(int i=0;i<10;i++)
{
buffer_arr[i]=analogRead(A0);
延迟(30);
}
for(int i=0;i<9;i++)
{
for(int j=i+1;j<10;j++)
{
如果(buffer_arr[i]>buffer_arr[j])
{
temp=buffer_arr[i];
buffer_arr[i]=buffer_arr[j];
buffer_arr[j]=温度;
}
}
}
平均价值=0;
for(int i=2;i<8;i++)
avgval+=buffer_arr[i];
浮动电压=(浮动)avgval*5.0/1024/6;
浮动 ph_act = -5.70 * 伏特 + 校准值;
lcd.setCursor(0, 0);
lcd.print("pH值:");
lcd.setCursor(8, 0);
lcd.print(ph_act);
延迟(1000);
}





标签:[db:tags]

相关内容推荐: