Auto Feeder for My Cat 猫用自動エサやり機
10歳になる猫のために、自動エサやり機を作ってみました 10歳になる猫のために、自動エサやり機を作ってみました
タグ一覧 Tag List
使っているVIVIWARE Cell VIVIWARE Cell
Warning: Illegal string offset 'value' in /home/xs900707/viviware.com/public_html/wp-content/themes/theme_VIVIWARECell/single-example.php on line 64
C
Warning: Illegal string offset 'value' in /home/xs900707/viviware.com/public_html/wp-content/themes/theme_VIVIWARECell/single-example.php on line 64
S
その他使っているもの Other Parts
- 付属の大サーボ(2個)
- 付属の電池ボックス
- 単3電池(4本)
- サーボ(2個)
- 電池ボックス
- 単3電池(4本)
時間通りに給餌
10歳になる猫を飼っているのですが、所用で丸一日誰も家にいなかったり、朝寝坊してご飯が遅かったりすると鳴いて暴れるので、自動エサやり機を作ってみました。 仕様は以下の通り、シンプルにしました。 ・1日2食分 (12時間に1回) 、各回およそ20gのカリカリを皿に盛る ・皿に盛る直前に、飼い主の声等で知らせる
制作工程
使用したBranchはVIVIWARE Cell Servo Driver 1個、あとはサーボ2個と電池だけです。 サーボを固定する台座や、カリカリを充填するシリンダーはCADを使ってモデリング、3Dプリンタで出力しました。 形状はシンプルなのでモデリングは難しくないのですが、出力してみると、カリカリを充填したシリンダーの蓋がスムーズに動かず… うまくいかないので、今回は外しました。
(使用者が安全を確認しています。)
プログラム
これがプログラムの全体像です。
このQRコードを「ハードウェアを追加」で起動するカメラで読み込むと、プログラムをダウンロードできます。
おおまかな仕組み
1回目にエサをあげる時刻を設定して、 このように間隔を設定してから、 左上にあるToggle SwitchをONにすると動作を開始します。
プログラムの中身の詳細
・1日2食分 (12時間に1回) 、各回およそ20gのカリカリを皿に盛る ・皿に盛る直前に、飼い主の声等で知らせる というように動かしたいので、以下のように少し分解します。
1. 一定の時間間隔でトリガーを発生させる 2. トリガー発生時に音(飼い主の声)を鳴らす 3. 音を鳴らし終えたら、2つあるシリンダーの片方を選択する (次回トリガー発生時は、もう一方のシリンダーを選択する) 4. 選択したシリンダーのみを傾けて、カリカリを皿に盛りつけ、一定時間後にシリンダーを元の 位置に戻す 5. 1.に戻る
1. 一定の時間間隔でトリガーを発生させる
現在時刻から「開始時刻」を引いた値を「エサをあげる間隔」で割った余りをCalculate Moduleで算出し、その余りが0の場合にCompare Moduleがtrueを出力するので、それをトリガーとしています。 例えば、「開始時刻」を6時、「エサをあげる間隔」を12時間に設定し、現在時刻が17時の場合は、 (17 - 6) % 12 = 11 なので、Compare Moduleはfalseですが、現在時刻が18時の場合は、 (18 - 6) % 12 = 0 なので、Compare Moduleはtrueを出力します。 (上記「%」は、アプリ内で割り算を示す記号です)
2. トリガー発生時に音(飼い主の声)を鳴らす
トリガーが発生し、Sound player ModuleのPlayにtrueが送られると、音が鳴ります。 音を鳴らし終えるとCompleteがtrueとなり、今度はそれをトリガーにCount ModuleとRoutine Moduleが動き始めます。 Count Moduleは、2つあるシリンダーのいずれか一方を選択する役割を、Routine Moduleはシリンダーの傾きを制御する役割を担っています。
3. 音を鳴らし終えたら、2つあるシリンダーの片方を選択する
まずは、2つあるシリンダーのいずれか一方を選択します。 Sound player ModuleのCompleteがtrueを出力する度に、「Min=1, Max=2, Loop=On, Step=1」に設定したCount Moduleがカウントアップします。 すると、Switcher ModuleのOut1、Out2のいずれかをtrue出力に固定できるため、2つあるシリンダーの片方を選択した上で、次回トリガー発生時は、もう一方のシリンダーを選択することができます。
4. 選択したシリンダーのみを傾けて、カリカリを皿に盛りつけ、一定時間後にシリンダーを元の位置に戻す
先ほど、2つあるシリンダーのいずれか一方を選択できたので、次は選択したシリンダーの傾きを制御して、カリカリを皿に盛り付けます。 Sound player ModuleのCompleteがtrueを出力するとRoutine Moduleが動作を開始し、15秒間Out1にtrueを出力して、シリンダーを傾けてカリカリを皿に盛りつけます。 (シリンダーの傾き加減はSelect Moduleに接続したAnalog Outputで指定) 15秒経過後はOut1をfalseにして、シリンダーを元の位置に戻します。 Routine ModuleとSelect Moduleの間にLogical Operation ModuleのANDを挟んでいるのは、先ほどのCount ModuleとSwitcher Moduleの組み合わせで選択したシリンダーのみ動かすためです。
5. 1.に戻る
あとは上記動作の繰り返しです。 …と言っても、シリンダーが2つしかないので、2周回したら終了です?
(様々な視点から安全を確認しています)
動画
サーボの動作音がそこそこあるので、使用者本人が警戒すると思い、事前に試作機で慣らそうとしているところ。
事前にお皿に2〜3粒入れておくと寄ってきますが、実際に動くと逃げ出します。 でもお腹は空いたので… 少し離れて監視。 (遠くからも、近くからも、安全確認を怠りません!)
何度か安全確認を繰り返した後、やっと食べました。
感想と今後
最も苦労したのは、稼働時に使用者本人を驚かすことなく、使ってもらうための施策を練ることでした。 稼働前に声や音で知らせて慣らしてもダメということは、そもそも動作音が大きすぎるのか… (飼い主の「ごはん」コールには無反応でした…) まだまだ試行錯誤が必要そうです。
編集後記
実はこの記事、社内ではコメントが殺到! 音や動きに警戒するネコチャンを気遣って、どうやったら動作音が減るか、音の出ないサーボについての情報などなど・・・ 合う合わないはやってみないとわかりませんが、試行錯誤しやすいのがVIVIWAREのいいところ! いろいろ試して、お気に入りの一台ができますように。 そして、無理を言って、声に反応しない使用者の方の動画も撮っていただきました! (ストレスになっていないとよいのですが・・・) そこそこお腹空いてるはずの時間帯に試した、二種類の動画で今回はおしまいです。
(全く振り返ってくれない版)
(反応して振り返ったけど出てこない版)
来週もお楽しみに!
(Created by Takashi Ando)
時間通りに給餌
10歳になる猫を飼っているのですが、所用で丸一日誰も家にいなかったり、朝寝坊してご飯が遅かったりすると鳴いて暴れるので、自動エサやり機を作ってみました。 仕様は以下の通り、シンプルにしました。 ・1日2食分 (12時間に1回) 、各回およそ20gのカリカリを皿に盛る ・皿に盛る直前に、飼い主の声等で知らせる
制作工程
使用したBranchはVIVIWARE Cell Servo Driver 1個、あとはサーボ2個と電池だけです。 サーボを固定する台座や、カリカリを充填するシリンダーはCADを使ってモデリング、3Dプリンタで出力しました。 形状はシンプルなのでモデリングは難しくないのですが、出力してみると、カリカリを充填したシリンダーの蓋がスムーズに動かず… うまくいかないので、今回は外しました。
(使用者が安全を確認しています。)
プログラム
これがプログラムの全体像です。
このQRコードを「ハードウェアを追加」で起動するカメラで読み込むと、プログラムをダウンロードできます。
おおまかな仕組み
1回目にエサをあげる時刻を設定して、 このように間隔を設定してから、 左上にあるToggle SwitchをONにすると動作を開始します。
プログラムの中身の詳細
・1日2食分 (12時間に1回) 、各回およそ20gのカリカリを皿に盛る ・皿に盛る直前に、飼い主の声等で知らせる というように動かしたいので、以下のように少し分解します。
1. 一定の時間間隔でトリガーを発生させる 2. トリガー発生時に音(飼い主の声)を鳴らす 3. 音を鳴らし終えたら、2つあるシリンダーの片方を選択する (次回トリガー発生時は、もう一方のシリンダーを選択する) 4. 選択したシリンダーのみを傾けて、カリカリを皿に盛りつけ、一定時間後にシリンダーを元の 位置に戻す 5. 1.に戻る
1. 一定の時間間隔でトリガーを発生させる
現在時刻から「開始時刻」を引いた値を「エサをあげる間隔」で割った余りをCalculate Moduleで算出し、その余りが0の場合にCompare Moduleがtrueを出力するので、それをトリガーとしています。 例えば、「開始時刻」を6時、「エサをあげる間隔」を12時間に設定し、現在時刻が17時の場合は、 (17 - 6) % 12 = 11 なので、Compare Moduleはfalseですが、現在時刻が18時の場合は、 (18 - 6) % 12 = 0 なので、Compare Moduleはtrueを出力します。 (上記「%」は、アプリ内で割り算を示す記号です)
2. トリガー発生時に音(飼い主の声)を鳴らす
トリガーが発生し、Sound player ModuleのPlayにtrueが送られると、音が鳴ります。 音を鳴らし終えるとCompleteがtrueとなり、今度はそれをトリガーにCount ModuleとRoutine Moduleが動き始めます。 Count Moduleは、2つあるシリンダーのいずれか一方を選択する役割を、Routine Moduleはシリンダーの傾きを制御する役割を担っています。
3. 音を鳴らし終えたら、2つあるシリンダーの片方を選択する
まずは、2つあるシリンダーのいずれか一方を選択します。 Sound player ModuleのCompleteがtrueを出力する度に、「Min=1, Max=2, Loop=On, Step=1」に設定したCount Moduleがカウントアップします。 すると、Switcher ModuleのOut1、Out2のいずれかをtrue出力に固定できるため、2つあるシリンダーの片方を選択した上で、次回トリガー発生時は、もう一方のシリンダーを選択することができます。
4. 選択したシリンダーのみを傾けて、カリカリを皿に盛りつけ、一定時間後にシリンダーを元の位置に戻す
先ほど、2つあるシリンダーのいずれか一方を選択できたので、次は選択したシリンダーの傾きを制御して、カリカリを皿に盛り付けます。 Sound player ModuleのCompleteがtrueを出力するとRoutine Moduleが動作を開始し、15秒間Out1にtrueを出力して、シリンダーを傾けてカリカリを皿に盛りつけます。 (シリンダーの傾き加減はSelect Moduleに接続したAnalog Outputで指定) 15秒経過後はOut1をfalseにして、シリンダーを元の位置に戻します。 Routine ModuleとSelect Moduleの間にLogical Operation ModuleのANDを挟んでいるのは、先ほどのCount ModuleとSwitcher Moduleの組み合わせで選択したシリンダーのみ動かすためです。
5. 1.に戻る
あとは上記動作の繰り返しです。 …と言っても、シリンダーが2つしかないので、2周回したら終了です?
(様々な視点から安全を確認しています)
動画
サーボの動作音がそこそこあるので、使用者本人が警戒すると思い、事前に試作機で慣らそうとしているところ。
事前にお皿に2〜3粒入れておくと寄ってきますが、実際に動くと逃げ出します。 でもお腹は空いたので… 少し離れて監視。 (遠くからも、近くからも、安全確認を怠りません!)
何度か安全確認を繰り返した後、やっと食べました。
感想と今後
最も苦労したのは、稼働時に使用者本人を驚かすことなく、使ってもらうための施策を練ることでした。 稼働前に声や音で知らせて慣らしてもダメということは、そもそも動作音が大きすぎるのか… (飼い主の「ごはん」コールには無反応でした…) まだまだ試行錯誤が必要そうです。
編集後記
実はこの記事、社内ではコメントが殺到! 音や動きに警戒するネコチャンを気遣って、どうやったら動作音が減るか、音の出ないサーボについての情報などなど・・・ 合う合わないはやってみないとわかりませんが、試行錯誤しやすいのがVIVIWAREのいいところ! いろいろ試して、お気に入りの一台ができますように。 そして、無理を言って、声に反応しない使用者の方の動画も撮っていただきました! (ストレスになっていないとよいのですが・・・) そこそこお腹空いてるはずの時間帯に試した、二種類の動画で今回はおしまいです。
(全く振り返ってくれない版)
(反応して振り返ったけど出てこない版)
来週もお楽しみに!
(Created by Takashi Ando)