Tabla de contenido:

Holi-Tie: 8 pasos (con imágenes)
Holi-Tie: 8 pasos (con imágenes)

Video: Holi-Tie: 8 pasos (con imágenes)

Video: Holi-Tie: 8 pasos (con imágenes)
Video: EL QUE SE EQUIVOCA PIERDE 🤣 2024, Noviembre
Anonim
Image
Image

Por gwfongMonkey Patching Siga más por el autor:

Rampa para perros iluminadora
Rampa para perros iluminadora
Escultura de corazón de acero y vidrio fundido
Escultura de corazón de acero y vidrio fundido
Escultura de corazón de acero y vidrio fundido
Escultura de corazón de acero y vidrio fundido
Alambre de cobre y mariposa de vidrio fundido
Alambre de cobre y mariposa de vidrio fundido
Alambre de cobre y mariposa de vidrio fundido
Alambre de cobre y mariposa de vidrio fundido

Acerca de: Solo un chico que busca hacer cosas interesantes. Más acerca de gwfong »

Este es el Holi-Tie, una corbata festiva diseñada para usarse durante las vacaciones. Basado libremente en el Ampli-Tie de Becky Stern que usa una placa Flora, el Holi-Tie usa un microcontrolador Circuit Python Express (CPX) para manejar las animaciones de NeoPixel y la música. Un botón cambia entre 2 animaciones NeoPixel diferentes. Las almohadillas táctiles capacitivas cambian los colores de NeoPixel y las velocidades de animación. El otro botón cambia entre animaciones LED y música. El micrófono integrado se utiliza para medir el ruido ambiental para la animación del medidor de VU. Y el altavoz CPX emite melodías de chip navideñas.

Todo está codificado utilizando el lenguaje de programación Python que se ejecuta sobre el sistema CircuitPython. Está alimentado por una batería LiPo de 3.7V, 500mAH que fue modificada para tener un interruptor de encendido / apagado.

Hay dos videoclips que muestran el Holi-Tie:

  • Holi-Tie completado
  • Dentro del Holi-Tie

Paso 1: Piezas y herramientas

Partes

  • Circuito de juegos expreso
  • 15x Flora Neopixels
  • Cable magnético
  • Cinta adhesiva de velcro
  • Batería lipo de 500 mAH con conector JST
  • Corbata Candy Cane
  • Mini interruptor deslizante, SPDT
  • Tubo termoretráctil

Al adquirir las piezas, sería aconsejable comprar extras. Tenía un total de 20 NeoPixels, uno de los cuales estaba roto desde el principio y el otro lo arruiné. La corbata Candy Cane era tan barata que compré una segunda por si arruinaba la primera.

Instrumentos

  • Pistola de silicona
  • Estación de soldadura
  • Cortadores de alambre
  • Cuchillo pequeño
  • Multimetro
  • Computadora
  • Encendedor o pistola de calor
  • Hilo y aguja

Paso 2: preparación de la corbata

Preparando la corbata
Preparando la corbata
Preparando la corbata
Preparando la corbata
Preparando la corbata
Preparando la corbata

El objetivo principal es tener acceso al núcleo de unión interior y demarcar las líneas que indican dónde deben colocarse los LED.

Paso 1: atar la corbata en su lugar

Será difícil atar la corbata cuando los componentes electrónicos estén en su lugar. Así que ate la corbata para que se vea bien y el nudo sea bastante firme y no se deshaga. Luego, tire con cuidado del extremo pequeño de la corbata para abrir el orificio y pasar la corbata por encima de la cabeza. Esta es la posición en la que se trabajará la corbata.

Hay todo tipo de nudos de corbata diferentes. Solo conozco el que aprendí de niño, el Windsor. No debería importar qué nudo se utilice.

Paso 2: abre la parte trasera de la corbata

Abre las costuras en un lado del lazo de la corbata y el logo y luego por el centro de la corbata. Tenga cuidado porque tiene que volver a coserse al final.

Paso 3: Dibuja líneas donde deben colocarse los LED

Para que los LED aparezcan en las secciones de rayas blancas de la corbata, es más fácil encontrar la línea central para cada sección de rayas blancas en la parte posterior del núcleo de la corbata y luego mapearla en la parte delantera del núcleo de la corbata. Verifique y vuelva a verificar que la línea central esté 1) en el centro y 2) paralela a la raya. Será posible ajustar las posiciones de los LED si están un poco apagados. Pero es mejor hacerlo lo más cerca posible de lo exacto ahora que después.

Pruebe el centrado de las líneas colocando LED en las líneas y colocando la tela de rayas en la parte superior. Ajuste donde sea necesario.

Paso 3: Adjuntar los NeoPixels

Colocación de los NeoPixels
Colocación de los NeoPixels
Colocación de los NeoPixels
Colocación de los NeoPixels
Colocación de los NeoPixels
Colocación de los NeoPixels
Colocación de los NeoPixels
Colocación de los NeoPixels

Básicamente, estamos haciendo nuestra propia tira de LED. Simplemente montamos los LED en el núcleo de enlace y luego los conectamos entre sí.

Paso 1: adhiera los NeoPixels al núcleo del lazo

Coloque un poco de pegamento caliente en la parte posterior del NeoPixel y colóquelo en las líneas centrales. Para las secciones con 3 NeoPixels, alinee verticalmente el NeoPixel central y péguelas primero. Esto facilitará la colocación del NeoPixel izquierdo y derecho en relación con el centro, especialmente dado que el ancho de la corbata aumenta de arriba a abajo.

Asegúrese de orientar todos los NeoPixels en la misma dirección, desde la parte inferior izquierda a la superior derecha. Si esto no es correcto, la tira no funcionará.

Una nota sobre el pegamento termofusible. Bastará con completar el proyecto. En cuanto a si durará en los próximos años, solo hay que verlo.

Paso 3: Suelde los NeoPixels entre sí

Debido a que decidí soldar los NeoPixels juntos en lugar de usar hilo conductor, el agujero en las almohadillas de NeoPixel funciona en nuestra contra. Simplemente encuentre un buen lugar en la almohadilla para soldar el cable. No intente llenar el agujero con soldadura, pero si sucede, estará bien.

El alambre magnético tiene una fina capa de aislamiento alrededor de un núcleo de cobre. Con un cuchillo, raspe el aislamiento justo en los extremos donde se soldarán. Lo mejor es raspar toda la circunferencia del cable.

Paso 4: probar la conectividad

Utilice un multímetro para probar la conectividad de:

  1. Conexiones positivas. Debe haber conectividad de punta a cola. Asegúrese de probar la conectividad en las almohadillas y no en el cable.
  2. Conexiones a tierra. Realice la misma prueba pero con las almohadillas de tierra.
  3. Cada línea de datos. De una plataforma de datos a la siguiente, verifique que haya conectividad.

Paso 4: Conexión del Circuit Playground Express

Conexión del Circuit Playground Express
Conexión del Circuit Playground Express

El Circuit Playground Express (CPX) es el corazón del sistema. Adafruit tiene numerosos tutoriales para este controlador. Más adelante en este instructivo, destacaré algunas de las características de MCU.

Paso 1: Suelde el CPX a la punta inferior NeoPixel

Corte las longitudes adecuadas del cable magnético para la alimentación, la tierra y los datos. Empújelos a través de la tela del núcleo de amarre para que toquen las almohadillas de alimentación, tierra y datos de NeoPixel. Sueldelos asegurándose de que los cables existentes en las almohadillas sigan teniendo una buena conectividad.

A continuación, dé la vuelta al núcleo de amarre y coloque el CPX en la posición deseada. Alimente el cable de alimentación a la almohadilla VOUT, el cable de tierra a cualquier almohadilla de tierra y el cable de datos a cualquier almohadilla de E / S que no sea A0. El código que he escrito usa A3.

Prueba la conectividad.

Paso 2: amarre el CPX

Con un hilo y una aguja, elija cuatro almohadillas equidistantes y cóselas en el núcleo de la atadura.

Paso 5: Encendido del CPX

Encendido del CPX
Encendido del CPX
Encendido del CPX
Encendido del CPX
Encendido del CPX
Encendido del CPX

El CPX no tiene interruptor de encendido / apagado. Esto significa que en el momento en que se enchufa la batería, la corbata se encenderá. Esto también significa que la única forma de apagarlo es desconectando la batería, lo cual es una molestia importante. Una solución simple es poner un interruptor de apagado / apagado en la batería.

Paso 1: corte el tercer pin del interruptor

No se necesita uno de los pines no centrales. Córtelo al ras del cuerpo del interruptor.

Paso 2: suelde el interruptor en línea con un cable de batería

Corta el cable de tierra de la batería en algún lugar en el medio. Deslice un trozo de tubo termorretráctil en cada uno de los cables de tierra. Suelde un cable de tierra a una de las clavijas y el otro cable de tierra a la otra clavija. Asegúrese de que no se toquen entre sí o que la soldadura toque el cuerpo metálico.

Verifica que no estén conectados usando un multímetro. Desliza el tubo sobre las conexiones soldadas y encoge. Agregue un poco de cinta aislante a cualquier parte que pueda fallar debido a la fatiga por flexión.

Paso 3: Verifique que la batería funcione

En este punto, la batería se puede conectar al CPX. Si todo salió bien, el interruptor debería poder encender y apagar el CPX.

Paso 4: monta la batería

Coloque un poco de cinta adhesiva de gancho y bucle en la parte posterior de la batería y en el núcleo de amarre. Esto lo mantendrá en su lugar si la corbata no se manipula demasiado.

Paso 6: Configuración del Circuit Playground Express

No entraré en detalles sobre cómo configurar el CPX. Adafruit hace eso y algo más. Daré algunos consejos para los problemas que encontré con bastante frecuencia.

CPX se congela

Probablemente debido a problemas de memoria en tiempo de ejecución, el CPX se congelaría con bastante frecuencia. La solución rápida es borrar y volver a flashear. Busque "Old Way" en estas instrucciones. Básicamente, se trata de presionar un par de botones, arrastrar y soltar para borrar, y luego arrastrar y soltar para volver a flashear.

Advertencia: esto borra todo. Se perderá todo el código del CPX.

Guardar cambios en CPX puede causar problemas

Descubrí que a veces, después de guardar un archivo en el CPX, el tiempo de ejecución de Python estaba en mal estado. La solución fue reiniciar el tiempo de ejecución de Python presionando el botón de reinicio. Presiónelo solo una vez. Si lo presiona dos veces, se iniciará el proceso de re-flasheo.

Guardar directamente en CPX es arriesgado

Debido a la posibilidad de que el CPX deba actualizarse, se corre el riesgo de perder todo su código. Después de haber perdido mi código dos veces, se me ocurrió un flujo de trabajo simple. Guardaría mi código en el disco duro local. Cuando estuviera listo para ser probado en el CPX, simplemente lo copiaba ejecutando un simple script de implementación.

Paso 7: Codificación del Circuit Playground Express

En este punto, CPX y NeoPixels están bastante completos. No es necesario realizar ningún otro trabajo mecánico o eléctrico con ellos. El resto es todo software.

El código se puede encontrar en mi cuenta de github. El código central de Python debería funcionar sin cambios para todos los sistemas operativos. No instale las bibliotecas externas de Adafruit CircuitPython. No se utilizan.

Aquí hay un resumen de alto nivel de lo que está sucediendo en el código.

¿Qué entrada hace qué?

  • Botón A: recorre las animaciones LED
  • Botón B: recorre las canciones.
  • Panel táctil capacitivo A1: cambia los colores de las animaciones LED
  • Panel táctil capacitivo A6: cambia la velocidad de las animaciones LED

Existen 3 animaciones pero solo 2 están en vigor

code.py

importar píxeles

#importar vumeter importar escaleras importar centelleo… led_animations = [pixelsoff. PixelsOff (píxeles), # vumeter. VuMeter (píxeles, 100, 400) escaleras. Stairs (píxeles), centelleo. Twinkle (píxeles)]

Porté el código de estilo del medidor Ampli-Tie VU. Utiliza el micrófono CPX para captar el sonido e iluminar los NeoPixels en función de la amplitud del sonido. Sin embargo, quería más animaciones. Debido a las limitaciones de la memoria en tiempo de ejecución, tuve que elegir qué animaciones quería. Entonces, por defecto, los otros dos, Stairs y Twinkle, se ejecutarán sin tener que hacer cambios en el código. Para ejecutar la animación del medidor de VU, es necesario comentar una o ambas animaciones y descomentar el medidor de VU.

Music Manager y codificación fuera de línea

frosty_the_snowman.py

importar notas_musicales como mn

# Frosty the Snowman # Canción de Walter E. Rollins = [(mn. G4, mn. HLF), (mn. E4, mn. DTQ), (mn. F4, mn. ETH), (mn. G4, mn. QTR), (mn. C5, mn. HLF),…

convert_to_binary.py

canciones = [(jingle_bells.song, "jingle_bells.bin"), (frosty_the_snowman.song, "frosty_the_snowman.bin")] para la canción en las canciones: data = song [0] file = song [1] with open (file, "wb") como bin_file: para entrada en datos: print ("escribiendo:" + str (entrada)) nota = entrada [0] dur = entrada [1] bin_file.write (struct.pack ("<HH", nota, dur))

Quería música navideña. El CPX admite WAV y tonos. Los archivos WAV resultaron ser demasiado grandes en términos de tamaño de archivo y memoria en tiempo de ejecución. El uso de estructuras de datos de Python para mantener los tonos y su duración también resultó usar demasiada memoria en tiempo de ejecución. Así que modifiqué el código Holi-Tie para leer un archivo binario comprimido que contenía solo los datos necesarios de la canción en un formato binario comprimido. Escribí un script que lee una canción contenida en una estructura de datos de Python y la escribe en formato binario. Tener la canción codificada como datos binarios en un archivo hace que la canción sea pequeña y dinámica. Una vez que la canción termina de reproducirse, se libera la memoria.

Es trivial agregar más canciones. Para obtener más información, consulte el archivo README.md en las canciones.

El botón A anima NeoPixels, B reproduce música, pero no simultáneamente

code.py

def button_a_pressed ():

if music.is_playing (): # Detener música si se reproduce music.stop () next_led_animation () def button_b_pressed (): if active_led_animation! = 0: # Ejecutar animación no operativa next_led_animation (0) if music.is_playing (): # Alternar música encendida o apagada music.stop () else: music.play ()

Incluso con el sistema de administración de música más eficiente en la memoria, no pude retener en la memoria de tiempo de ejecución 2 animaciones, mientras reproducía 1 de ellas y también reproducía una canción al mismo tiempo. Debido a que ya opté por no tener el medidor VU en la memoria de tiempo de ejecución, no quería reducir la cantidad de animaciones a solo 1. Así que escribí el código para que la animación se reproduzca o la música se reproduzca, pero no ambos. Otra opción era reducir la cantidad de NeoPixels, pero eso perdería algo de la frescura de la animación.

Funkiness del código Python

Aunque soy un desarrollador de software veterano, nunca había escrito Python. Después de dominarlo y comenzar a aplicar buenas prácticas de codificación, como encapsulación y modularización, descubrí rápidamente que estaba usando demasiada memoria en tiempo de ejecución. Así que hay bastante código que no es DRY. También tuve que usar algunas técnicas de MicroPython como const () para reducir aún más los problemas de memoria en tiempo de ejecución.

Módulos compilados

compilar

#! / bin / bash

compilador = ~ / desarrollo / circuitpython / mpy-cross-3.x-windows.exe cd canciones python3./convert_to_binary.py cd.. para f en *.py; hacer si

Al principio del proyecto seguí el consejo de Adafruit y almacené todas las bibliotecas Adafruit CircuitPython en flash. Esto, sin embargo, dejó poco espacio para mi proyecto. Para poder colocar mi código en el CPX, comencé a compilar los módulos y a colocarlos en la MCU. Resulta que Holi-Tie no necesita ninguna de las bibliotecas externas. Las bibliotecas existentes en la UF2 fueron suficientes para este proyecto. Ejecutar archivos *.mpy es un poco más eficiente, así que mantuve el proceso de implementación de los módulos compilados.

Como es evidente en el script de compilación anterior, estoy trabajando en una máquina con Windows pero usando utilidades de Unix como bash y python3. Uso Cygwin para lograr esto. Este script se puede traducir fácilmente a lotes de DOS y a una implementación nativa de Python3 de Windows.

Paso 8: abotonarse la corbata

Abotonando la corbata
Abotonando la corbata
Abotonando la corbata
Abotonando la corbata

El último paso es volver a colocar el núcleo de la corbata, volver a ensamblar la corbata y volver a coserla. Asegúrese de poder hacer que el CPX sea accesible. Lo necesitará cuando reemplace la batería o realice cambios de código.

Recomendado: