ラベル サーボ の投稿を表示しています。 すべての投稿を表示
ラベル サーボ の投稿を表示しています。 すべての投稿を表示

2017年9月23日土曜日

鳩対策:Arduino + サーボで振り払う

我ながら雑だ

■再来■

えー、また鳩害対策の話ですが……廊下側の給湯器排気筒の上に来て大量の糞を落とすようになってしまいました。

当初ぐるぐるまいた鉄条網を設置したらしばらく来なかったのですが、ある日ふと見ると上に鎮座してやがりました。鉄条網ぐらいの短い針じゃあんまり効果無いですね。



■検出して振り払う■

ということで、電子工作的に対応しました(キリッ


電源はダイソーのモバイルバッテリを使いました。ボタン押さなくても給電開始してくれるのでこういう用途にばっちりです。

別にカメラ付けなくても良いんですが、やっぱ「装置が働いたことによって排除することが出来た」ってのを確認したいじゃないですかw



今回使ったAdafruitのmini spy cameraは、micro SDカードをセットして電源をつなげば、あとは信号を0.5秒以下GNDに落とすと静止画、それ以上だと動画録画を開始しもう一度落とすと止まる……という仕様です。間違って買ってしまったんですが、イマイチ使いにくいっす。

サーボはSG90のパチ物です。本物は180度動くみたいですが、これは120度しか動いてくれないし安定性もイマイチです。でも1個100円なので、こういう用途には十分です。

ソフト的にはPIRが検知したら撮影を開始し、ちょっと待ってから数秒間サーボの腕(割り箸をサーボホーンにホットグルーで接着)をぶんぶん振り回し、撮影を止める……というたわいないものです。

サーボはタミヤのプラスチックアングルに固定し秋月のこれで給湯器に貼り付けました。以前にも書きましたが、コレの接着テープは非常に強力でキレイな面に貼るとちょっとやそっとでは剥がれません。ご注意下さい。ケースはレーザー加工したMDF箱が大量に余っているのでそれを流用し、ネオジム磁石のフックで吊りました。

我ながら雑です。

雑ですが、設置期間中は鳩の糞はありませんでした。そして、spy cameraにも鳩らしいものは写っていませんでした。ははははははorz

■そして物理障壁設置へ■

というわけで、一応効果のある装置でしたが、公団に文句を言い続けてたら対策してくれました。



物理障壁強い。横から入りそうで少し心配な形状ではありますが。

【追記2018年8月29日】
今日まで書き忘れていましたが、今年になってからまた来るようになりました。廊下全体にテグスが設置されているわけではないので、まぁ当たり前ですよね。糞を掃除するのにも疲れましたので、またぞろ対策します。

2015年10月24日土曜日

鳩対策2号機(動きモノ


学習能力のあるカラスは電撃一回で来なくなったようですが、鳩は電撃で対策した柵には寄りつかなくなったものの今度は室外機の上に来るようになりました。

ということで、今度は、光り物と動き物で脅かす作戦にしました。やつら「実害」がないとダメなので、当初は電極を振り回そうかと思ったのですが、製作中に私が「実害」を受ける未来しか浮かばないので保留。

■仕様■

まず使用機材:
  • 動作状況をモニタできるようにESP8266を使用
  • 動きモノはサーボモータSG90
  • 光りモノは赤色LEDを直接接続
  • 鳩検出はPIR
  • 動作状況の記録にはThingSpeakを使用
動作仕様:
  • PIRで何かを検出したら時計をセット
  • 時計がセットされていたらサーボ腕を振り回しつつLEDを点滅させる。5秒経ってもどかなければ、LEDの点滅を激しくする
  • 何かがいなくなったら、サーボとLEDを止めてから何秒とどまっていたかをThingSpeakに送信
  • それとは別に1分ごとに気温と湿度をThingSpeakに送信する

■ハードウェア制作■

ESP8266/ESP-WROOM-02の電源を甘く見てはいけません。最終的に毎度お馴染みの「超高効率DC-DCコンバーター(3.3V0.5A) M78AR033-0.5」を使い、アルミ電解コンデンサ470uF + タンタル4.7uF + 積層セラミック1uをブレッドボードの3.3v電源ラインに並べ、ESPモジュールの上、Vcc - GND間に直接積層セラミック0.1uをハンダ付けして、安定動作させることができました。VccとGNDが離れているのでパスコン付けにくいんですよね…。ロットでの差異や個体差もあると思いますが、ここまでやれば起動直後にドーンと電流食われてもだいたい安定します。

サーボモータはIOピン直結、LEDはVfの実測値1.8vだったのでESPのIO定格値12mAを超えないよう150Ωの抵抗を入れて制限します。

HDC1000は秋月のプルアップ抵抗内蔵モジュールを使いますので、電源とI2Cを接続するだけでOKです。

PIRはHC-SR501を使いました。アマゾンでも秋月でも入手できます。このPIRは4.5vから使うことができます。秋月では5-12vと書いてありますが、他サイトでは4.5-12vになっていて、実際に試しても5vで問題ないようです。SE-10のように5vって書いてあるけど5vで使うとしばらくして不安定になる、ということはありません。以下配線表です。


ESP-WROOM-02モジュール接続先
1Vcc3.3vライン
2EN10kΩを通して3.3vラインへ(プルアップ)
3IO14HDC1000のSCLへ
4IO12150Ωを介してLED1へ
5IO13150Ωを介してLED2へ
6IO15N.C.(無接続)
7IO2プルアップ
8IO0プルアップ
スイッチを通してGNDへ
9GNDGNDへ
10IO4HDC1000のSDAへ
11RxDFTDIのTxへ
12TxDFTDIのRxへ
13GNDGNDへ
14IO5N.C.
15RSTプルアップ
スイッチを通してGNDへ
16TOUTN.C.
17IO16SG90の信号線(オレンジ色)
18GNDGNDへ


この他、各モジュールには電源を接続します。HDC1000はモジュールに書いてある通り、PIRはここがわかりやすいです。サーボはこちらを参考にしました。

PIRは感度と出力秒数をボリュームで、ジャンパで出力モードを指定できます。感度ボリュームは検知範囲の指定ですが、人間よりも小さい鳩が対象なので最大(7m程度)にします。出力秒数は動きが検知されなくなった後何秒ぐらい出力HIGHをキープするかを設定します。よくある侵入警告灯などで使う機能ですね。これは居なくなったらできるだけ早く消えて欲しいので最小にします。ジャンパは信号出力中に動きを検知した場合に点灯時間を延長するか最初の検知から指定時間を経過したらその間動きがあってもOFFにするかを切り替えます。内側は動いている間はずっと出力、外側は指定時間でOFF。今回は鳩の滞在時間を調べたいので、内側にします。上記の通り出力が延長されてしまうので正確な記録にはならないのですが…まぁ傾向はわかるかなと。

■ThingSpeakすげえ■

今回、ThingSpeak初めて使ったのですが、こういうWebサービスの中では今までで一番簡単でした。開発中、「そろそろThingSpeakへの書き込みコードを用意しておこう」と思ってコピペしてAPI KEYや変数などを書き換えてそのまま放置していたんですが、画面の隅で何か動いているものがあるなと思ったらThingSpeakのグラフでした。これだけでグラフになっちゃったのは初めてです。いやー、恐ろしい。

なお、ThingSpeakへの書き込みコードはここからコピーしました。ありがとうございます。Particleも良いんだけどね…I2Cが動かないのと何よりも技適がないのでどうにもなりまへん。

■ESPをArduino IDEで使う場合のピン番号■

動かしたヒトならみんなご存じだと思うのですが、探しても明記しているページが出てこなかったので書いておきます。

Arduino IDEでpinmode, digitalOutなどを使い場合に指定するピン番号は、ESPのIO4, IO5などと書いてある数字を使います。物理的なピン番号ではありませんのでお間違いのないように。

■ハマり所■

  • 上にも書きましたが、ESP8266の電源はちゃんとインピーダンスを下げないと暴走します。それもArduino IDEが書き込み終わった直後に暴走(電解コンデンサ追加で改善)、動作するけど数分で止まる(タンタル4.7uF追加)、数十分で止まる(パスコンを基板上に直接ハンダ付けで改善)…と対策をすれば良くなりますので、安定して動作しないとお悩みの方はお試しあれ。
  • Arduino HDC1000ライブラリはそのままでは動きません。Wire.beginでSDL, SCLのピン番号を指定する必要があります。HDC1000.cppのコンストラクタでWire.begin(); を Wire.begin(4,14); にします。
  • 存在しないIO番号、例えば6を指定すると、Arduino IDEではエラーになりませんがpinmodeなどを実行した際にExceptionが出ます(シリアルコンソールにメッセージが出ます)。
  • サーボモータを使うのはこれが初めてです。サーボモータは0-180度で動作するとのことなんですが、激安サーボとして有名なSG90は45-135度ぐらいしか動作しませんでした。その範囲外を指定すると唸り始めます。5個買ったうちの2個が同じ状態だったのですが、そういうもの?
  • サーボモータをつないだままにしておくと信号が一定でもピクピクもぞもぞ動いていますが、これを止めるにはdetachします。使う時にまたatachします。消費電力の節減にもなります。

■ソース■

より高い威嚇効果を求めて複雑な動きをさせたら腕の動きが激しくなったときにサーボがモゲそうになったので、単純な動きにしていますが…RTOSあたりをつかって、ちゃんと加速度制御を考えた上で複雑な動きをさせたいものです。