Adición de sensores de movimiento y orientación en proyectos de aficionado

No estoy seguro de por qué, pero durante mucho tiempo me ha gustado construir proyectos de aficionado con ledes. Como suelo decir: "Muéstrame un led parpadeante y te mostraré a un hombre embelesado". Más recientemente, me interesé en agregar sensores de movimiento y orientación a mis proyectos de aficionado. De hecho, acabo de agregar esta capacidad a una matriz de bolas de ping pong de 12 x 12, cada una equipada con un led tricolor.

Pero quizás debería empezar por el principio. En algún momento de la primavera de 2020, estaba charlando por correo electrónico con un amigo ingeniero jubilado llamado David Humrich en Australia. David me dijo que había comprado una pequeña matriz de ledes tricolores y me pidió sugerencias sobre lo que podía hacer con ella. En respuesta, publiqué un video corto de un programa gusano simple que implementé hace pocos años en una matriz de led de 8 x 8.

La creación de este video para David me recordó que uno de mis proyectos "de segundo plano" era construir una matriz más grande. He visto algunas muestras muy interesantes basadas en bolas de ping pong, así que eso es lo que decidí hacer. Comencé comprando una gran bolsa de bolas de ping pong baratas y divertidas, que monté en una matriz de 12 x 12 = 144 (Figura 1).

Figura 1: Este humilde servidor sostiene con orgullo su matriz de bolas de ping pong de 12 x 12, cada una con un led tricolor (Fuente de la imagen: Max Maxfield)

Cuando se trata de ledes, una gran opción para este tipo de proyecto es el NeoPixel de Adafruit, basado en controladores led de tres canales WS2818, como una tira 1376 con 30 NeoPixel por metro. Esta tira de cinco metros me dio 150 píxeles: 144 para la matriz, uno que actúa como convertidor de nivel de voltaje y cinco para repuestos. Corté la tira en piezas de un solo píxel y adjunté un píxel a la parte posterior de cada bola de ping pong.

Terminé conectando mis píxeles en un patrón serpenteante (zigzag) que comienza en una esquina y avanza hacia adelante y hacia atrás a través de la matriz. En la práctica, si decide construir su propia matriz, en realidad no importa en qué orden conecte sus propios píxeles porque la forma en que pensamos en esta matriz es como 12 columnas (eje X) y 12 filas (eje Y), ambos numerados del 0 al 11, con el píxel [0,0] en la esquina inferior izquierda (frente a la matriz). Por lo tanto, cuando llegamos a escribir un programa para manejar nuestra matriz, incluimos una función con un nombre similar a GetNeoNum() que acepta valores X e Y como argumentos y que, al usar un algoritmo que depende de la forma en que conectamos la matriz, devuelve el número del píxel correspondiente en la cadena de caracteres.

Cuando tuve que manejar esta matriz, necesitaba un microcontrolador con una cantidad razonable de memoria, un reloj relativamente rápido y una cantidad sustancial de procesamiento "umph" porque planeaba implementar algunos efectos interesantes, incluidos los desvanecimientos de varios colores. Opté por el 102010328 Seeeduino XIAO de Seeed Technology (Figura 2). El XIAO, que funciona con un microcontrolador ATSAMD21G18A-MUT SAMD21G18 de Atmel, solo tiene el tamaño de un sello postal estándar, que lo convierte en la placa de desarrollo de microcontroladores compatible con Arduino más pequeña de la familia Seeeduino. El microcontrolador cuenta con un núcleo de procesador Arm Cortex-M0+ de 32 bits que funciona a 48 megahertz (MHz) y viene con 256 kilobytes (Kbytes) de memoria flash y 64 Kbytes de SRAM.

Figura 2: Actualmente, la placa de desarrollo de microcontroladores compatible con Arduino más pequeña de la familia Seeeduino, el Seeeduino XIAO compatible con la placa de pruebas proporciona a los usuarios un potente procesador Arm Cortex-M0+ de 32 bits que funciona a 48 MHz. (Fuente de la imagen: Seeed Studio)

Cada uno de los 11 pines de XIAO se puede utilizar como entrada analógica, entrada digital o salida digital. Diez de los pines admiten modulación por ancho de pulsos (PWM) y uno está equipado con un convertidor de señal digital a analógica (DAC), lo que le permite proporcionar una verdadera capacidad de salida analógica. Además, si es necesario, los pines 4 y 5 se pueden usar para admitir una interfaz I2C, los pines 6 y 7 se pueden usar para admitir una interfaz UART, y los pines 8, 9 y 10 se pueden usar para admitir una interfaz SPI.

Como ya lo señalé, recientemente me interesé en agregar sensores de movimiento y orientación a mis proyectos de aficionado. Como caso de prueba, decidí agregar esta capacidad a mi matriz de bolas de ping pong de 12 x 12.

Lo que quería era una placa de ruptura pequeña (BOB) con un sensor de sistemas microelectromecánicos (MEMS), donde ese sensor contenía un acelerómetro de 3 ejes, un giroscopio de 3 ejes y un magnetómetro de 3 ejes. No me tomó mucho tiempo darme cuenta de que las complejidades asociadas con tratar de manipular y dar sentido a los datos de los sensores sin procesar causarían que mi cerebro salga por mis oídos. Como una alternativa, opté por usar el 2472 BOB de Adafruit, que cuenta con un sensor BNO055 de 9 grados de libertad (DoF) de Bosch.

Figura 3: Además de un acelerómetro de 3 ejes, un giroscopio de 3 ejes y un magnetómetro de 3 ejes, el sensor BNO055 del 2472 BOB de Adafruit también incluye un procesador Arm Cortex-M0 que realiza la fusión del sensor. (Fuente de la imagen: Adafruit)

El BOB se comunica con el microcontrolador XIAO mediante una interfaz I2C de dos cables. Lo mejor del BNO055 es que también contiene un procesador Arm Cortex-M0+ de 32 bits que toma los datos sin procesar de los tres sensores, realiza una fusión de sensores sofisticada y me proporciona los datos que necesito en una forma que puedo usar. Como podemos ver en este video, mi primera prueba fue sostener mi matriz horizontalmente y luego hacer una "bola" (píxel) "rodar" alrededor de la pantalla al inclinar la matriz.

Conclusión

Esta primera prueba funcionó mucho mejor de lo que esperaba, pero, en realidad, es bastante simplista. Todo lo que hago es detectar cuándo la inclinación de la matriz pasa de cierto valor (actualmente establecido en 10 grados) y, luego, hago que la "bola" se mueva en la dirección correspondiente a una velocidad constante. El siguiente paso será modelar con mayor precisión cosas como la inercia y la aceleración, y luego usar estas capacidades para implementar una serie de juegos.

Lo principal es que estos experimentos de primer paso me han inspirado a comenzar a agregar sensores de movimiento y orientación a otros proyectos, de manera que se vuelven aún más elegantes de lo que ya son. ¿Qué hay de usted? ¿Tiene algún proyecto de aficionado que se beneficiaría de la capacidad para detectar cómo se movían y en qué dirección se orientaban?

Información sobre el autor

Image of Max Maxfield

Clive "Max" Maxfield received his BSc in Control Engineering in 1980 from Sheffield Hallam University, England and began his career as a designer of central processing units (CPUs) for mainframe computers. Over the years, Max has designed everything from silicon chips to circuit boards and from brainwave amplifiers to steampunk Prognostication Engines (don't ask). He has also been at the forefront of Electronic Design Automation (EDA) for more than 30 years.

Max is the author and/or co-author of a number of books, including Designus Maximus Unleashed (banned in Alabama), Bebop to the Boolean Boogie (An Unconventional Guide to Electronics), EDA: Where Electronics Begins, FPGAs: Instant Access, and How Computers Do Math. Check out his “Max’s Cool Beans” blog.

More posts by Clive "Max" Maxfield
 TechForum

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.

Visit TechForum