Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Maak een geanimeerde slimme LED-strip die via Alexa wordt bestuurd met Arduino

Onderdelen en benodigdheden

Onderdeel Aantal Opmerkingen
Arduino UNO 1 Arduino Nano kan ook worden gebruikt. Arduino Mega is handig om meer LED-pixels aan te sturen.
Raspberry Pi 3 Model B 1
NeoPixel-strip (WS2812) 1 Elke WS2812 LED-strip is geschikt.

Apps en online diensten

  • Arduino IDE
  • Amazon Web Services AWS Lambda
  • Amazon Alexa Alexa Skills Kit
  • Amazon Web Services AWS IoT

Over dit project

Waarom een LED-strip?

Ik was altijd gefascineerd door adresbare RGB LED-strips. De oneindige kleureneffecten en animatiemogelijkheden hebben mijn creativiteit altijd geprikkeld, dus ik besloot enkele jaren geleden een bibliotheek voor Arduino-boards te ontwikkelen genaamd ALA (Arduino Light Animations). Alexa geeft me nu de mogelijkheid om kamerverlichting en effecten met mijn stem te besturen – en dat is geweldig!

Projectoverzicht

De benodigde componenten voor dit project zijn:

  • Amazon Alexa: Een aangepaste Alexa-skill (Light Strip) definieert het spraakinteractiemodel en vertaalt commando's (intents) die worden uitgegeven aan de Lambda-functie.
  • Amazon Lambda: Een Python-script dat berichten van Alexa ontvangt en updates naar de IoT-service stuurt.
  • Amazon IoT: De IoT-service slaat een 'thing shadow' op, een weergave van de status van de RGB-strip. Telkens wanneer de shadow wordt bijgewerkt, worden de geabonneerde MQTT-clients (Raspberry Pi) genotificeerd.
  • Raspberry Pi: Deze kleine PC draait een MQTT-client om berichten van de Amazon IoT-service te ontvangen. Aan de andere kant voedt het de Arduino en stuurt het commando's via de USB-poort.
  • Arduino: Deze microcontroller draait de ALA-bibliotheek om de LED-strip aan te sturen, met commando's van de Raspberry Pi via de seriële USB-poort. Je kunt een Arduino Uno, Nano of Mega gebruiken.
  • WS2812 RGB LED-strip: Dit zijn adresbare LED-strips, waarbij elke LED apart kan worden gecontroleerd. Dit maakt mooie en kleurrijke lichtanimaties mogelijk.
Maak een geanimeerde slimme LED-strip die via Alexa wordt bestuurd met Arduino
Architectuur van het project

Niets in dit project is extreem uitdagend, maar er zijn veel onderdelen die met elkaar verbonden zijn. Ik raad aan om de voorgestelde structuur te volgen om je project op een stevige basis te bouwen voordat je doorgaat naar de volgende stap. Om de zaken zo simpel mogelijk te houden, heb ik het project opgesplitst in twee subprojecten.

Het eerste deel van het project wordt beschreven in mijn Hackster.io-project "Web-Controlled LED Animations with Raspberry Pi and Arduino" en begeleidt je door de stappen om de Raspberry Pi, de Arduino en de WS2812 LED-strip te verbinden. Aan het einde van deze fase kun je de LED-animaties besturen vanaf een smartphone of pc via de webbrowser.

Maak een geanimeerde slimme LED-strip die via Alexa wordt bestuurd met Arduino
Webgebaseerde besturing na de eerste fase

Het tweede deel van het project, dat hier wordt beschreven, voegt stemmenbesturing toe aan de vorige implementatie met Amazon Alexa. Er zijn verschillende stappen om de hele keten correct in te stellen, dus wees geduldig en volg de instructies zorgvuldig.

Amazon IoT

Heb je het hardwaregedeelte voltooid? Het is nu tijd voor de cloud! We gebruiken het AWS IoT-platform om ons 'thing' vanaf het internet te beheren.

We gebruiken een Device Shadow, een kopie van de status van een thing, samen met de gewenste wijzigingen. De Raspberry Pi abonneert zich op een notificatiesfeed die de wijzigingen ('delta') aan deze Shadow publiceert. Raadpleeg deze link voor meer informatie over het AWS IoT-platform en API's.

Een IoT Thing aanmaken

  1. Log in op de AWS Console. Als je dat nog niet hebt gedaan, maak dan een gratis account aan.
  2. Zorg dat je bent ingelogd in de regio US East (N. Virginia) of EU (Ireland) (rechtsboven).
  3. Zoek naar 'IoT' en selecteer de AWS IoT service. Klik op de knop Get Started (indien aanwezig) om de introductietutorial te sluiten.
  4. Maak eerst een beveiligingsbeleid voor ons "thing". Ga naar Secure > Policies en klik op Create a Policy. Vul in:
    • Name: LightStripPolicy
    • Action: *
    • Resource: *
    • Effect - Allow: aangevinkt
    • Klik op 'Create'
  5. Maak nu het IoT Thing:
    • Selecteer Manage > Things en maak een nieuw AWS IoT Thing via Register a Thing (of Create rechtsboven) en kies Create a single thing.
    • Voer 'LS01' in bij Name. Laat de overige velden standaard en klik op Next.
    • Klik op Create certificate in de sectie One-click certificate creation.
    • Download de 3 certificaten voor je apparaat en de Root CA. Voor de Root CA moet je misschien rechtsklikken en 'opslaan als' kiezen.
    • Klik na het downloaden op Activate.
    • Klik op Attach a Policy, selecteer het eerder aangemaakte LightStripPolicy en klik op Register Thing.
  6. Noteer het AWS IoT Endpoint: klik op Settings linksonder in de AWS IoT-console, open het en noteer het Endpoint.
Maak een geanimeerde slimme LED-strip die via Alexa wordt bestuurd met Arduino
AWS IoT Endpoint noteren

Raspberry Pi configureren om naar de 'Thing' te luisteren

  1. Installeer de AWS IoT Device SDK for Python op de Raspberry Pi:
    sudo pip3 install AWSIoTPythonSDK
  2. Download de LightStrip-repository van GitHub en pak uit:
    mkdir -p /home/pi/LightStrip
    cd /home/pi/LightStrip
    wget https://github.com/bportaluri/LightStrip/archive/master.zip
    unzip master.zip
  3. Kopieer de vier gedownloade certificaten (van het aanmaken van het IoT Thing) naar de map /home/pi/LightStrip/LightStrip-master/pi.
  4. Bewerk het script lightstripcfg.py (bijv. met nano):
    cd /home/pi/LightStrip/LightStrip-master/pi
    nano lightstripcfg.py
    Pas de instellingen aan:
    • AWSIOT: het AWS IoT Endpoint dat je net noteerde.
    • ROOT_CA: bestandsnaam van het root CA-certificaat.
    • CERTIFICATE: bestandsnaam van het certificaat.
    • PRIVATE_KEY: bestandsnaam van de private key.
    • DEVICE_NAME: laat ongewijzigd op "LS01".
    Sla op met Ctrl+X, daarna Y.
  5. Start het script lightstrip.py:
    sudo python3 lightstrip.py
    Het script toont de aangesloten USB-poorten. De Arduino zit meestal op /dev/ttyACM0. Start het script met de poort:
    sudo python3 lightstrip.py /dev/ttyACM0

De testclient verbindt met de Amazon Thing Shadow-service en abonneert zich op wijzigingen van de LS01 device shadow. Bij succesvolle verbinding werkt de client zijn status bij naar de LS01 device shadow en ontvangt een bevestiging.

Maak een geanimeerde slimme LED-strip die via Alexa wordt bestuurd met Arduino
Succesvolle MQTT-verbinding

Om te controleren of alles werkt, ga terug naar de AWS IoT-console, selecteer Manage > Things, open het LS01 apparaat en kies het Shadow menu. Je ziet de device shadow state.

Klik op de Edit link in de Shadow Document sectie en plak de volgende JSON in het Shadow state-vak:

{ "desired": { "animation": "101" } }

Na het opslaan wordt een 'delta'-bericht naar de MQTT-client op de Raspberry Pi gestuurd, die de LED-strip inschakelt.

De volgende JSON zet de kleur op blauw:

{ "desired": { "color": "0066CC" } }

Op dit moment kun je je LED-strip besturen via de AWS IoT-service – daar mag je trots op zijn!

AWS Lambda-functie

AWS Lambda stelt je in staat om code in de cloud uit te voeren zonder servers te hoeven inrichten of beheren. Het is de perfecte brug tussen de Alexa Skills Kit die later stemmenbesturing mogelijk maakt.

  1. Log in op de AWS Console en selecteer Lambda uit de lijst met services.
  2. Zorg dat je in dezelfde regio zit als bij de vorige stap: US East (N. Virginia) of EU (Ireland).
  3. Klik op Create Function. Kies Author from scratch en configureer:
    • Name = LightStrip
    • Runtime = Python 3.6
    • Role = Create a Custom Role. Er opent een nieuw tabblad; klik op "Allow" om een nieuwe rol lambda_basic_execution aan te maken.
    • Existing role: lambda_basic_execution
    • Klik op Create Function.
  4. Noteer de Lambda ARN ID (rechtsboven).
Maak een geanimeerde slimme LED-strip die via Alexa wordt bestuurd met Arduino
Lambda ARN noteren
  1. Klik op het LightStrip vakje om de functiecode te openen.
    • Code entry type: Edit code inline
    • Runtime: Python 3.6
    • Handler: lambda_function.lambda_handler
  2. Plak de code uit LightStrip\lambda\lambda_function.py in de code-editor.
  3. Maak een nieuw bestand ala_controller.py en plak de code uit LightStrip\lambda\ala_controller.py.
  4. Klik op de oranje Save knop rechtsboven.
Maak een geanimeerde slimme LED-strip die via Alexa wordt bestuurd met Arduino
Lambda code-editor met beide bestanden

Alexa Skill

Nu maken we de aangepaste Light Strip-skill voor Alexa.

  1. Ga naar de Amazon Developer Console en log in (registreer indien nodig).
  2. Ga naar Alexa > Alexa Skills Kit (Get Started).
  3. Klik op Add a New Skill rechtsboven en vul in het tabblad Skill Information:
    • Skill Type: Custom Interaction Model
    • Language: English (U.S.)
    • Name: LightStrip
    • Invocation Name: light strip
    • Klik op Save
  4. Noteer de Skill ID.
Maak een geanimeerde slimme LED-strip die via Alexa wordt bestuurd met Arduino
Skill ID noteren
  1. Selecteer het Interaction Model menu en klik op Launch Skill Builder.
  2. Klik op de Code Editor knop en plak de inhoud van LightStrip/alexaskill/lightstrip_skill.json in het tekstvak.
  3. Klik op Save Model en Build Model. Het bouwen duurt enkele minuten. Klik daarna op Skill Information om terug te keren.
  4. Klik op het Configuration menu.
    • Bij Service Endpoint Type kies AWS Lambda ARN en plak de Lambda ARN die je eerder noteerde.
    • Laat de standaardwaarden staan en klik op Save.

Alexa Skill koppelen aan de Lambda-functie

  1. Ga terug naar je Lambda-functie. Aan de rechterkant staat een lijst met vooraf gedefinieerde triggers. Selecteer Alexa Skills Kit; deze wordt aan je functie toegevoegd.
  2. Configureer:
    • Application Id = de Skill ID die je noteerde.
    • Klik op Add, daarna op Save.
Maak een geanimeerde slimme LED-strip die via Alexa wordt bestuurd met Arduino
Alexa Skills Kit trigger toevoegen

Klaar!

Het project is nu compleet. Probeer de volgende spraakcommando's:

  • Open Light Strip
  • Turn on
  • Set brightness to 20 percent
  • Set brightness to 50 percent
  • Set color to red
  • Set color to turquoise
  • Turn off
  • Run an exciting animation
  • Run a relaxing animation

De LightStrip-skill ondersteunt ook geavanceerdere interacties:

  • Jij: Alexa, open Light Strip
  • Alexa: Welkom bij LightStrip – De LED-strip gloeit met een blauw licht
  • Jij: Launch an animation
  • Alexa: Wil je een relaxende of een opwindende animatie?
  • Jij: Relaxing
  • Alexa: OK – De LED-strip toont een willekeurige animatie
  • Jij: Next animation
  • Alexa: OK – Nog een willekeurige animatie wordt getoond

Om het interactiemodel beter te begrijpen, hier is het volledige VUI-diagram van de skill:

Maak een geanimeerde slimme LED-strip die via Alexa wordt bestuurd met Arduino
VUI-diagram van de LightStrip-skill

Verbeteringen en verfijningen

AlaWeb automatisch starten bij opstarten

Een kleine verbetering is het automatisch starten van het lightstrip.py script bij het opstarten van de Raspberry Pi, zodat je het niet handmatig hoeft te starten na elke herstart. Volg deze instructies:

  1. Open /etc/rc.local met een editor: sudo nano /etc/rc.local
  2. Voeg voor de regel exit 0 toe: cd /home/pi/LightStrip/LightStrip-master/pi && sudo python3 lightstrip.py /dev/ttyACM0 &
  3. Sla op en herstart de Pi om te testen.

Animaties toevoegen en aanpassen

De Light Strip-skill bevat al 20 animatievarianten. De ALA-bibliotheek maakt het echter eenvoudig om eigen animaties te definiëren door de animatiepreset, kleurenpalet en snelheid te kiezen. Je kunt eigen animaties toevoegen of bestaande aanpassen in het bestand ala_controller.py. Rond regel 80 vind je een lijst met animatie-instellingen die je kunt wijzigen naar eigen smaak.

Code

Alle benodigde code voor dit project vind je op GitHub:

https://github.com/bportaluri/LightStrip

Schema's

Maak een geanimeerde slimme LED-strip die via Alexa wordt bestuurd met Arduino
Elektrisch schema

Productieproces

  1. Arduino Nano Flight Simulator 2020 Bedieningspaneel – LCD & CDI Display
  2. Arduino-gebaseerd schakelaar- & LED-paneel voor Microsoft Flight Simulator 2020
  3. Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
  4. Slimme Zelfzittende Schoenen met Ingebouwde Energie-opwekking
  5. Bouw een Slimme Arduino Vierpotige Robot: Stap-voor-Stap Handleiding
  6. Arduino & MPU6050: Precieze Servomotor Besturing met SG90 & MG996R
  7. Naadloze LED-dimmer met Bolt IoT en Arduino UNO
  8. u-blox LEA‑6H GPS Module: Arduino & Python Integratie Handleiding
  9. Bouw een Slimme Arduino-gestuurde Robotarm: Eenvoudige DIY Handleiding
  10. Spraakherkenning & Synthese Meesteren op Arduino Due
  11. Een 8×8 LED-matrix beheersen met Arduino Uno: Stap-voor-stap handleiding