自動で餌やり
アルキメディアン・スクリューを使った給餌機を作り、Raspberry Piによる制御で自動給餌する
人類のおよそ100割はアルキメディアン・スクリューで熱帯魚の餌やりがしたいと思っている
ー2021/8/23 あしゅりー.icon
アルキメディアン・スクリュー 何
これ
https://scrapbox.io/files/61227192791b15001dfc66e5.gif
科学館とかに行くとこれで水をくみ上げるやつがあって、子どもたちが発狂しながら遊んでいる
なぜアルキメディアン・スクリューなのか
かっこいいから
ほとんど誰もやってない(やろうとしてない)
エーハイムはこれ
あくあたん参号機はウォームギア、なのでまぁ発想は似たような感じ
サーボモータを90°回転させて戻したりする方法で餌やりを実現している人が多いが、1回きりだったり餌やりの分量調整ができなかったりで恒久的なツールには不向きと感じる
アルキメディアン・スクリューであれば長期間手入れ無しで稼働でき、柔軟に分量調整ができる
先駆者たち
サーボモータを回転させて餌を落とす
https://www.youtube.com/watch?v=RQo4TcgoNdk&t=84s
アルキメディアン・スクリュー
【EHEIM】ツインフィーダー
https://www.youtube.com/watch?v=je4-o1DWUsg
熱帯魚以外のものではこれが今回やりたいことと同じ 真の先駆者
https://www.youtube.com/watch?v=hxVx4Slo9kY&t=26s
ウォームギア
あくあたん参号機
https://www.youtube.com/watch?v=GOzBQDj20Tk
凄すぎる
最初はこれもアルキメディアンかと思ったがウォームギアとのこと
ギアの隙間から餌を落とすので発想としては似たようなものではある
まずは完成品
これができた
やること
無限回転サーボモータにアルキメディアン・スクリューを取り付けた給餌機を作成
給餌機のサーボモータをRaspberry Piで制御して回転させる
サーボモータに連動してスクリューも回転することで餌を押し出して水槽に落とす
要件
手を触れずに餌やりができる
指定した時刻(間隔)で自動給餌できる
仕様
仕様1:Raspberry Piからプログラムを実行すると、餌が水槽に投入される
仕様2:Raspberry Piで指定した時間に、上記の自動給餌プログラムが実行される
使用したもの
あしゅりーアクアリウムの場合
table:使用したもの
ラズパイ Raspberry Pi 4 ModelB 4GB
サーボモータ SG90-HV(無限回転仕様)
ワイヤ ラズパイ-サーボ間の接続用
給餌機 後述(だいたい100均)
無限回転サーボモータ:SG90-HV
アルキメディアン・スクリューを実現するため、通常のサーボモータとは異なり360°連続回転できる必要がある
ローテーションサーボとも言う
通常のサーボは0~180°内に駆動確度が制限されているのが一般的
https://scrapbox.io/files/6148a8272ae870001d3d5bc9.jpg
いい感じの写真がなかった
SG90などの0~180°制限のあるサーボモータしか無い場合、以下を参考に工作することで代用が可能
設計
流れは以下の通り
サーボモータで給餌機を作る
給餌機とラズパイを配線
自動給餌プログラムを作成
水槽に設置
定期的に自動給餌できるようにする
サーボモータで給餌機を作る
ここが一番めんどい
全体像はこれ
https://scrapbox.io/files/615030cfc0c93c001d156060.jpg
まずサーボモータの回転部分に付属のプロペラみたいなやつ(白いの)を取り付ける
別に付けなくてもいいが後述のために面積を稼ぎたかった
以下を100均で買ってきてアルキメディアン・スクリューっぽいものを作る
ストロー
ストローの中の黒い棒(たぶんマドラーとか弁当の中に入ってる串みたいなやつ)
白いケーブル(イヤホンとかハンズフリーのケーブルを切断して使用)
作り方は写真の通りストローの一方から黒い棒を挿入しつつその周りに白いケーブルを巻き付け回しながら押し込んでいく
この白いケーブルの外径とストローの内径の間に隙間があるとスクリューとして回した時に餌がうまく前に押し出されないので、みっちりくっついてキツいくらいが丁度よい
とはいえ、写真のやつはたまたま上手くいっただけなのでいろんなサイズのストローとかを買って試行錯誤が必ず必要になるので注意
上記はあくまでアイデアとして、こういった”精度”が必要な構造物は3Dプリンタで作るべきなので以下の参照ページにて図面データをDLするなりして素直に3Dプリンタで出力してほしい
中にスクリュー構造が入ったストローが完成したらサーボモータと接続する
写真のオレンジっぽいピンクっぽいキモいやつはグルーガンで溶かして接着したもの
ダイソーとか手芸店でこういうやつが売っている
https://scrapbox.io/files/615042d6f139a80023b3338b.JPG
もちろん接着して固定できればグルーガンじゃなくてもOK
これで接着したかったので上で書いた通りプロペラを付けて面積を稼いでいた
ついでにサーボモータと接続しなかった側のストローの穴もこれでふさいでおく
ここまでで一旦ストップし、次に進む前に後述の「給餌機とラズパイを配線」「自動給餌プログラムを作成」にてサーボモータを回した時にまっすぐ回るか確認しておく
ストローに餌の入力口と出力口用の穴を開ける
https://scrapbox.io/files/61504383ce9d6a001da4fef8.jpg
上記写真で見えているのは出力口で、これともう1つ入力口用に穴を開ける(見えていないが、餌に埋もれている部分にもう1つ穴が開いている)
上記写真のように餌を供給する容器に貫通させる
見た通りであるが、100均で買った調味料入れの両サイドに穴を開け、ストローを貫通させる
この状態でストローを回すこととなるため、隙間から餌がこぼれないように隙間をいい感じに埋める努力をしてほしい(ストローの回転を妨げない程度に)
最後に容器のキャップを開けて上から餌を投入すれば完成
大きい粒の餌だとスクリューの隙間で詰まることがあるので注意
写真のはネオンテトラ用に使っている「テトラプランクトン」の粒
給餌機とラズパイを配線
ラズパイの電源をオフにする(壊れるので)
まずはSG90-HVのデータシートを確認
以下の通り配線する
table:配線
Raspberry Pi SG90-HV
5V 赤(オレンジ?)
GPIO18 黄
GND 黒(茶色?)
GPIOは別のピンでも可能
https://scrapbox.io/files/61504fb0e127e6002340c5e5.png
自動給餌プログラムを作成
こういう感じに動かせるようにする
ラズパイの電源を入れる
以下のプログラムを作成する
code:feed.py
import RPi.GPIO as GPIO
import time
def feed():
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN, GPIO.OUT)
servo = GPIO.PWM(PIN, 50)
servo.start(0.0)
# 5秒間サーボモータを回し続ける
servo.ChangeDutyCycle(12.0)
time.sleep(5)
GPIO.cleanup(PIN)
if __name__ == '__main__':
feed()
上記を実行する
code:Terminal
$ python3 feed.py
サーボモータが5秒間回転し続け、その後停止することを確認する
無限回転ではない通常のサーボモータSG90でのプログラム例を他サイトを参考にしながら作っていたが、SG90-HVではChangeDutyCycle()の挙動が異なるようで、かつ参考に出来る情報が何もなく、上記は「たまたま上手く動いている」だけのため、よく動作を確認してから本番投入してほしい
servo.ChangeDutyCycle(12.0)が実行されるとプログラムとしてはその直後に次のtime.sleep(5)に進み5秒間のスリープに入るが、この間サーボモータはプログラムとは非同期的に回転を続けるように動き、その後のGPIO.cleanup(PIN)にて初めて動作を停止する
後はこの回転時間の長さを変更して1回の給餌でどのくらい餌を落とすか調整する
水槽に設置
サーボモータの駆動により各パーツがズレたりしないようにしっかりと固定する何らかが必要となる
これも3Dプリンタで作ると良い
あしゅりーアクアリウムは100均で発泡スチロールを買ってきて以下のように水槽に外掛けできるものを作った
https://scrapbox.io/files/61505a42ca2e1600211e5bf1.jpg
重力子放射線射出装置
https://scrapbox.io/files/61505aeef966af00201bf39a.jpg
くぼみを作り、それぞれが動かないようにはめ込んで隙間にグルーガンにて接着剤を流し込んで固定
写真では分かりづらいが水槽の縁と天板ガラスにそれぞれはめ込む溝を発泡スチロールに作って置き、ここにはめ込んで水槽側と接続して固定している
https://scrapbox.io/files/61505bbd45860700236c0b62.jpg
プログラムを実行して、水槽に餌が落とせていることを確認する
完了 ⇒ 仕様1:Raspberry Piからプログラムを実行すると、餌が水槽に投入される
定期的に自動給餌できるようにする
crontabで上記プログラムを定期的に実行する
例えば毎日10時と18時に1回ずつ実行したい場合を想定
python3の場所を確認
code:Terminal
$ which python3
/usr/bin/python3
上記の feed.py を例えば /home/asyley/ に置いている場合、 $ crontab -e を実行して以下を追記する
code:crontab
00 10 * * * /usr/bin/python3 /home/asyley/feed.py
00 18 * * * /usr/bin/python3 /home/asyley/feed.py
これにより毎日決まった時間に自動給餌機が動作して餌やりができることを確認する
完了 ⇒ 仕様2:Raspberry Piで指定した時間に、上記の自動給餌プログラムが実行される
活用
システム構成図
「Auto feeder」が実現できたことになる
システム構成図.icon
おわりに
エーハイムさん、俺の勝ちです