8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

天気によって散水量を調整できる自動水やり機をつくる

Last updated at Posted at 2022-04-24

ラズパイとサーボモータで自動水やり機をつくる

背景

先日,家の庭に畑を作りそこに大根や枝豆やなどの家庭菜園を始めました.
最初のころは楽しみながら水やりしていましたが,今ではめんどくさすぎて雨の日を祈るばかりです.
そこで,勝手に水やりしてくれるものがあればいいじゃん!と気が付いたので調べてみました.

既製品は高いし時限式ばかり

https://www.amazon.co.jp/s?k=自動水やり機
アマゾンで自動水やり機を検索し値段と機能を確認したところ,やはり高価なものばかり...
1万円以上するものは蛇口をタイマーで制御し,定刻になるとスプリンクラーが作動するという仕組みのものが多く,一万円以下のものは簡易的な植物の水やりに適したポンプ式が多いように思います.
できればお金をかけたくないので安いものを購入したいところですが,私の家の植物たちは外の畑にあるので,簡易ポンプ式では水の量や水圧などに限界がある可能性があります.また,ポンプ式はポンプ式内の水を足さなければならないという手間があるので,やはりめんどくさいです.
そこで,自動でお水を撒いてくれる仕組みを自作してみることにしました.また,ただの時限式だと面白くないので何かないかなと探していると,面白そうなtweetを見つけました.

これは気象庁が公式に公開しているjsonファイルのようです.今回はこれを利用して気象庁からの天気情報を取得し,天気に応じて散水量を調整してくれる自動水やり機を作ってみました.
以下に本機能を示します.

  • 時間による定期実行
  • QRコードによる実行(GET通信)
  • 天気に応じて散水量調節
  • LINE notifiyによる正常動作の確認

使用したもの

家にあった

購入した

完成後の様子

仕組み

自動水やりの大まかな処理の流れを説明します.

raspberry pi4で立てたnode.jsサーバからpythonファイルを実行してサーボモータを操作します.
pythonファイルを実行するトリガーとしてGET通信とnode-cronを使用することでQRコードによる実行と定期実行を可能にしました.

ハードウェア

1.ホース

まず,アマゾンで購入した散水ホースを畑にセットし蛇口をひねるだけで水やりできるようにしました.もうこれで満足してしまいそうですが,すでにサーボモータなどを注文済みなので後には引けません.

2.蛇口

今回は,蛇口の先に取り付けた蛇口アダプターのベンを開け閉めすることで水の流れを管理するようにしました.
[以下の蛇口アダプターの簡略図](#### 蛇口アダプターの簡略図)に示すように,サーボモータがONになった時にベンが開き水が流れ,OFFになった時にベンが閉まり水が止まるようにしました.
このベンをサーボモータで操作して水やりのオン,オフを切り替えるようにするので,サーボモータとアダプターを固定する仕組みが必要になります.

蛇口アダプターの簡略図

そこで,蛇口とサーボモータを固定するためのマウンタを3Dプリンターで刷りました.
始めて自分で一からモデリングしたので,あまり良いものではありませんが個人利用の範囲でご自由にお使いください.

注意1:このマウンタでは接続部分が摩耗してすぐにゆるゆるになるのでご注意ください.私は↓のようにハンダごてで無理やり溶かして固定しちゃいました★

注意2:ハンダは安全に持ちましょう.

配線と電源

今回使用したサーボモータは6Vで動作するのでラズパイの他に外部電源が必要です.6Vは単三電池を4つで出力可能なのでこれを外部電源としました.また,必ずリレーモジュールを電源とサーボモータの間に挟むようにしましょう.そうしないと,サーボモータに常に電流が流れることになり無駄に電力を消費してしまいます.そこで,リレーモジュールを使って必要のないときは外部電源からの電流を遮断しましょう.

sprinc_kairo_ブレッドボード.png

ソフトウェア

1.使用したプログラミング言語やライブラリ


Python3
├── WiringPi
└── GPIO
JavaScript
├── node.js
└── npm
└── pm2

サーボモータを操作するにはパルス波信号を用います.raspberry piにはパルス波を出力できるPWM制御が存在するのでこちらを使用します.また,raspberry piのPWM制御には二種類あり,ソフトウェアPWMとハードウェアPWMがあります.今回はより厳密にパルス波を制御できるハードウェアPWMを用います.

3.ラズパイの起動

ラズパイのセットアップには以下の記事を参考にしました。OSの書き込み~ssh接続までしてください。

4.ライブラリのインストール

ssh接続が完了したら、必要なライブラリ等をインストールしていきます.

公式の手順に従ってインストールしていきます.
まずWringPiがインストールされてないことを確認します.

Raspbian
gpio -v

もし、すでにWiringPiがインストールされている場合以下のコードを実行する必要はありません.
それでは以下のコードでインストールしましょう.

Raspbian
sudo apt-get purge wiringpi
hash -r

次に,node.js系のライブラリをインストールしていきます.
インストールは以下のサイトを参考にしました.

任意のディレクトリで以下のコードを実行します.

Raspbian
sudo apt-get update
sudo apt-get install -y nodejs npm
sudo npm cache clean
sudo npm install npm n -g
sudo n stable

続けて以下のコードを実行します.

Raspbian
curl -L https://git.io/v7kPb | bash

パスとバージョンを確認します.

Raspbian
pi@raspberrypi:~ $ node -v
v8.6.0
pi@raspberrypi:~ $ npm -v
5.4.2

注意3:バージョンが異なっている可能性がありますので、上記の出力と全く同じでなくて構いません

最後にpm2をインストールします.これはraspberrypiでnode.jsを常時実行するためのライブラリです.
とても便利なのでインストールしておきましょう.

Raspbian
sudo npm i -g pm2

事前準備はこれで終わりです.

5.プログラム

それでは実際に自動水やり機を操作するためのプログラムをインストールしましょう.
ソースコードは私のgit hubで公開しています.ここからgit cloneをして私の汚いコードを落としてきます.
適当なディレクトリを用意して以下のコードを実行しましょう.

Raspbian
git clone https://github.com/Nikudanngo/sprinkler.git

無事に落とし込めたら,sprinkler/setting.pyを少し編集します.vimとか好きなエディタで開いて以下のtokenにLINE Notifyで作成したトークンを貼り付けてください.

setting.py
  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

参考にした偉大なる先人様たち

8
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?