Raspberry PiでpHを測定する方法（AtlasScientific）

## はじめに
pH測定に関する記事が少なかったので、記事にします。

## pHセンサ
pHの測定には、AtlasScientific社の[pH Kit](https://www.atlas-scientific.com/product_pages/kits/ph-kit.html)を使用します。

キットには
校正溶液（10.00 7.00 4.00 pH）、電極用の保存液、ガラス電極、BNCコネクター、pH測定器（かなり優秀）
の５つが含まれます。

秋月電子では、安価な[pHメータ](http://akizukidenshi.com/catalog/g/gM-12547/)が売っています。
しかしながら、このセンサーの出力はアナログ値なので、直接Raspberry Piでは扱うことは出来ません。
[A/D変換器](http://akizukidenshi.com/catalog/g/gI-02584/)を使って無理やり扱うことも出来ますが、部品点数は増えてナンセンスです。
## 準備
詳細は以下のURLを参照してください。
https://atlas-scientific.com/files/pi_sample_code.pdf
https://www.atlas-scientific.com/_files/_datasheets/_circuit/pH_EZO_Datasheet.pdf

### UARTモードからI2Cモードに変更
初期状態ではUARTモードになってます。今回はI2Cを使いたいので以下の手順で変更します。

TX端子とPGND端子を接続します。
この状態で、測定器にVCCとGNDを接続します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/309467/07f98de6-9ac7-4981-56ae-77c47aecf2ea.png" width=80%>
LEDが青色に発光すればI2Cモードになります。

### I2Cを有効にする
[この記事](https://qiita.com/kamujun/items/51f85339bfd582b27752#i2c%E7%94%A8%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%AE%E6%9C%89%E5%8A%B9%E5%8C%96)を参考にしてRapberry PiのI2C通信を有効にします。
### Raspberry PiとpH測定器の接続
以下のように接続します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/309467/ed19a1a4-b6fc-358d-0e7c-2d0d3146ef6e.png" width=60%>
Raspberry pi側のプルアップ抵抗を使用している為、外部でプルアップは行っていません。
### Raspberry Piの準備
Raspberry Piのアップデートとアップグレード

```
sudo apt update && sudo apt upgrade -y
```

ホームディレクトリに移動して、サンプルコードをダウンロードします。

```
cd ~
git clone https://github.com/AtlasScientific/Raspberry-Pi-sample-code.git
```

必要なパッケージをインストールします。

```
sudo apt install python3-smbus python-smbus i2c-tools
```

以下のコマンドで接続を確認します。

```
sudo i2cdetect -y 1
```

以下のように、63と表示されれば大丈夫です。

```
pi@raspberrypi:~ $ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- 63 -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --   
```

## pHの測定
プログラムを起動します。

```
cd ~/Raspberry-Pi-sample-code
sudo python3 i2c.py
```

以下のコンソールが立ち上がります

```
pi@raspberry:~/Raspberry-Pi-sample-code $ python3 i2c.py 
>> Atlas Scientific sample code
>> Any commands entered are passed to the board via I2C except:
>>   List_addr lists the available I2C addresses.
>>   Address,xx changes the I2C address the Raspberry Pi communicates with.
>>   Poll,xx.x command continuously polls the board every xx.x seconds
 where xx.x is longer than the 1.50 second timeout.
>> Pressing ctrl-c will stop the polling
Enter command:
```

アドレスをセットします。
Enter command:に続いて`Address,99`を入力しEnterを押します。

```
Enter command: Address,99 
I2C address set to 99
```

pHを測定します。
Enter command:に続いて`R`を入力しEnterを押します。

```
Enter command: R
Command succeeded 3.884
```

## 校正(キャリブレーション)
pHの測定は、基準値(校正溶液のpH)に対する相対値測定です。その為、複数の校正溶液を用いて調整する必要があります。
連続測定の場合であっても、経年劣化や汚れ付着により電極の電気特性が変わり、誤差が次第に大きくなっていきます。したがって、正しいpHの測定には定期的に校正が必要です。

事前に、測定したいサンプルのpHが酸性側・アルカリ性側なのか分かっていれば、
中性と酸性・アルカリ性の校正溶液の2点校正で十分です。
しかし、測定したいサンプルのpHが予測できない場合は、3点校正を行う必要があります。

### 校正
*`pHの測定`の続きです。また中性での校正を前提に記事を書きます。適宜読み替えて下さい。

- 酸性：Cal,low,4.00
- 中性：Cal,mid,7.00
- アルカリ性：Cal,high,10.00

校正溶液にガラス電極を浸け、`Cal,mid,7.00`と入力して校正を行います。

```
Enter command: Cal,mid,7.00
```
また、`Cal,clear`で校正データを初期化することが出来ます。

```
Cal,clear
```

## おわりに
7万円のpH測定器を比較しましたが、そこそこの精度でpHで測定できることを確認しました。