Arduinoとサーボで作る自動モーショントラッキングカメラベース
コンポーネントと用品
| Arduino UNO | × | 1 |
| コンデンサ 100μF | × | 1 |
| LED(汎用) | × | 5 |
| PIRモーションセンサー(汎用) | × | 5 |
| 抵抗 220Ω | × | 5 |
| サーボ(Tower Pro MG996R) | × | 1 |
このプロジェクトについて
家庭用防犯カメラの問題を解決するためにこのアイデアを思いつきました。壁の間にある2つの部屋の間にカメラを設置していますが、手動でカメラソフトウェアにログインして回転させない限り、一度に1つの部屋しか見えません。誰かが反対側の部屋に入っても、カメラはその動きを記録できません。この問題を解決するため、カメラを取り付けて動きが検出された方向に自動的に向きを変えるモーション検出/追跡ベースを作ることにしました。
仕組み
このデバイスは5つのPIRモーションセンサーを使って180度の範囲内の動きを検出します。動きが検出されると、サーボモーターがカメラベースを回転させ、その方向を向かせます。ベース内部には5つのLED「ステータス」ライトがあり、いずれかのPIRセンサーが動きを検出すると点灯します。
動作デモ
配線
このプロジェクトの配線はシンプルで簡単ですが、サーボモーター以外はすべて5個ずつ必要なため、ワイヤーの本数がかなり増えます。詳細はページ下部の回路図とスケマティックを参照してください。基本は以下の通りです。
LEDステータスライト
ミニブレッドボードを使ってLEDライトを他の回路から分離し、必要に応じて取り外しやすくしました。各LEDは異なるPIRセンサーに対応し、動きを検出すると点灯します。各LEDをArduinoの別々のデジタル入力(9〜13)に接続し、220Ω抵抗を介してグラウンドに落とします。
PIRモーションセンサー
このプロジェクトではHC-SR501モデルのPIRセンサーを使用しました。各PIRセンサーをArduinoのデジタル入力(2〜6)、5V電源、グラウンドに接続します。同じPIRセンサーを使う場合、カバーを(慎重に)外すとピンのマークが下にあります。各PIRセンサーを、後でアップロードするコード内の対応するLEDライトに接続します。
サーボモーター
サーボモーターはカメラが置かれるスタンドに取り付け、アクティブなPIRセンサーの方向にカメラを向けます。モーターのピンアウトに従い、1ピンを電源、もう1ピンをArduinoのデジタル入力7、最後のピンをグラウンドに接続します。Arduinoに電源を入れる前に、モーターの電源とグラウンドの間に100μFコンデンサを接続して、モーター動作時の電源サージからボードを保護してください。
注意: すべてのサーボモーターがフル180度の可動域を持つわけではありません。テストしたところ、私のモーターは約160度しか動きませんでした。お使いのモーターが異なる場合はコードを調整してください。最後のPIRセンサー位置でモーターがガリガリ音を立てたら、動きすぎようとしています。
構築
古いMemorexのCDラベラーをサーボハウジングとカメラ設置面に使いました。「作る前」の写真を撮り忘れたので、オンラインで見つけた唯一の残存画像を載せています。後ろのパーツは平らで頑丈なプラスチックディスクで、最終的にドライバーで一気に外せたので、カメラ置き場として最適でした。また、取り外し可能なゴム足が4つ付いており、モーター動作時にカメラのグリップを良くしてくれます。

中心の黒い部分をペンチで取り外しました……というか、粉々になるまで壊しました :) 次に、Dremelでベースにいくつか穴を開け、ネジでサーボモーターを固定しました。
最後に、もう1本ネジでサーボモーターをカメラ設置パーツに取り付けました。カメラの重みでベースが傾く問題が発生したため、モーターとカメラの間にゆるく入る高さの段ボール筒を作って解決しました。これで自由に動きつつ、重量が均等に分散されて支えられます。



いくつかのブレッドボードを使っています。理由は、ベース内に収めやすく、トラブルシューティングや後からの拡張時にどれを外すか選びやすいからです。
仕上げに、見える段ボール部分をすべて黒くスプレー塗装し、上の黒いスタンドとシームレスに見えるようにしました。



コード
メインコード
/*************************************************
*** The Motion Following Motorized Camera Base ***
*** by Lindsay Fox ***
*************************************************/
// Servor motor
#include <Servo.h>
Servo camServo; // カメラベースを制御するサーボモーター
int currentPIRposition = 0; // サーボの現在角度
// LEDステータスライト
int LEDpin[] = {9,10,11,12,13}; // LEDピン番号
int currentLEDpin = 9; // 現在のLEDピン、上記シーケンスの最初から開始
// PIRセンサー
int PIRpin[] = {2,3,4,5,6}; // PIRピン番号
int currentPIRpin = 2; // 現在のPIRピン、上記シーケンスの最初から開始
int PIRprevState[] = {1,1,1,1,1}; // PIRの前回状態(0=LOW, 1=HIGH)
int PIRposition[] = {157,117.75,78.5,39.25,0}; // サーボモーターの角度割り当て(0-157を5つのPIRセンサーで等分)
boolean PIRstatus; // PIRセンサーのステータス(true/false)
///// SETUP //////////////////////////////////////
void setup() {
Serial.begin(9600);
camServo.attach(7); // サーボピン割り当て
for (int p = 0; p < 5; p++) {
pinMode(PIRpin[p], INPUT); // すべてのPIRセンサーをINPUTに設定
}
for (int l = 0; l < 5; l++) {
pinMode(LEDpin[l], OUTPUT); // すべてのLEDをOUTPUTに設定
}
/////// PIRセンサーのキャリブレーション ///////
Serial.print("Calibrating PIR Sensors ");
for(int c = 0; c < 15; c++){ // PIRセンサーを15秒間キャリブレーション(センサーにより10-60秒に変更可)
Serial.print(".");
delay(1000); // 1秒待機
}
Serial.println("PIR Sensors Ready");
camServo.write(78.5); // サーボを中央位置に移動して開始
}
///// MAIN LOOP //////////////////////////////////
void loop() {
for (int PIR = 0; PIR < 5; PIR++) {
currentPIRpin = PIRpin[PIR];
currentLEDpin = LEDpin[PIR];
PIRstatus = digitalRead(currentPIRpin);
if (PIRstatus == HIGH) {
digitalWrite(currentLEDpin, HIGH); // 対応するLEDを点灯
if(PIRprevState[PIR] == 0) { // PIRセンサーの前回状態がLOWの場合
if (currentPIRposition != currentPIRpin && PIRprevState[PIR] == 0) {
// アクティブなPIRが現在位置と異なる場合、新しい位置に移動
camServo.write(PIRposition[PIR]);
Serial.print("Current angle : ");
Serial.println(PIRposition[PIR]);
delay(50);
currentPIRposition = currentPIRpin; // 現在のPIR位置をアクティブな[PIR]ピンにリセット
PIRprevState[PIR] = 1; // 前回PIR状態をHIGHに設定
}
PIRprevState[PIR] = 1; // 現在位置が現在のPIRピンと同じ場合も前回状態をHIGHに
}
} else {
// digitalWrite(currentLEDpin, LOW); // LEDでセンサー出力ピン状態を可視化
PIRprevState[PIR] = 0; // 前回PIR状態をLOWに設定
}
}
}
回路図
(回路図は別途参照)
製造プロセス
- 現代カメラの進化と設計:フィルムからデジタルへ
- 静電気破壊から守る最小限のRaspberry Piエンクロージャ
- Raspberry PiでPIRモーションセンサーとLEDを制御
- JavaとReactive Blocksでモーション検知アラームシステム - Raspberry Piに展開しSMS送信
- Raspberry Pi、PIRセンサー、MQTTで作るモーション制御AWS IoTボタン
- Raspberry Piカメラをバードハウスに設置:ステップバイステップガイド
- BrickPi Bookreader:Raspberry Pi と LEGO Mindstorms で Kindle 読書を自動化
- Raspberry Pi で Motion を使ったライブ IP カメラのセットアップ – ステップバイステップガイド
- モータライズドボールバルブ:機能、メリット、用途
- リニアモーションテクノロジー:オートメーションのための精密ソリューション
- NASAラングレー研究センターが3Dカラーイメージング用先進プレノプティックカメラを発表