Day9

計測システムを構築_TDS測定_

Topへ

Day8へ

Day10へ

はじめに

これまで、水温、気温、照度等のセンサーを構築してきました。この他においさんが欲しいセンサーは、pH計とEC計になります。
pH計は、植物を育てるのに大事な項目なのでいうまでもないですが、EC計は、水の中の栄養を管理するのに便利な指標になるようです。
なので、おいさんは、この2つのセンサーを構築しようと思いましたが、pH計は価格が高く手が出ませんでした。また、EC計はおいさんの頭では 構築できないと判断しました。
そこで、他に植物や魚を育てるのに役立ちそうなセンサーは無いかと探していると「TDS」センサーというものにたどり着きました。
この「TDS」とは、「Total Dissolved Solids」総溶解固形物 の略語で、一言でいうと水中に含まれる不純物を測定して、数値化した値のことのようです。 (濁度?・・・)
兎にも角にも、このセンサーは役立ちそうなので今回はこのセンサーの構築を行うことにします。 今回参考にした関連のサイトは、 ココ になります。

Step1

使用するセンサー等

image

今回使用するセンサーは、「TDSメーター」というものになります。これもネット通販等で購入できると思います。(Amazonでは簡単に検索できます。)
この他に、「MPC3008」というA/Dコンバーターを使用ます。(アナログ信号を電気信号に変換するなにか)

Step2

TDSメーターを接続

image

配線は画像の図のとおりとなります。
TDSメーターにも5vの電源が必要になったため、気温・湿度の電源を一度大きい方のブレッドボードに中継する形に変更しました。

image

実際に配線した写真になります。
全体写真を載せるともう配線が視認できない状況です。

Step3

raspberrypi側の設定

image

raspberry piを起動します。
起動したらリモート側のパソコンの「Tera Term」を起動し、まずpython_appsフォルダに移動します。
cd python_apps」と入力しenterキーを押します。

image

またGPIOピン関係のライブラリをインストールします。多分、「MCP3008」を簡単に制御できる何かだと思います。

psudo pip3 install gpiozero」と入力しenterキーを押します。
image

「Visual Studio Code」を開き、「新しいテキストファイル」を選択します。(メモ帳等でも問題ありません。)

image

まずは、必要なライブラリをインポートします。
ここで、「numpy」はデータを配列として扱う時に便利な何かだと思います。
コードは下記のとおりになります。
from gpiozero import MCP3008
import numpy as np
import subprocess

image

TDS測定(イメージがつかみにくいので、以後水質測定とします)値は、TDSメーターの値から何やら計算をして求める必要があるようです。
その計算には、水温が必要になるようです。
なので、次は水温を得るためのコードを追加します。といっても以前そのコードは作成しているのでそれを再利用するだけになります。
コードは下記のとおりになります。
SENSOR_ID = "28-3c01a816bbf9"
SENSOR_W1_SLAVE = "/sys/bus/w1/devices/" + SENSOR_ID + "/w1_slave"
ERR_VAL = 85000
res = str(subprocess.check_output(["cat", SENSOR_W1_SLAVE]))
temp_val = res.split("=")
temp_val=temp_val[-1].replace("\\n'","")
temp_val = round(float(temp_val) / 1000, 1)

image

次に水質測定値を行うコードになりますが、実際に何をしているのかさっぱりわかりません。
とにかくコードは以下のとおりになります。
AVE_NUM = 128
vcf = 1.0 + 0.02 * (temp_val - 25.0)
Vref = 3.301
adc = MCP3008(channel=0, differential=False)
l_buf_vol = []
for i in range(AVE_NUM):
(Tab)l_buf_vol.append(adc.value)
np_buf_vol = np.array(l_buf_vol)
c_vol = np.median(np_buf_vol) * Vref / vcf
tds_val = ( 133.42 * c_vol * c_vol * c_vol- 255.86 * c_vol * c_vol+ 857.39 * c_vol) * 0.5
print("TDS Value: " + f'{tds_val:.2f}' + "ppm")

image

ここで、入力の際に一つ注意点があります。
pythonプログラムのfor文には他のプログラムと異なる入力規則があります。
C#の場合等はfor文の範囲は{}で指定しますが、pythonにはそれがありません。代わりにインデントつまり先頭に空白(Tab)を設けることで 繰り返しの範囲を指定します。
if文等も同様の入力規則になりますので、入力の際は十分注意してください。

image

どこでもいいのでこのコードを書いたファイルを「tds.py」として保存します。

image

「WinSCP」を開き、保存した「tds.py」をraspberrypiの「python_apps」フォルダ直下にコピーします。

image

それでは、実行してます。
「Tera Term」に戻り、
python3 tds.pyと入力し、enterを押します。
すると、画像のとおり、水質測定結果が表示されました。
今回の結果は、4.29ppmでした。精度の確認はできないですが、増減の確認はできるので十分な機能だと思います。