シス(ダース・ベイダー)風スマートホーム入館システムの構築
必要な部品と材料
| 部品 | 数量 |
|---|---|
| Particle Photon | 2 |
| Arduino UNO | 1 |
| Adafruit Music Maker MP3シールド | 1 |
| Adafruit PIRモーションセンサー | 1 |
| LED(汎用) | 2 |
| 抵抗 220Ω | 2 |
| ジャンパーワイヤー | 1 |
| スピーカー 3W, 4Ω | 1 |
| ブレッドボード(汎用) | 2 |
| USB Micro B壁面充電器 | 1 |
| USB-A to Bケーブル | 1 |
| メスヘッダー 36ピン 1列 ロング(0.1インチ) | 1 |
必要な工具と機械
- はんだごて(汎用)
使用するアプリとオンラインサービス
- Particle Cloud
プロジェクト概要
娘が大のスターウォーズファン(まだ映画は観ていないが)で、「インペリアル・マーチ(ダース・ベイダーのテーマ)」を流しながらダース・ベイダーコスチュームで部屋に入ってくるのが大好きです。そこで、自動的に帰宅を検知して、家に入る直前にインペリアル・マーチを再生するシステムを作ることにしました。
このプロジェクトは初心者向けのシンプルな構成です。私が興味深かったのは、クラウドへのPublish/Subscribeパターンを初めて使用したこと、そして異なるタイプのマイクロコントローラー(Particle PhotonとArduino)を1つのプロジェクトに統合したことです。Photonのクラウド接続の簡単さと、Arduino用の豊富なアドオンハードウェアを組み合わせることで、短期間でプロジェクトを完成させられました。
ステップ1: センサーユニットの組み立て
所要時間: 10分
パーツ: Photon、220Ω抵抗、LED、PIRモーションセンサー、ブレッドボード、オス-オスジャンパーワイヤー、USB Micro Bケーブル
手順:
- LEDをPhotonに接続:Photonをブレッドボードに装着。抵抗をPhotonのGNDピンとブレッドボードの空き行に接続。LEDの長い足(アノード)をPhotonのデジタルピン(D0使用)に、短い足(カソード)を抵抗が接続された行に接続。LEDはオプションですが、PIRセンサー自体に検知表示がないため、センサー状態の表示用として役立ちます。
- PIRセンサーをPhotonに接続:PIRセンサーをブレッドボードに装着(直角メスヘッダーピン使用で垂直固定推奨)。PIRのGNDをPhotonのGND、5VピンをPhotonのVin、信号ピンをPhotonのデジタルピン(D7使用)にジャンパーワイヤーで接続。
- お使いのセンサーのデータシートで5V、GND、信号ピンの並びを確認してください。順序はメーカーにより異なります。私のPIRセンサーは5V動作ですが、信号ピンは3.3V動作なのでPhotonのデジタルピンに直接接続可能です。こちらもデータシートで確認してください。
- PhotonのUSB Micro BコネクタからPCまたは壁面コンセントで給電。Particle IDEでセンサーコード(下記)を書き込みます。
- センサー前で手を振るとLEDが点灯し、Particle Dashboardのログでイベント発行が確認できます。
ステップ2: トリガーユニットの組み立て
所要時間: 10分
パーツ: Photon、220Ω抵抗、LED、ブレッドボード、オス-メスジャンパーワイヤー
LEDと抵抗をステップ1と同様にPhotonに接続。こちらもイベント受信表示用として有用です。PhotonのVin、GND、デジタルピン(D7使用)にオス-メスジャンパーワイヤーを接続。デジタルピンはMusic MakerシールドのGPIOピンに接続して音楽再生をトリガーします。VinとGNDはArduinoからPhotonへ給電するために使用します。
Arduino接続前に、USBで給電してParticle IDEでトリガーコード(下記)を書き込みます。2台のデバイスがParticle IDEに接続されているため、正しいデバイスを選択して書き込んでください。
ステップ3: ArduinoとMusic Makerシールドの組み立て
所要時間: 20分
パーツ: Arduino Uno、Adafruit Music Makerシールド、Photon、220Ω抵抗、LED、ミニブレッドボード、ジャンパーワイヤー、USBケーブル
工具: はんだごて
Music Makerシールドにはヘッダーピンが付属しますが、はんだ付けが必要です。シールドをArduinoに接続するヘッダーピンに加え、PhotonからのGPIOと電源接続用にシールド上面にもメスヘッダーピンを追加しました(手元にメスヘッダーがなかったためオスヘッダーを使用)。
PhotonのデジタルピンからのジャンパーワイヤーをシールドのGPIOピン(ピン7使用)に、PhotonのVinをシールドの5Vピンに、GNDをシールドのGNDピンに接続します。
スピーカーをシールドの端子ブロックに接続(右スピーカー用と左スピーカー用があります。私は片方のみ接続 - 娘の壊れたおもちゃから回収した小型スピーカーを使用)。
Arduinoを開発機に接続し、Arduinoスケッチ(下記)をArduino IDEで書き込みます。
完成です。センサーの前を歩いて、音楽が鳴り始めるのを待ちましょう。
コードについて
前述の通り、これが私のPublish/Subscribeパターン初体験でした。Photonでは非常に簡単に実装できます。センサーコードでは、PIRセンサーの信号ピンがHIGHになるとLEDを点灯し、Particle Cloudにイベントを発行します。発行は1行で完了:
published = Particle.publish("motion-detected", NULL, 60, PRIVATE);
最初はプライベートにしていませんでしたが、他のユーザーも「motion」関連のイベントを発行しているため誤検知が多発しました。そこで、自分のデバイスからのイベントのみ購読するよう MY_DEVICES パラメータを追加:
Particle.subscribe("motion", soundAlarm, MY_DEVICES);
購読を自分のデバイスのみに限定するには、発行側もプライベートにする必要があります。
トリガーコードは、モーションイベント発生時にイベントハンドラ soundAlarm を呼び出すだけです。ハンドラはLEDを点灯し、Music MakerシールドのGPIOピンをHIGHにします。ArduinoスケッチはGPIOピンがHIGHになるのを検知し、60秒待機(車を駐車し、荷物を持って家に入る時間)した後、SDカードのMP3ファイルを再生します。
ステップ4: プロジェクトの導入
センサーユニットはガレージの棚に、車の駐車位置のすぐ隣に設置。トリガーユニットとArduino+Music Makerシールド+スピーカーはキッチンカウンターに設置(娘がいつもキッチンテーブルにいるため)。どちらも近くに壁面コンセントがあり、給電が容易でした。
コード
センサーコード(C/C++)
// LEDをD0ピンに定義
int led = D0;
// PIRセンサー入力をD6ピンに定義
int pir = D6;
// 発行成功フラグ
bool published;
void setup() {
pinMode(led, OUTPUT);
pinMode(pir, INPUT);
digitalWrite(led, LOW);
}
void loop() {
if (digitalRead(pir) == HIGH) { // 動き検知
digitalWrite(led, HIGH); // LED点灯で検知表示
published = Particle.publish("motion-detected", NULL, 60, PRIVATE);
if (!published) { // 発行失敗時
for (int i = 0; i < 10; i++) { // LEDを10回点滅でエラー表示
digitalWrite(led, LOW); delay(500);
digitalWrite(led, HIGH); delay(500);
}
}
} else {
digitalWrite(led, LOW); // 未検知時はLED消灯
}
delay(2000); // 2秒待機して次の読み取り
}
トリガーコード(C/C++)
int led = D0; // LEDをD0ピン
int trigger = D7; // Arduinoトリガー用D7ピン
void soundAlarm(const char *event, const char *data) {
digitalWrite(led, HIGH); // LED点灯
digitalWrite(trigger, HIGH); // トリガーON
delay(2000); // 2秒待機
digitalWrite(trigger, LOW); // トリガーOFF
digitalWrite(led, LOW); // LED消灯
}
void setup() {
// 自分のデバイスからのmotionイベントのみ購読
Particle.subscribe("motion", soundAlarm, MY_DEVICES);
pinMode(led, OUTPUT);
pinMode(trigger, OUTPUT);
}
void loop() {
// 何もしない(イベント駆動)
}
ArduinoとMusic Makerシールドコード
/************************************************************
* PhotonからのトリガーでSDカードのMP3を再生するスケッチ
* Adafruit Music Makerシールド使用
* チュートリアルとライブラリ: https://learn.adafruit.com/adafruit-music-maker-shield-vs1053-mp3-wav-wave-ogg-vorbis-player/pinouts
************************************************************/
#include <SPI.h>
#include <Adafruit_VS1053.h>
#include <SD.h>
// Music Makerシールド用ピン定義
#define SHIELD_RESET -1 // VS1053リセットピン(未使用)
#define SHIELD_CS 7 // VS1053チップセレクト
#define SHIELD_DCS 6 // VS1053データ/コマンドセレクト
#define CARDCS 4 // SDカードチップセレクト
#define DREQ 3 // VS1053データリクエスト(割り込みピン推奨)
Adafruit_VS1053_FilePlayer musicPlayer =
Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);
int photonPin = 7; // Photon接続用GPIOピン
void setup() {
musicPlayer.begin();
SD.begin(CARDCS);
musicPlayer.setVolume(1, 1); // 音量設定(値が小さいほど大きい)
// DREQが割り込みピン(Unoでは#2, #3)の場合、バックグラウンド再生可能だが今回は未使用
// musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT);
// Photon接続用GPIOピンを入力に設定
musicPlayer.GPIO_pinMode(photonPin, INPUT);
}
void loop() {
if (musicPlayer.GPIO_digitalRead(photonPin) == HIGH) {
delay(60000); // 60秒待機してから再生
musicPlayer.playFullFile("track001.mp3"); // 完了までブロッキング再生
}
delay(500);
}
回路図
Fritzingファイル: sensor.fzz, trigger.fzz
製造プロセス
- Annoy-O-Bug:ATtiny85で作るコンパクトなLEDブザーおもちゃ
- ダブルコラムバンドソー機械の必須パーツ解説
- 機械加工部品設計のマスターガイド:包括的な手引き
- 航空宇宙・精密航空機部品の市場トレンド
- 効果的な危機管理コミュニケーションの必須要素
- 製造業の未来:トレンド、人材、イノベーション
- 明日の技術者:デジタルファクトリーにおけるスキル、ツール、役割
- CNC工作機械の主要コンポーネントを徹底解説
- 信頼性の高い圧縮空気システムを構成する主要コンポーネント
- クレーンモダナイゼーションが主要コンポーネントを変革し、ピーク性能を引き出す仕組み
- ナノテクノロジー:IoTセキュリティの新たなフロンティア