Slimme 3D-sensor: Stemgeactiveerde lampbesturing voor Amazon Echo
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Amazon Alexa Amazon Echo | 1 |
| Walabot Creator | 1 |
| Arduino Leonardo | 1 |
| Relais (generiek) | 2 |
| LattePanda 2G/32GB (Geactiveerd) | 1 |
| LattePanda 7-inch 1024x600 IPS Display | 1 |
| Lamp | 2 |
Over dit project
Inleiding
Als je een Alexa of een andere slimme speaker hebt met Smart Home-integratie, heb je waarschijnlijk al ervaren dat je de naam van het apparaat moet onthouden om het te besturen. Ik heb veel slimme apparaten en soms is het lastig om de namen van elk te onthouden.
Soms zeg ik:
Er gebeuren dan 3 dingen:
- Alexa raakt in de war en zet een ander apparaat aan.
- Vloeken tegen Alexa (je weet wat ik bedoel, geef het toe).
- Opgeven, gefrustreerd zeggen: "Vergat het Alexa, ik doe het zelf" ... en terughankerend naar de schakelaar lopen.
Mijn kinderen vinden het leuk om te zeggen: "Alexa, zet ALLE lichten aan". En natuurlijk brandt het hele huis als een kerstboom. Geen plezier als iemand dat midden in de nacht doet!
Hoe het kan
Wat als ik gewoon kan zeggen: "Alexa, zet deze lamp aan"?
Laat Alexa detecteren waar ik ben in de buurt van het apparaat. En het weet wat ik bedoel... zou dat niet geweldig zijn?
Een mogelijke oplossing is een camera in de kamer monteren en bewegingen monitoren. Maar dat is TE GRISGRIM. Ik wil geen camera's in mijn huis met beeldherkenning.
Daar komt Walabot om de hoek kijken
Wat is een Walabot?
Walabot is een programmeerbare 3D-sensor perfect voor DIY-elektronicaprojecten. Het is een nieuwe soort 3D-imagingsensor. Het gebruikt radiofrequentie (RF) en onthult allerlei dingen die verborgen zijn in de omgeving. Het is handheld, programmeerbaar en onze SDK (software development kit) bevat diverse imaginemogelijkheden. Onze API stelt je in staat om je eigen applicaties te bouwen.
Het kan bewegingen bijhouden met RF.
LattePanda
LattePanda is een x86/x64 SBC met een quad-core Intel Atom x8300 "Cherrytrail" processor die Windows 10 kan draaien. Het bevat 2GB of 4GB RAM met geïntegreerde Bluetooth 4.0 en 802.11n WiFi, 1x USB 3.0, 2x USB 2.0, HDMI-uitgang en een geïntegreerde ATmega32u4 co-processor – zoals je in een Arduino Leonardo vindt – met bijbehorende GPIO, allemaal op een handzaam bord!
Deze opstelling maakt LattePanda ideaal voor diverse scenario's. In deze tutorial richten we ons op het voordeel van de geïntegreerde microcontroller. Wanneer deze microcontroller samen met de Intel Atom-processor gebruikt wordt, kun je de Walabot en Arduino samen verbinden.
Node-RED
Node-RED is een browser-gebaseerd hulpmiddel om snel en gemakkelijk je eigen logica te bouwen voor het hanteren van diverse IoT-apparaten, inclusief het abonneren op TCP-berichten, luisteren naar Alexa-verzoeken, lezen/schrijven naar databases, publiceren naar MQTT-brokers en reageren op HTTP-verzoeken. Het stelt je ook in staat om specifieke functies in JavaScript te definiëren voor complexe logica, terwijl je een visuele, makkelijk te gebruiken drag-and-drop-interface gebruikt om verschillende componenten en logica te koppelen.
Node-RED is een lichtgewicht runtime gebouwd op Node.js, die volledig gebruikmaakt van het event-driven, non-blockerende model.
Als we Walabot-data in Node-RED kunnen pluggen, opent dat veel mogelijkheden, vooral in Home Automation. Hier zijn een paar pakketten die ik gebruikte voor Alexa en Arduino:
node-red-contrib-alexa-local: een dood-eenvoudige node voor het toevoegen van Alexa-mogelijkheden aan je Node-RED flow.
node-red-node-arduino: een Node-RED node om met een Arduino te communiceren.
Documentatie voor Firmata setup: https://nodered.org/docs/hardware/arduino.html
Hoe het werkt
Hardware
- LattePanda
- 7-inch 1024x600 IPS Display voor LattePanda
- USB draadloos toetsenbord en muis
- Walabot
- USB-gevoede hub
- Relais
- Lamp
Installatie
Stap 1. Walabot SDK
Download de SDK en installeer: https://walabot.com/getting-started
Stap 2. Arduino op Walabot instellen
https://docs.lattepanda.com/content/hardware/accessPinoutsFromVS/
- Ontwikkelaarsmodus inschakelen op je besturingssysteem.
Stap 3. Arduino instellen
- Open Arduino. Selecteer "StandardFirmata".
- Selecteer "Arduino Leonardo".
- Selecteer je COM-poort.
- Upload de sketch.
- Upload klaar!
Sluit de relais aan op de LattePanda.
Stap 4. Node.js en Node-RED installeren en downloaden.
Als je niet bekend bent met Node.js en Node-RED, hier zijn links:
- https://nodejs.org/en/
- https://docs.lattepanda.com/content/projects/NodeRED/
- https://nodered.org/docs/getting-started/installation
Stap 5. Python 3 downloaden en installeren.
Stap 6. Project-repository: https://github.com/rondagdag/smart3DSensorForAlexa
Download en pak het zip-bestand uit:
> npm install
> npm start
Stap 7. Zorg dat je op hetzelfde WiFi-netwerk zit en de Smart Home Skills in je Alexa-app ingeschakeld zijn. Zeg: "Alexa, discover devices". Alexa vindt de Lamp. Om de Node-RED flows te zien en aan te passen: https://localhost:8080/red/
Je kunt nu andere pinnen op de Arduino van de LattePanda aansluiten. Of verbinden met MQTT of andere Node-RED-modules.
De volledige flow ziet er zo uit...
3 Stappen:
- Handle Walabot Service: een Python-programma dat data leest van de Walabot-sensor en streamt naar TCP-poort 1890.
- Get and save Walabot object data: leest data van Walabot-service via poort 1890 en slaat de laatste bekende gedetecteerde objectlocatie op.
- Handle Alexa Commands: draait wanneer een commando van Alexa ontvangen wordt, en bepaalt op basis van de laatste bekende locatie welke Arduino-pin (verbonden met een relais) geschakeld moet worden.
Handle Walabot Service
Hier is de Walabot Python-code. Het leest data van de Walabot en streamt een JSON-string via TCP.
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)
# if index < len(targets): finds += ','
finds += ']}'
conn.sendall(str.encode(finds))
conn.close()
WalabotAPI.Stop()
WalabotAPI.Disconnect()
Get and save Walabot object data
Dit ontvangt data van poort 1890, parst de JSON-data om globale variabelen in te stellen.
Code om naar JSON-array te converteren:
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
Om Alexa-commando's te verwerken, gebruiken we node-red-contrib-alexa-local. Dan detecteren we met deze logica welke commando door te sturen op basis van de laatste bekende positie van de persoon.
Als dit project je geïnteresseerd heeft in Amazon Echo, Walabot, LattePanda, Node-RED, Python, of je hebt gewoon een geweldige dag, klik dan op de 'Respect project'-knop en volg me. Als dit je geholpen heeft een project te bouwen, laat een bericht achter en geef feedback. Ik wil horen hoe dit project je geholpen heeft.
Let op: er wordt geen eigen Alexa Skill gebruikt, maar de ingebouwde Amazon Echo Smart Home-functionaliteit die out-of-the-box Philips Hue-lampen bestuurt. De node-red-contrib-alexa-local node in Node-RED doet alsof het een eigen "Bulb" is die je met Alexa kunt besturen!
Code
Smart 3D Sensor for Alexa
Productieproces
- SmartThings-bewegingsensor met computer vision op Raspberry Pi 3
- Een DIY Infrarood Bewegingssensor Bouwen voor Raspberry Pi – Stapsgewijze Handleiding
- Slimme Vuilnisbak: Een Cellulaire IoT-oplossing voor Geautomatiseerd Afvalbeheer
- Je Chromecast Besturen met Amazon Alexa via Raspberry Pi en Python
- Slimme Verkeerslicht: Adaptieve Straatverlichting Aangedreven door IoT
- Bouw een Raspberry Pi Obstakel-vermijdende Robot – Een Beginnersgids
- Slimme Pen: Real-time Handgeschrift- & Bewegingstracking met Raspberry Pi en IMU
- Revolutionaire ultra-gevoelige, duurzame rek-sensor voor slimme textiel
- Revolutionaire ultra-dunne sensor verbetert slimme contactlensfunctionaliteit
- Geavanceerde TOMOPLEX sensorfilm voor real-time luchtvaartmonitoring
- Verwarmde kleding: De toonaangevende smart textile-innovatie, experts onthullen