PH4502CのpHの計算方法を調べるまでの記事でpHメーターを動かすまでに必要な知識の概要が得られたので、pHメーターのPH4502CとRaspberry Piを繋いでみた。


P1139589


rasp_mcp3208_ph4502c

※回路図をクリックで拡大表示

※各ピンの意味は過去記事に記載してある

BBC Micro:bitでpHメーターから得られるアナログ値を読み込んでみた

AD変換器から出力されたデジタル値を読み込む

※MCP3208のVREFの箇所は3.3Vから5Vにした方が良いかも VDDとVREFの意味は調べる必要がある


Raspberry Pi 4B 8G

ブレットボード

MCP3208

PH4502C

5Vの供給源(AA Batteryの箇所)


コードはGPIO ZeroのMCP3208ライブラリを利用した。

15. API - SPI Devices — GPIO Zero 1.6.2 Documentation#MCP3208


コードを載せる前に試した事を挙げておく。


PH4502CのV+にRaspberry Piの5Vピンを用いたが、期待した数値にならなかったため、別途で電気の供給源を設けた。

GPIO ZeroのMCP3208で水道水に浸してデータを取得したが、結構な頻度で0Vがあった為、0.1V以下のデータは取得せず、8回データを取得した後、最高値と最低値を除いた6個の値の平均を算出するようにした。


これらの内容を踏まえて、作成したコードは下記の通り。

from gpiozero import MCP3208
import time
Vref = 5	# PH4502Cの基準電圧

# max_voltageの値が必要か?は不明
pot = MCP3208(channel=0, max_voltage=5)

v = []
while True:
    if len(v) > 7:
        break
    if pot.value >= 0.02:	# 0.1V未満の数値は切り捨て	
        v.append(pot.value)
        time.sleep(0.2)

v.sort()

total = 0
for i in range(2,8):
    total += v[i]

print("average")
print(str(total/6 * Vref) + "V")

下記のコードを実行してみたところ、2.8V付近の数字が出力された。

※実行前にRaspberry Pi側でSPI通信を有効にしておくこと

Raspberry PiでLCDに文字列を出力するの記事中のI2Cの設定の代わりにSPIを有効にすれば良い


ただし、値はかなりブレるので、何らかの調整を見落としているのかもしれない。


キャリブレーションしたら何かわかるかもしれないが、目標がpHメーターのアナログ値をADCを介してデジタル値に変換してRaspberry Piで受け取るまでだったので、pHの測定の話はここで終了することにする。


ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作 作る、動かす、しくみがわかる! - ブルーバックスシリーズの特設ページの本には、GPIO Zeroを用いないでMCP3208を使用するコードが記載されているが、現時点での知識レベルではコードの理解が出来なかった。


これからも様々な経験をして、わかる事が増えてくるだろうから、その時に改めてコードを読むことにしよう。


関連記事

Raspberry Piと赤色LEDでホタルのような点滅を試す