Índice:

Usando a Complex Arts Sensor Board para controlar dados puros em WiFi: 4 etapas (com imagens)
Usando a Complex Arts Sensor Board para controlar dados puros em WiFi: 4 etapas (com imagens)

Vídeo: Usando a Complex Arts Sensor Board para controlar dados puros em WiFi: 4 etapas (com imagens)

Vídeo: Usando a Complex Arts Sensor Board para controlar dados puros em WiFi: 4 etapas (com imagens)
Vídeo: Камера ANBIUX ДВУГЛАЗКА УДИВИЛА после ОБНОВЛЕНИЯ!!! 2024, Julho
Anonim
Usando a Complex Arts Sensor Board para controlar dados puros por WiFi
Usando a Complex Arts Sensor Board para controlar dados puros por WiFi
Usando a Complex Arts Sensor Board para controlar dados puros por WiFi
Usando a Complex Arts Sensor Board para controlar dados puros por WiFi

Você já quis experimentar o controle gestual? Fazer as coisas andarem com um aceno de mão? Controlar a música girando o pulso? Este Instructable mostrará como!

O Complex Arts Sensor Board (complexarts.net) é um microcontrolador versátil baseado no ESP32 WROOM. Possui todos os recursos da plataforma ESP32, incluindo WiFi e Bluetooth integrados e 23 pinos GPIO configuráveis. O Sensor Board também apresenta o BNO_085 IMU - um processador de movimento de 9 DOF que realiza fusão de sensores e equações de quatérnio integrados, fornecendo orientação superprecisa, vetor de gravidade e dados de aceleração linear. A placa do sensor pode ser programada usando Arduino, MicroPython ou ESP-IDF, mas para esta lição iremos programar a placa com o IDE do Arduino. É importante observar que os módulos ESP32 não são nativamente programáveis a partir do Arduino IDE, mas tornar isso possível é muito simples; há um ótimo tutorial aqui: https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/ que deve levar cerca de 2 minutos para ser concluído. A última parte da configuração de que precisamos é o driver para o chip USB-para-UART na placa do sensor, que pode ser encontrado aqui: https://www.silabs.com/products/development-tools/software/usb-to -uart-bridge-vcp-drivers. Basta escolher o seu sistema operacional e instalar, o que deve levar cerca de mais 2 minutos. Feito isso, estamos prontos para prosseguir!

[Esta lição não pressupõe nenhuma familiaridade com o Arduino nem com o Pure Data, no entanto, não cobrirá sua instalação. O Arduino pode ser encontrado em aduino.cc. Pure Data pode ser encontrado em puredata.info. Ambos os sites possuem instruções fáceis de seguir para instalação e configuração.]

Além disso … os conceitos abordados neste tutorial, como configuração de conexões UDP, programação do ESP32 com Arduino e criação de patch Pure Data básico - são blocos de construção que podem ser aplicados a inúmeros projetos, portanto, não pare aqui depois de entendi esses conceitos!

Suprimentos

1. Placa de sensor de artes complexas

2. Arduino IDE

3. Pure Data

Etapa 1: Examinar o Código:

Examinando o código
Examinando o código
Examinando o código
Examinando o código

Primeiro, veremos o código do Arduino. (O código-fonte está disponível em https://github.com/ComplexArts/SensorBoardArduino. É recomendável que você acompanhe o código à medida que avançamos.) Precisamos de algumas bibliotecas, uma das quais não é uma biblioteca central do Arduino, então você pode ser necessário instalá-lo. Este projeto depende do arquivo SparkFun_BNO080_Arduino_Library.h, então se você não tiver, você precisará ir para Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas. Digite “bno080” e a biblioteca mencionada anteriormente aparecerá. Pressione instalar.

As outras três bibliotecas usadas devem vir com o Arduino por padrão. Primeiro, usaremos a biblioteca SPI para nos comunicarmos com o BNO. Também é possível usar UART entre o ESP32 e o BNO, mas como o SparkFun já tem uma biblioteca que usa SPI, vamos ficar com isso. (Obrigado, SparkFun!) Incluir o arquivo SPI.h nos permitirá selecionar quais pinos e portas queremos usar para a comunicação SPI.

A biblioteca WiFi contém as funções que nos permitem entrar em uma rede sem fio. WiFiUDP contém as funções que nos permitem enviar e receber dados por essa rede. As próximas duas linhas nos levam à rede - digite o nome da rede e a senha. As duas linhas seguintes especificam o endereço de rede e a porta para a qual estamos enviando nossos dados. Nesse caso, vamos apenas transmitir, o que significa enviar para qualquer pessoa em nossa rede que esteja ouvindo. O número da porta determina quem está ouvindo, como veremos em breve.

As próximas duas linhas criam membros para suas respectivas classes para que possamos acessar facilmente suas funções posteriormente.

Em seguida, atribuímos os pinos apropriados do ESP aos seus respectivos pinos no BNO.

Agora configuramos o membro da classe SPI, também definindo a velocidade da porta SPI.

Finalmente chegamos à função de configuração. Aqui, vamos iniciar uma porta serial para que possamos monitorar nossa saída dessa forma, se quisermos. Então começamos o WiFi. Observe que o programa aguarda uma conexão WiFi antes de prosseguir. Assim que o WiFi estiver conectado, iniciamos a conexão UDP e, em seguida, imprimimos nosso nome de rede e nosso endereço IP no monitor serial. Depois disso, iniciamos a porta SPI e verificamos a comunicação entre o ESP e o BNO. Por último, chamamos a função “enableRotationVector (50);” já que usaremos o vetor de rotação apenas para esta lição.

Etapa 2: O resto do código…

O resto do código…
O resto do código…

Antes de irmos para o loop principal (), temos uma função chamada “mapFloat”.

Esta é uma função personalizada que adicionamos para mapear, ou dimensionar, valores para outros valores. A função de mapa embutida no Arduino permite apenas mapeamento inteiro, mas todos os nossos valores iniciais do BNO estarão entre -1 e 1, então teremos que escalá-los manualmente para os valores que realmente queremos. Não se preocupe - aqui está a função simples para fazer exatamente isso:

Agora chegamos ao loop principal (). A primeira coisa que você notará é outra função de bloqueio, como aquela que faz o programa esperar por uma conexão de rede. Este para até que haja dados do BNO. Quando começamos a receber esses dados, atribuímos os valores de quatérnio de entrada a variáveis de ponto flutuante e imprimimos esses dados no monitor serial.

Agora precisamos mapear esses valores.

[Uma palavra sobre comunicação UDP: os dados são transferidos por UDP em pacotes de 8 bits ou valores de 0-255. Qualquer coisa acima de 255 será enviada para o próximo pacote, aumentando seu valor. Portanto, precisamos ter certeza de que não há valores acima de 255.]

Como mencionado antes, temos valores de entrada na faixa de -1 - 1. Isso não nos dá muito para trabalhar, uma vez que qualquer coisa abaixo de 0 será cortada (ou aparecerá como 0) e não podemos fazer uma tonelada com valores entre 0 - 1. Primeiro temos que declarar uma nova variável para manter nosso valor mapeado, então pegamos essa variável inicial e a mapeamos de -1 - 1 a 0 - 255, atribuindo o resultado à nossa nova variável chamada Nx.

Agora que temos nossos dados mapeados, podemos montar nosso pacote. Para fazer isso, devemos declarar um buffer para os dados do pacote, dando a ele um tamanho de [50] para garantir que todos os dados se encaixem. Em seguida, começamos o pacote com o endereço e a porta que especificamos acima, gravamos nosso buffer e 3 valores no pacote para e encerramos o pacote.

Por último, imprimimos nossas coordenadas mapeadas no monitor serial. Agora o código do Arduino está pronto! Atualize o código para a placa do sensor e verifique o monitor serial para certificar-se de que tudo está funcionando conforme o esperado. Você deve ver os valores de quatérnio, bem como os valores mapeados.

Etapa 3: Conectando com dados puros …

Conectando-se com dados puros …
Conectando-se com dados puros …

Agora para Pure Data! Abra Pure Data e inicie um novo patch (ctrl n). O patch que iremos criar é muito simples, tendo apenas sete objetos. O primeiro que vamos criar é o objeto [netreceive]. Este é o pão com manteiga do nosso patch, lidando com toda a comunicação UDP. Observe que há três argumentos para o objeto [netreceive]; o -u especifica UDP, o -b especifica binário e 7401 é, obviamente, a porta em que estamos escutando. Você também pode enviar a mensagem “escutar 7401” para [netreceive] para especificar sua porta.

Assim que tivermos dados entrando, precisamos descompactá-los. Se conectarmos um objeto [print] a [netrecieve], podemos ver que os dados inicialmente chegam a nós como um fluxo de números, mas queremos analisar esses números e usar cada um para algo diferente. Por exemplo, você pode querer usar a rotação do eixo X para controlar a inclinação de um oscilador e o eixo Y para o volume ou qualquer outra possibilidade. Para fazer isso, o fluxo de dados passa por um objeto [desempacotar] que tem três flutuadores (f f f) como seus argumentos.

Agora que você está tão longe, o mundo é sua ostra! Você tem um controlador sem fio que pode usar para manipular o que quiser no universo Pure Data. Mas pare aí! Além do vetor de rotação, experimente o acelerômetro ou o magnetômetro. Tente usar funções especiais do BNO, como “toque duplo” ou “sacudir”. Basta vasculhar um pouco os manuais do usuário (ou o próximo Instructable …).

Passo 4:

O que fizemos acima foi configurar a comunicação entre o Sensor Board e Pure Data. Se você quiser começar a se divertir mais, conecte suas saídas de dados a alguns osciladores! Jogue com o controle de volume! Talvez controle alguns tempos de atraso ou reverberação! o mundo é sua ostra!

Recomendado: