Raspberry PI 5活用術(害獣撃退編)

組み込みシステム

対象害獣と検出機器

  1. 対象動物(https://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A7%E3%83%B3
    • 最近クマ、イノシシの獣害が多く報道されるが、私の住む地域では「キョン」と呼ばれている中型犬程のシカの一種が多く目撃され、庭木や農作物に被害を及ぼす
    • 一般的な対処方法は、庭や畑を柵やネットで囲んだり、電気柵を設置する場合もある
    • 囲いに少しでも隙間があれば侵入される為、諦めて何も設置しない家や、そもそも我が家の様にあまり気にしない家も多い
    • 植物の食害に関しては、食べられない庭木にしたり、高所に置くことである程度対策できるが、「糞害」に関しては何とかしたいと思っている
    • 「キョン」は主に夜出現して害を及ぼすが、汎用性の観点から昼夜問わず、他の害獣も検出できる事が望ましい
    • 因みにエサの不足する冬場は、樹液に毒性のある「プルメリア」、「椿の花」、「夏みかんの葉」も食べられるので注意が必要
  2. 構成機器
    • 物体認識編で使用したRaspberry PI 5とACアダプタ
    • 夜間撮影が可能なRaspberry PI カメラ
    • 屋外設置用防水ケース
    • 野外設置の為、破損等々トラブルが発生する可能性がありますので、ご自分の責任で試作を行ってください
  3. 夜間撮影が可能なRaspberry PI カメラ
    • 昼夜モード自動切り替え、赤外線ナイト ビジョン IR カメラ、アクリルホルダーケース付きRaspberry Pi用カメラ
    • Amazonで\3,296で購入可能で、Raspberry PI 5のカメラ用I/Fに接続
    • 防水ケースの側面にカメラ、赤外線LEDスポットライト用の穴を開けて設置

検出用ソフトウェア

  1. 物体認識編で使用したソフトウェアをベースに拡張
    • 通行人や自動車のライトの影響等を排除する為に検出エリアの位置制限必要
    • 人間と区別する為に検出エリアの高さ、幅に制限を設ける必要あり
  2. 検出エリア制限例
    • objectInfo.append([box,className]) 部の[box]情報を使用
    • 画像左上部の x座標=box[0], y座標=box[1] で画像右下の x座標=box[2], y座標=box[3]
    • 上記画像のx,yの位置や幅(abs(box[0]-box[2])、高さ(abs(box[1]-box[3])の大小を使用して制限を実施

検出画像

検出クラスは「DOG」と表示された画像を下記に掲載。

当然未学習なので、検出クラスに「キョン」と表示されないが、「DOG」、「BIRD]、「PERSON」等のクラスとして検出可能。

撮影は0.1秒間隔程で連写可能で、検出期間は、数秒~1分程度(何も食べるものが無い場合)。

撃退策を練る

「キョン」の検出は出来そうなので、撃退策の検討を開始。

害獣撃退グッズを探してみると、「ニオイ」、「フラッシュライト」、「音」を使用した物が多い。

「ニオイ」系は、ヒトデ、オオカミの尿、木タールを使用してみたが、全く寄せつかせない程の効果は得られないようです。

「フラッシュライト」と「音波」=超音波の両方が付いている害獣対策器は、赤外線温度センサーで感知するタイプなので害獣と関係ない「人」や「散歩中の犬」も感知したりと、害獣に絞った感知や感知領域の設定が難しく、あまり実用的ではありませんでした(実はこれが今回の対策の動機となっている)。

ただし、「フラッシュライト」と「音波」自体は撃退に有効と思われるので、まずは「音」を使用した撃退策を組み込む事にした。

音波発生部

音波の周波数と波形を決める為に、簡単に変更が行えるArduinoを使用したPWM出力回路とスピーカードライブで構成される装置を試作する。

Arduinoのコードは下記ページを参考に、そのPWM信号出力を下記ドライバー回路に入力する。

尚、ドライバー回路は在り合わせの部品で試作したので、最適な部品でない可能性も有ご自分の責任で試作願います(特にFETオン時の電源出力に接続される抵抗の焼損に注意願います)

【Arduiono】Arduinoでタイマ割込みを使用したPWM制御を行う方法を紹介する
今回はArduiono、いや、Arduinoに搭載されたマイコン「ATmega328P」のタイマ機能を使用してPWM制御を行ってみました。 備忘録。 ※本記事ではATmega328PBのデータシートを

検出部と音波発生部との接続

物体認識編の検出処理にGPIOピンから検出信号を出力。出力期間は time.sleep()などで調整。

物体認識編の不特定物体検出のPythonスクリプトを修正。

 import gpiod

 GPIO_PIN = 18
 chip = gpiod.Chip('gpiochip0', gpiod.Chip.OPEN_BY_NAME)
 pin = chip.get_line(GPIO_PIN)
 pin.request(consumer="ENABLE", type=gpiod.LINE_REQ_DIR_OUT)
  .
  .
  # 無効
  pin.set_value(0)
  .
  .
   # 検出処理
   .
   .
   # 有効
    pin.set_value(1)
   time.sleep(時間)
   .
   .

このGPIOピンをArduinoボードのD5に入力し、PWM出力のオン・オフ制御に使用。

#define OUT_PIN 9
#define EN_PIN 5

void setup() {
  pinMode(OUT_PIN, OUTPUT);  // PWM出力
  pinMode(EN_PIN, INPUT);    // イネーブル出力

}

void loop() {
  enable = digitalRead(EN_PIN);

  if (enable == 1) {
    OCR1A = 適当な値(Dutyを設定);
    TCCR1A = 適当な値(PWMを設定);
  }
  else {
    OCR1A = 0;    // Duty 0
    TCCR1A  = 0;  // PWM無効
  }
}

ArduinoボードのD9ピンをスピーカードライバーの [Audio_in] に接続。

Arduinoコードの ICR1 設定でPWM周波数(スピーカー音周波数)を、OCR1A 設定でDutyを変更して害獣に有効な値を決定。

Arduinoコードの ISR割り込みルーチン内で OCR1A 設定でDutyを変更するとより複雑な音を出力できる可能性あり。

撃退したと思われる画像

元々検出画像は短時間の静止画群である為、本当に撃退できたかどうかは明確に判断するのは難しいが、下記連続画像の左右画像間は0.2秒であり、逃げ出した画像と推定される。

ただし下記画像は比較的カメラに近い場所を撮影しており、当然カメラから離れるほど音波パワーは減衰するので、まだ遠距離での効果は検証できていない。

コメント

タイトルとURLをコピーしました