ハロウィン用PIRモーションスピーカー:恐怖の音と光エフェクトキット
部品と用品
| Arduino UNO | 1 |
| MP3モジュール | 1 |
| リレーモジュール 4チャネル | 1 |
| PIRモーションセンサーモジュール HC-SR501 | 1 |
| 単3電池×3 ホルダー(オプション) | 1 |
| 2ピン防水航空プラグソケットコネクタ | 3 |
| 密閉型フードコンテナボックス (190×60×120mm) | 1 |
| 黒スプレー塗料 | 1 |
| 32mm ウッドドリルビット | 1 |
| 16mm ウッドドリルビット | 1 |
| USBドライブ(FAT32フォーマット済み) | 1 |
このプロジェクトについて
更新: 笑う幽霊バリエーションをzipファイルに追加、追加バッテリーパックも同梱
ハロウィンに玄関へ近づく人を驚かせるため、前庭に設置する小型の隠しオーディオボックスをいくつか作りたかったです。これが最も複雑で最初のテストケースとなったもので、恐怖のサウンドトラック再生と、注目を集める2種類の視覚ライティングエフェクトを備えています。
まず、リレーでMP3アンプモジュールを制御するというオリジナルコンセプトを考案したKristian Blåsol氏に感謝します。
この製作のコンセプトは、単三電池または外部12V電源で動作する、モーション作動型の自己完結型スピーカーを作ることです。2つの12V LED出力も備え、エフェクト用に使用できます。安価(総費用20ポンド/25ドル未満)、カスタマイズ可能、ハロウィン当日の天候に耐えられることが要件でした。
ここでは近くに屋外コンセントがあったため12V外部電源を採用し、2A消費の高輝度LEDも使用しています。単三電池ホルダーや5000mAhのUSBモバイルバッテリーで5V/12V電池駆動にもほぼ無改造で対応可能です。5V外部ライトを使う場合も、入力電源を5Vに変えるだけで対応できます。
(注:長時間使用後、ArduinoがMP3モジュールに大音量で十分な電流を供給できず、再生中にリセットがかかることが判明。専用5V電池を追加して対処)
パート1:製作
Arduino UNOでMP3プレーヤーとライティングを制御します。4チャネルリレーモジュールを使用し、うち2つでMP3モジュールの「再生」と「前の曲」ボタンを押下シミュレート、残り2つでLEDのオン/オフを行います。
制御配線はすべて30AWGより線(100mm)、12V回路は18AWGを使用し、箱の中で長めに取ってあります。見た目はごちゃごちゃしていますが、箱の中は広く、蓋を開けて部品を取り出しやすくするためです。信頼性のため最終的にはすべて半田付け予定ですが、蓋を外せるようPIRセンサー接続はメスコネクタ、スピーカーケーブルはMP3モジュール側でネジ止めにしています。
配線図の通りに配線し、12V電源を防水コネクタから取り込みます。外部LEDのスイッチングには、入力側の-Vを出力側の-Vに直結し、+V側をリレー経由で制御します。
ケース加工:中央に32mm穴(スピーカー用)、上部片側に16mm穴(PIRセンサー用)を開け、全体を黒スプレーで塗装。基板上のLEDが光ってバレないようにし、隠蔽性を高めました。
(図示せず:スピーカー防水のため、自転車のチューブとパッチキットで外側にパッチを貼り、音は出せるが水は入らないようにしました。その上からボルト固定)
スピーカーをネジ止め、PIRセンサーをグルーガンで固定(後でエポキシ樹脂に変更、グルーでは水が入ったため)。
すべての部品を写真のように配置。MP3モジュールとArduinoのUSBポートにアクセス可能です。(5V駆動にする場合、ArduinoのUSBコネクタまたはMP3プレーヤーのmicro USBから給電可能)
製作完了後、コードをアップロードして全機能テスト。半田付け部分に補強としてグルーガンを追加(スピーカー接続など脆弱な箇所)。
※使用MP3モジュールはFAT32フォーマットのUSB/SDカードが必要。他フォーマットでは動作しませんでした。
パート2:サウンド
効果音はAudacityで編集。素材・クレジット:
- 悲鳴
- 不気味な笑い声
- "I see you"(あなたが見える)
- 石を歩く音
パート3:セットアップ
オーディオファイルとArduinoプログラムのリレー切り替えタイミングは同期しています。別のオーディオファイルを使う場合は、テストしながらタイミングを調整してください。変更が必要なコード箇所はコメントで示しています。
パート4:実環境テスト
パート5:最終ビルド








コード
// ピン割り当て
int pirSENSOR = 2; // モーション検知、感度と範囲は最大に設定
int previousBUTTON = 3; // MP3モジュールの「前の曲」ボタン
int playBUTTON = 4; // MP3モジュールの「再生/一時停止」ボタン
int whiteLED = 5; // 白色フラッシュライト
int redLED = 6; // 赤色シーケンスライト(悲鳴時に点灯)
int statusLED = 10; // ステータスLED
void setup() {
pinMode(pirSENSOR, INPUT);
pinMode(previousBUTTON, OUTPUT);
pinMode(playBUTTON, OUTPUT);
pinMode(whiteLED, OUTPUT);
pinMode(redLED, OUTPUT);
pinMode(statusLED, OUTPUT);
digitalWrite(previousBUTTON, HIGH); // リレーはHIGH=OFF/OPEN
digitalWrite(playBUTTON, HIGH);
digitalWrite(whiteLED, HIGH);
digitalWrite(redLED, HIGH);
}
void loop() {
if (digitalRead(pirSENSOR) == HIGH) { // PIRが動きを検知
digitalWrite(previousBUTTON, LOW); // 「前の曲」押下(最初から再生)
delay(100);
digitalWrite(previousBUTTON, HIGH); // ボタン離す
delay(100);
// LEDフラッシュシーケンス - 注目喚起
digitalWrite(whiteLED, LOW); delay(1000);
digitalWrite(whiteLED, HIGH); delay(500);
digitalWrite(whiteLED, LOW); delay(500);
digitalWrite(whiteLED, HIGH); delay(9000);
// "I see you" パターン
digitalWrite(whiteLED, LOW); delay(500);
digitalWrite(whiteLED, HIGH); delay(100);
digitalWrite(whiteLED, LOW); delay(500);
digitalWrite(whiteLED, HIGH); delay(300);
digitalWrite(whiteLED, LOW); delay(500);
digitalWrite(whiteLED, HIGH); delay(300);
digitalWrite(whiteLED, LOW); delay(300);
digitalWrite(whiteLED, HIGH); delay(300);
digitalWrite(whiteLED, LOW); delay(300);
digitalWrite(whiteLED, HIGH); delay(300);
digitalWrite(whiteLED, LOW); delay(300);
digitalWrite(whiteLED, HIGH); delay(300);
digitalWrite(whiteLED, LOW); delay(300);
digitalWrite(whiteLED, HIGH); delay(6000);
// 子供の声パターン
digitalWrite(whiteLED, LOW); delay(300);
digitalWrite(whiteLED, HIGH); delay(1000);
digitalWrite(whiteLED, LOW); delay(100);
digitalWrite(whiteLED, HIGH); delay(300);
digitalWrite(whiteLED, LOW); delay(100);
digitalWrite(whiteLED, HIGH); delay(300);
digitalWrite(whiteLED, LOW); delay(100);
digitalWrite(whiteLED, HIGH); delay(300);
digitalWrite(whiteLED, LOW); delay(100);
digitalWrite(whiteLED, HIGH); delay(1000);
digitalWrite(whiteLED, LOW); delay(600);
digitalWrite(whiteLED, HIGH); delay(1400);
digitalWrite(whiteLED, LOW); delay(100);
digitalWrite(whiteLED, HIGH); delay(7000);
// 悲鳴/血のシーケンス
digitalWrite(redLED, LOW); delay(3000);
digitalWrite(redLED, HIGH); delay(100);
// 再生停止
digitalWrite(playBUTTON, LOW); // 一時停止/停止
delay(100);
digitalWrite(playBUTTON, HIGH); // ボタン離す
delay(60000); // 1分間クールダウン
} else {
digitalWrite(statusLED, HIGH); // PIRが何も検知しないときはステータス点灯(一部USBバッテリーの自動オフ防止)
}
}
回路図
※このバリエーションはバッテリーパック1つのみ。後でオーディオ用に独立した2つ目の電源を追加しました(電流不足でArduinoがシャットダウンするため)
PIRを接着固定、スピーカーをプラスチックネジでボルト留め
voices_audio_dUluBtMyqG.mp3 - ライティングエフェクトなし、通行時に6種類の笑い声を再生するボイスボックス版
laughing_ghost_variant_VsB0Y8CTlM.zip - 笑う幽霊バリエーション
archive_IipdobBdHs.zip - アーカイブ
graveyard_ambience_sound_fx_(128_kbps)_nhuprhuJcc.mp3 - 墓地アンビエンス効果音
製造プロセス
- GY-91モジュールでRaspberry Pi上に堅牢な温度・センサーAPIを構築
- スマートフォンのBluetooth近接検知でスマートオートロックドアを構築
- Raspberry Pi GPIOマスター:PIRモーションセンサーをB+/Model 2でインターフェース
- Raspberry Piでホームセキュリティシステムを構築:PIRモーション検知+カメラメール通知
- HC-SR501 PIRモーションセンサーをRaspberry Piで接続・調整・プログラミングする方法
- Bluetooth Mesh設計の選択:モジュールかディスクリートデバイスか
- Apacer XR-DIMM:DO-160G認定取得の堅牢DDR4メモリ、防衛・航空向け
- emtrion、NXP i.MX 8M Mini搭載コンパクトモジュール「emCON-MX8M Mini」量産開始
- congatec、NXP i.MX 8M Mini搭載SMARC 2.0モジュール発表
- 誘導型近接センサー:回路設計、機能、実用応用
- PIRセンサー回路の仕組み:設計、動作、実世界の応用