¿Cómo hago una mini guitarra digital?

imagen



En este artículo intentaré describir en términos generales el camino para crear un dispositivo desde la idea hasta la implementación de un prototipo utilizable.



Mi nombre es Dmitry Dudarev. Me dedico al desarrollo de la electrónica y me encanta crear varios dispositivos portátiles. También amo la música. Hace seis meses le pedí prestada una guitarra acústica a un amigo para intentar aprender a tocarla con lecciones y tablaturas de YouTube. Fue dificil. O hice algo mal, o lo intenté mal, o en la sociedad de mis ancestros, las habilidades motoras finas dañaron la reproducción. En cualquier caso, no me salió nada más que el sonido del traqueteo de cuerdas. Mi indignación se intensificó por la constante desafinación de las cuerdas. Y la gente que me rodeaba por milésima vez no se complacía en escuchar mi curva de Nada más importa.



Pero en esta agonía, no me olvidé de la regla principal del ingeniero electrónico. Si existe algo, entonces se puede insertar un microcontrolador allí. O al menos hacer una modificación electrónica portátil.





Idea



La estructura de la guitarra digital empezó a surgir en mi cabeza.



En primer lugar, hice una lista de requisitos para el dispositivo:



  1. El dispositivo debe simular una guitarra con 6 cuerdas y 12 trastes en el diapasón.
  2. Debe ser compacto, idealmente plegable para que pueda llevarlo a donde quiera que vaya
  3. Debe conectarse a todos los ejes populares: Android, IOS, Windows, Linux, MacOS y definirse allí como un dispositivo MIDI sin controladores
  4. Operación con batería
  5. La conexión debe realizarse de forma inalámbrica (pero como habrá un conector USB para la carga, deje que también se conecte a través del cable)
  6. ,
  7. , ,
  8. : hummer on, pull off, slide, vibrato
  9. midi 10


Por supuesto, para plataformas móviles, deberá escribir una aplicación en la que pueda seleccionar tablatura para aprender con LED, seleccionar un instrumento (acústica, clásica, guitarra eléctrica con varios filtros preestablecidos, etc.) y reproducir sonidos.



En teoría, debería obtener un instrumento compacto que se pueda tocar como una guitarra, sin defectos analógicos y equipado con un sistema de entrenamiento visual.

Suena realizable.



Análogos



Entonces, en primer lugar, armado con la idea de que hoy en día es casi imposible inventar algo nuevo y alguien ya lo ha hecho, voy a Google. De hecho, resultó que la primera guitarra digital se creó en 1981, pero debido a su funcionalidad limitada, no se usó ampliamente.







También existen guitarras midi compactas modernas, pero están diseñadas para un público objetivo más profesional, caras y, lo más importante, sin el modo "push the light". Incluso hay opciones exóticas con un iPad en lugar de cuerdas o que se parecen a una almeja.







Entonces puedes empezar.



Prueba de concepto



Decidí comenzar con una prueba de concepto. Un prototipo mínimo a toda prisa.

Primero debes decidir la base del elemento.



Controlador



En mis proyectos, uso principalmente STM32. Son potentes, baratos y asequibles. Elija STM32F042. Tiene un USB (y, con un oscilador interno especial de 48MHz para no colgar un cuarzo externo), un núcleo de 32 bits y todos los periféricos necesarios. Y todo esto por menos de un dólar.



Decidí dejar la conexión inalámbrica para la próxima iteración.



Cuerdas en la plataforma



Como cuerdas decidí imprimir lengüetas de plástico, fijarlas en potenciómetros con resortes y medir los ángulos de deflexión.



Modelado en sólido e impreso para evaluar la ergonomía.











Resultó bastante agradable al tacto. Deberia trabajar.



Sensores de cuello



Se supone que la guitarra tiene 6 cuerdas y 12 trastes. Se trata de un total de 72 sensores en el cuello y 6 más en la cubierta. Se podría usar un botón de marca en cada elemento, pero, en primer lugar, hacen clic y, en segundo lugar, no funcionará implementar técnicas como deslizamiento o vibrato. También me gustaría determinar la fuerza de presión.



Parece que las galgas extensométricas son las más adecuadas para esta tarea. Cambian su resistencia en función de la presión sobre el área de trabajo.







Resultó muy difícil encontrarlos a la venta en la cantidad adecuada y cuestan mucho. Tenía que ordenarle a Ali.



ADC



Se necesita un ADC para leer el estado de cada sensor. Solo hay algunos de ellos en STM, por lo que necesita algo más para sondear 78 sensores. Se pueden utilizar chips ADC multicanal externos, pero son demasiado caros. Por lo tanto, decidí instalar 5 multiplexores analógicos de 16 canales baratos CD74HC4067 y conectar un canal STM ADC a cada uno.



Tarifa



Hasta que pasen los calibres, comience a cablear la placa. Los cables del sensor son largos, por lo que tuvimos que superponerlos.















Antes de ordenar la impresión de cartón, decidí esperar las galgas extensométricas. Y resultó que no en vano.



De los 80 sensores, solo unos pocos estaban funcionando y luego con diferentes parámetros.







Se diferencian notablemente de la imagen en el sitio web del vendedor para peor.



¿Y qué esperaba al comprar productos electrónicos en Ali? ...



Y luego me di cuenta.



Después de todo, puede aplicar otro método de detección: la medición de capacitancia como en los sensores táctiles. Es mucho más económico y asequible. Y si diseña la mecánica correctamente, puede determinar el esfuerzo.



Bien. Borro todo lo que se hizo.







Empezar de nuevo



En la nueva versión de la prueba de concepto minimalista, elegí cilindros aserrados de una varilla de cobre de 4 mm y soldados a la placa como elementos sensores.



Ahora tenemos que averiguar cómo medir 78 contenedores.



Encuesta de sensores



Al buscar en Google, descubrí que hay muchos microcircuitos: controladores de teclados táctiles. Entre ellos, logramos encontrar un medidor de capacitancia de uso general de 12 canales barato. Mide la capacitancia en la escala de unidades de picofaradio, que debería ser suficiente para el circuito de medición de fuerza que planeo implementar en las próximas modificaciones.

Además, por si acaso, colgué en cada elemento del cuello un asiento para un botón o algo similar. E hizo recortes en el tablero para que no solo pudieras tocar el cilindro, sino también apretarlo dentro. Puedes experimentar con diferentes técnicas de juego.



El microcircuito está conectado a través de la interfaz I2C y tiene 2 pines de configuración que establecen la dirección. En consecuencia, se pueden colgar un máximo de 4 microcircuitos en un bus. Y necesito 12. No hay problema, los distribuyo en tres grupos y los conecto al bus STM a través de un multiplexor.



Tableros











Esta vez logramos ordenar el tablero e incluso esperar a su producción.



Después de sellar el kit, cilindros de cobre y potenciómetros, me di cuenta de que el diseño con cuerdas de plástico es demasiado complicado. Por eso, por ahora, decidí colgar los mismos cilindros sensores en la plataforma, pero más auténticos. Para no rehacer toda la placa, hice una pequeña superposición y la conecté al segundo bus I2C STM.







La pieza de hierro está lista. La siguiente tarea es hacerla jugar.



Software



El plan es el siguiente:



  1. Descargue un sintetizador virtual que pueda funcionar con dispositivos MIDI y producir sonidos de guitarra.
  2. Escriba un firmware que sondeará los sensores y transferirá los resultados a la computadora a través de la interfaz HID personalizada USB aproximadamente 100 veces por segundo.
  3. Escriba un programa de Python que reciba estos datos, emule un dispositivo MIDI virtual, genere paquetes MIDI y los envíe a un sintetizador virtual.


Decidí descubrir cómo pretender inmediatamente ser un dispositivo MIDI un poco más tarde.



¿Cómo reproducir el sonido?



Hay bastantes sintetizadores virtuales para Windows con soporte MIDI. Probé Ableton Live, RealGuitar, FL Studio, Kontakt. Paré en RealGuitar por su simplicidad y precisión solo para la guitarra. Incluso sabe cómo imitar las imperfecciones de la interpretación humana: el deslizamiento de los dedos sobre las cuerdas, los parámetros aleatorios de las notas.







Conexión a un sintetizador virtual



Para python logramos encontrar una biblioteca mido que puede emular un puerto midi virtual, que se puede conectar a la entrada de un sintetizador virtual a través de un emulador externo del cable midi “loopmidi”.







En la interfaz del programa, hice una visualización gráfica del nivel de capacitancia medido para cada sensor para simplificar el ajuste del filtro. Además, para el futuro, agregué controles para LED, un motor de vibración (aún no sé por qué, pero también estará en la guitarra), visualización del acelerómetro y el nivel de carga de la batería.







Para golpear las cuerdas de la guitarra para disparar las notas correctas, los 72 sensores en el diapasón deben asignarse a la nota adecuada.



Resultó que de 72 elementos en 12 trastes, solo 37 son notas únicas. Están organizados de acuerdo con una determinada estructura, por lo que en lugar de construir una mesa grande, fue posible derivar una ecuación simple, que da el número de la nota correspondiente por el número de sensor.







Prueba



Parece que todo está listo para la primera prueba. Era demasiado vago para cortar las varillas y soldar los 12 trastes, así que me limité al octavo. Momento de la verdad:





¡ESTÁ VIVO! Se ha confirmado la viabilidad del concepto. ¡Afortunadamente, no había límite! Pero no puedes relajarte.



El siguiente paso es agregar LED, acelerómetro, motor de vibración, batería, inalámbrico, carcasa y la capacidad de trabajar sin controladores o programas de emulación midi en todas las plataformas populares.



LED



Para conectar 84 LED, elegí la cadena tipo margarita más simple de 14 registros de desplazamiento de 8 bits. Es conveniente conectarlos al pin SPI MOSI del STM y enviar una matriz de datos vía DMA sin la participación del kernel.



Acelerómetro



No tenía ningún requisito especial para el acelerómetro, así que tomé el LIS3D más simple. Con él, la guitarra determinará su inclinación relativa al horizonte, lo que permitirá modular varios filtros de sonido a medida que juegas con los movimientos de tu mano.



Inalámbrico



Para la transmisión de datos inalámbrica decidí poner ESP32. Soporta varios protocolos Bluetooth y WI-FI, habrá algo con lo que experimentar (en ese momento no sabía todavía que en mi caso solo había una forma correcta de conectarme).



Cuerpo El



cuerpo debe ser plegable, por lo que la electrónica de la plataforma y el cuello debe dividirse en dos tablas y conectarse con un cable plano.



El encendido se producirá cuando se abra el cuerpo al acercar el imán del cuello al sensor Hall de la plataforma de la plataforma.



Empezando



Se ha trabajado mucho para experimentar con varios diseños de cuello táctil y difusores LED. Quería que toda la superficie del elemento brillara de manera uniforme, mientras mantenía la capacidad de detectar el tacto y presionar los botones.







Me dirigí a un amigo que se dedica profesionalmente al diseño industrial. Se nos ocurrió el diseño de la unidad de doblado de guitarra y luego él diseñó e imprimió un cuerpo prototipo.







Parece que todo está pensado, puedes empezar a cablear la placa.























Dispositivo MIDI



En la nueva versión, en primer lugar, quería que la guitarra fuera detectada como un dispositivo MIDI sin programas adicionales cuando se conectaba a través de USB.



Resultó que esto no es tan difícil de hacer, todas las especificaciones están en el sitio web oficial usb.org. Pero todos los algoritmos que se ejecutaron en el lado de la aplicación Python tuvieron que ser reescritos en C en el controlador.



Me sorprendió que funcionara de inmediato en todos los dispositivos. Windows 10, MacOS, Debian 9, Android (mediante adaptador USB). Simplemente conecte el cable y un dispositivo MIDI llamado "Sensy" aparecerá en el sistema y será reconocido por todos los sintetizadores. Todavía no he podido probar con un iPhone. sin adaptador. Pero debería funcionar de la misma manera.







Interfaz inalámbrica



El próximo desafío es hacer las cosas de forma inalámbrica.



Fui demasiado vago para buscar en Google de inmediato, así que pasé varios días probando varias interfaces inalámbricas. Descarté BLE de inmediato, porque en mi cabeza, la "baja energía" estaba fuertemente asociada con una tasa de paquetes baja. Probé WI-FI en modo cliente, WI-FI en modo hotspot, Bluetooth en modo SPP, etc. En todas partes había el mismo problema: un gran retraso (más de 100 ms por ojo) y la llegada de paquetes desigual a tiempo. Esto hizo que el juego fuera imposible.



Estaba a punto de darme por vencido y hacer un dongle separado que se adheriría al USB de un teléfono móvil o computadora y recibiría datos de una guitarra a través de una radio personalizada.



Pero luego me topé accidentalmente con las especificaciones de las nuevas versiones del protocolo BLE y vi que el intervalo mínimo de conexión es de 7,5 ms, lo que encaja perfectamente con mis requisitos.



Además, resultó que existe un protocolo BLE MIDI, que es compatible con todos los sistemas operativos nuevos y funciona sin ningún controlador como USB MIDI.



El único problema fue que un intervalo de conexión tan bajo y BLE MIDI en general solo son compatibles con plataformas relativamente nuevas. Los detalles están por verse, pero las pruebas con los dispositivos disponibles para mí fueron exitosas.



Algunos iPhones nuevos incluso vienen con un sintetizador virtual Garage Band preinstalado capaz de producir sonidos de guitarra de calidad (si no, puede descargarlo de la App Store de forma gratuita).



Firmware



Habiendo escrito toda la funcionalidad mínima necesaria, me basé exactamente en el tamaño del flash STM. Solo quedan libres 168 bytes. Obviamente, los dioses del silicio me favorecieron, así que voy en la dirección correcta.







Se podría profundizar en la optimización del código y reducir significativamente la cantidad de memoria ocupada, pero será más fácil en la próxima versión usar un controlador más grueso, que cuesta 5 centavos más y no pierde tiempo. Además, nunca se sabe qué otras funciones desea agregar.

Pero la funcionalidad mínima no es suficiente, aún necesitas trabajar con las técnicas del juego. En primer lugar, quiero implementar slide. Aquí es cuando comienzas a tocar una nota con un traste fijo y deslizas tu mano a lo largo del mástil, saltando de traste en traste.



Ya me divertí un poco con USB, así que puedes comentar todo el código asociado con él y liberar memoria. También puede probar de forma inalámbrica:





Con todos los LED encendidos, la guitarra se puede usar si se pierde en una cueva oscura.







¿Cuáles son las desventajas de este diseño?



  1. En los sensores, la presión no se mide en ninguna parte. Esto conlleva tres problemas:

    • Hay golpes aleatorios constantes de cuerdas adyacentes tanto en la plataforma como en el diapasón. Esto hace que el juego sea muy desafiante.
    • Todas las notas tocadas se reproducen al mismo volumen. La mayoría de los sujetos no se dan cuenta de esto, pero me gustaría tocar más cerca de una guitarra real.
    • Incapacidad para usar técnicas de martillo encendido, extracción y vibrato
  2. LED de un solo color. Esto limita la claridad al tocar la tablatura. Me gustaría poder indicar diferentes métodos de juego en diferentes colores.
  3. . – . , , , .
  4. . , , , .
  5. . , .


.



Me estoy moviendo al controlador de la serie STM32F07. Ya tiene 128 KB de flash, suficiente para cualquier funcionalidad. E incluso para los huevos de Pascua.



Usar ESP32 en la versión final de la guitarra sería demasiado atrevido, así que fui a buscar algo más ortodoxo. La elección recayó en NRF52 en términos de accesibilidad, disponibilidad de documentación y adecuación del sitio.



Por supuesto, también se implementarán tres grandes innovaciones:



  • Los LED ahora son RGB,
  • habrá medición de fuerza en cada sensor de la barra (los botones táctiles ya no son necesarios),
  • las cuerdas de la caja de resonancia se moverán.


Por el momento, la tabla de la plataforma se ve así (dejé la huella ESP por si acaso):





El proyecto se llama Sensy y actualmente se encuentra en desarrollo activo. Ya existe plena confianza en que se implementará toda la funcionalidad planificada, por lo que se tomó una decisión sobre el desarrollo posterior.



Estamos en San Petersburgo, ahora el equipo consta de dos personas: yo me ocupo de la parte técnica, mi socio: marketing, finanzas, cuestiones legales.



Si entre los lectores hay Jedi en el campo del diseño de cascos o desarrollo móvil que quieran unirse al proyecto, escríbame donde y cuando quiera.



¿Quién está interesado en seguir las noticias del proyecto? Deje un correo en el formulario del sitio y suscríbase a las redes sociales.



¡Realmente espero recibir comentarios de la Habrasocommunity con comentarios y sugerencias!



Un episodio divertido del proceso de desarrollo.
NRF52, UART. . , , , .



– «N» ascii. 0x4E, . – «O». . baud rate? , – «N». , «NON GENUINE DEVICE FOUND».



NRF- ? . , ? - . , NON GENUINE DEVICE?



, , ftdi , USB-UART , . , . , .



.



¡Gracias por su atención!



All Articles