Arduino UNO を基盤に作成したシステムでイノシシ用の箱罠の制御をしたくてあれこれしているんだけど、とりあえず概要としては、
という動きをさせたい。
まあ、これだと無限ループに入る可能性があるから、何十秒か測距センサーを稼働させ検知出来なければ、一旦モーションセンサーの監視処理に戻す等の細かい制御は必要なんだけど。
ちなみに、モーションセンサーだけで罠に動物が入ったのはわかるんだから扉閉めればいいでしょ?って考え方もあるだろうが、それだとうり坊とか狐、たぬきなどの小動物でも扉が閉まっちゃうから。
なので、測距センサーで体高を計って、40cm以上の高さがある時だけ扉を閉めるんやね。
じゃあ、モーションセンサーいらんやん。測距だけでええやんって話だけど、測距センサーって無茶電気食うのよ。なので、通常はモーションセンサーで監視をし、何かいれば(モーションセンサーに検知されれば)測距センサーの監視に切り替えるわけ。
ということで、昨夜、こんな仕組みを作ってみた。
回路図が書けないので、実際の接続図ね。
モーターはまだ接続していない。12V のギヤードモーターって、必要な電流量が 500mA とかなんで、直接 Arduino に接続しても回らんのよ(^^; Arduino からの出力が 20mA なんで、全然足らん(^^;
トランジスタとか使って、高い電流が流れる回路を作ってやらないといけないので、とりあえず昨夜はモーターを動かす代わりに LED を点灯させてみた。
プログラムはこんな感じ。
で、実際に動かしてみたら・・・
おお、ちゃんと動いたよ。
最終的に、センサーから 60cm以内のところに手をかざすと LED が点灯。
なんで、60cm = 110 なのかは、「赤外線測距センサー(GP2Y0A21YK)を Arduino で試す」あたりを見てちょ。
これで、あとは、
ってあたりが残作業。最後のケース作りとかが一番手間がかかりそうやなあ・・・
・モーションセンサーで箱罠にイノシシ(何らかの動物)が入ったのを検知
・モーションセンサーを OFF にして、測距センサーを ON
・測距センサーから 60cm の位置(地上から 40cm)に物体を検知したら測距センサー OFF
・モーターを 1秒間回し、罠の扉を閉めるトリガーのワイヤーを引く
という動きをさせたい。
まあ、これだと無限ループに入る可能性があるから、何十秒か測距センサーを稼働させ検知出来なければ、一旦モーションセンサーの監視処理に戻す等の細かい制御は必要なんだけど。
ちなみに、モーションセンサーだけで罠に動物が入ったのはわかるんだから扉閉めればいいでしょ?って考え方もあるだろうが、それだとうり坊とか狐、たぬきなどの小動物でも扉が閉まっちゃうから。
なので、測距センサーで体高を計って、40cm以上の高さがある時だけ扉を閉めるんやね。
じゃあ、モーションセンサーいらんやん。測距だけでええやんって話だけど、測距センサーって無茶電気食うのよ。なので、通常はモーションセンサーで監視をし、何かいれば(モーションセンサーに検知されれば)測距センサーの監視に切り替えるわけ。
ということで、昨夜、こんな仕組みを作ってみた。
回路図が書けないので、実際の接続図ね。
モーターはまだ接続していない。12V のギヤードモーターって、必要な電流量が 500mA とかなんで、直接 Arduino に接続しても回らんのよ(^^; Arduino からの出力が 20mA なんで、全然足らん(^^;
トランジスタとか使って、高い電流が流れる回路を作ってやらないといけないので、とりあえず昨夜はモーターを動かす代わりに LED を点灯させてみた。
プログラムはこんな感じ。
int sn = 0;
void setup() {
pinMode(8, OUTPUT); // デジタルピン 8番から測距センサーに 5V 供給
pinMode(7, OUTPUT); // デジタルピン 7番からモーションセンサーに 5V 供給
pinMode(4, OUTPUT); // デジタルピン 4番からDCモーターに 5V 供給(実際は LED)
pinMode(2, INPUT); // デジタルピン 2番にモーションセンサーの検知結果を入力
Serial.begin(9600) ; // 9600bpsでシリアル通信のポートを開きます
digitalWrite(7, HIGH); // まずは、モーションセンサーを ON
}
void loop() {
// モーションセンサーのチェック
if (sn == 0) {
// 2番ピンを確認(検知情報)
if (digitalRead(2) == HIGH) { // 動体検知された!!(2番ピンが HIGH(検知!!))
sn = 1; // 次の処理に移行するため、1をセット
digitalWrite(7, LOW); // モーションセンサー OFF
digitalWrite(8, HIGH); // 測距センサーを ON
}
}
// 測距センサーのチェック
if (sn == 1) {
int ans ;
ans = analogRead(0) ; // センサーから読込む
// 60cm より近くなったらモーターを 5秒回す
if (ans >= 110) {
sn = 2; // もう何もしない
digitalWrite(8, LOW); // 測距センサーを OFF
digitalWrite(4, HIGH); // モーター ON
delay(1000) ; // 1000ms(1秒)時間待ち
digitalWrite(4, LOW); // モーター OFF
}
// 測距は 3秒ごとに行う
delay(3000) ; // 3000ms(3秒)時間待ち
}
}
で、実際に動かしてみたら・・・
おお、ちゃんと動いたよ。
最終的に、センサーから 60cm以内のところに手をかざすと LED が点灯。
なんで、60cm = 110 なのかは、「赤外線測距センサー(GP2Y0A21YK)を Arduino で試す」あたりを見てちょ。
これで、あとは、
・モーター用の回路を作って LED と交換
・6V 電源(単3電池 x 4)で動くことの確認
・とりあえず、実地テストのためのケース等の作成(モーターにつけるプーリー等も)
ってあたりが残作業。最後のケース作りとかが一番手間がかかりそうやなあ・・・