Schnelles, zuverlässiges Branderkennungssystem mit Samsung SAMI, Arduino UNO & Raspberry Pi
Überblick
Dieses Tutorial führt Sie durch die Erstellung eines kompakten IoT-Branderkennungssystems, das Flammensensor-Daten via WebSockets an Samsung SAMI streamt, unter Nutzung von Arduino UNO und Raspberry Pi.
Wir setzen einen einfachen, handelsüblichen IR-Flammensensor ein, laden einen leichten Sketch auf den Arduino und führen ein Node.js-Skript auf dem Raspberry Pi aus, das die Daten an SAMI weiterleitet.
Voraussetzungen
Für dieses Tutorial sollten Sie mit den grundlegenden SAMI APIs vertraut sein.
Architektur
Das folgende Diagramm veranschaulicht den High-Level-Flow:
- Raspberry Pi mit Netzwerkkonnektivität
- Arduino UNO mit Breadboard
- IR-Flammensensor
- USB- & Stromkabel, Breadboard-Verdrahtung
Software-Komponenten:
- Arduino Sketch auf dem UNO
- Node.js Skript auf dem Raspberry Pi
Falls Sie keinen Raspberry Pi haben, können Sie den Arduino an einen Computer mit Internetzugang anschließen und das Node.js-Skript dort ausführen.
Schritt 1: Neuen Gerätetyp erstellen und verbinden
- Im SAMI Developer Portal anmelden. Falls kein Samsung-Konto vorhanden, jetzt erstellen.
- „+ New Device Type“ klicken.
- Gerätetyp „Flame Sensor“ nennen und eindeutige Kennung wie „com.example.iot.flame“ vergeben.
- „Create Device Type“ klicken und zur Gerätetyp-Seite weitergehen.
Nun Manifest für den „Flame Sensor“ Gerätetyp erstellen.
- In der linken Spalte „Flame Sensor“ anklicken.
- Zu „Manifest“ navigieren und „+ New Version“ klicken.
- onFire als Feldname und Boolean als Datentyp eingeben.
- „Save“ und dann „Next: Actions“ klicken.
- Aktionen für dieses Tutorial überspringen und „Save New Manifest“ klicken.
Ein Simple Manifest wird automatisch genehmigt. Diesen Gerätetyp nicht veröffentlichen, da er rein Tutorial-Zwecken dient.
Schließlich neues Flame Sensor Gerät über das User Portal verbinden:
- Im SAMI User Portal anmelden.
- Im Dashboard auf „Connect new device“ klicken.
- Den soeben erstellten „Flame Sensor“ Gerätetyp wählen.
- „Connect Device…“ klicken. Zurück zum Dashboard.
- Einstellungen-Icon des hinzugefügten Geräts anklicken. Im Popup „GENERATE DEVICE TOKEN…“ wählen.
- Device ID und Device Token kopieren – Sie brauchen sie im Code.
Schritt 2: Arduino einrichten
IR-Flammensensor wie im Diagramm gezeigt an den Arduino anschließen. Dann folgenden Sketch (read_flame_sensor.ino) per Arduino IDE hochladen. Der Sketch liest den Sensor alle 5 Sekunden (anpassbar) und sendet den digitalen Wert an den Serial Port. In SAMI bedeutet „0“ Feuer erkannt; „1“ bedeutet kein Feuer.
/* read_flame_sensor.ino */
// Verzögerung zwischen Messungen
const int delayBetweenReads = 5000; // 5 Sekunden
// Flammendetektor Sensor Pin
const int flameDigitalPinIn = 2;
void setup() {
// Serielle Kommunikation bei 9600 Baud initialisieren
Serial.begin(9600);
pinMode(flameDigitalPinIn, INPUT);
}
void loop() {
// HIGH (1) = kein Feuer, LOW (0) = Feuer erkannt
int flameDigitalReading = digitalRead(flameDigitalPinIn);
Serial.println(String(flameDigitalReading));
delay(delayBetweenReads);
}
Schritt 3: Raspberry Pi einrichten
Raspberry Pi an Monitor, Maus und Tastatur anschließen. Funktionierende Ethernet- oder WLAN-Verbindung und aktuelles OS sicherstellen:
- $ sudo apt-get update
- $ sudo apt-get upgrade
Falls Node.js noch nicht installiert, ARM-kompatible Version installieren und dann nötige Pakete via npm hinzufügen:
- $ npm install serialport
- $ npm install ws
Arduino Serial Port an USB-Port des Raspberry Pi anschließen.
Node.js-Skript (send_data_to_sami.js) herunterladen und Platzhalter für device_id und device_token mit den zuvor kopierten Credentials ersetzen.
/* 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');
/** Aktuelle Zeit in Millisekunden */
function getTimeMillis(){
return parseInt(Date.now().toString());
}
// WebSocket-Verbindung aufbauen und Gerät registrieren
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));
}
});
Sobald das Skript läuft, werden Ihre Flammensensor-Messwerte in Echtzeit an SAMI gestreamt.
Für weitere Details siehe das vollständige Tutorial: Make a fire detector in minutes with Samsung SAMIIO, Arduino UNO and Raspberry Pi.
Herstellungsprozess
- Günstiger Raspberry Pi Babyphone mit Schreierkennung – DIY-Anleitung
- Automatisiertes Aeroponik-System mit Raspberry Pi und Feuchtigkeitssensor bauen
- Roboter mit Raspberry Pi und Python bauen: Komplette Anleitung
- Internet-gesteuerter Video-Streaming-Roboter mit Arduino & Raspberry Pi bauen
- Arduino Echtzeituhr für islamische Gebetszeiten bauen
- Roomba Create 2 per Arduino & Android steuern – Schritt-für-Schritt
- Bilder auf 1,17-Zoll-TFT-LCD mit Arduino UNO anzeigen
- Arduino & MPU6050: Präzise Servomotor-Steuerung mit SG90 & MG996R
- u-blox LEA-6H 02 GPS-Modul: Arduino & Python Integrationsanleitung
- Spracherkennung & Sprachsynthese auf Arduino Due meistern