2016年6月30日木曜日

電動水鉄砲で猫よけを作る方法


「猫がおしっこをする場所があるので何とかしたい」という声があったので、電動水鉄砲とセンサで猫よけを作ってみました。
面白かったので、作り方を紹介します。

なお、材料費だけで5000円位するので、下記のような超音波タイプで事足りるのであれば、そちらをお勧めします。


トゲトゲも効果があると思います。


この記事ではUSBポートが付いていないProMiniを使っていますが、micro USBポートが付いていてプログラムを書き込みやすいProMicroを使って回路を組みました。
こちらの方が小さくまとまって良いと思うので、実作を検討される方はこちらもご参照ください。

猫よけ水鉄砲用回路2019年ProMicro利用版

材料



道具

  • 電動ドリル + 歯6.5mm、4mm
  • ハンダゴテ + ハンダ
  • ワイヤストリッパー
  • ラジオペンチ
  • ドライバー
  • テスター
  • 糸ノコ

作り方

水鉄砲の改造

ネジ9本を外して、分解します。


銃口部分は接着されていたので、こじ開けました。


外装を開きました。


トリガーでスイッチを押すことで、電池の+とモーターを接続する仕組みになっていました。


電池の+-、スイッチのモーター側に接続するワイヤを20cm位それぞれ準備します。


プラスチックが溶けるのを防ぐために、電池の端子はケースから外してハンダ付けしました。


ハンダ付けできたら、端子を元に戻します。


どこからワイヤを引き出そうかと考えていた所、外装の穴を塞いでいたパーツを発見したため、そのパーツを取り外して穴を確保しました。
まるで改造用に準備されたかのような穴です。


本体上部にセンサを設置するため、上部に出っ張っている標準器を組み立てる前に取り外します。
センサの設置場所については、本体下部の方が見た目は良くなるのですが、水が垂れて故障しそうなので上部にしました。


穴からワイヤを引き出しつつ、外装を閉じます。


閉じました。


+-の接触による短絡(ショート)を防ぐために赤と黒の配線をピンヘッダにハンダ付けしました。


水鉄砲の改造は以上です。

回路の作成

このような回路にしました。


実際に組み立てるとこうなりました。


それぞれ説明していきます。

電源

スイッチがONになると、回路に6Vと3.3Vを供給します。


Arduino

3.3VとGNDを接続します。
また、モータ制御にD10を、センサ値の読み取りにD11、D12を使用します。


水鉄砲(モーター制御)

フォトカプラとリレーを組み合わせて、ArduinoのD10からの信号によって水鉄砲を動作させます。
フォトカプラ保護のために、1KΩの抵抗を接続しています。


ややこしいので、リレー単体や、Arduinoとフォトカプラなど、部分的に動作確認しながら回路を作るのが良いと思います。

センサ

猫と人を区別するために、人感センサを上下に設置し、下のセンサだけが反応した時に猫が来たと判断します。
D11で上向きのセンサ、D12で下向きのセンサの値をそれぞれ読み取ります。


プログラムの作成・書き込み

このような振る舞いをさせます。

  1. 5秒毎にセンサの値を取得
  2. 下のセンサにだけ反応があった場合、2秒間水鉄砲を発射

cat_watcher
#define MOTOR_PIN       10
#define UP_SENSOR_PIN   11
#define DOWN_SENSOR_PIN 12
#define LED_PIN         13

boolean up_sensor_val   = LOW;
boolean down_sensor_val = LOW;

void setup() {
  // Serial.begin(9600);
  pinMode(MOTOR_PIN,       OUTPUT);
  pinMode(UP_SENSOR_PIN,   INPUT);
  pinMode(DOWN_SENSOR_PIN, INPUT);
  pinMode(LED_PIN,         OUTPUT);
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
  up_sensor_val   = digitalRead(UP_SENSOR_PIN);
  down_sensor_val = digitalRead(DOWN_SENSOR_PIN);
  // Serial.println(up_sensor_val);
  // Serial.println(down_sensor_val);
  delay(10);
  digitalWrite(LED_PIN, LOW);

  if ( up_sensor_val   == LOW &&
       down_sensor_val == HIGH ) {
    // Serial.println("ON!");
    digitalWrite(MOTOR_PIN, HIGH);
    delay(2000);
    digitalWrite(MOTOR_PIN, LOW);
    delay(3000);
  } else {
    // Serial.println("OFF");
    digitalWrite(MOTOR_PIN, LOW);
    delay(5000);
  }

}


組み立て

回路を入れるケースは、センサを出す部分を糸ノコで切り取ります。


センサと反対の面に電動ドリルで6.4mmと4mmの穴を開け、スイッチと配線を設置します。


センサはダンボールとビニルテープで固定しました。
写真はテープを貼る前の様子です。


ケースのフタを閉じ、ネジを閉めます。


水鉄砲にケースを固定し、ワイヤを接続します。


水鉄砲とケースの間に隙間があったため、ダンボールを挟みました。


上部のセンサ反応領域はビニルテープなどを貼って調節してください。


電池を入れてスイッチをONにすれば、動くはずです。

動作確認

設置しました。


動作の様子はこちらです。


背の低いものが近づくと動作します。


背の高いものが近づいても動作しません。


たまに誤動作します。


以上です。
不明点があれば、コメントや問い合わせフォームでご連絡ください。
この情報が何かの役に立てば嬉しいです。

参考

人感センサーが届いたので遊んだ

変更履歴

2018.01.10
材料の紹介に、Arduino Pro Miniへの書き込み方法のリンクを追加しました。
2019.05.12
ProMicroを利用して回路を作成したので、その記事の紹介を冒頭に追加しました。
電動水鉄砲のリンク先が売り切れになっていたため、在庫があるリンクに変更しました。
2019.06.23
作詞に利用したレギュレータの 取扱いが終わっていたので、代替品のリンクを追加しました。
猫よけ対策品として、トゲトゲのシートの紹介を追加しました。

4 件のコメント :

  1. これ、面白いですね!
    作ってみようかな(^.^)

    返信削除
    返信
    1. 面白がってもらえて嬉しいです。
      お試しくださいな。

      削除
  2. こんにちは。素晴らしいアイデアですね。真似をさせていただこうとしておりますが下センサーの感度を調整する方法ありますか? 自宅通路の構造上どうしても2m以下では反応させたくありません。 可変抵抗(?Ω)を入れて現場に合わせた調整ができればと思っています。 ご指南いただけると嬉しいです。

    返信削除
    返信

    1. こんにちは。
      興味を持ってもらえて嬉しいです。

      人感センサに抵抗を入れれば、期待される出力になるかは分かりません。
      人感センサに比べると認識範囲が直線状になりますが、距離で判定したいのでしたら超音波センサを使うのはいかがでしょう?

      別の提案として、水鉄砲とセンサを分けて設置するのはどうでしょうか?
      自分の作った装置は水鉄砲とセンサを一体化させていますが、配線を伸ばしてセンサを遠くに置いておけば、その位置から対象物を認識する装置ができるとおもいます。

      参考になれば嬉しいです。

      削除