2021/09/10
ベランダのアサガオに、自動で水やりする装置をRaspberry Piで作ってみました。
◎概要
- 使用モデル:Raspberry Pi 2 B
- サーボ:SG90
- Pythonを利用してPWM制御
- コックの開け閉めをサーボで行う
- 水タンクはペットボトルを加工
- ホースはダイソーで買った観賞魚用エアーチューブ3m
作成
割りばしの上の方を加工して、一方コックを固定する部品をつくりました。
サーボと一方コックを固定する部品。0.3mm厚の汎用アルミ板を切り出し加工しました。組み立てると8角形になります。
エクセルで作った設計図。参考までに。
一方コックを木の部品に接着。
コックにホースを接続。サーボと一方コックを結束バンドで固定します。
アルミ板に結束バンドで固定し、サーボとアルミ板はねじで固定。
コックを閉めた状態、開けた状態。
ペットボトルの蓋にホースをとりつけ加工したタンク。ホースはシリコン製で、しなやかです。エアチューブ用となってますが、水を流しても問題なく利用できました。底には空気穴を開けてます。
接続図
サーボの赤ケーブルは2番5Vへ、サーボの茶色ケーブルは6番GNDへ、サーボの橙ケーブルは7番GPIO4へ接続します。
Pythonプログラム
90°回転しコックをあけ、数秒後反対に90°回転してコックを閉めるというプログラムです。Pythonのライブラリ、PRi.GPIOを利用しました。
参考URL
その1。90°から0°へ動かし5秒停止、0°から90°へ戻す動作です。Duty Cycleが2.5%で-90°、7.25%で0°、12%で+90°に回転します。
sono1_servo.pyimport time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT)
p = GPIO.PWM(4, 50)
p.start(0.0)
#Open
p.ChangeDutyCycle(7.25)
time.sleep(5.0)
#Close
p.ChangeDutyCycle(12)
time.sleep(1.0)
GPIO.cleanup()
その2。その1ではコックが一瞬で回ってしまって、面白みがなかったので、ゆっくり回るようにしてみました。
sono2_servo.pyimport time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT)
p = GPIO.PWM(4, 50)
p.start(0.0)
#Open
for degree in range(90, 0, -1):
dc = 2.5 + (12.0-2.5)/180*(degree+90)
p.ChangeDutyCycle(dc)
time.sleep(0.02)
p.ChangeDutyCycle(0.0)
time.sleep(5.0)
#Close
for degree in range(0, 90):
dc = 2.5 + (12.0-2.5)/180*(degree+90)
p.ChangeDutyCycle(dc)
time.sleep(0.02)
p.ChangeDutyCycle(0.0)
time.sleep(1.0)
GPIO.cleanup()
動作試験
動作試験をしてみます。
うまくいきました。流れる水量は、開ける時間で調整。5秒で50mlくらいでした。
割りばしで固定する支柱をつくり、アサガオの鉢にとりつけました。cronで指定した時間に動くようにし完成です。
$ sudo crontab -e
0 5 * * * python /home/pi/sono2_servo.py
失敗その1
最初につくった6角形の固定部品は失敗作でした。サーボが部品に干渉してしまい、180度の回転ができないものでした。サイズの見積もりが甘かった。
失敗その2
動作試験をするとき、コックを開放した状態でタンクに水を入れてしまい、あたり一帯水浸し。パソコンとラズパイに水がかからなくてよかった。