Tabla de contenido:
- Suministros
- Paso 1: examinar el código:
- Paso 2: El resto del código…
- Paso 3: Conexión con Pure Data …
- Paso 4:
Video: Uso de la placa de sensores de Complex Arts para controlar datos puros a través de WiFi: 4 pasos (con imágenes)
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:41
¿Alguna vez has querido experimentar con el control gestual? ¿Hacer que las cosas se muevan con un movimiento de la mano? ¿Controlas la música con un giro de muñeca? ¡Este Instructable le mostrará cómo!
La placa de sensores de artes complejas (complexarts.net) es un microcontrolador versátil basado en el ESP32 WROOM. Tiene todas las características de la plataforma ESP32, incluidos WiFi y Bluetooth integrados, y 23 pines GPIO configurables. La placa de sensores también cuenta con la IMU BNO_085, un procesador de movimiento de 9 DOF que realiza la fusión del sensor integrado y ecuaciones de cuaternión, proporcionando una orientación súper precisa, vector de gravedad y datos de aceleración lineal. La placa de sensor se puede programar usando Arduino, MicroPython o ESP-IDF, pero para esta lección programaremos la placa con el IDE de Arduino. Es importante tener en cuenta que los módulos ESP32 no se pueden programar de forma nativa desde el IDE de Arduino, pero hacer eso posible es muy simple; hay un gran tutorial aquí: https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/ que debería tardar unos 2 minutos en completarse. La última pieza de configuración que necesitamos es el controlador para el chip USB a UART en la placa del sensor, que se puede encontrar aquí: https://www.silabs.com/products/development-tools/software/usb-to -uart-bridge-vcp-drivers. Simplemente elija su sistema operativo e instálelo, lo que debería llevar unos 2 minutos más. Una vez hecho esto, ¡estamos listos para comenzar!
[Esta lección no asume ninguna familiaridad con Arduino o Pure Data, sin embargo, no cubrirá su instalación. Arduino se puede encontrar en aduino.cc. Pure Data se puede encontrar en puredata.info. Ambos sitios tienen instrucciones fáciles de seguir para la instalación y configuración.]
Además … los conceptos cubiertos en este tutorial, como la configuración de conexiones UDP, la programación del ESP32 con Arduino y la construcción de parches básicos de Pure Data, son bloques de construcción que se pueden aplicar para innumerables proyectos, así que no se rebaje aquí una vez que haya ¡Aprendí estos conceptos!
Suministros
1. Tablero de sensores de artes complejas
2. IDE de Arduino
3. Datos puros
Paso 1: examinar el código:
Primero, veremos el código Arduino. (La fuente está disponible en https://github.com/ComplexArts/SensorBoardArduino. Se recomienda que siga el código a medida que avanzamos). Necesitamos algunas bibliotecas, una de las cuales no es una biblioteca central de Arduino, por lo que puede que necesite instalarlo. Este proyecto se basa en el archivo SparkFun_BNO080_Arduino_Library.h, por lo que si no lo tiene, deberá ir a Sketch -> Incluir biblioteca -> Administrar bibliotecas. Escriba "bno080" y aparecerá la biblioteca antes mencionada. Presione instalar.
Las otras tres bibliotecas que se utilizan deberían venir con Arduino por defecto. Primero, usaremos la biblioteca SPI para comunicarnos con el BNO. También es posible usar UART entre ESP32 y BNO, pero como SparkFun ya tiene una biblioteca que usa SPI, nos quedaremos con eso. (¡Gracias, SparkFun!) Incluir el archivo SPI.h nos permitirá seleccionar qué pines y puertos queremos usar para la comunicación SPI.
La biblioteca WiFi contiene las funciones que nos permiten acceder a una red inalámbrica. WiFiUDP contiene las funciones que nos permiten enviar y recibir datos a través de esa red. Las siguientes dos líneas nos llevan a la red: ingrese su nombre de red y contraseña. Las dos líneas siguientes especifican la dirección de red y el puerto al que enviamos nuestros datos. En este caso, solo transmitiremos, lo que significa enviárselo a cualquier persona de nuestra red que esté escuchando. El número de puerto determina quién está escuchando, como veremos más adelante.
Estas dos líneas siguientes crean miembros para sus respectivas clases para que podamos acceder fácilmente a sus funciones más adelante.
A continuación, asignamos los pines adecuados del ESP a sus respectivos pines en el BNO.
Ahora configuramos el miembro de la clase SPI, y también configuramos la velocidad del puerto SPI.
Finalmente llegamos a la función de configuración. Aquí, iniciaremos un puerto serie para que podamos monitorear nuestra salida de esa manera si queremos. Luego comenzamos WiFi. Tenga en cuenta que el programa espera una conexión WiFi antes de continuar. Una vez que WiFi está conectado, comenzamos la conexión UDP, luego imprimimos nuestro nombre de red y nuestra dirección IP en el monitor serial. Después de eso, iniciamos el puerto SPI y verificamos la comunicación entre el ESP y el BNO. Por último, llamamos a la función "enableRotationVector (50);" ya que solo usaremos el vector de rotación para esta lección.
Paso 2: El resto del código…
Antes de ir al bucle principal (), tenemos una función llamada "mapFloat".
Esta es una función personalizada que hemos agregado para mapear o escalar valores a otros valores. La función de mapa incorporada en Arduino solo permite el mapeo de enteros, pero todos nuestros valores iniciales del BNO estarán entre -1 y 1, por lo que tendremos que escalarlos manualmente a los valores que realmente queremos. Sin embargo, no se preocupe, aquí está la función simple para hacer precisamente eso:
Ahora llegamos al bucle principal (). Lo primero que notará es otra función de bloqueo, como la que hace que el programa espere una conexión de red. Éste se detiene hasta que haya datos del BNO. Cuando comenzamos a recibir esos datos, asignamos los valores de cuaternión entrantes a variables de punto flotante e imprimimos esos datos en el monitor en serie.
Ahora necesitamos mapear esos valores.
[Un comentario sobre la comunicación UDP: los datos se transfieren a través de UDP en paquetes de 8 bits o valores de 0-255. Cualquier valor superior a 255 se enviará al siguiente paquete, lo que aumentará su valor. Por lo tanto, debemos asegurarnos de que no haya valores superiores a 255.]
Como se mencionó anteriormente, tenemos valores entrantes en el rango de -1 - 1. Esto no nos da mucho con qué trabajar, ya que cualquier cosa por debajo de 0 se cortará (o aparecerá como 0) y no podemos hacer una tonelada con valores entre 0-1. Primero tenemos que declarar una nueva variable para mantener nuestro valor mapeado, luego tomamos esa variable inicial y la mapeamos de -1-1 a 0-255, asignando el resultado a nuestra nueva variable llamada Nx.
Ahora que tenemos nuestros datos mapeados, podemos armar nuestro paquete. Para hacer eso, debemos declarar un búfer para los datos del paquete, dándole un tamaño de [50] para asegurarnos de que todos los datos quepan. Luego comenzamos el paquete con la dirección y el puerto que especificamos anteriormente, escribimos nuestro búfer y 3 valores en el paquete a, luego finalizamos el paquete.
Por último, imprimimos nuestras coordenadas mapeadas en el monitor en serie. ¡Ahora el código Arduino está listo! Transmita el código a la placa del sensor y verifique el monitor en serie para asegurarse de que todo funcione como se esperaba. Debería ver los valores del cuaternión, así como los valores mapeados.
Paso 3: Conexión con Pure Data …
¡Ahora para Pure Data! Abra Pure Data e inicie un nuevo parche (ctrl n). El parche que crearemos es muy simple, con solo siete objetos. El primero que vamos a crear es el objeto [netreceive]. Este es el pan y la mantequilla de nuestro parche, manejar toda la comunicación UDP. Observe que hay tres argumentos para el objeto [netreceive]; -u especifica UDP, -b especifica binario y, por supuesto, 7401 es el puerto en el que estamos escuchando. También puede enviar el mensaje "listen 7401" a [netreceive] para especificar su puerto.
Una vez que recibamos datos, debemos descomprimirlos. Si conectamos un objeto [print] a [netrecieve], podemos ver que los datos inicialmente nos llegan como un flujo de números, pero queremos analizar esos números y usar cada uno para algo diferente. Por ejemplo, es posible que desee utilizar la rotación del eje X para controlar el tono de un oscilador y el eje Y para el volumen, o cualquier número de otras posibilidades. Para hacer eso, el flujo de datos pasa por un objeto [desempaquetar] que tiene tres flotantes (f f f) en sus argumentos.
Ahora que estás tan lejos, ¡el mundo es tu ostra! Tiene un controlador inalámbrico que puede usar para manipular lo que quiera en el universo de Pure Data. ¡Pero detente ahí! Además de Rotation Vector, pruebe el acelerómetro o el magnetómetro. Intente utilizar funciones especiales del BNO como "doble toque" o "agitar". Todo lo que se necesita es investigar un poco los manuales de usuario (o el próximo Instructable…).
Paso 4:
Lo que hemos hecho anteriormente es configurar la comunicación entre la placa de sensores y Pure Data. Si quieres empezar a divertirte más, conecta tus salidas de datos a algunos osciladores. ¡Juega con control de volumen! ¡Quizás controle algunos tiempos de retardo o reverberación! ¡El mundo es tu ostra!
Recomendado:
[2020] Uso de dos (x2) Micro: bits para controlar un automóvil RC: 6 pasos (con imágenes)
[2020] Uso de dos (x2) micro: bits para controlar un automóvil RC: Si tiene dos (x2) micro: bits, ¿ha pensado en usarlos para controlar de forma remota un automóvil RC? Puedes controlar un coche RC usando un micro: bit como transmisor y otro como receptor. Cuando usas el editor MakeCode para codificar un micro: b
Controlador de pad de muestra con datos puros: 4 pasos
Controlador de pad de muestra usando datos puros: en este Instructable crearé un controlador para permitir que algunos pads de juegos de batería electrónicos antiguos de Roland disparen sonidos sin el módulo de batería original que venía con el juego. Usaré datos puros para crear un parche para cargar algunos archivos wav y luego p
Uso de sensores de temperatura, agua de lluvia y vibración en un Arduino para proteger los ferrocarriles: 8 pasos (con imágenes)
Uso de sensores de temperatura, agua de lluvia y vibración en un Arduino para proteger los ferrocarriles: en la sociedad moderna, un aumento en los pasajeros de trenes significa que las compañías ferroviarias deben hacer más para optimizar las redes para mantenerse al día con la demanda. En este proyecto mostraremos a pequeña escala cómo los sensores de temperatura, agua de lluvia y vibraciones o
Centro de recopilación de datos de sensores habilitado para IoT con ESP8266 y PubNub: 9 pasos (con imágenes)
Centro de recopilación de datos de sensores habilitado para IoT con ESP8266 y PubNub: la mayoría de los tutoriales sobre ESP8266 se encuentran en el nivel de novato (parpadeando un LED de forma remota) o son demasiado complejos para alguien que está buscando algo para mejorar y actualizar sus habilidades de parpadeo de LED. instructable tiene como objetivo cerrar esta brecha para crear
Cómo usar ESP32 para controlar LED con Blynk a través de WiFi: 7 pasos (con imágenes)
Cómo usar ESP32 para controlar LED con Blynk a través de WiFi: este tutorial usará la placa de desarrollo ESP32 para controlar LED con Blynk a través de WiFi. Blynk es una plataforma con aplicaciones iOS y Android para controlar Arduino, Raspberry Pi y similares a través de Internet. Es un panel de control digital en el que puede crear un