Crie uma Fita LED Inteligente Animada Controlada por Alexa com Arduino
Componentes e Materiais
| Arduino UNO | O Arduino Nano também pode ser usado. O Arduino Mega pode ser útil para controlar mais pixels de LED. | 1 |
| Raspberry Pi 3 Model B | 1 | |
| Fita NeoPixel (WS2812) | Qualquer fita LED WS2812 pode ser utilizada. | 1 |
Aplicativos e Serviços Online
- Arduino IDE - Para programar o Arduino
- Amazon Web Services AWS Lambda - Função serverless para processar comandos da Alexa
- Amazon Alexa Skills Kit - Modelo de interação por voz
- Amazon Web Services AWS IoT - Gerenciamento de dispositivo e sombras (shadows)
Sobre o Projeto
Por Que uma Fita LED?
Sempre fui fascinado por fitas LED RGB endereçáveis. Os infinitos efeitos de cor e capacidades de animação sempre estimularam minha criatividade. Há alguns anos, desenvolvi uma biblioteca para placas Arduino chamada ALA (Arduino Light Animations). A Alexa agora me dá a possibilidade de controlar a iluminação e efeitos do ambiente com minha voz, e isso é incrível!
Visão Geral do Projeto
Os componentes necessários para este projeto formam uma cadeia completa:
- Amazon Alexa: Uma skill personalizada (Light Strip) define o modelo de interação por voz e traduz comandos (intents) que são enviados à função Lambda.
- Amazon Lambda: Um script Python que recebe mensagens da Alexa e envia atualizações para o serviço IoT.
- Amazon IoT: O serviço IoT armazena uma "sombra do dispositivo" (thing shadow), que é uma representação do estado da fita RGB. Sempre que a sombra é atualizada, os clientes MQTT inscritos (Raspberry Pi) são notificados.
- Raspberry Pi: Este pequeno computador executa um cliente MQTT para receber mensagens do serviço Amazon IoT. Do outro lado, alimenta e envia comandos à placa Arduino pela porta USB.
- Arduino: Este microcontrolador executa a biblioteca ALA para controlar a fita LED, recebendo comandos do Raspberry Pi via porta serial USB. Você pode usar Arduino Uno, Nano ou Mega.
- Fita LED RGB WS2812: São fitas LED endereçáveis, permitindo controle individual de cada LED para animações bonitas e coloridas.
Nada no projeto é muito desafiador individualmente, mas há muitas peças interconectadas. Sugiro seguir a estrutura proposta para construir seu projeto sobre uma base sólida antes de avançar para o próximo passo. Para simplificar, dividi o projeto em duas sub-partes.
A primeira parte é descrita no meu projeto "Web-Controlled LED Animations with Raspberry Pi and Arduino" no Hackster.io e guiará você pelos passos para conectar o Raspberry Pi, a placa Arduino e a fita LED WS2812. Ao final desta fase, você será capaz de controlar as animações LED a partir de um smartphone ou PC usando o navegador web.
A segunda parte, descrita aqui, adicionará controle por voz à implementação anterior usando Amazon Alexa. Há várias etapas para configurar toda a cadeia corretamente, então tenha paciência e siga as instruções cuidadosamente.
Amazon IoT
Completou a parte de hardware? Agora é hora de ir para a nuvem! Usaremos a plataforma AWS IoT para gerenciar nosso "dispositivo" (thing) a partir da internet.
Usaremos uma "Sombra de Dispositivo" (Device Shadow), que é uma cópia do estado de um thing, junto com as alterações desejadas. O Raspberry Pi se inscreverá em um feed de notificação que publica as alterações ("delta") nesta Shadow. Consulte este link para mais informações sobre a plataforma e APIs AWS IoT.
Criar um IoT Thing
- Faça login no Console AWS. Se ainda não fez, crie uma conta gratuita.
- Certifique-se de estar logado na região US East (N. Virginia) ou EU (Ireland) no canto superior direito.
- Procure por 'IoT' e selecione o serviço AWS IoT. Clique em Get Started se houver um tutorial introdutório.
- Primeiro, crie uma política de segurança para nosso "thing". Vá em Secure > Policies e clique em Create a Policy:
- Nome: LightStripPolicy
- Ação: *
- Recurso: *
- Efeito - Permitir: marcado
- Clique em 'Create'
- Agora crie o IoT Thing:
- Selecione Manage > Things e crie um novo AWS IoT Thing clicando em Register a Thing (ou Create no canto superior direito) e depois em Create a single thing.
- Digite 'LS01' no campo Nome. Deixe os padrões para os outros campos e clique em Next.
- Clique em Create certificate na seção One-click certificate creation.
- Baixe os 3 certificados do seu dispositivo e o Root CA. Para o Root CA, pode ser necessário clicar com botão direito e salvar.
- Após baixar os certificados, clique em Activate.
- Clique em Attach a Policy, selecione a LightStripPolicy criada anteriormente e clique em Register Thing.
- Antes de prosseguir, anote o AWS IoT Endpoint. Clique no menu Settings no canto inferior esquerdo da página AWS IoT, abra e anote o Endpoint.
Configurar Raspberry Pi para Escutar o 'Thing'
Primeiro, instale o AWS IoT Device SDK for Python no terminal do Raspberry Pi:
sudo pip3 install AWSIoTPythonSDK
Baixe o repositório LightStrip do GitHub e descompacte:
mkdir -p /home/pi/LightStrip
cd /home/pi/LightStrip
wget https://github.com/bportaluri/LightStrip/archive/master.zip
unzip master.zip
Copie os quatro certificados baixados ao criar o IoT Thing para a pasta /home/pi/LightStrip/LightStrip-master/pi.
Edite o script lightstripcfg.py (pode usar o editor nano):
cd /home/pi/LightStrip/LightStrip-master/pi
nano lightstripcfg.py
Edite as configurações para corresponder à sua configuração:
- AWSIOT: Insira o AWS IoT Endpoint anotado anteriormente.
- ROOT_CA: Nome do arquivo do certificado raiz CA
- CERTIFICATE: Nome do arquivo do certificado
- PRIVATE_KEY: Nome do arquivo da chave privada
- DEVICE_NAME: Deixe inalterado como "LS01"
Salve e saia do nano (Ctrl+X, depois Y).
Execute o script lightstrip.py:
sudo python3 lightstrip.py
O script listará as portas USB conectadas. O Arduino deve estar em /dev/ttyACM0, então execute passando a porta:
sudo python3 lightstrip.py /dev/ttyACM0
O cliente de teste conectará ao serviço Amazon Thing Shadow e se inscreverá nas alterações da sombra do dispositivo LS01. Após conexão bem-sucedida, o script atualizará seu status na sombra do dispositivo LS01 e receberá uma mensagem de confirmação.
Para verificar se tudo funciona, volte ao console AWS IoT, selecione Manage > Things, abra o dispositivo LS01 e selecione o menu Shadow para ver o estado da sombra do dispositivo.
Clique no link Edit na seção Shadow Document e cole o seguinte documento JSON na caixa de estado da sombra:
{ "desired": { "animation": "101" } }
Ao clicar no link Save, uma mensagem 'delta' será enviada ao cliente MQTT no Raspberry Pi, que ligará a fita LED.
O seguinte documento JSON mudará a cor para azul:
{ "desired": { "color": "0066CC" } }
Neste ponto, já conseguimos controlar nossa fita LED a partir do serviço AWS IoT. Você deve se orgulhar!
Função AWS Lambda
O AWS Lambda permite executar código na nuvem sem provisionar ou gerenciar servidores. É a ponte perfeita entre o Alexa Skills Kit que habilitará o controle por voz na etapa final.
- Faça login no Console AWS. Selecione Lambda na lista de serviços.
- Certifique-se de estar na mesma região usada anteriormente: US East (N. Virginia) ou EU (Ireland).
- Clique em Create Function. Selecione Author from scratch e configure:
- Name = LightStrip
- Runtime = Python 3.6
- Role = Create a Custom Role. Abrirá nova aba. Clique em "Allow" para criar role chamada lambda_basic_execution.
- Existing role: lambda_basic_execution
- Clique em Create Function
- Anote o Lambda ARN ID no canto superior direito.
Clique na caixa LightStrip para abrir a seção de código da função.
- Code entry type: Edit code inline
- Runtime: Python 3.6
- Handler: lambda_function.lambda_handler
O script lambda_function.py já deve estar definido. Cole o código do arquivo LightStrip\lambda\lambda_function.py no editor.
Crie outro arquivo chamado ala_controller.py e cole o código do arquivo LightStrip\lambda\ala_controller.py.
Quando terminar, clique no botão laranja Save no canto superior direito.
Skill Alexa
Agora podemos criar a skill personalizada Light Strip para Alexa.
- Acesse o Amazon Developer Console e faça login (pode ser necessário registrar a conta).
- Vá em Alexa > Alexa Skills Kit (Get Started).
- Clique em Add a New Skill no canto superior direito e preencha a aba Skill Information:
- Skill Type: Custom Interaction Model
- Language: English (U.S.)
- Name: LightStrip
- Invocation Name: light strip
- Clique Save
- Anote o Skill ID.
Selecione o menu Interaction Model e clique em Launch Skill Builder.
Clique no botão Code Editor e cole o conteúdo do arquivo LightStrip/alexaskill/lightstrip_skill.json na caixa de texto.
Clique em Save Model e Build Model. Levará alguns minutos para construir o modelo. Clique em Skill Information para voltar à página de configuração da skill.
Agora clique no menu Configuration.
Em Service Endpoint Type, selecione AWS Lambda ARN e cole o ARN da função Lambda anotado acima.
Deixe os valores padrão e clique em Save.
Conectar Skill Alexa à Função Lambda
- Volte à sua função Lambda. No lado direito há uma lista de triggers predefinidos. Selecione Alexa Skills Kit e será adicionado à sua função.
- Configure:
- Application Id = o Skill ID anotado acima
- Clique Add
- Clique Save
Pronto!
O projeto está completo. Experimente os seguintes comandos de voz:
- "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"
A skill LightStrip permite interações de voz mais avançadas:
- Você: Alexa, open Light Strip
- Alexa: Welcome to LightStrip - A fita LED brilhará com luz azul
- Você: Launch an animation
- Alexa: Do you want a relaxing or exciting animation?
- Você: Relaxing
- Alexa: OK - A fita LED mostrará uma animação aleatória
- Você: Next animation
- Alexa: OK - Outra animação aleatória será exibida
Para entender melhor o modelo de interação, aqui está o diagrama VUI completo da skill.
Melhorias e Refinamentos
Iniciar Automaticamente o AlaWeb no Boot
Uma pequena melhoria é iniciar automaticamente o script lightstrip.py no boot, para não precisar lançá-lo manualmente toda vez que ligar o Raspberry Pi ou após um reset. Siga estas instruções.
Adicionar e Ajustar Animações
A skill Light Strip já possui 20 variações de animação definidas. No entanto, a biblioteca ALA permite configurar facilmente suas próprias animações escolhendo preset de animação, paleta de cores e velocidade. Você pode adicionar suas próprias animações ou ajustar as existentes no script ala_controller.py. Por volta da linha 80, você verá uma lista de configurações de animações que pode modificar ou aprimorar conforme seu gosto.
Código
Todo o código necessário para este projeto: https://github.com/bportaluri/LightStrip
Esquemáticos
Processo de manufatura
- Painel de Controle para Flight Simulator 2020 com Arduino Nano – Display LCD e CDI
- Painel de Chaves e LEDs para Microsoft Flight Simulator 2020 com Arduino
- Controlar um LED via Bluetooth com Arduino – Guia DIY Simples
- Tênis Inteligentes com Auto-Ajuste e Colheita de Energia Integrada
- Construa um Robô Quadrúpede Inteligente com Arduino: Guia Passo a Passo
- Arduino e MPU6050: Controle Preciso de Servomotores SG90 e MG996R
- Controle Suave de Brilho de LED com Bolt IoT e Arduino UNO
- Módulo GPS u-blox LEA‑6H 02: Guia de Integração com Arduino e Python
- Braço Robótico Inteligente Controlado por Arduino: Tutorial DIY Fácil
- Dominando Reconhecimento e Síntese de Fala no Arduino Due