Este projeto é uma prova de conceito que visa mostrar como possibilitar a comunicação entre uma placa Arduino e um bot de Discord que utiliza o wrapper Discord.js
Tanto o Arduino quanto o conceito de bots de forma geral estão muito ligados com usos para automação e modernização da tarefas. Entretanto, o primeiro é mais focado em hardware e interações com o mundo real, enquanto o segundo é mais aplicado à software e conhecido no mundo virtual.
Dessa forma, este projeto se propõe a integrar ambos os conceitos, estabelecendo o envio de dados entre Arduino e bot e vice-versa.
- Usar comando de
/pisca-pisca
para fazer o LED piscar algumas vezes - Usar comando de
/musica
para começar a tocar uma música que poderá ter seu volume alterado pelo Arduino
- Usar uma tag NFC/RFID para fazer o LED piscar
- Usar uma tag NFC/RFID para enviar uma mensagem de acesso autorizado para o Discord
- Alterar o volume de uma música sendo tocada no Discord usando o potenciômetro do Arduino
Os recursos utilizados neste projeto foram:
- Arduino Nano (outras placas podem ser utilizadas, utilizadas as devidas adaptações)
- Potenciômetro linear de 10KΩ, para controle de volume
- Leitor RFID NFC PN532 (ou similar), para leitura de tags NFC ou similares
- Jumpers/cabos para fazer a conexão entre os componentes
- Cabo para conectar o Arduino em um computador
- (Opcional) LED e resistor para funções de pisca-pisca (geralmente as placas Arduino já possuem um LED embutido. É este que estou usando no projeto mas você pode usar o seu próprio)
- Node.js (linguagem padrão do bot e meio pelo qual se estabece a conexão serial com o Arduino. O projeto foi testado na versão 17)
- NPM (gerenciador de dependências do Node)
- Arduino IDE 2.0 (para fazer upload do código para o Arduino)
- Discord.js (para conexão com o Discord, incluso nas dependências do NPM)
- PN532_I2C.h, para usar o leitor NFC com I2C. Para usar com outras formas de comunicação, baixar a biblioteca correta e fazer as adaptações necessárias
- Escrevi o código para o funcionamento do bot de Discord
- Baseado em experiências passadas, esta parte foi relativamente fácil. Decidi quais seriam as funções principais do bot para comprovar que pude estabelecer a comunicação entre Arduino-Node.js
- Comprei/encontrei os componentes do circuito, como a placa Arduino e o leitor NFC
- Dica: Diferentemente de software, o hardware pode vir com defeitos de fábrica que tornem necessário testar outras peças ou fazer trocas. Logo, quando algo não funciona, nem sempre foi um erro seu. Verifique se o componente está queimado ou se funciona em outro circuito mais simples
- Pesquisei materiais na internet sobre comunicação serial do Arduino com código Node.js
- Instalei e testei as dependências do Node.js no meu código
- Realizei testes de envio e recebimento de dados entre ambas os lados
- Implementei os últimos detalhes necessários no código para que tudo funcionasse bem
Este arquivo usa variáveis de ambiente que deverão ser definidas antes da execução do programa.
As variáveis usadas são:
BOT_TOKEN
: token do seu bot de Discord (pode ser gerado no painel do desenvolvedor)CHANNEL_ID
: ID de canal do Discord onde o bot enviará mensagensGUILD_ID
: ID de servidor do Discord que o bot usará de base para se conectar aos canais de vozAUTHORIZED_TAG
: valor de tag NFC/RFID para enviar mensagem de acesso autorizadoBLINK_TAG
: valor de tag NFC/RFID para piscar o LEDCLIENT_ID
: ID do bot de Discord (para registrar os slash commands)ARDUINO_PORT
: valor da porta do computador a qual o Arduino se conectou
É recomendável fazer esta parte primeiro, começando pelo Arduino.
Você precisará do valor da porta do Arduino para configurar o Node, e você precisará que o código seja enviado para o Arduino para ligar o circuito por completo.
- Abra a IDE do Arduino, com o código do arquivo
Sensor.ino
- Conecte a sua placa Arduino ao computador
- Na IDE, selecione o modelo correto de Arduino e a porta na qual se encontra a placa
- Realize a compilação e envio do código para a placa
- Baixe o projeto do repositório
- Execute o comando
npm install
para instalar as dependências - Crie um arquivo
.env
com as variáveis de ambiente necessárias, baseado em.env.template
- Execute o comando
npm run start
para testar o programa
É altamente recomendado você montar o circuito com a energia desligada e sem qualquer cabo conectado entre sua placa Arduino e o computador.
A partir do momento em que o código for enviado para o Arduino e o circuito montado e conectado ao computador, a aplicação deverá funcionar.
Além disso, para usar a funcionalidade de música, é necessário criar uma pasta /media
com um arquivo music.ogg
. Fique a vontade para escolher a música que você quiser.
Recomendação: Em bots mais complexos, é possível tornar esse sistema dinâmico para pegar sons e músicas de algum outro lugar, por exemplo.
Para executar o projeto, é necessário:
- Ter o circuito corretamente montado
- Ter feito upload do código para a placa Arduino
- Estar rodando a aplicação Node.js, sem erros
- Se algum erro ocorrer, provavelmente:
- Alguma variável de ambiente não foi setada
- Alguma variável de ambiente está com valor inválido
- A comunicação entre Arduino-PC ou entre Arduino-Node não foi estabelecida
- Não foi possível conectar o código Node.js com o seu bot de Discord
- Se algum erro ocorrer, provavelmente:
- Ter em mãos as tags NFC/RFID setadas nas variáveis de ambiente não foi setada
- Estar conectado no servidor de Discord setado nas variáveis de ambiente
Para isso, basta seguir os passos descritos na seção de Instalação.
Observação: também há a possibilidade de algum componente do circuito estar queimado ou não conectado direito. Tome cuidado na hora de montar o circuito!
O comando para executar a aplicação Node.js é npm run start
(ou derivado disso).
Atualmente, o projeto se encontra com algumas limitações:
- É necessário ter o Arduino conectado (via cabo) ao mesmo computador que está rodando o bot de Discord
- É necessário mudar manualmente no arquivo
.env
o valor da porta na qual o Arduino está conectado (que pode mudar dependendo da entrada em que você conecta a placa)
É esperado que em futuras versões, a conexão entre a placa e o código seja feita de forma sem fio, por Bluetooth ou Wi-fi. Isso resolveria ambos os problemas apresentados, mas necessitaria de diversas alterações no código e no circuito.
- Marcus Vinícius N. Garcia (Infinitemarcus)