自動水やり機を作ってみた2 【 鉢植えへの組付け】で製作した自動水やり機を改良します。具体的には土壌センサを実装して、土が乾いてきたら水やりを行うようにしていきます。
- 土壌センサを製作し、自動水やり機に組付ける
- 土壌センサ実装に伴って、プログラムを変更する
Arduino用の土壌センサは販売されております。1個購入してみてみましたが、結構簡単に作れそう・・・
ということで、土壌センサの自作に挑戦してみたいと思います。
- 使用部品
- 回路の調査と設計
- 回路の製作と組付け
- プログラミング
- 動作確認
❶ 使用部品
No | 品名 | 単価 | 備考 |
1 | ユニバーサル基盤 | 30円 | |
2 | 抵抗器 470Ω | 10円 | 2個 |
3 | トランジスタ 2SC1815 | 5円 | |
4 | ターミナルブロック | 30円 | 2端子と3端子 各1個 |
5 | 防水ケーブルグランド | 80円 | 配線コードの仕様を確認 |
6 | 配線コード | 170円/m | 2芯ケーブル |
7 | ステンレス線 | 50円 | |
8 | 絶縁体の板 | ー | 消しゴムとかでもOK |
Arduino用で販売されている土壌センサをネットで見てみると350~700円ぐらりするようです。自作するとセンサ部分だけで150円ほどで作れました。(防水ケーブルグランド、配線コードを除く)自作した方がお得です。
➋ 回路の調査と設計
自作するにあたり1個研究用に購入しました。商品名は(Moisture Sensor)になります。秋月電子様で購入させていただきました。
近い製品のURLを下記につけておきます。
土に埋まる部分は金メッキでできています。錆防止なのでしょう。電子部品がむき出しなので外で運用すると雨とかでショートしそう・・・
配線を確認すると下図のようになっておりました。
回路自体は簡単で電子部品はトランジスタ1個と抵抗器2個のみです。
回路の特徴としてはトランジスタのエミッタ側に抵抗があることです。「自動水やり機を作ってみた1 【 Arduinoとトランジスタを使った、モーター制御】」で解説した回路ではコレクタ側に抵抗(モーター)がありました。この時はトランジスタの電流増幅作用を利用するため、このような使い方をしました。
今回の回路は「土」部分を可変抵抗と見立てベースに入る電圧値の変化をエミッタの電圧値で読み取っています。この時のエミッタの電圧は
エミッタ電圧 = ベース電圧 – ベース・エミッタ間の電圧降下
となります。このような回路をエミッタフォロア回路やコレクタ接地回路と言ったりします。とりあえず今回はこの回路を参考に、トランジスタを「J3Y」から「2SC1815」に変えて製作していきたいと思います。
❸ 回路の製作と組付け
1.回路の製作
配線図をもとに下写真のように回路基板を製作しました。
土に刺す部分はステンレス線で作成しました。私は丸形の裸端子を付けて取り外しができるようにしてみました。ステンレス線の距離を一定にするために絶縁体の板に固定します。距離が変わると抵抗値が変わってしまいます。
回路基板からステンレス線までの配線の長さは使用条件によって変わります。お好みの長さにしましょう。後から防水ケーブルグランドの中を通しますので両端に取り付ける端子(コネクタ)の大きさには気を付けましょう。
2.タッパーの穴あけ
以前までの加工で電源、モーター用の穴を空けましたが、加えてセンサ用の穴もあけ、防水ケーブルグランドを取り付けます。
3.組付け
鉢植えへ組付けます。配線は結束バンドで止めておきました。
❹ プログラミング
センサからの数値を読み取り、その数値によって水やりを「するorしない」を決めるプログラムを作成しました。
センサの数値は土が乾いているほど小さくなります。数値はArduino IDEのツールにあるシリアルモニタで確認できます。環境によって異なりますので、ほどよい数値を確認しながら設定します。
実際に作成したプログラムは下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
int InPutPin=A0;//土壌センサ入力ピン int OutPutPin=12;//モーター出力ピン int SensorValue=0;//土壌センサの値を入れる変数 void setup(){ Serial.begin(9600);//シリアルモニタを使うための設定 pinMode(InPutPin,INPUT);//A0ピンをIn Putとして使うための設定 pinMode(OutPutPin,OUTPUT);//12ピンをOut Putとして使うための設定 } void loop(){ //シリアルモニタの表示設定 SensorValue=analogRead(InPutPin);//センサの値を取得 Serial.print("センサー値="); Serial.println(SensorValue); delay(10000);//センサ読み取り間隔 //条件に応じてモーターを動かす if(SensorValue<350){ digitalWrite(OutPutPin,HIGH); delay(5000);//モーターを動かす秒数 digitalWrite(OutPutPin,LOW); } } |
まとめ
今回で自動水やり機を更に発展することができました。センサと聞くと難しそうに思いましたが、意外に簡単にできてよかったです。今後は小型化や価格低減して更に作りやすい自動水やり機を考えていきたいと思います。