ラズパイとサーボモータで自動水やり機をつくる
背景
先日,家の庭に畑を作りそこに大根や枝豆やなどの家庭菜園を始めました.
最初のころは楽しみながら水やりしていましたが,今ではめんどくさすぎて雨の日を祈るばかりです.
そこで,勝手に水やりしてくれるものがあればいいじゃん!と気が付いたので調べてみました.
既製品は高いし時限式ばかり
https://www.amazon.co.jp/s?k=自動水やり機
アマゾンで自動水やり機を検索し値段と機能を確認したところ,やはり高価なものばかり...
1万円以上するものは蛇口をタイマーで制御し,定刻になるとスプリンクラーが作動するという仕組みのものが多く,一万円以下のものは簡易的な植物の水やりに適したポンプ式が多いように思います.
できればお金をかけたくないので安いものを購入したいところですが,私の家の植物たちは外の畑にあるので,簡易ポンプ式では水の量や水圧などに限界がある可能性があります.また,ポンプ式はポンプ式内の水を足さなければならないという手間があるので,やはりめんどくさいです.
そこで,自動でお水を撒いてくれる仕組みを自作してみることにしました.また,ただの時限式だと面白くないので何かないかなと探していると,面白そうなtweetを見つけました.
まじかよ気象庁公式の天気予報APIができてるぞ、感激して大声で泣いちゃったhttps://t.co/2HQumqjel8
— Torishima (@izutorishima) February 24, 2021
これは気象庁が公式に公開しているjsonファイルのようです.今回はこれを利用して気象庁からの天気情報を取得し,天気に応じて散水量を調整してくれる自動水やり機を作ってみました.
以下に本機能を示します.
- 時間による定期実行
- QRコードによる実行(GET通信)
- 天気に応じて散水量調節
- LINE notifiyによる正常動作の確認
使用したもの
家にあった
- raspberry pi4
- リレーモジュール
- 単三乾電池×4
- 3Dプリンター
- はんだごて
購入した
完成後の様子
仕組み
自動水やりの大まかな処理の流れを説明します.
raspberry pi4で立てたnode.jsサーバからpythonファイルを実行してサーボモータを操作します.
pythonファイルを実行するトリガーとしてGET通信とnode-cronを使用することでQRコードによる実行と定期実行を可能にしました.
ハードウェア
1.ホース
まず,アマゾンで購入した散水ホースを畑にセットし蛇口をひねるだけで水やりできるようにしました.もうこれで満足してしまいそうですが,すでにサーボモータなどを注文済みなので後には引けません.
2.蛇口
今回は,蛇口の先に取り付けた蛇口アダプターのベンを開け閉めすることで水の流れを管理するようにしました.
[以下の蛇口アダプターの簡略図](#### 蛇口アダプターの簡略図)に示すように,サーボモータがONになった時にベンが開き水が流れ,OFFになった時にベンが閉まり水が止まるようにしました.
このベンをサーボモータで操作して水やりのオン,オフを切り替えるようにするので,サーボモータとアダプターを固定する仕組みが必要になります.
蛇口アダプターの簡略図
そこで,蛇口とサーボモータを固定するためのマウンタを3Dプリンターで刷りました.
始めて自分で一からモデリングしたので,あまり良いものではありませんが個人利用の範囲でご自由にお使いください.
注意1:このマウンタでは接続部分が摩耗してすぐにゆるゆるになるのでご注意ください.私は↓のようにハンダごてで無理やり溶かして固定しちゃいました★
3Dプリントした奴同士を固定する時はコレが手っ取り早い! pic.twitter.com/8jRrHk9DxU
— 遠藤 (@VsvkKSzFkgAXqf9) July 3, 2021
注意2:ハンダは安全に持ちましょう.
配線と電源
今回使用したサーボモータは6Vで動作するのでラズパイの他に外部電源が必要です.6Vは単三電池を4つで出力可能なのでこれを外部電源としました.また,必ずリレーモジュールを電源とサーボモータの間に挟むようにしましょう.そうしないと,サーボモータに常に電流が流れることになり無駄に電力を消費してしまいます.そこで,リレーモジュールを使って必要のないときは外部電源からの電流を遮断しましょう.
ソフトウェア
1.使用したプログラミング言語やライブラリ
Python3
├── WiringPi
└── GPIO
JavaScript
├── node.js
└── npm
└── pm2
サーボモータを操作するにはパルス波信号を用います.raspberry piにはパルス波を出力できるPWM制御が存在するのでこちらを使用します.また,raspberry piのPWM制御には二種類あり,ソフトウェアPWMとハードウェアPWMがあります.今回はより厳密にパルス波を制御できるハードウェアPWMを用います.
3.ラズパイの起動
ラズパイのセットアップには以下の記事を参考にしました。OSの書き込み~ssh接続までしてください。
4.ライブラリのインストール
ssh接続が完了したら、必要なライブラリ等をインストールしていきます.
公式の手順に従ってインストールしていきます.
まずWringPiがインストールされてないことを確認します.
gpio -v
もし、すでにWiringPiがインストールされている場合以下のコードを実行する必要はありません.
それでは以下のコードでインストールしましょう.
sudo apt-get purge wiringpi
hash -r
次に,node.js系のライブラリをインストールしていきます.
インストールは以下のサイトを参考にしました.
任意のディレクトリで以下のコードを実行します.
sudo apt-get update
sudo apt-get install -y nodejs npm
sudo npm cache clean
sudo npm install npm n -g
sudo n stable
続けて以下のコードを実行します.
curl -L https://git.io/v7kPb | bash
パスとバージョンを確認します.
pi@raspberrypi:~ $ node -v
v8.6.0
pi@raspberrypi:~ $ npm -v
5.4.2
注意3:バージョンが異なっている可能性がありますので、上記の出力と全く同じでなくて構いません
最後にpm2をインストールします.これはraspberrypiでnode.jsを常時実行するためのライブラリです.
とても便利なのでインストールしておきましょう.
sudo npm i -g pm2
事前準備はこれで終わりです.
5.プログラム
それでは実際に自動水やり機を操作するためのプログラムをインストールしましょう.
ソースコードは私のgit hubで公開しています.ここからgit clone
をして私の汚いコードを落としてきます.
適当なディレクトリを用意して以下のコードを実行しましょう.
git clone https://github.com/Nikudanngo/sprinkler.git
無事に落とし込めたら,sprinkler/setting.py
を少し編集します.vim
とか好きなエディタで開いて以下のtoken
にLINE Notifyで作成したトークンを貼り付けてください.
33 token = "取得したアクセストークン"
LINE Notifyのトークンの入手方法は以下のサイトを参考にしてくだい.
6.サーバ立ち上げ
私の書いたコードはnode.jsで立てたローカルサーバhttp://localhost:3000/
に/on
または/off
でゲットすることでPythonプログラム(厳密にはPythonをsudoで実行させるための.shファイル)が走ってサーボモータを回す仕組みになっています.また,定期実行として毎日7:00と18:00にサーボモータを回転するようになっています.
そのため,以下のコードでnodeサーバを立ち上げます.
node ontime.js
あとは同じWANないの端末からしてhttp://localhost:3000/on
にアクセスしてサーボモータを回転させたりpm2
を使ってnodeサーバを常時実行させて定期実行させてみましょう.
pm2 start ontime.js
止めたくなったらこちら
pm2 stop ontime.js
参考にした偉大なる先人様たち
- IoTLT Vol46 蛇口IoTの裏側 : https://hr-sano.net/blog/2019/03/19/behind_the_prototyping_jaguchi_iot/
- 気象庁JSONデータ : https://qiita.com/michan06/items/48503631dd30275288f7
- Rasperry PiにNode.jsをインストールする (1 - インストール): https://raspi.taneyats.com/entry/install-nodejs
- Raspberry Pi 4でWiringPiでgpioを使用可能にする : http://www.fecorp.co.jp/raspberry-pi-4でwiringpiでgpioを使用可能にする/
- Raspberry PiにNode.jsとnpmの最新版をインストールする : https://qiita.com/mascii/items/77c685df65c4cbca9315