![]() |
我ながら雑だ |
■再来■
えー、また鳩害対策の話ですが……廊下側の給湯器排気筒の上に来て大量の糞を落とすようになってしまいました。当初ぐるぐるまいた鉄条網を設置したらしばらく来なかったのですが、ある日ふと見ると上に鎮座してやがりました。鉄条網ぐらいの短い針じゃあんまり効果無いですね。
■検出して振り払う■
ということで、電子工作的に対応しました(キリッ- Arduino nanoパチ
- SG90サーボのパチ物
- PIR
- mini spy camera(Adafruit)
- モバイルバッテリ
電源はダイソーのモバイルバッテリを使いました。ボタン押さなくても給電開始してくれるのでこういう用途にばっちりです。
今回使ったAdafruitのmini spy cameraは、micro SDカードをセットして電源をつなげば、あとは信号を0.5秒以下GNDに落とすと静止画、それ以上だと動画録画を開始しもう一度落とすと止まる……という仕様です。間違って買ってしまったんですが、イマイチ使いにくいっす。
サーボはSG90のパチ物です。本物は180度動くみたいですが、これは120度しか動いてくれないし安定性もイマイチです。でも1個100円なので、こういう用途には十分です。
サーボはSG90のパチ物です。本物は180度動くみたいですが、これは120度しか動いてくれないし安定性もイマイチです。でも1個100円なので、こういう用途には十分です。
ソフト的にはPIRが検知したら撮影を開始し、ちょっと待ってから数秒間サーボの腕(割り箸をサーボホーンにホットグルーで接着)をぶんぶん振り回し、撮影を止める……というたわいないものです。
サーボはタミヤのプラスチックアングルに固定し秋月のこれで給湯器に貼り付けました。以前にも書きましたが、コレの接着テープは非常に強力でキレイな面に貼るとちょっとやそっとでは剥がれません。ご注意下さい。ケースはレーザー加工したMDF箱が大量に余っているのでそれを流用し、ネオジム磁石のフックで吊りました。
我ながら雑です。
雑ですが、設置期間中は鳩の糞はありませんでした。そして、spy cameraにも鳩らしいものは写っていませんでした。ははははははorz
■そして物理障壁設置へ■
【追記2018年8月29日】
今日まで書き忘れていましたが、今年になってからまた来るようになりました。廊下全体にテグスが設置されているわけではないので、まぁ当たり前ですよね。糞を掃除するのにも疲れましたので、またぞろ対策します。
今日まで書き忘れていましたが、今年になってからまた来るようになりました。廊下全体にテグスが設置されているわけではないので、まぁ当たり前ですよね。糞を掃除するのにも疲れましたので、またぞろ対策します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <Servo.h> | |
const int PinServo = 9; | |
const int PinPIR = 8; | |
const int PinCamera = 7; | |
const int CameraOn = LOW; | |
const int CameraOff = HIGH; | |
Servo servo; | |
const int AngleStart = 30; | |
const int AngleEnd = 150; | |
int angle = AngleStart; | |
void setup() { | |
Serial.begin(9600); | |
pinMode(PinPIR, INPUT); | |
pinMode(PinCamera, OUTPUT); | |
digitalWrite(PinCamera, CameraOff); | |
servo.attach(PinServo); | |
servo.write(30); | |
} | |
uint32_t prevShot = 0; | |
void cameraButton() { | |
digitalWrite(PinCamera, CameraOn); | |
delay(1000); | |
digitalWrite(PinCamera, CameraOff); | |
} | |
void loop() { | |
// put your main code here, to run repeatedly: | |
int pir = digitalRead(PinPIR); | |
Serial.print(pir = digitalRead(PinPIR)); | |
Serial.print(","); | |
Serial.print(prevShot); | |
Serial.print(","); | |
Serial.println(millis()); | |
if (pir == HIGH && (prevShot == 0 || millis() - prevShot > 10000)) { | |
cameraButton(); | |
delay(1000); | |
uint32_t t = millis(); | |
while (millis() - t < 5000) { | |
servo.write(30); | |
delay(300); | |
servo.write(150); | |
delay(300); | |
} | |
delay(1000); | |
cameraButton(); | |
prevShot = millis(); | |
} else { | |
delay(1000); | |
} | |
} |