工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

シス(ダース・ベイダー)風スマートホーム入館システムの構築

必要な部品と材料

部品 数量
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

必要な工具と機械

使用するアプリとオンラインサービス

プロジェクト概要

娘が大のスターウォーズファン(まだ映画は観ていないが)で、「インペリアル・マーチ(ダース・ベイダーのテーマ)」を流しながらダース・ベイダーコスチュームで部屋に入ってくるのが大好きです。そこで、自動的に帰宅を検知して、家に入る直前にインペリアル・マーチを再生するシステムを作ることにしました。

このプロジェクトは初心者向けのシンプルな構成です。私が興味深かったのは、クラウドへのPublish/Subscribeパターンを初めて使用したこと、そして異なるタイプのマイクロコントローラー(Particle PhotonとArduino)を1つのプロジェクトに統合したことです。Photonのクラウド接続の簡単さと、Arduino用の豊富なアドオンハードウェアを組み合わせることで、短期間でプロジェクトを完成させられました。

ステップ1: センサーユニットの組み立て

所要時間: 10分

パーツ: Photon、220Ω抵抗、LED、PIRモーションセンサー、ブレッドボード、オス-オスジャンパーワイヤー、USB Micro Bケーブル

手順:

  1. LEDをPhotonに接続:Photonをブレッドボードに装着。抵抗をPhotonのGNDピンとブレッドボードの空き行に接続。LEDの長い足(アノード)をPhotonのデジタルピン(D0使用)に、短い足(カソード)を抵抗が接続された行に接続。LEDはオプションですが、PIRセンサー自体に検知表示がないため、センサー状態の表示用として役立ちます。
  2. PIRセンサーをPhotonに接続:PIRセンサーをブレッドボードに装着(直角メスヘッダーピン使用で垂直固定推奨)。PIRのGNDをPhotonのGND、5VピンをPhotonのVin、信号ピンをPhotonのデジタルピン(D7使用)にジャンパーワイヤーで接続。
  3. お使いのセンサーのデータシートで5V、GND、信号ピンの並びを確認してください。順序はメーカーにより異なります。私のPIRセンサーは5V動作ですが、信号ピンは3.3V動作なのでPhotonのデジタルピンに直接接続可能です。こちらもデータシートで確認してください。
  4. PhotonのUSB Micro BコネクタからPCまたは壁面コンセントで給電。Particle IDEでセンサーコード(下記)を書き込みます。
  5. センサー前で手を振ると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

製造プロセス

  1. Annoy-O-Bug:ATtiny85で作るコンパクトなLEDブザーおもちゃ
  2. ダブルコラムバンドソー機械の必須パーツ解説
  3. 機械加工部品設計のマスターガイド:包括的な手引き
  4. 航空宇宙・精密航空機部品の市場トレンド
  5. 効果的な危機管理コミュニケーションの必須要素
  6. 製造業の未来:トレンド、人材、イノベーション
  7. 明日の技術者:デジタルファクトリーにおけるスキル、ツール、役割
  8. CNC工作機械の主要コンポーネントを徹底解説
  9. 信頼性の高い圧縮空気システムを構成する主要コンポーネント
  10. クレーンモダナイゼーションが主要コンポーネントを変革し、ピーク性能を引き出す仕組み
  11. ナノテクノロジー:IoTセキュリティの新たなフロンティア