Dans cet article, je vais essayer de décrire en termes généraux le chemin de la création d'un appareil de l'idée à la mise en œuvre d'un prototype utilisable.
Je m'appelle Dmitry Dudarev. Je suis engagé dans le développement de l'électronique et j'aime vraiment créer divers appareils portables. J'aime aussi la musique. Il y a six mois, j'ai emprunté une guitare acoustique à un ami pour essayer d'apprendre à la jouer à partir de leçons et de tablatures YouTube. C'était difficile. Soit j'ai fait quelque chose de mal, soit j'ai mal essayé, soit dans la société de mes ancêtres, la motricité fine a nui à la reproduction. En tout cas, rien d'autre que les sons de cordes cliquetis ne m'est venu. Mon indignation a été intensifiée par le désaccord constant des cordes. Et les gens autour de moi pour la millième fois, écouter ma courbe de Rien d'autre ne compte n'a pas fait plaisir.
Mais dans ces agonie, je n'ai pas oublié la règle principale de l'ingénieur en électronique. Si quelque chose existe, un microcontrôleur peut y être inséré. Ou au moins faire une modification électronique portable.
Idée
La structure de la guitare numérique a commencé à émerger dans ma tête.
Tout d'abord, j'ai fait une liste des exigences pour l'appareil:
- L'appareil doit simuler une guitare avec 6 cordes et 12 frettes sur le manche
- Doit être compact, idéalement pliable pour que vous puissiez l'emporter partout avec vous
- Devrait se connecter à tous les axes populaires - Android, IOS, Windows, Linux, MacOS et y être défini comme un périphérique MIDI sans aucun pilote
- Fonctionnement sur batterie
- La connexion doit être établie sans fil (mais comme il y aura un connecteur USB pour le chargement, laissez-le également être connecté via le fil)
- ,
- , ,
- : hummer on, pull off, slide, vibrato
- midi 10
Bien sûr, pour les plates-formes mobiles, vous devrez écrire une application dans laquelle vous pourrez sélectionner une tablature pour l'apprentissage avec des LED, sélectionner un instrument (acoustique, classique, guitare électrique avec différents préréglages de filtres, etc.) et jouer des sons.
En théorie, vous devriez obtenir un instrument compact qui peut être joué comme une guitare, dépourvu de défauts analogiques et équipé d'un système d'entraînement visuel.
Cela semble réalisable.
Analogues
Alors, tout d'abord, armé de l'idée que de nos jours, il est presque impossible de trouver quelque chose de nouveau et que quelqu'un l'a déjà fait, je google. En effet, il s'est avéré que la première guitare numérique a été créée en 1981, mais en raison de fonctionnalités limitées, elle n'a pas été largement utilisée.
Des guitares midi compactes modernes existent également, mais sont conçues pour un public cible plus professionnel, onéreuses et, surtout, sans le mode «push the light». Il existe même des options exotiques avec un iPad au lieu de cordes ou ressemblant à une palourde.
Alors vous pouvez commencer.
Preuve de concept
J'ai décidé de commencer par une preuve de concept. Un prototype minimal pressé.
Vous devez d'abord décider de la base de l'élément.
Contrôleur
Dans mes projets, j'utilise principalement STM32. Ils sont puissants, bon marché et abordables. Choisissez STM32F042. Il dispose d'un USB (et, avec un oscillateur interne spécial de 48 MHz pour ne pas accrocher un quartz externe), d'un cœur 32 bits et de tous les périphériques nécessaires. Et tout cela pour moins d'un dollar.
J'ai décidé de quitter la connexion sans fil pour la prochaine itération.
Les cordes sur le pont
Comme les cordes, j'ai décidé d'imprimer des anches en plastique, de les fixer sur des potentiomètres à ressorts et de mesurer les angles de déflexion.
Modélisé en solide et imprimé pour évaluer l'ergonomie.
Il s'est avéré assez agréable au toucher. Devrait marcher.
Capteurs de manche
La guitare est censée avoir 6 cordes et 12 frettes. C'est un total de 72 capteurs sur le cou et 6 autres sur le pont. On pourrait utiliser un bouton à cocher sur chaque élément, mais, d'une part, ils cliquent, et d'autre part, cela ne fonctionnera pas pour implémenter des techniques comme le slide ou le vibrato. Je voudrais également déterminer la force de pression.
Il semble que les jauges de contrainte soient les mieux adaptées à cette tâche. Ils modifient leur résistance en fonction de la pression exercée sur la zone de travail.
Il s'est avéré très difficile de les trouver en vente dans la bonne quantité, et ils coûtent cher. J'ai dû commander sur Ali.
ADC
Un ADC est nécessaire pour lire l'état de chaque capteur. Il n'y en a que quelques-uns dans STM, vous aurez donc besoin d'autre chose pour interroger 78 capteurs. Des puces ADC multicanaux externes pourraient être utilisées, mais elles sont trop chères. Par conséquent, j'ai décidé d'installer 5 multiplexeurs analogiques 16 canaux bon marché CD74HC4067 et de connecter un canal ADC STM à chacun.
Frais
Jusqu'au passage des jauges, démarrez le tableau de câblage. Les fils du capteur sont longs, nous avons donc dû les chevaucher.
Avant de commander l'impression de la carte, j'ai décidé d'attendre les jauges de contrainte. Et, comme il s'est avéré, pas en vain.
Sur les 80 capteurs, seuls quelques-uns fonctionnaient, puis avec des paramètres différents.
Ils diffèrent sensiblement de l'image sur le site Web du vendeur pour le pire.
Et à quoi m'attendais-je en achetant de l'électronique sur Ali? ..
Et puis il m'est apparu.
Après tout, vous pouvez appliquer une autre méthode de détection - mesurer la capacité comme dans les capteurs tactiles. C'est beaucoup moins cher et plus abordable. Et si la mécanique est correctement conçue, l'effort peut être déterminé.
Bien. Je supprime tout ce qui a été fait.
Recommencement
Dans la nouvelle version de la preuve de concept minimaliste, j'ai choisi des cylindres sciés à partir d'une tige de cuivre de 4 mm et soudés à la carte comme éléments de détection.
Nous devons maintenant déterminer comment mesurer 78 conteneurs.
Enquête sur les capteurs
Un peu sur Google, j'ai découvert qu'il existe de nombreux microcircuits - contrôleurs de claviers tactiles. Parmi eux, nous avons réussi à trouver un capacimètre bon marché à 12 canaux à usage général. Il mesure la capacité en unités picofarad, ce qui devrait être suffisant pour le circuit de mesure de force que je prévois de mettre en œuvre dans les prochaines modifications.
De plus, juste au cas où, j'ai accroché sur chaque élément du cou un siège pour un bouton ou quelque chose de similaire. Et il a fait des découpes dans la planche pour que vous puissiez non seulement toucher le cylindre, mais aussi le presser à l'intérieur. Vous pouvez expérimenter différentes techniques de jeu.
Le microcircuit est connecté via l'interface I2C et dispose de 2 broches de configuration qui définissent l'adresse. En conséquence, un maximum de 4 microcircuits peuvent être accrochés sur un bus. Et j'en ai besoin de 12. Pas de problème, je les répartis en trois groupes et les connecte au bus STM via un multiplexeur.
Planches
Cette fois, nous avons réussi à commander la planche et même à attendre sa production.
Après avoir scellé le kit, les cylindres en cuivre et les potentiomètres, je me suis rendu compte que la conception avec des cordes en plastique était trop compliquée. Par conséquent, pour l'instant, j'ai décidé d'accrocher les mêmes cylindres de capteur sur le pont, mais en plus authentique. Afin de ne pas refaire toute la carte, j'ai fait une petite superposition et l'ai connectée au deuxième bus I2C STM.
Le morceau de fer est prêt. La tâche suivante est de la faire jouer.
Logiciel
Le plan est le suivant:
- Téléchargez un synthétiseur virtuel qui peut fonctionner avec des appareils MIDI et produire des sons de guitare.
- Écrivez un micrologiciel qui interrogera les capteurs et transférera les résultats vers l'ordinateur via l'interface USB HID personnalisée environ 100 fois par seconde.
- Écrivez un programme en python qui recevra ces données, émulera un appareil MIDI virtuel, générera des paquets MIDI et les enverra à un synthétiseur virtuel.
J'ai décidé de trouver un peu plus tard comment faire semblant d'être un appareil MIDI.
Comment reproduire le son?
Il existe de nombreux synthétiseurs virtuels pour Windows avec prise en charge MIDI. J'ai essayé Ableton live, RealGuitar, FL studio, Kontakt. Je me suis arrêté chez RealGuitar à cause de sa simplicité et de sa précision pour la guitare. Il sait même imiter les imperfections du jeu humain - le glissement des doigts sur les cordes, les paramètres aléatoires des notes.
Connexion à un synthétiseur virtuel
Pour python, nous avons réussi à trouver une bibliothèque mido qui peut émuler un port midi virtuel, qui peut être connecté à l'entrée d'un synthétiseur virtuel via un émulateur externe du câble midi «loopmidi».
Dans l'interface du programme, j'ai fait un affichage graphique du niveau de capacité mesuré pour chaque capteur pour simplifier l'ajustement du filtre. Aussi, pour l'avenir, j'ai ajouté des commandes pour les LED, un moteur de vibration (je ne sais pas encore pourquoi, mais ce sera aussi dans la guitare), la visualisation de l'accéléromètre et le niveau de charge de la batterie.
Afin de frapper les cordes de guitare pour déclencher les notes correctes, les 72 capteurs sur le manche doivent être mappés sur la note appropriée.
Il s'est avéré que sur 72 éléments à 12 frettes, seuls 37 sont des notes uniques. Ils sont disposés selon une certaine structure, donc au lieu de construire une grande table, il était possible de dériver une équation simple, qui donne le numéro de la note correspondante par le numéro du capteur.
Tester
Il semble que tout est prêt pour le premier test. J'étais trop paresseux pour voir les tiges et souder les 12 frettes, alors je me suis limité à la 8e. Moment de vérité:
C'EST VIVANT! La viabilité du concept a été confirmée. Heureusement, il n'y avait pas de limite! Mais tu ne peux pas te détendre.
La prochaine étape consiste à ajouter des LED, un accéléromètre, un moteur de vibration, une batterie, sans fil, un boîtier et la possibilité de travailler sans pilotes ni programmes d'émulation midi sur toutes les plates-formes populaires.
LED
Pour connecter 84 LED, j'ai choisi la connexion en guirlande la plus simple de 14 registres à décalage 8 bits. Il est pratique de les connecter à la broche SPI MOSI du STM et d'envoyer un tableau de données via DMA sans la participation du noyau.
Accéléromètre
Je n'avais aucune exigence particulière pour l'accéléromètre, j'ai donc pris le LIS3D le plus simple. Avec lui, la guitare déterminera son inclinaison par rapport à l'horizon, ce qui permettra de moduler divers filtres sonores au fur et à mesure que vous jouez avec les mouvements de votre main.
Sans fil
Pour la transmission de données sans fil, j'ai décidé de mettre ESP32. Il prend en charge divers protocoles Bluetooth et WI-FI, il y aura quelque chose à expérimenter (à ce moment-là, je ne savais pas encore que dans mon cas, il n'y avait qu'une seule bonne façon de se connecter).
Corps Le
corps doit être pliable, donc l'électronique du pont et du cou doit être divisée en deux cartes et connectée avec un câble ruban.
La mise sous tension se produit lorsque le corps est ouvert en rapprochant l'aimant du cou du capteur Hall sur la planche de terrasse.
Commencer
Beaucoup de travail a été fait pour expérimenter divers modèles de cols tactiles et diffuseurs LED. Je voulais que toute la surface de l'élément brille uniformément, tout en conservant la capacité de détecter le toucher et d'appuyer sur les boutons.
Je me suis tourné vers un ami qui est professionnellement engagé dans le design industriel. Nous avons mis au point la conception de l'unité de pliage de guitare, après quoi il a conçu et imprimé un corps prototype.
Il semble que tout est pensé, vous pouvez commencer à câbler la carte.
Appareil MIDI
Dans la nouvelle version, tout d'abord, je voulais que la guitare soit détectée comme un appareil MIDI sans aucun programme supplémentaire lorsqu'elle est connectée via USB.
Il s'est avéré que ce n'est pas si difficile à faire, toutes les spécifications sont sur le site officiel usb.org. Mais tous les algorithmes qui étaient exécutés du côté de l'application Python ont dû être réécrits en C dans le contrôleur.
J'ai été surpris que cela fonctionne immédiatement sur tous les appareils. Windows 10, MacOS, Debian 9, Android (via un adaptateur USB). Branchez simplement le câble et un appareil MIDI nommé "Sensy" apparaît dans le système et est reconnu par tous les synthétiseurs. Je n'ai pas encore pu tester avec un iPhone. pas d'adaptateur. Mais cela devrait fonctionner de la même manière.
Interface sans fil
Le prochain défi consiste à faire les choses sans fil.
J'étais trop paresseux pour google tout de suite, j'ai donc passé plusieurs jours à tester diverses interfaces sans fil. J'ai immédiatement rejeté BLE, car dans ma tête, "Low energy" était fortement associé à un faible débit de paquets. Essayé WI-FI en mode client, WI-FI en mode hotspot, Bluetooth en mode SPP, etc. Partout, il y avait le même problème - un énorme retard (plus de 100 ms par œil) et une arrivée irrégulière des paquets dans le temps. Cela a rendu le jeu impossible.
J'étais sur le point d'abandonner et de créer un dongle séparé qui serait inséré dans la clé USB d'un téléphone portable ou d'un ordinateur et recevrait les données d'une guitare via une radio personnalisée.
Mais ensuite, je suis tombé par hasard sur les spécifications des nouvelles versions du protocole BLE et j'ai vu que l'intervalle de connexion minimum est de 7,5 ms, ce qui correspond parfaitement à mes besoins.
De plus, il s'est avéré qu'il existe un protocole MIDI BLE, qui est pris en charge par tous les nouveaux systèmes d'exploitation et fonctionne sans aucun pilote, tout comme USB MIDI.
Le seul problème était qu'un intervalle de connexion aussi faible et BLE MIDI en général ne sont pris en charge que par des plates-formes relativement nouvelles. Les détails restent à voir, mais les tests avec les appareils dont je dispose ont été couronnés de succès.
Certains nouveaux iPhones sont même livrés avec un synthétiseur virtuel Garage Band préinstallé capable de produire des sons de guitare de qualité (sinon, vous pouvez le télécharger gratuitement sur l'App Store).
Micrologiciel
Après avoir écrit toutes les fonctionnalités minimales nécessaires, je me suis reposé exactement sur la taille du flash STM. Seuls 168 octets restent libres. Évidemment, les dieux du silicium m'ont favorisé, alors je vais dans la bonne direction.
Nous pourrions approfondir l'optimisation du code et réduire considérablement la quantité de mémoire occupée, mais il sera plus facile dans la prochaine version d'utiliser un contrôleur plus épais qui coûte 5 cents de plus et ne perd pas de temps. De plus, vous ne savez jamais quelles autres fonctionnalités vous souhaitez ajouter.
Mais la fonctionnalité minimale ne suffit pas, il faut tout de même travailler avec les techniques du jeu. Tout d'abord, je veux mettre en œuvre la diapositive. C'est à ce moment que vous commencez à jouer une note avec une certaine frette serrée et que vous glissez votre main le long du cou, sautant de frette en frette.
Je me suis déjà amusé avec l'USB, vous pouvez donc commenter tout le code associé et libérer de la mémoire. Vous pouvez également tester sans fil:
Avec toutes les LED allumées, la guitare peut être utilisée si vous vous perdez dans une grotte sombre.
Quels sont les inconvénients de cette conception?
- Sur les capteurs, la pression n'est mesurée nulle part. Cela entraîne trois problèmes:
- Il y a des frappes aléatoires constantes de cordes adjacentes à la fois sur le pont et sur le manche. Cela rend le jeu très difficile.
- Toutes les notes jouées sont jouées au même volume. La plupart des sujets ne le remarquent pas, mais j'aimerais jouer plus près d'une vraie guitare.
- Incapacité à utiliser les techniques de marteau, de tirage et de vibrato
- Les LED sont d'une couleur. Cela limite la clarté lors de la lecture de tablature. Je voudrais pouvoir indiquer différentes méthodes du jeu dans différentes couleurs.
- . – . , , , .
- . , , , .
- . , .
.
Je passe au contrôleur de la série STM32F07. Il dispose déjà de 128 Ko de mémoire flash - c'est suffisant pour toutes les fonctionnalités. Et même pour les œufs de Pâques.
Utiliser ESP32 dans la version finale de la guitare serait trop audacieux, alors j'ai cherché quelque chose de plus orthodoxe. Le choix s'est porté sur NRF52 en termes d'accessibilité, de disponibilité de la documentation et d'adéquation du site.
Bien entendu, trois innovations majeures seront également mises en œuvre:
- Les LED sont désormais RVB,
- il y aura une mesure de force sur chaque capteur de la barre (les boutons tactiles ne sont plus nécessaires),
- les cordes de la table d'harmonie bougeront.
Pour le moment, la planche de terrasse ressemble à ceci (j'ai laissé l'empreinte ESP juste au cas où):
Le projet s'appelle Sensy et est actuellement en développement actif. Il y a déjà une confiance totale que toutes les fonctionnalités prévues seront implémentées, donc une décision a été prise pour un développement ultérieur.
Nous sommes à Saint-Pétersbourg, maintenant l'équipe se compose de deux personnes: je m'occupe de la partie technique, mon partenaire - marketing, finances, questions juridiques.
Si parmi les lecteurs il y a des Jedi dans le domaine de la conception de coque ou du développement mobile qui souhaitent rejoindre le projet - écrivez-moi où et quand vous le souhaitez.
Qui est intéressé à suivre l'actualité du projet - laissez un courrier dans le formulaire sur le site et abonnez-vous aux réseaux sociaux.
J'espère vraiment des retours de la communauté Habrasocommunauté avec des commentaires et des suggestions!
Un épisode amusant du processus de développement
NRF52, UART. . , , , .
– «N» ascii. 0x4E, . – «O». . baud rate? , – «N». , «NON GENUINE DEVICE FOUND».
NRF- ? . , ? - . , NON GENUINE DEVICE?
, , ftdi , USB-UART , . , . , .
.
– «N» ascii. 0x4E, . – «O». . baud rate? , – «N». , «NON GENUINE DEVICE FOUND».
NRF- ? . , ? - . , NON GENUINE DEVICE?
, , ftdi , USB-UART , . , . , .
.
Merci de votre attention!