Atlas Scientificセンサーで作る高精度Arduino pHメーター - 部品とガイド
必要な部品と材料
| Arduino UNO | ×1 |
| Atlas Scientific Gravity™ アナログpHセンサー | ×1 |
| Atlas Scientific コンシューマーグレード pHプローブ | ×1 |
| 20×4 LCDモジュール(I2Cアダプター付き推奨) | ×1 |
| 158×90×60mm エンクロージャー(ABS製) | ×1 |
| ミニブレッドボード | ×1 |
| 抵抗 220Ω | ×1 |
| 抵抗 1kΩ | ×1 |
| 11mmスペーサーとネジ(pHセンサー付属) | ×4 |
| ジャンパーワイヤー | ×1セット |
| アクリル板(プレキシガラス) | ×1 |
必要な工具と機器
- ドリル、ドリルビット、乾式壁カッタービット、ヤスリ、ドライバー、ベンチバイス、バンドソー、グルーガン、はんだごて、デジタルノギス、定規
使用するアプリとオンラインサービス
- Arduino IDE
プロジェクト概要
このプロジェクトでは、Atlas ScientificのGravityアナログpH回路とプローブ、Arduino Unoを使って卓上pHメーターを作ります。測定値は液晶ディスプレイ(LCD)に表示されます。
注意:
- このメーターはWindows PCで開発されました。Macではテストしていません。
- エンクロージャーは防水ではありません。
Step 1: ハウジングの準備
安全第一: 工具/機械を扱う際は注意し、ゴーグル、手袋、防塵マスク等の保護具を着用してください。
使用するのはABSプラスチック製エンクロージャー。pHメーター用に加工します。
LCD用開口部の切り出し
- LCDはエンクロージャーの上部(カバー)に配置。中央に98×40mmの長方形をマーク。
- バイスで固定し、マークした長方形内に3.2mm(1/8インチ)の下穴を開ける。
- この下穴から乾式壁カッタービットで内側を切り抜く。小さな作業なのでドリルで手作業で行う。線の内側を切るときれいに仕上がる。
- ヤスリで余分な材料を取り除き、必要なサイズに整える。

BNCコネクタとArduinoポート用開口部
これらはエンクロージャー下部の側面に設けます。
- 下図の寸法に従って、円(BNC用)と2つの長方形(Arduino USB/電源用)の中心と輪郭をマーク。
- バイスで固定して切り抜き。円はドリルビットで、長方形はLCD開口部と同様の手順で。

ベースプレートの準備と部品取り付け
ベースプレートにArduino、pHセンサー、ミニブレッドボードを取り付けます。3.2mm厚のアクリル板を使用。
- バンドソーでアクリル板を135×62.5mmに切断。
- 下図の位置に4つの穴(2.38mm / 3/32インチ径)を開け、片面を皿取り(深さ3mm、径4.4mm / 11/64インチ)してネジ頭が埋まるようにする。
- 付属の11mmスペーサーをネジで取り付け。pHセンサーに4個付属。うち2個をArduino用に使用。

Step 2: ハウジングへの電子部品実装
- ベースプレートをエンクロージャー下部に入れ、ネジまたはホットグルーで固定。
- pHセンサーをベースプレートに取り付け、スペーサーで固定。
- Arduino Unoをベースプレートに取り付け、スペーサーで固定。
- ミニブレッドボードをベースプレートに貼り付け。
- LCDにヘッダーピンをはんだ付け(付属)。エンクロージャー上部に挿入し、ホットグルーで固定。





Step 3: 配線

上記回路図通りに配線します。ミニブレッドボードで1kΩと220Ω抵抗を配置し、Arduinoの5VとGNDを分配します。この2つの抵抗はLCDコントラスト調整用です。

データシート: Gravity pHセンサー、pHプローブ
Step 4: 最終組み立て
- 配線完了後、エンクロージャーの上下を付属ネジで組み合わせる。
- pHプローブをBNCコネクタに接続。

Step 5: Arduino Unoへコードをアップロード
このプロジェクトではカスタムライブラリとヘッダーファイルを使用します。Arduino IDEに追加する手順を含めます。
- ArduinoをPCに接続しIDEを開く(未インストールの場合はこちらから)。
ツール → ボード → Arduino/Genuino Uno を選択。
ツール → シリアルポート → Arduinoが接続されているポートを選択。 - LiquidCrystalライブラリ追加: スケッチ → ライブラリをインクルード → ライブラリを管理 → 検索バーに「liquidcrystal」 → 「LiquidCrystal Built-in by Arduino, Adafruit」をインストール(未インストールの場合)。
- Atlas Gravityセンサーライブラリ追加: ここからZIPダウンロード(「Atlas_gravity.zip」として保存)。
スケッチ → ライブラリをインクルード → .ZIP形式のライブラリをインストール → ダウンロードしたファイルを選択。 - pHメーターコード追加: このリンクのコードをIDEにコピー。
- コンパイルしてアップロード。
- LCDにpH値が表示されます。シリアルモニタ(ツール → シリアルモニタ または Ctrl+Shift+M)でも確認可能。ボーレート9600、「改行コード: CR」を選択。
Step 6: pHセンサーのキャリブレーション
注意: 外部電源でArduinoを動かす場合、キャリブレーション前に接続してください。基準レベルが適切に設定され、正確なキャリブレーションができます。
このpHメーターは1点、2点、または3点キャリブレーションに対応。標準緩衝液(pH 4、7、10)が必要です。
キャリブレーションはシリアルモニタで行います。読み取り値の安定を確認しながらコマンドを送信します。キャリブレーションデータはArduinoのEEPROMに保存されます。
キャリブレーションコマンド
- 低点(pH 4):
cal,4 - 中点(pH 7):
cal,7 - 高点(pH 10):
cal,10 - キャリブレーションクリア:
cal,clear
手順
- ソーカーボトルを外し、pHプローブを水で洗浄。
- pH 4緩衝液をカップに注ぎ、プローブの検出部が浸かる量を確保。
- プローブを浸し、攪拌して気泡を除去。シリアルモニタの読み取り値が安定するまで待つ(微小な変動は正常)。
- 安定したらシリアルモニタに
cal,4と入力送信。pH 4キャリブレーション完了。 - pH 7、pH 10についても同様に繰り返す。緩衝液を変えるたびにプローブを洗浄すること。
温度補償について
使用センサーの精度は±0.2%。動作温度範囲7〜46°Cでこの精度を維持します。この範囲外では温度補償が必要です。なお、pHプローブ自体は1〜60°Cまで耐えられます。
スケッチ
/* アップロード後、シリアルモニタを開き、ボーレート9600、改行コード「CR」を設定
リアルタイムpH表示とキャリブレーションが可能
キャリブレーションコマンド:
低点: "cal,4" 中点: "cal,7" 高点: "cal,10" クリア: "cal,clear"
*/
#include "ph_grav.h" // Atlas Scientific Gravity pHセンサー用ヘッダー
#include "LiquidCrystal.h" // LCD用ヘッダー
String inputstring = "";
boolean input_string_complete = false;
char inputstring_array[10];
Gravity_pH pH = A0; // アナログピンA0をpHセンサー出力に割り当て
LiquidCrystal pH_lcd(2, 3, 4, 5, 6, 7); // LCDピン割り当て (2→RS, 3→E, 4-7→D4-D7)
void setup() {
Serial.begin(9600);
pH_lcd.begin(20, 4); // 20桁×4行LCD初期化
pH_lcd.setCursor(0,0);
pH_lcd.print("--------------------");
pH_lcd.setCursor(0,3);
pH_lcd.print("--------------------");
pH_lcd.setCursor(5, 1);
pH_lcd.print("pH Reading");
if (pH.begin()) {
Serial.println("Loaded EEPROM");
}
Serial.println(F("Use commands \"CAL,4\", \"CAL,7\", and \"CAL,10\" to calibrate"));
Serial.println(F("Use command \"CAL,CLEAR\" to clear the calibration"));
}
void serialEvent() {
inputstring = Serial.readStringUntil(13); // CRまで読み取り
input_string_complete = true;
}
void loop() {
if (input_string_complete) {
inputstring.toCharArray(inputstring_array, 30);
parse_cmd(inputstring_array);
input_string_complete = false;
inputstring = "";
}
Serial.println(pH.read_ph()); // シリアルモニタに出力
pH_lcd.setCursor(8, 2);
pH_lcd.print(pH.read_ph()); // LCDに出力
delay(1000);
}
void parse_cmd(char* string) {
strupr(string); // 大文字変換
if (strcmp(string, "CAL,4") == 0) {
pH.cal_low();
Serial.println("LOW CALIBRATED");
} else if (strcmp(string, "CAL,7") == 0) {
pH.cal_mid();
Serial.println("MID CALIBRATED");
} else if (strcmp(string, "CAL,10") == 0) {
pH.cal_high();
Serial.println("HIGH CALIBRATED");
} else if (strcmp(string, "CAL,CLEAR") == 0) {
pH.cal_clear();
Serial.println("CALIBRATION CLEARED");
}
}
回路図

製造プロセス
- Bluetooth操作のArduinoスパイボットを自作する
- FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
- 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
- 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduinoプロジェクトのための最適化電源ソリューション
- Arduino三目並べ:MAX7219 LEDマトリクスと段ボールケースで自作
- スマートArduino四足歩行ロボットの製作:ステップバイステップガイド
- ゲーム用カスタムArduinoジョイスティックハンドルの製作
- Arduino Nano R3で本格的なCNCマシンを自作する
- Earth Analyzer: 農業支援のための高度IoT環境監視ローバー