Construire un système de détection d'incendie rapide et fiable avec Samsung SAMI, Arduino UNO et Raspberry Pi
Ce tutoriel vous guide dans la création d'un système compact de détection d'incendie IoT qui diffuse les lectures de capteur de flamme vers Samsung SAMI via WebSockets, en utilisant un Arduino UNO et un Raspberry Pi.
Nous utiliserons un simple capteur de flamme IR du commerce, téléverserons un sketch léger sur l'Arduino, et exécuterons un script Node.js sur le Raspberry Pi qui transmet les données à SAMI.
Prérequis
Pour ce tutoriel, vous devez être familier avec les APIs SAMI de base.
Architecture
Le diagramme ci-dessous illustre le flux de haut niveau :
- Raspberry Pi avec connectivité réseau
- Arduino UNO avec plaque d'essai
- Capteur de flamme IR
- Câbles USB et d'alimentation, plus câblage plaque d'essai
Composants logiciels :
- Sketch Arduino s'exécutant sur l'UNO
- Script Node.js s'exécutant sur le Raspberry Pi
Téléchargez le logiciel maintenant.
Si vous n'avez pas de Raspberry Pi, vous pouvez quand même suivre les étapes. Connectez l'Arduino à un ordinateur avec accès Internet et exécutez le script Node.js sur cette machine à la place.
Étape 1 : Créer et connecter un nouveau type de dispositif
- Connectez-vous au Portail Développeur SAMI. Si vous n'avez pas de compte Samsung, créez-en un maintenant.
- Cliquez sur « + New Device Type ».
- Nommez le type de dispositif « Flame Sensor » et attribuez un identifiant unique tel que « com.example.iot.flame ».
- Cliquez sur « Create Device Type » et passez à la page des types de dispositifs.
Maintenant, créez un Manifest pour le type de dispositif « Flame Sensor ».
- Dans la colonne de gauche, cliquez sur « Flame Sensor ».
- Naviguez vers « Manifest » et cliquez sur « + New Version ».
- Entrez onFire comme Nom de champ et choisissez Boolean comme Type de données.
- Cliquez sur « Save » puis « Next: Actions ».
- Ignorez Actions pour ce tutoriel et cliquez sur « Save New Manifest ».
Un Manifest Simple est automatiquement approuvé. Ne publiez pas ce type de dispositif, car il est destiné uniquement à des fins de tutoriel.
Enfin, connectez un nouveau dispositif Flame Sensor via le Portail Utilisateur :
- Connectez-vous au Portail Utilisateur SAMI.
- Sur le tableau de bord, cliquez pour connecter un nouveau dispositif.
- Choisissez le type de dispositif « Flame Sensor » que vous venez de créer.
- Cliquez sur « Connect Device… ». Vous retournerez au tableau de bord.
- Cliquez sur l'icône de paramètres du dispositif ajouté. Dans la pop-up, sélectionnez « GENERATE DEVICE TOKEN… ».
- Copiez l'ID de dispositif et le jeton de dispositif affichés – vous en aurez besoin dans le code.
Étape 2 : Configurer l'Arduino
Câblez le capteur de flamme IR sur l'Arduino comme indiqué dans le diagramme ci-dessus. Téléversez ensuite le sketch suivant (read_flame_sensor.ino) à l'aide de l'IDE Arduino. Le sketch lit le capteur toutes les 5 secondes (ajustable) et envoie la valeur numérique au port série. Dans SAMI, « 0 » indique feu détecté ; « 1 » signifie pas de feu.
/* read_flame_sensor.ino */
// Délai entre les lectures
const int delayBetweenReads = 5000; // 5 secondes
// Broche du capteur de flamme
const int flameDigitalPinIn = 2;
void setup() {
// Initialiser la communication série à 9600 bauds
Serial.begin(9600);
pinMode(flameDigitalPinIn, INPUT);
}
void loop() {
// HIGH (1) = pas de feu, LOW (0) = feu détecté
int flameDigitalReading = digitalRead(flameDigitalPinIn);
Serial.println(String(flameDigitalReading));
delay(delayBetweenReads);
}
Étape 3 : Configurer le Raspberry Pi
Connectez le Raspberry Pi à un moniteur, souris et clavier. Assurez-vous qu'il a une connexion Ethernet ou Wi‑Fi fonctionnelle et que l'OS est à jour :
- $ sudo apt-get update
- $ sudo apt-get upgrade
Si Node.js n'est pas encore installé, installez la version compatible ARM puis ajoutez les paquets requis via npm :
- $ npm install serialport
- $ npm install ws
Connectez le port série de l'Arduino à un port USB du Raspberry Pi.
Téléchargez le script Node.js (send_data_to_sami.js) et remplacez les valeurs de remplacement pour device_id et device_token par les identifiants que vous avez copiés précédemment.
/* send_data_to_sami.js */
var webSocketUrl = "wss://api.samsungsami.io/v1.1/websocket?ack=true";
var device_id = "VOTRE_DEVICE_ID";
var device_token = "VOTRE_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');
/**
* Obtient l'heure actuelle en millisecondes
*/
function getTimeMillis(){
return parseInt(Date.now().toString());
}
// Établir la connexion WebSocket et enregistrer le dispositif
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));
}
});
Une fois le script en cours d'exécution, vos lectures de capteur de flamme seront diffusées vers SAMI en temps réel.
Pour plus de détails, référez-vous au tutoriel complet : Make a fire detector in minutes with Samsung SAMIIO, Arduino UNO and Raspberry Pi.
Processus de fabrication
- Construire un détecteur de pleurs de bébé économique avec Raspberry Pi – Guide DIY
- Construire un système aéroponique automatisé avec Raspberry Pi et capteur d'humidité
- Construire un robot avec Raspberry Pi et Python : Guide complet
- Construire un robot piloté par Internet avec streaming vidéo Arduino & Raspberry Pi
- Horloge Arduino temps réel pour les heures de prière islamiques
- Contrôlez votre Roomba Create 2 avec Arduino et Android – Guide pas à pas
- Afficher des images sur un écran TFT 1,17 pouces avec Arduino UNO
- Arduino et MPU6050 : Contrôle précis de servo-moteur avec SG90 et MG996R
- Module GPS u-blox LEA‑6H 02 : guide d'intégration Arduino et Python