Samsung SAMI、Arduino UNO、Raspberry Piで高速・信頼性の高い火災検知システムを構築
このチュートリアルでは、Arduino UNOとRaspberry Piを使用して、炎センサーの読み取り値をWebSockets経由でSamsung SAMIにストリーミングするコンパクトなIoT火災検知システムの作成をガイドします。
シンプルな市販のIR炎センサーを使用し、軽量スケッチをArduinoにアップロードし、Raspberry Pi上でNode.jsスクリプトを実行してデータをSAMIに転送します。
前提条件
このチュートリアルでは、基本的なSAMI APIに精通していることを前提としています。
アーキテクチャ
以下の図はハイレベルなフローを示しています:
- ネットワーク接続されたRaspberry Pi
- ブレッドボード付きArduino UNO
- IR炎センサー
- USB・電源ケーブル、ブレッドボード配線
ソフトウェアコンポーネント:
- UNOで実行されるArduinoスケッチ
- Raspberry Piで実行されるNode.jsスクリプト
ソフトウェアをダウンロードできます。
Raspberry Piがない場合でも手順を追うことができます。Arduinoをインターネット接続されたコンピューターに接続し、Node.jsスクリプトをそのマシンで実行してください。
ステップ1: 新しいデバイスタイプの作成と接続
- SAMI開発者ポータルにサインイン。Samsungアカウントがない場合は今すぐ作成。
- 「+ 新しいデバイスタイプ」をクリック。
- デバイスタイプに「Flame Sensor」と名付け、「com.example.iot.flame」などの一意の識別子を割り当て。
- 「デバイスタイプを作成」をクリックし、デバイスタイプページに進む。
「Flame Sensor」デバイスタイプのマニフェストを作成します。
- 左カラムで「Flame Sensor」をクリック。
- 「マニフェスト」に移動し、「+ 新しいバージョン」をクリック。
- フィールド名にonFire、データタイプにBooleanを入力。
- 「保存」をクリックし、「次へ: アクション」へ。
- このチュートリアルではアクションをスキップし、「新しいマニフェストを保存」をクリック。
シンプルマニフェストは自動承認されます。このデバイスタイプはチュートリアル専用なので公開しないでください。
最後に、ユーザーポータルで新しいFlame Sensorデバイスを接続:
- SAMIユーザーポータルにサインイン。
- ダッシュボードで新しいデバイスの接続をクリック。
- 先ほど作成した「Flame Sensor」デバイスタイプを選択。
- 「デバイスを接続…」をクリック。ダッシュボードに戻ります。
- 追加されたデバイスの設定アイコンをクリック。ポップアップで「デバイストークンを生成…」を選択。
- 表示されるデバイスIDとデバイストークンをコピー—コードで必要になります。
ステップ2: Arduinoをセットアップ
上記の図のようにIR炎センサーをArduinoに配線。その後、Arduino IDEを使用して以下のスケッチ(read_flame_sensor.ino)をアップロード。スケッチは5秒ごと(調整可能)にセンサーを読み取り、デジタル値をシリアルポートに送信。SAMIでは「0」が火災検知、「1」が火災なしを示します。
/* read_flame_sensor.ino */
// 読み取り間隔
const int delayBetweenReads = 5000; // 5秒
// 炎検知センサーピン
const int flameDigitalPinIn = 2;
void setup() {
// 9600ボーレートでシリアル通信初期化
Serial.begin(9600);
pinMode(flameDigitalPinIn, INPUT);
}
void loop() {
// HIGH(1) = 火災なし, LOW(0) = 火災検知
int flameDigitalReading = digitalRead(flameDigitalPinIn);
Serial.println(String(flameDigitalReading));
delay(delayBetweenReads);
}
ステップ3: Raspberry Piをセットアップ
Raspberry Piをモニター、マウス、キーボードに接続。動作するEthernetまたはWi-Fi接続があり、OSが最新であることを確認:
- $ sudo apt-get update
- $ sudo apt-get upgrade
Node.jsが未インストールの場合、ARM互換版をインストールし、npmで必要なパッケージを追加:
- $ npm install serialport
- $ npm install ws
ArduinoのシリアルポートをRaspberry PiのUSBポートに接続。
Node.jsスクリプト(send_data_to_sami.js)をダウンロードし、device_idとdevice_tokenのプレースホルダーを先ほどコピーした認証情報で置き換え。
/* send_data_to_sami.js */
var webSocketUrl = "wss://api.samsungsami.io/v1.1/websocket?ack=true";
var device_id = "YOUR_DEVICE_ID";
var device_token = "YOUR_DEVICE_TOKEN";
var isWebSocketReady = false;
var ws = null;
var serialport = require("serialport");
var SerialPort = serialport.SerialPort;
var sp = new SerialPort("/dev/ttyACM0", {
baudrate: 9600,
parser: serialport.parsers.readline("\n")
});
var WebSocket = require('ws');
/**
* 現在時刻をミリ秒で取得
*/
function getTimeMillis(){
return parseInt(Date.now().toString());
}
// WebSocket接続を確立しデバイスを登録
ws = new WebSocket(webSocketUrl, {
headers: {
"Authorization": `Bearer ${device_token}`
}
});
ws.on("open", () => {
isWebSocketReady = true;
register();
});
function register() {
var registerMsg = {
"topic": "sami/device/register",
"data": {
"deviceId": device_id
}
};
ws.send(JSON.stringify(registerMsg));
}
sp.on("data", (data) => {
if (isWebSocketReady) {
var message = {
"topic": "sami/device/telemetry",
"data": {
"onFire": data.trim() === "0"
}
};
ws.send(JSON.stringify(message));
}
});
スクリプトが実行されると、炎センサーの読み取り値がリアルタイムでSAMIにストリーミングされます。
詳細については、完全チュートリアルを参照: Samsung SAMIIO、Arduino UNO、Raspberry Piで数分で火災検知器を作る。
製造プロセス
- 予算に優しいRaspberry Pi赤ちゃん泣き声検知器の自作 - DIYガイド
- Raspberry Piと湿度センサーで作る自動エアロポニックスシステム
- Raspberry Pi と Python でロボットを構築:完全ガイド
- Arduino & Raspberry Pi でインターネット制御ビデオストリーミングロボットを構築
- Arduino で作るイスラム教礼拝時刻付きリアルタイムクロック
- ArduinoとAndroidでRoomba Create 2をリモコン操作 ─ Bluetooth経由のステップバイステップガイド
- Arduino UNOで1.17インチTFT LCDに画像を表示する方法
- Arduino & MPU6050:SG90 & MG996Rサーボの精密制御
- u-blox LEA-6H 02 GPSモジュール: Arduino & Python 統合ガイド
- Arduino Dueでマスターする音声認識と音声合成
- Arduino Unoで8×8 LEDマトリックスを制御:ステップバイステップガイド