Como faço uma mini-guitarra digital

imagem



Neste artigo, tentarei descrever em termos gerais o caminho da criação de um dispositivo, desde a ideia até a implementação de um protótipo utilizável.



Meu nome é Dmitry Dudarev. Estou envolvida no desenvolvimento de eletrônicos e adoro criar vários dispositivos portáteis. Eu também adoro música. Seis meses atrás, eu peguei emprestado um violão de um amigo para tentar aprender a tocá-lo com as aulas e tablaturas do YouTube. Foi difícil. Ou eu fiz algo errado, ou tentei mal, ou na sociedade de meus ancestrais, a coordenação motora fina prejudicava a reprodução. Em qualquer caso, nada além do som de cordas chacoalhando saiu para mim. Minha indignação foi intensificada pela constante desafinação das cordas. E as pessoas ao meu redor, pela milésima vez, não deram prazer em ouvir minha curva de Nada mais importa.



Mas nessa agonia, não me esqueci da regra principal do engenheiro eletrônico. Se algo existir, você pode inserir um microcontrolador lá. Ou pelo menos faça uma modificação eletrônica portátil.





Idéia



A estrutura da guitarra digital começou a surgir na minha cabeça.



Em primeiro lugar, fiz uma lista de requisitos para o dispositivo:



  1. O aparelho deve simular uma guitarra com 6 cordas e 12 trastes no braço da guitarra
  2. Deve ser compacto, idealmente dobrável para que você possa levá-lo aonde quer que vá
  3. Deve se conectar a todos os eixos populares - Android, IOS, Windows, Linux, MacOS e ser definido como um dispositivo MIDI sem nenhum driver
  4. Operação de bateria
  5. A conexão deve ser feita sem fio (mas, como haverá um conector USB para carregar, deixe-o também ser conectado por meio do fio)
  6. ,
  7. , ,
  8. : hummer on, pull off, slide, vibrato
  9. midi 10


Claro, para plataformas móveis, você precisará escrever um aplicativo no qual possa selecionar tablatura para ensino com LEDs, selecionar um instrumento (acústica, clássica, guitarra elétrica com vários filtros predefinidos, etc.) e reproduzir sons.



Teoricamente, você deveria conseguir um instrumento compacto que pudesse ser tocado como uma guitarra, sem falhas analógicas e equipado com um sistema de treinamento visual.

Parece realizável.



Análogos



Então, antes de mais nada, armado com o pensamento de que em nosso tempo é quase impossível inventar algo novo e alguém já o fez, vou ao google. Na verdade, descobriu-se que a primeira guitarra digital foi criada em 1981, mas devido à funcionalidade limitada, ela não foi amplamente utilizada.







Também existem guitarras midi compactas modernas, mas são projetadas para um público-alvo mais profissional, caras e, o mais importante, sem o modo "push the light". Existem até opções exóticas com um iPad em vez de cordas, ou semelhante a um molusco.







Então você pode começar.



Prova de conceito



Decidi começar com uma prova de conceito. Um protótipo mínimo com pressa.

Primeiro você precisa decidir sobre a base do elemento.



Controlador



Em meus projetos, uso principalmente o STM32. Eles são poderosos, baratos e acessíveis. Escolha STM32F042. Possui USB (com oscilador interno especial de 48 MHz para não travar um quartzo externo), núcleo de 32 bits e todos os periféricos necessários. E tudo isso por menos de um dólar.



Decidi deixar a conexão sem fio para a próxima iteração.



Cordas no deck



Como cordas resolvi imprimir palhetas de plástico, fixá-las em potenciômetros com molas e medir os ângulos de deflexão.



Modelado em sólido e impresso para avaliar a ergonomia.











Ficou muito bom ao toque. Deveria trabalhar.



Sensores de pescoço



A guitarra deve ter 6 cordas e 12 trastes. Isso é um total de 72 sensores no pescoço e mais 6 no convés. Seria possível usar um botão de marcação em cada elemento, mas, em primeiro lugar, eles clicam e, em segundo lugar, não adianta implementar técnicas como slide ou vibrato. Eu também gostaria de determinar a força de pressão.



Parece que os medidores de tensão são os mais adequados para essa tarefa. Eles mudam sua resistência dependendo da pressão na área de trabalho.







Acabou sendo muito difícil encontrá-los à venda na quantidade certa e custam muito caro. Eu tive que pedir Ali.



ADC



Um ADC é necessário para ler o status de cada sensor. Existem apenas alguns deles no STM, então você precisará de algo mais para pesquisar 78 sensores. Os chips ADC multicanal externos podem ser usados, mas são muito caros. Portanto, decidi instalar 5 multiplexadores analógicos de 16 canais baratos CD74HC4067 e conectar um canal STM ADC a cada um.



Taxa



Até ir medidores, comece a fiação da placa. Os fios do sensor são longos, então tivemos que sobrepô-los.















Antes de solicitar a impressão do cartão, decidi esperar pelos extensômetros. E, como se viu, não foi em vão.



Dos 80 sensores, apenas alguns estavam funcionando, e então com parâmetros diferentes.







Eles diferem da imagem no site do vendedor visivelmente para pior.



E o que eu esperava ao comprar eletrônicos na Ali? ..



E então me ocorreu.



Afinal, você pode aplicar outro método de detecção - medir a capacitância como em sensores de toque. É muito mais barato e acessível. E se a mecânica for projetada corretamente, o esforço pode ser determinado.



Bem. Eu apago tudo o que foi feito.







Começando de novo



Na nova versão da prova de conceito minimalista, escolhi cilindros serrados de uma haste de cobre de 4 mm e soldados à placa como elementos sensores.



Agora precisamos descobrir como medir 78 contêineres.



Levantamento de sensores Pesquisando



um pouco no Google, descobri que existem muitos microcircuitos - controladores de teclados sensíveis ao toque. Entre eles, encontramos um medidor de capacitância de uso geral de 12 canais barato. Ele mede a capacitância na escala de unidades de picofarad, que deve ser suficiente para o circuito de medição de força que pretendo implementar nas próximas modificações.

Além disso, por precaução, pendurei em cada elemento de pescoço um assento para um botão ou algo semelhante. E ele fez recortes na placa para que você pudesse não apenas tocar o cilindro, mas também apertá-lo dentro. Você pode experimentar diferentes técnicas de jogo.



O microcircuito é conectado via interface I2C e possui 2 pinos de configuração que definem o endereço. Consequentemente, um máximo de 4 microcircuitos podem ser pendurados em um barramento. E preciso de 12. Sem problemas, eu os distribuo em três grupos e os conecto ao barramento STM por meio de um multiplexador.



Pranchas











Desta vez conseguimos encomendar a prancha e até aguardar a sua produção.



Depois de lacrar o kit, cilindros de cobre e potenciômetros, percebi que o desenho com cordas plásticas é muito complicado. Portanto, por enquanto, decidi pendurar os mesmos cilindros sensores no convés, porém mais autênticos. Para não refazer a placa inteira, fiz um pequeno overlay e conectei ao segundo barramento I2C STM.







O pedaço de ferro está pronto. A próxima tarefa é fazê-la jogar.



Programas



O plano é o seguinte:



  1. Baixe um sintetizador virtual que pode funcionar com dispositivos MIDI e produzir sons de guitarra.
  2. Escreva um firmware que pesquisará os sensores e transferirá os resultados para o computador por meio da interface USB HID personalizada cerca de 100 vezes por segundo.
  3. Escreva um programa python que receberá esses dados, emulará um dispositivo MIDI virtual, gerará pacotes MIDI e os enviará a um sintetizador virtual.


Decidi descobrir como fingir ser um dispositivo MIDI um pouco mais tarde.



Como reproduzir o som?



Existem muitos sintetizadores virtuais para Windows com suporte a MIDI. Tentei Ableton ao vivo, RealGuitar, FL studio, Kontakt. Parei no RealGuitar por sua simplicidade e precisão para o violão. Ele até sabe imitar as imperfeições do toque humano - o deslizar dos dedos sobre as cordas, os parâmetros aleatórios das notas.







Conectando a um sintetizador virtual



Para o python, conseguimos encontrar uma biblioteca mido que pode emular uma porta midi virtual, que pode ser conectada à entrada de um sintetizador virtual através de um emulador externo do cabo midi “loopmidi”.







Na interface do programa, fiz uma exibição gráfica do nível de capacitância medido para cada sensor para simplificar o ajuste do filtro. Além disso, para o futuro, acrescentei controles para LEDs, motor de vibração (não sei por que ainda, mas também será na guitarra), visualização do acelerômetro e do nível de carga da bateria.







Para acertar as cordas da guitarra para acionar as notas corretas, todos os 72 sensores no braço da guitarra devem ser mapeados para a nota apropriada.



Descobriu-se que de 72 elementos em 12 trastes, apenas 37 são notas exclusivas. Eles são organizados de acordo com uma determinada estrutura, portanto, ao invés de construir uma grande mesa, foi possível derivar uma equação simples, que dá o número da nota correspondente pelo número do sensor.







Teste



Parece que tudo está pronto para o primeiro teste. Eu estava com preguiça de ver as hastes e soldar todos os 12 trastes, então me limitei ao 8º. Momento da verdade:





ESTÁ VIVO! A viabilidade do conceito foi confirmada. Felizmente, não havia limite! Mas você não consegue relaxar.



O próximo passo é adicionar LEDs, acelerômetro, motor de vibração, bateria, wireless, case e a capacidade de trabalhar sem drivers ou programas de emulação de midi em todas as plataformas populares.



LEDs



Para conectar 84 LEDs, escolhi a cadeia mais simples de 14 registradores de deslocamento de 8 bits. É conveniente conectá-los ao pino SPI MOSI do STM e enviar um array de dados via DMA sem a participação do kernel.



Acelerômetro



Eu não tinha nenhum requisito especial para o acelerômetro, então peguei o LIS3D mais simples. Com ele, o violão determinará sua inclinação em relação ao horizonte, o que permitirá modular vários filtros de som conforme você toca com os movimentos das mãos.



Sem fio



Para transmissão de dados sem fio, decidi colocar o ESP32. Suporta vários protocolos Bluetooth e WI-FI, haverá algo para experimentar (na altura ainda não sabia que no meu caso só havia uma forma correcta de ligar).



Corpo O



corpo deve ser dobrável, de modo que os componentes eletrônicos do deck e do braço devem ser divididos em duas placas e conectados com um cabo de fita.



A ativação ocorrerá quando o corpo for aberto, trazendo o ímã no pescoço para mais perto do sensor Hall na placa do deck.



Começando



Muito trabalho foi feito experimentando vários designs de pescoço tátil e difusores de LED. Eu queria que toda a superfície do elemento brilhasse uniformemente, mantendo a capacidade de detectar o toque e pressionar os botões.







Procurei um amigo que trabalha profissionalmente com design industrial. Nós criamos o design da unidade de dobra da guitarra, após o qual ele projetou e imprimiu um protótipo do corpo.







Parece que tudo está pensado, você pode começar a conectar a placa.























Dispositivo MIDI



Na nova versão, em primeiro lugar, eu queria que a guitarra fosse detectada como um dispositivo MIDI sem nenhum programa extra quando conectada via USB.



Descobriu-se que isso não é tão difícil de fazer, todas as especificações estão no site oficial usb.org. Mas todos os algoritmos executados no lado do aplicativo Python tiveram que ser reescritos em C no controlador.



Fiquei surpreso ao ver que funcionou imediatamente em todos os dispositivos. Windows 10, MacOS, Debian 9, Android (via adaptador USB). Basta conectar o fio e um dispositivo MIDI chamado "Sensy" aparecerá no sistema e será reconhecido por todos os sintetizadores. Ainda não consegui testar com um iPhone. sem adaptador. Mas deve funcionar da mesma maneira.







Interface sem fio



O próximo desafio é fazer as coisas sem fio.



Eu estava com preguiça de pesquisar no Google imediatamente, então passei vários dias testando várias interfaces sem fio. Eu dispensei BLE imediatamente, porque na minha cabeça, "baixa energia" estava fortemente associada à baixa taxa de pacotes. Tentei WI-FI no modo cliente, WI-FI no modo hotspot, Bluetooth no modo SPP, etc. Em todos os lugares havia o mesmo problema - um grande atraso (mais de 100 ms por olho) e chegada irregular de pacotes no tempo. Isso tornava o jogo impossível.



Eu estava prestes a desistir e fazer um dongle separado que poderia ser inserido no USB de um telefone celular ou computador e receber dados de uma guitarra por meio de um rádio personalizado.



Mas então eu acidentalmente tropecei nas especificações das novas versões do protocolo BLE e vi que o intervalo mínimo de conexão é de 7,5ms, o que se encaixa perfeitamente nos meus requisitos.



Além disso, descobriu-se que existe um protocolo BLE MIDI, que é compatível com todos os novos sistemas operacionais e funciona sem nenhum driver, como o USB MIDI.



O único problema é que esse intervalo de conexão baixo e BLE MIDI em geral são suportados apenas por plataformas relativamente novas. Os detalhes ainda estão por ver, mas os testes com os dispositivos disponíveis para mim foram bem-sucedidos.



Alguns iPhones novos vêm com um sintetizador Garage Band virtual pré-instalado, capaz de produzir sons de guitarra de qualidade (se não, você pode baixá-lo gratuitamente na App Store).



Firmware



Tendo escrito todas as funcionalidades mínimas necessárias, descansei exatamente no tamanho do flash STM. Apenas 168 bytes permanecem livres. Obviamente, os deuses do silício me favoreceram, o que significa que estou indo na direção certa.







Seria possível se aprofundar na otimização do código e reduzir significativamente a quantidade de memória ocupada, mas será mais fácil na próxima versão usar um controlador mais grosso, que custa 5 centavos a mais e não perde tempo. Além disso, você nunca sabe quais outros recursos deseja adicionar.

Mas a funcionalidade mínima não é suficiente, você ainda precisa trabalhar com as técnicas do jogo. Em primeiro lugar, quero implementar o slide. É quando você começa a tocar uma nota com uma certa casa fechada e desliza sua mão ao longo do braço, pulando de casa em casa.



Já me diverti um pouco com o USB, então você pode comentar todo o código associado a ele e liberar memória. Você também pode testar sem fio:





Com todos os LEDs ligados, a guitarra pode ser usada se você se perder em uma caverna escura.







Quais são as desvantagens deste design?



  1. Nos sensores, a pressão não é medida em lugar nenhum. Isso envolve três problemas:

    • Há batidas aleatórias constantes de cordas adjacentes no convés e na escala. Isso torna o jogo muito desafiador.
    • Todas as notas tocadas são tocadas no mesmo volume. A maioria dos sujeitos não percebe isso, mas eu gostaria de tocar mais perto de um violão de verdade.
    • Incapacidade de usar técnicas de martelo, arrancar e vibrato
  2. LEDs de cor única. Isso limita a clareza ao tocar a tablatura. Gostaria de poder indicar diferentes métodos de jogo em cores diferentes.
  3. . – . , , , .
  4. . , , , .
  5. . , .


.



Estou mudando para o controlador da série STM32F07. Ele já possui 128 KB de flash - o suficiente para qualquer funcionalidade. E até para ovos de Páscoa.



Usar ESP32 na versão final do violão seria muito ousado, então procurei algo mais ortodoxo. A escolha recaiu sobre o NRF52 em termos de acessibilidade, disponibilidade de documentação e adequação do local.



Claro, três grandes inovações também serão implementadas:



  • LEDs agora são RGB,
  • haverá medição de força em cada sensor da barra (os botões táteis não são mais necessários),
  • as cordas da mesa de ressonância se moverão.


No momento, o tabuleiro do deck se parece com isto (deixei a pegada do ESP para o caso):





O projeto se chama Sensy e está atualmente em desenvolvimento ativo. Já existe total confiança de que todas as funcionalidades planejadas serão implementadas, portanto, foi tomada uma decisão sobre o desenvolvimento futuro.



Estamos em São Petersburgo, agora a equipe é formada por duas pessoas: Eu lido com a parte técnica, meu parceiro - marketing, finanças, questões jurídicas.



Se entre os leitores houver Jedi da área de design de cascos ou desenvolvimento móvel que desejam se juntar ao projeto, escreva para mim onde e quando quiser.



Quem tiver interesse em acompanhar as novidades do projeto - deixe e-mail no formulário no site e cadastre-se nas redes sociais.



Eu realmente espero um feedback da Habrasocommunity com comentários e sugestões!



Um episódio engraçado do processo de desenvolvimento
NRF52, UART. . , , , .



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



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



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



.



Obrigado pela atenção!



All Articles