水耕栽培のEC管理に疲れていませんか

EC管理しないと解決できない問題
  • 現在の濃度が不明
    液肥の蒸発もあるのでいったい実際の液肥の濃度はどうなんだろう。。
  • 本当にその補給大丈夫?
    とりあえず水が減っているからハイポニカと一緒に水をたそう。。
  • 毎日の測定は大変
    ECメーターでするか。。でも毎日はめんどくさくて続きそうにない。。

自分に最適なECメーターを作ってみるのはどうでしょうか?

自作しちゃえば自分の好きなように設計できます。もちろん定期的に計測したかったら自分で設計しちゃえば可能です。

とはいっても、意外と詳細に作り方を解説したサイトはありません
このページで実際の回路とラズパイを使ったプログラムをご紹介します。

自作のECメーターを作製して一歩進んだ水耕栽培をはじめましょう(๑•̀ㅂ•́)و✧

ECメーターはなんで必要?それを踏まえた設計は?

Electronic Conductivityの略がECです。電気伝導度という意味になるので電気の通りやすさを表します。

水耕栽培のECメーター

ECメーターで簡単に測ることができますが、測るしかできないことが残念です(×_×;)
測定結果によって処理を変えたり、日々の記録を自動的に取れないというのは今の時代にあっていないですね。

これから自作しようと思いますが、どんな原理で測定できるのかをまず確認しましょう‎٩( ‘ω’ )و

電気の通りやすさで液肥の状態がわかる仕組み

水耕栽培で使う液体肥料には植物の育成に必要な成分はイオンという形で溶けています。

窒素だとNO3-、カリウムだとK+ といった風に、+/-など電荷を帯びた状態で溶けています。
このイオンの状態の成分を吸収することで植物は栄養を吸収しているんですね。

ということで溶けているイオンを測定できれば液肥の状態を推測できます

肥料の濃度と抵抗値の関係は?

イオンは電荷を帯びているので、液肥に含まれれるイオンが多いほど電気が流れやすくなります。
イオンが少なければ電気が流れにくくなります。

肥料の濃度と抵抗値の関係は?
  • 肥料が十分ある: 電気をよく通す:抵抗値が低い
  • 肥料が少ない:電気があまり通らない:抵抗値が高い

この仕組みを利用してEC濃度を測定します(๑•̀ㅂ•́)و✧

EC濃度を測る仕組み

電気伝導度は電気の流れやすさそのものなので、溶液の抵抗値を測ればいいことになります。
こう考えると結構単純です。

抵抗を測るのであれば電流測定をしてその時の電圧を測ればよさそうですね(◍•ᴗ•◍)♡ ✧*。

自作のEC計で試材の抵抗値を求める方法を図解した様子。

計測波形は交流波形にする必要があります。

イオンが含まれる溶液に電圧をかけるときに注意しなければならないことは、プラスマイナスの電圧をかけることです。

プラスの電圧だけだとマイナスのイオンがプラスの方の電極に引き寄せられて結晶化してしまいます。結晶化してしまうともちろん電極が溶液に露出していませんから正確な水溶液の抵抗を測ることができなくなってしまいます。

プラスマイナスの電圧でスイングしてあげることで電極の結晶化を防ぐことが重要です。

自作のECメーターの回路の構成を詳細に解説します。

ECメーターの仕組み自体は単純そうです。交流波形で測定できるECメーターの回路を作りましょう。

交流波はウィーンブリッジ回路で実現します。

ウィーンブリッジ回路は回路だけで交流波形を作ることができます。

なんでラズパイからDAコンバーターを使ってソフトウェアから作らなかったのかはこちらの記事を参考にしてください。

今回作る回路はメインのウィーンブリッジ回路とその部品であるオペアンプに負電源を供給する回路、交流波形の出力インピーダンスを下げるエミッタフォロワで構成しようと思います‎٩( ‘ω’ )و

水耕栽培に使える自作のEC回路の回路図。LTSpiceで作った回路図

正弦波の発振源・ウィーンブリッジ回路の構成は?

まずは正弦波を発振するウィーンブリッジ回路の部品です。

ウィーンブリッジ回路の構成
  • オペアンプ
    今回は汎用品のUA741を使おうと思います。
  • ダイオード
    1N4148を使います。
  • 抵抗
    電流はそんなに流れないので1/6W程度で十分でしょう。
  • キャパシタ
    最大5Vの振幅の交流を扱うので6.3Vあれば十分じゃないでしょうか。

周波数は?

ウィーンブリッジ回路は抵抗とキャパシタの容量で周波数が決まります。

ウィーンブリッジ回路の周波数を求める数式

という周波数になります。

EC値と周波数は関係するのかはまだ分かりませんが、ADコンバータの処理を考えると早すぎるのは良くない気がします。

オペアンプのためのマイナス電源

こちらは前回の記事で作ったタイマーIC555を使ったものを使おうと思います。

マイナス電源の簡単な作り方は?自作回路を作って検証してみました。

出力インピーダンスを下げるためのエミッタフォロワ

LTSpiceでシミュレーションしているとウィーンブリッジ回路の正弦波をプラス側へオフセットすると、つなげる負荷によって大きな振幅の増減があることがわかりました。

ちょっとまずいのでエミッタフォロワを使って出力インピーダンスを下げて意図した通りの正弦波になるようにしています。

エミッタフォロワで用意する部品
  • NPNトランジスタ。エミッタフォロワの基本です。
  • 抵抗。流れる電流を制限します。

EC測定部分(R9の抵抗部分が測定部分になります。)はプラスマイナスになるようにして、ADコンバーターはプラス側しか扱えないのでその入力段はプラス側にオフセットするようにしています。
今回は交流波形がプラスマイナスに振れるのでエミッタフォロワはプッシュプル型にしています。
部品はけっこう使います( ಠωಠ)

LT Spiceで事前にシミユーレション!ちゃんと動くようです。

組み上げて動かなかったらいやなのでLT Spiceでシミュレーションで事前に実験します。ちゃんとEC測定部分はプラスマイナスの交流になっていてADコンバーターの入力部分はプラス側のみになっています。
水耕栽培に使える自作のEC回路を作って波形をシミュレーションしてみた様子

これでばっちりなはずです‎٩( ‘ω’ )و

回路をブレッドボード上に組んで実験してみました。

シミュレーションだけだと実験できないのでブレッドボード上で回路を組んでみたいと思います。

ちゃんとオシロスコープで測定します。
水耕栽培用に作った自作のEC計を作るために実験している様子。オシロスコープで交流波形を取得している様子。

ADコンバーターを選びましょう。MCP3004を使います。

MCP3004は秋月電子で簡単に手に入れることができる4CHのADCです。

10bitの分解能があり、EC計の用途には十分な分解能があります。MCP3002が2ch用で8chのMCP3008もあります。

スペックシートも簡単に手に入ります。これを見るとMCP3004/MCP3008は同じデータシートのようです。

ざっとみてみましたがMCP3008もほぼほぼ同じプログラムでいいようです。

ラズパイではどうやって動かす?

ラズパイからMCP3004と通信するにはSPIを使います。SPI通信には便利なWiringPiを使いましょう。
SPI通信に必要なプロトコルと使用するWiringPiのAPIについては以前の記事を参照してください。

MCP3004の仕様書を確認してラズパイの設定を決めます。

ラズパイSPI通信プロトコルを確認します。

ラズパイのSPI通信は8bit単位で行われます。ここを理解していないと正しいデータを送れなくて結果として正しく通信できません。

実際にSPI通信をするときの波形を取得してみました。

黄色がSCLKでクロックです。8bit単位になっているのがわかると思います。

ラズベリーパイのSPIのクロックをオシロスコープで取得した画像。8bitセグメントになっている

この8bit単位というのは意外と重要なんです。というのもシーケンシャルにデータをやりとりする方法と8bitセグメント単位で送る方法ではSPI通信を行うときのデータ送受信のプロトコルが違うからです。

実は最初の実装でなんでかうまく通信できなくて波形を取得してみたらそうだった。。。ということがありました。みなさんは気をつけてくださいね。

スペックシートからプロトコルを確認します。

MCP3004のスペックシートをみてみましょう。

こちらが連続したクロックで通信する場合です。

microchipのサイトから引用

一方、8bitセグメントの方法だとまったく送るデータは同じでもクロックのタイミングが違うことがわかりますね。

microchipのサイトから引用

連続したクロックでは送受信のために16bitのバッファーがあればいいのですが、8bitセグメント単位の場合には24bitのバッファーが必要になります。

さっき見たようにラズパイは8bitセグメントなので24bitのバッファーを使うようにします。

仕様が分かったので次はプログラムを実装します(◍•ᴗ•◍)♡ ✧*。

WiringPiを使ってC++でMCP3004を制御します。

メインの関数からEC測定用のクラスと温度補正用の温度データを取得します。

自作のECメーターのプログラムはこちら。

このプログラムを実行するとこんな感じで溶液の抵抗と温度が取得されます。
自作のECメーターのプログラムを実行した様子。ターミナル画面。

自作のECメーターのメイン関数

SetRefResistanceという関数で回路で設定した参照用の抵抗値を設定しています。

EC測定用のクラスです。

温度補正用の温度データを取得します。

そもそものMCP3004の基本クラスは?

Makefileはこちら

それでは実験してみましょう

プログラムも回路もできたので実際にECメーターとして使えるかを実験して見ます。

今回はシャーペンの芯を電極にして実験してみました。コップに水を入れてコップの淵にシャーペンの芯を固定しています。
鉛筆を電極にして自作のECメーターの動作確認をしている様子

実験方法は?

液体肥料のハイポニカを少しづつ加えて行って抵抗値が変わるかを見たいと思います。
スポイトで少しづつ加えていきます。
自作のECメーターで実験をしている様子。液体肥料を溶かして抵抗値の変化を図っている様子

この状態で、電極間の電圧を測ることでEC値を求めていきます。
自作のECメーターでEC値を取得している様子

水の場合には?

水の場合にはあまり抵抗値が高く、電解質が溶けていないことがわかります。
自作のECメーターの実験。水のみでの抵抗値を測定

液体肥料を少し加えて見ます。出力電圧が変わっていることがわかります。

スポイト10回分加えてみると電圧が下がっていることがわかります。抵抗値が下がっていることがわかりますね。
自作のECメーターの動作確認をしている様子。液体肥料が増えれば抵抗値はさがる。

まとめ

自作のECメーターの電気回路の構成とプログラムの紹介をしました。実験で動作確認もできたので、回路を基板化したり、実際の運用に取り入れていきたいと思います。

記事を読んでいただいてありがとうございます。この記事がいいなと思ったら下記のSNSボタンのクリックをお願いします。励みになります😁