pH標(biāo)度用于測(cè)量液體的酸度和堿度。它的讀數(shù)范圍為 1-14,其中 1 表示酸性最強(qiáng)的液體,14 表示最基本的液體。7 pH 適用于既非酸性也非堿性的中性物質(zhì)。現(xiàn)在,pH 在我們的生活中扮演著非常重要的角色,它被用于各種應(yīng)用。例如,它可以在游泳池中用于檢查水質(zhì)。同樣,pH 測(cè)量用于農(nóng)業(yè)、廢水處理、工業(yè)、環(huán)境監(jiān)測(cè)等多種應(yīng)用。
在這個(gè)項(xiàng)目中,我們將制作一個(gè)Arduino pH 計(jì),并學(xué)習(xí)如何使用重力 pH 傳感器和 Arduino 測(cè)量液體溶液的 pH 值。16x2 LCD用于在屏幕上顯示 pH 值。我們還將學(xué)習(xí)如何校準(zhǔn) pH 傳感器以確定傳感器的精度。所以讓我們開始吧!
所需組件
阿杜諾烏諾
16*2 字母數(shù)字液晶屏
LCD用I2C模塊
重力模擬 pH 傳感器
連接線
面包板
什么是pH值?
我們用來測(cè)量物質(zhì)酸度的單位稱為pH 值。術(shù)語“H”定義為氫離子濃度的負(fù)對(duì)數(shù)。pH 值的范圍可以是 0 到 14。pH 值 7 是中性的,因?yàn)榧兯?pH 值正好是 7。低于 7 的值是酸性的,高于 7 的值是堿性或堿性的。
重力模擬 pH 傳感器如何工作?
模擬 pH 傳感器旨在測(cè)量溶液的 pH 值并顯示物質(zhì)的酸度或堿度。常用于農(nóng)業(yè)、污水處理、工業(yè)、環(huán)境監(jiān)測(cè)等多種應(yīng)用。模塊板載穩(wěn)壓芯片,支持3.3-5.5V DC寬電壓供電,兼容5V和Arduino等任何控制板的3.3V。輸出信號(hào)被硬件低抖動(dòng)過濾。
技術(shù)特點(diǎn):
信號(hào)轉(zhuǎn)換模塊:
供電電壓:3.3~5.5V
BNC 探頭連接器
高精度:±0.1@25°C
檢測(cè)范圍:0~14
PH電極:
工作溫度范圍:5~60°C
零(中性)點(diǎn):7±0.5
輕松校準(zhǔn)
內(nèi)阻:《250MΩ
pH 信號(hào)轉(zhuǎn)換板:
引腳說明:
V+: 5V直流輸入
G:接地引腳
Po: pH模擬輸出
做: 3.3V直流輸出
至:溫度輸出
pH電極結(jié)構(gòu):
pH 傳感器的結(jié)構(gòu)如上圖所示。pH 傳感器看起來像一根通常由玻璃材料制成的桿,其尖端稱為“玻璃膜” 。該膜填充有已知 pH 值(通常 pH = 7)的緩沖溶液。這種電極設(shè)計(jì)確保了在玻璃膜內(nèi)部不斷結(jié)合 H+ 離子的環(huán)境。當(dāng)探針浸入待測(cè)溶液時(shí),測(cè)試溶液中的氫離子開始與玻璃膜上的其他帶正電離子交換,從而在膜上產(chǎn)生電化學(xué)電位,該電位被饋送到測(cè)量電位的電子放大器模塊在兩個(gè)電極之間并將其轉(zhuǎn)換為pH 單位。 這些電位之間的差異決定了基于 Nernst 方程的 pH 值。
能斯特方程:
Nernst 方程給出了電化學(xué)電池的電池電位、溫度、反應(yīng)商和標(biāo)準(zhǔn)電池電位之間的關(guān)系。在非標(biāo)準(zhǔn)條件下,Nernst 方程用于計(jì)算電化學(xué)電池中的電池電位。Nernst 方程還可用于計(jì)算全電化學(xué)電池的總電動(dòng)勢(shì) (EMF)。該方程也用于計(jì)算溶液的 PH 值。玻璃電極響應(yīng)由 Nernst 方程控制,可以給出:
E = E0 - 2.3 (RT/nF) ln Q
?
在哪里 Q=反應(yīng)系數(shù) E = 電極的 mV 輸出 E0 = 電極的零偏移 R = 理想氣體常數(shù) = 8.314 J/mol-K T = 溫度,單位 oK F = 法拉第常數(shù) = 95,484.56 C/mol N = 離子電荷
?
Arduino pH計(jì)電路圖
這個(gè)Arduino pH計(jì)項(xiàng)目的電路圖如下:
pH信號(hào)轉(zhuǎn)換板與Arduino的連接:
Arduino與PH信號(hào)轉(zhuǎn)換板的連接如下表所示。
為 pH 計(jì)編程 Arduino
硬件連接成功后,現(xiàn)在是對(duì) Arduino 進(jìn)行編程的時(shí)候了。這個(gè)帶有 Arduino 的 pH 計(jì)的完整代碼在本教程的底部給出。該項(xiàng)目的逐步解釋如下。
在程序中要做的第一件事是包含所有必需的庫。在我的例子中,我包含了用于使用 LCD 顯示器的 I2C 接口的“?LiquidCrystal_I2C.h”庫和用于在 Arduino 上使用 I2C 功能的“?Wire.h ”。
?
#include#include LiquidCrystal_I2C lcd(0x27, 16, 2);
?
接下來,定義校準(zhǔn)值,可以根據(jù)需要對(duì)其進(jìn)行修改,以獲得準(zhǔn)確的溶液 pH 值。(這在文章后面會(huì)解釋)
?
浮動(dòng)校準(zhǔn)值 = 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() 內(nèi)部,讀取 10 個(gè)樣本模擬值并將它們存儲(chǔ)在一個(gè)數(shù)組中。這是平滑輸出值所必需的。
?
for(int i=0;i<10;i++) { buffer_arr[i]=analogRead(A0); 延遲(30); }
?
然后,按升序?qū)邮盏降哪M值進(jìn)行排序。這是必需的,因?yàn)槲覀冃枰诤笃谟?jì)算樣本的運(yùn)行平均值。
?
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]=溫度; } } }
?
最后,計(jì)算一個(gè) 6 個(gè)中心樣本 Analog 值的平均值。然后將該平均值轉(zhuǎn)換為實(shí)際的 pH 值并打印在 LCD 顯示器上。
?
for(int i=2;i<8;i++) avgval+=buffer_arr[i]; 浮動(dòng)電壓=(浮動(dòng))avgval*5.0/1024/6; 浮動(dòng) ph_act = -5.70 * 伏特 + 校準(zhǔn)值; lcd.setCursor(0, 0); lcd.print("pH值:"); lcd.setCursor(8, 0); lcd.print(ph_act); 延遲(1000); }
?
pH電極的校準(zhǔn)
PH 電極的校準(zhǔn)在這個(gè)項(xiàng)目中非常重要。為此,我們需要一個(gè)我們知道其價(jià)值的解決方案。這可以作為傳感器校準(zhǔn)的參考解決方案。
假設(shè)我們有一個(gè) PH 值為 7 的溶液(蒸餾水)。現(xiàn)在將電極浸入?yún)⒈热芤褐校琇CD 上顯示的 PH 值為 6.5。然后校準(zhǔn)它,只需在代碼中的校準(zhǔn)變量“ calibration_value”中添加7-6.5=0.5。即使值21.34 + 0.5=21.84。進(jìn)行這些更改后,再次將代碼上傳到 Arduino 并通過將電極浸入?yún)⒖既芤褐兄匦聶z查 pH 值。現(xiàn)在 LCD 應(yīng)該顯示正確的 pH 值,即7(變化很小)。同樣,調(diào)整此變量以校準(zhǔn)傳感器。然后檢查所有其他解決方案以獲得準(zhǔn)確的輸出。
測(cè)試 Arduino pH 測(cè)試儀
我們已經(jīng)將這款 Arduino pH 計(jì)浸入純水和檸檬水中,您可以看到下面的結(jié)果。
純凈水:
檸檬水:
這就是我們?nèi)绾问褂?Arduino 構(gòu)建 pH 傳感器并使用它來檢查各種液體的 pH 值。
#include
#include
LiquidCrystal_I2C lcd(0x27, 16, 2);
浮動(dòng)校準(zhǔn)值 = 21.34;
int phval = 0;
unsigned long int avgval;
int buffer_arr[10],溫度;
無效設(shè)置()
{
序列號(hào).開始(9600);
液晶顯示器();
lcd.begin(16, 2);
液晶背光();
lcd.setCursor(0, 0);
lcd.print("歡迎來到");
lcd.setCursor(0, 1);
lcd.print("電路文摘");
延遲(2000);
lcd.clear();
}
無效循環(huán)(){
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]=溫度;
}
}
}
平均價(jià)值=0;
for(int i=2;i<8;i++)
avgval+=buffer_arr[i];
浮動(dòng)電壓=(浮動(dòng))avgval*5.0/1024/6;
浮動(dòng) ph_act = -5.70 * 伏特 + 校準(zhǔn)值;
lcd.setCursor(0, 0);
lcd.print("pH值:");
lcd.setCursor(8, 0);
lcd.print(ph_act);
延遲(1000);
}
評(píng)論