Создание быстрой надежной системы обнаружения пожара с Samsung SAMI, Arduino UNO и Raspberry Pi
Это руководство проведет вас через создание компактной IoT-системы обнаружения пожара, стримящей показания датчика пламени в Samsung SAMI через WebSockets, используя Arduino UNO и Raspberry Pi.
Мы будем использовать простой, готовый ИК-датчик пламени, загрузить легкий скетч в Arduino и запустить Node.js-скрипт на Raspberry Pi, который пересылает данные в SAMI.
Предварительные требования
Для этого туториала вы должны быть знакомы с базовыми API SAMI.
Архитектура
Диаграмма ниже иллюстрирует высокоуровневый поток:
- Raspberry Pi с сетевым подключением
- Arduino UNO с макетной платой
- ИК-датчик пламени
- USB и питание кабели, плюс проводка макетной платы
Программные компоненты:
- Arduino-скетч, запущенный на UNO
- Node.js-скрипт, запущенный на Raspberry Pi
Скачайте программное обеспечение сейчас.
Если у вас нет Raspberry Pi, вы все равно можете следовать шагам. Подключите Arduino к компьютеру с интернетом и запустите Node.js-скрипт на той машине вместо этого.
Шаг 1: Создание и подключение нового типа устройства
- Войдите в SAMI Developer Portal. Если у вас нет аккаунта Samsung, создайте его сейчас.
- Нажмите «+ New Device Type».
- Назовите тип устройства «Flame Sensor» и назначьте уникальный идентификатор, например «com.example.iot.flame».
- Нажмите «Create Device Type» и перейдите на страницу типов устройств.
Теперь создайте Manifest для типа устройства «Flame Sensor».
- В левой колонке нажмите «Flame Sensor».
- Перейдите в «Manifest» и нажмите «+ New Version».
- Введите onFire как Field Name и выберите Boolean как Data Type.
- Нажмите «Save» и затем «Next: Actions».
- Пропустите Actions для этого туториала и нажмите «Save New Manifest».
Простой Manifest автоматически утверждается. Не публикуйте этот тип устройства, так как он предназначен исключительно для учебных целей.
Наконец, подключите новое устройство Flame Sensor через User Portal:
- Войдите в SAMI User Portal.
- На дашборде нажмите для подключения нового устройства.
- Выберите тип устройства «Flame Sensor», который вы только что создали.
- Нажмите «Connect Device…». Вы вернетесь на дашборд.
- Нажмите иконку настроек добавленного устройства. Во всплывающем окне выберите «GENERATE DEVICE TOKEN…».
- Скопируйте device ID и device token — они понадобятся в коде.
Шаг 2: Настройка Arduino
Подключите ИК-датчик пламени к Arduino, как показано на диаграмме выше. Затем загрузите следующий скетч (read_flame_sensor.ino) через Arduino IDE. Скетч считывает датчик каждые 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 подключение и ОС обновлена:
- $ sudo apt-get update
- $ sudo apt-get upgrade
Если Node.js еще не установлен, установите ARM-совместимую версию, затем добавьте необходимые пакеты через npm:
- $ npm install serialport
- $ npm install ws
Подключите последовательный порт Arduino к USB-порту на Raspberry Pi.
Скачайте Node.js-скрипт (send_data_to_sami.js) и замените placeholder-значения для 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 в реальном времени.
Для более подробной информации обратитесь к полному туториалу: Make a fire detector in minutes with Samsung SAMIIO, Arduino UNO and Raspberry Pi.
Производственный процесс
- Создание бюджетного детектора плача ребенка на Raspberry Pi — DIY-руководство
- Создайте автоматизированную аэропоническую систему с Raspberry Pi и датчиком влажности
- Создание робота на Raspberry Pi и Python: полное руководство
- Создание интернет-управляемого видеostreaming-робота на Arduino и Raspberry Pi
- Часы реального времени на Arduino с расчётом времени намаза
- Управление Roomba Create 2 через Arduino и Android: пошаговое руководство
- Вывод изображений на 1.17-дюймовый TFT LCD с Arduino UNO
- Точное управление сервоприводом через MPU6050 (Arduino, SG90, MG996R)
- Модуль GPS u-blox LEA-6H 02: Интеграция с Arduino и Python
- Освоение распознавания и синтеза речи на Arduino Due