あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

メダカ自動餌やり装置 2023.9

明後日からいよいよイギリスなので、メダカ自動餌やり装置を設置しました。

youtu.be

前回これを構築した帰省のときは、リモートから様子を見ながら手動実行していましたが、途中でHGWのファームウェア自動更新で自宅サーバーが回復できなくなり通信不能になって餌やり出来なくなったので、今回はタイマー実行するように実装しました。

akkiesoft.hatenablog.jp

今回はPicoではなくPimoroniのServo2040を使用することにして、3つのサーボモーターを同時に制御できるようになりました。べんりやん。

Servo 2040 - 18 Channel Servo Controllershop.pimoroni.com

サーボモーターは足りなかったのでAliexpressで雑に調達。5個セットで買ったら、なぜか全部油まみれで、泣きながら拭きました。あと、ケーブル長に不安があったので、スイッチサイエンスで延長ケーブルも調達しました。1セット3本で、不足を考慮して2セット買いましたが1セットで足りました。普通に便利そうなので他の用途でも使えそう。

サーボモーター用延長コード(3本入り)www.switch-science.com

Servo2040はPimoroniのMicroPythonを入れて、以下のコードをmedaka.pyとして用意。

from servo import Servo, servo2040
import time

servos = [
    Servo(servo2040.SERVO_1),
    Servo(servo2040.SERVO_2),
    Servo(servo2040.SERVO_3),
]

def feed(servos):
    i = 60
    print(i)
    for s in servos:
        s.value(i)
    time.sleep(2)
    yusaburi(servos, i)

    i = -60
    print(i)
    for s in servos:
        s.value(i)
    time.sleep(2)
    yusaburi(servos, i)

feed(servos)

これをメダカメラ用のRPiに接続して、実行の命令はbashを使ってechoでREPLに投げつけます。一度impoortすると2回目は実行されなくなるので、実行前にmachine.soft_reset()でソフトリセットをかけて、importで確実に実行されるようにしました。

#!/bin/bash
# esa.sh
echo -e "machine.soft_reset()\r\nimport medaka\r\n" > /dev/ttyACM0

後はesa.shをcrontabで毎朝9時に動かします。

0 9 * * * /home/akkie/esa.sh

これに加えて、留守番用の餌も投入していくので、餌が落ちなくなってもいちおうなんとかなる予定です。餌やり装置は隔日でもいいかも。

あと、このタイミングでメダカの稚魚を育て始めてしまっているのですが、餌やり装置では投与量が過剰になるので、こちらは留守番用の餌だけで対応する予定。まあこちらはダメ元ですね……。

今回はうまくいくといいっすねえ……!