打造您的 pH 計

跟隨這些步驟,組裝您專屬的科學儀器。

程式碼上傳與說明

這是您 pH 計的「大腦」。這段程式碼告訴 Arduino 如何讀取感測器、計算 pH 值並將其顯示在螢幕上。

完整程式碼

複製此完整程式碼區塊並貼到您的 Arduino IDE 的新草稿碼中。


#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// 將 LCD 位址設為 0x27,適用於 16 字元 x 2 行的顯示器
LiquidCrystal_I2C lcd(0x27, 16, 2);

#define SensorPin A0            // pH 計類比輸出至 Arduino 類比引腳 0
#define VREF 5.0                // 電壓參考,通常為 5.0V
unsigned long int avgValue;     // 儲存感測器回饋的平均值
float b;
int buf[10], temp;

void setup() {
  Serial.begin(9600);
  lcd.begin();                  // 初始化 lcd
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("PhytoLogica Meter");
  delay(1500);
}

void loop() {
  // 採樣 10 次以獲得更穩定的讀數
  for(int i=0; i<10; i++) { 
    buf[i] = analogRead(SensorPin);
    delay(10);
  }
  
  // 對樣本進行排序以找到中位數
  for(int i=0; i<9; i++) {
    for(int j=i+1; j<10; j++) {
      if(buf[i] > buf[j]) {
        temp = buf[i];
        buf[i] = buf[j];
        buf[j] = temp;
      }
    }
  }
  
  // 取中間 6 個樣本的平均值
  avgValue = 0;
  for(int i=2; i<8; i++) {
    avgValue += buf[i];
  }
  
  // 將類比值轉換為電壓,然後再轉換為 pH 值
  float pHVol = (float)avgValue * VREF / 1024 / 6; 
  // 這是一個簡化的轉換。需要進行校準以確保準確性!
  float phValue = -5.70 * pHVol + 21.34; 

  // 顯示結果
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("pH Value: ");
  lcd.print(phValue, 2); // 顯示 2 位小數

  Serial.print("Voltage:");
  Serial.print(pHVol, 2);
  Serial.print("    pH value: ");
  Serial.println(phValue, 2);
  
  delay(1000);
}

程式碼說明

  • #include

    這些行匯入必要的函式庫:Wire.h 用於 I2C 通訊,LiquidCrystal_I2C.h 用於控制我們的特定 LCD。

  • 變數宣告

    我們定義感測器連接的引腳(A0)、設定電壓參考,並建立變數來儲存感測器讀數。

  • setup()

    此函數在啟動時只運行一次。它會初始化序列埠監控視窗(用於除錯)和 LCD 螢幕,然後顯示一條啟動訊息。

  • loop()

    這是程式的主要部分,會永遠循環運行。它會不斷執行以下操作:

    1. 從 pH 感測器快速讀取 10 次數據。
    2. 對讀數進行排序並取中間值的平均值,以減少雜訊並獲得穩定的訊號。
    3. 將原始類比讀數(0-1023)轉換為電壓。
    4. 使用線性公式將電壓轉換為 pH 值。注意:此公式僅為起始點。校準步驟對於使其準確至關重要!
    5. 清除 LCD 並顯示最終的 pH 值。
    6. 等待一秒後重複。

(虛擬下載按鈕)