Умный 3D-сенсор: голосовое управление лампой через Amazon Echo и Walabot
Компоненты и материалы
| Amazon Alexa / Amazon Echo | 1 шт. |
| Walabot Creator (программируемый 3D-сенсор) | 1 шт. |
| Arduino Leonardo | 1 шт. |
| Реле (для управления лампами) | 2 шт. |
| LattePanda 2G/32GB (активированная) | 1 шт. |
| Дисплей 7" 1024×600 IPS для LattePanda | 1 шт. |
| Лампа (настольная/напольная) | 2 шт. |
О проекте
Введение
Если у вас есть Alexa (или другая умная колонка) и умный дом, вы наверняка сталкивались с проблемой: нужно помнить точное имя каждого устройства. У меня много гаджетов, и иногда имена путаются.
Три типичных сценария:
- Alexa путается и включает не то устройство.
- Вы ругаетесь на Alexa (вы знаете, о чём речь).
- Сдаётесь: «Забудь, Alexa, я сам сделаю» — и встаёте к выключателю.
Дети обожают команду «Алекса, включи ВСЕ лампы» — весь дом светящийся как ёлка. Весело, но не в 3 часа ночи!
Как решить?
А что, если просто сказать: «Алекса, включи ЭТУ лампу»?
Alexa определяет, где я нахожусь относительно устройства, и понимает, о чём речь. Отличная идея?
Камера в комнате с распознаванием образов — ТОО СТРАШНО. Не хочу камеры дома.
Вот где приходит на помощь Walabot:
Walabot
Что такое Walabot?
Walabot — программируемый 3D-сенсор для DIY-электроники. Это новый тип 3D-изображения. Использует радиочастоты (RF) и «просвечивает» окружающий мир. Компактный, программируемый, с SDK и API для создания собственных приложений. Имеет различные режимы визуализации.
Отслеживает движения с помощью RF.
LattePanda
LattePanda — одноплатный компьютер x86/x64 с четырёхъядерным Intel Atom x8300 «Cherrytrail», работающий под Windows 10. 2/4 ГБ RAM, Bluetooth 4.0, WiFi 802.11n, USB 3.0, 2×USB 2.0, HDMI, и встроенный ATMega32u4 (как в Arduino Leonardo) с GPIO — всё на ладони!
Эта архитектура идеально подходит для нашего сценария: интегрированный микроконтроллер позволяет подключить Walabot (к Intel Atom) и Arduino (через встроенный ATMega32u4) одновременно.
Node-RED
Node-RED — браузерный инструмент для визуального программирования IoT-логики: подписка на TCP, прослушивание Alexa, работа с БД, MQTT, HTTP, JavaScript-функции — всё drag-and-drop.
Лёгкий рантайм на Node.js, использующий событийную неблокирующую модель.
Если ввести данные Walabot в Node-RED — откроются огромные возможности для домашней автоматизации. Использованные пакеты:
node-red-contrib-alexa-local— простой узел для добавления возможностей Alexa в Node-RED.node-red-node-arduino— узел для общения с Arduino (Firmata). Документация: nodered.org/docs/hardware/arduino.html.
Принцип работы
Оборудование
- LattePanda
- Дисплей 7" 1024×600 IPS для LattePanda
- USB беспроводная клавиатура и мышь
- Walabot
- USB-хаб с питанием
- Реле
- Лампы
Установка
Шаг 1. Walabot SDK
Скачайте и установите SDK: walabot.com/getting-started
Шаг 2. Настройка Arduino на LattePanda
docs.lattepanda.com/content/hardware/accessPinoutsFromVS/
- Включите режим разработчика в Windows.
Шаг 3. Настройка Arduino (загрузка Firmata)
- Откройте Arduino IDE. Выберите «StandardFirmata» (Файл → Примеры → Firmata → StandardFirmata).
- Выберите плату «Arduino Leonardo».
- Выберите COM-порт.
- Загрузите скетч.
- Готово!
Подключите реле к LattePanda (к встроенному Arduino Leonardo).
Шаг 4. Установка Node.js и Node-RED
Если не знакомы — ссылки:
Шаг 5. Установка Python 3
Шаг 6. Репозиторий проекта
https://github.com/rondagdag/smart3DSensorForAlexa
Скачайте, распакуйте, в папке проекта выполните:
> npm install
> npm start
Шаг 7. Финал
Убедитесь, что вы в одной Wi-Fi сети, и в приложении Alexa включены Smart Home Skills. Скажите: «Алекса, найди устройства». Alexa найдёт «Lamp».
Для просмотра/редактирования Node-RED: https://localhost:8080/red/
Теперь можно переназначить пины Arduino на LattePanda, подключить MQTT или другие модули Node-RED.
Весь поток Node-RED (3 шага)
- Handle Walabot Service — Python-скрипт, читающий данные Walabot и стримящий JSON в TCP порт 1890.
- Get and save Walabot object data — принимает данные с порта 1890, парсит JSON, сохраняет последнюю известную позицию объекта в глобальные переменные.
- Handle Alexa Commands — срабатывает при команде от Alexa, на основе последней позиции определяет, какой пин Arduino (реле) переключить.
Handle Walabot Service (Python код)
from __future__ import print_function
from sys import platform
from os import system
from imp import load_source
WalabotAPI = load_source('WalabotAPI', 'C:\\Program Files\\Walabot\\WalabotSDK\\python\\WalabotAPI.py')
import socket, sys
if __name__ == '__main__':
WalabotAPI.Init()
WalabotAPI.SetSettingsFolder()
WalabotAPI.ConnectAny()
WalabotAPI.SetProfile(WalabotAPI.PROF_SENSOR)
WalabotAPI.SetThreshold(35)
WalabotAPI.SetArenaR(50,400,4)
WalabotAPI.SetArenaPhi(-45,45,2)
WalabotAPI.SetArenaTheta(-20,20,10)
WalabotAPI.SetDynamicImageFilter(WalabotAPI.FILTER_TYPE_MTI)
WalabotAPI.Start()
system('cls' if platform == 'win32' else 'clear')
numOfTargetsToDisplay = 1
if len(sys.argv) == 2:
TCP_IP = '127.0.0.1'
TCP_PORT = int(sys.argv[1])
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
while True:
WalabotAPI.Trigger()
targets = WalabotAPI.GetSensorTargets()
finds = '{"targets": ['
index = 0
for i, t in enumerate(targets):
if i < numOfTargetsToDisplay:
index += 1
print('Target {}\nx = {}\ny = {}\nz = {}\n'.format(i+1, t.xPosCm, t.yPosCm, t.zPosCm))
finds += '{"x": "%s", "y": "%s", "z": "%s"}' % (t.xPosCm, t.yPosCm, t.zPosCm)
finds += ']}'
conn.sendall(str.encode(finds))
conn.close()
WalabotAPI.Stop()
WalabotAPI.Disconnect()
Get and save Walabot object data (Node-RED function)
raw = msg.payload.toString('UTF-8')
j = JSON.parse(raw);
var msg1 = { payload: raw };
var msg2 = { payload: j };
if (raw.length > 20) {
X = msg2.payload.targets[0].x;
Y = msg2.payload.targets[0].y;
Z = msg2.payload.targets[0].z;
global.set("X", X);
global.set("Y", Y);
global.set("Z", Z);
var msg3 = { payload: X };
var msg4 = { payload: Y };
var msg5 = { payload: Z };
}
return [ msg1, msg2, msg3, msg4, msg5];
Handle Alexa Commands (Node-RED)
Используется node-red-contrib-alexa-local. Логика маршрутизирует команду на нужный пин Arduino исходя из последней известной позиции человека (X, Y, Z от Walabot).
Если проект заинтересовал — нажмите «Respect project» и подпишитесь. Если помогло построить свой проект — напишите отзыв!
Примечание: здесь не используется кастомный Alexa Skill, а встроенная функциональность Smart Home (управление Philips Hue). Узел node-red-contrib-alexa-local просто эмулирует любые «Лампы», которыми вы хотите управлять через Alexa!
Код
Smart 3D Sensor for Alexa
https://github.com/rondagdag/smart3DSensorForAlexa
Производственный процесс
- Датчик движения SmartThings на компьютерном зрении с Raspberry Pi 3
- Построение DIY инфракрасного датчика движения для Raspberry Pi — пошаговое руководство
- Умное мусорное ведро: клеточное IoT-решение для автоматизированного управления отходами
- Управление Chromecast через Amazon Alexa с помощью Raspberry Pi и Python
- Умный светофор: адаптивное уличное освещение на базе IoT
- Создание робота, избегающего препятствия, на Raspberry Pi — руководство для начинающих
- Smart Pen: Отслеживание почерка и движений в реальном времени с Raspberry Pi и IMU
- Нагреваемая одежда: ведущая инновация в умных текстилях, по мнению экспертов
- Революционный ультрачувствительный стойкий датчик деформации для умных текстилей
- Революционный ультратонкий сенсор расширяет функциональность умных контактных линз