Wie mache ich eine digitale Mini-Gitarre?

Bild



In diesem Artikel werde ich versuchen, den Weg der Erstellung eines Geräts von der Idee bis zur Implementierung eines verwendbaren Prototyps allgemein zu beschreiben.



Ich heiße Dmitry Dudarev. Ich beschäftige mich mit der Entwicklung von Elektronik und liebe es wirklich, verschiedene tragbare Geräte zu entwickeln. Ich liebe auch Musik. Vor sechs Monaten habe ich mir eine Akustikgitarre von einem Freund ausgeliehen, um zu lernen, wie man sie aus YouTube-Lektionen und Tabulaturen spielt. Es war schwer. Entweder habe ich etwas falsch gemacht oder ich habe es schlecht versucht, oder in der Gesellschaft meiner Vorfahren haben Feinmotorik die Fortpflanzung beeinträchtigt. Auf jeden Fall kamen für mich nichts als die Geräusche rasselnder Saiten heraus. Meine Empörung wurde durch die ständige Verstimmung der Saiten verstärkt. Und die Menschen um mich herum, die zum tausendsten Mal auf meine Kurve von Nichts anderem hörten, machten keine Freude.



Aber in dieser Qual habe ich die Hauptregel des Elektronikingenieurs nicht vergessen. Wenn etwas vorhanden ist, kann dort ein Mikrocontroller eingefügt werden. Oder zumindest eine tragbare elektronische Modifikation vornehmen.





Idee



Die Struktur der Digitalgitarre begann sich in meinem Kopf zu entwickeln.



Zunächst habe ich eine Liste der Anforderungen für das Gerät erstellt:



  1. Das Gerät sollte eine Gitarre mit 6 Saiten und 12 Bünden auf dem Griffbrett simulieren
  2. Sollte kompakt und ideal faltbar sein, damit Sie es überall hin mitnehmen können
  3. Sollte eine Verbindung zu allen gängigen Achsen herstellen - Android, IOS, Windows, Linux, MacOS und dort als MIDI-Gerät ohne Treiber definiert sein
  4. Batteriebetrieb
  5. Die Verbindung sollte drahtlos hergestellt werden (da jedoch ein USB-Anschluss zum Aufladen vorhanden ist, sollte diese auch über das Kabel angeschlossen werden).
  6. ,
  7. , ,
  8. : hummer on, pull off, slide, vibrato
  9. midi 10


Für mobile Plattformen müssen Sie natürlich eine Anwendung schreiben, in der Sie die Tabulatur für den Unterricht mit LEDs auswählen, ein Instrument (Akustik, Klassik, E-Gitarre mit verschiedenen Filtervoreinstellungen usw.) auswählen und Sounds spielen können.



Theoretisch sollten Sie ein kompaktes Instrument erhalten, das wie eine Gitarre gespielt werden kann, keine analogen Fehler aufweist und mit einem visuellen Trainingssystem ausgestattet ist.

Klingt realisierbar.



Analoga



Zuallererst gehe ich mit dem Gedanken, dass es in unserer Zeit fast unmöglich ist, sich etwas Neues auszudenken, und jemand hat es bereits getan, google. Es stellte sich zwar heraus, dass die erste Digitalgitarre bereits 1981 entwickelt wurde, aber aufgrund der eingeschränkten Funktionalität nicht weit verbreitet war.







Es gibt auch moderne kompakte Midi-Gitarren, die jedoch für eine professionellere Zielgruppe konzipiert sind, teuer und vor allem ohne den "Push the Light" -Modus. Es gibt sogar exotische Optionen mit einem iPad anstelle von Schnüren oder ähnlich einer Muschel.







So können Sie beginnen.



Konzeptioneller Beweiß



Ich beschloss, mit einem Proof of Concept zu beginnen. Ein minimaler Prototyp in Eile.

Zuerst müssen Sie sich für die Elementbasis entscheiden.



Controller



In meinen Projekten verwende ich meistens STM32. Sie sind leistungsstark, billig und erschwinglich. Wählte STM32F042. Es verfügt über einen USB-Anschluss (mit einem speziellen internen 48-MHz-Oszillator, um keinen externen Quarz aufzuhängen), einen 32-Bit-Kern und alle erforderlichen Peripheriegeräte. Und das alles für weniger als einen Dollar.



Ich beschloss, die drahtlose Verbindung für die nächste Iteration zu verlassen.



Saiten auf dem Deck



Als Saiten habe ich beschlossen, Plastikzungen zu drucken, sie mit Federn an Potentiometern zu befestigen und die Ablenkwinkel zu messen.



Modelliert in Solid und gedruckt, um die Ergonomie zu bewerten.











Es fühlte sich sehr gut an. Sollte arbeiten.



Halssensoren



Die Gitarre soll 6 Saiten und 12 Bünde haben. Dies sind insgesamt 72 Sensoren am Hals und 6 weitere am Deck. Es wäre möglich, für jedes Element eine Häkchen-Schaltfläche zu verwenden, aber erstens klicken sie und zweitens funktioniert es nicht, Techniken wie Folie oder Vibrato zu implementieren. Ich möchte auch die Druckkraft bestimmen.



Es scheint, dass Dehnungsmessstreifen für diese Aufgabe am besten geeignet sind. Sie ändern ihren Widerstand je nach Druck auf den Arbeitsbereich.







Es stellte sich als sehr schwierig heraus, sie in der richtigen Menge zum Verkauf zu finden, und sie kosten viel. Ich musste bei Ali bestellen.



ADC



Ein ADC wird benötigt, um den Status jedes Sensors zu lesen. Es gibt nur wenige davon in STM, daher benötigen Sie etwas anderes, um 78 Sensoren abzufragen. Externe Mehrkanal-ADC-Chips könnten verwendet werden, sind jedoch zu teuer. Aus diesem Grund habe ich mich entschlossen, 5 billige analoge 16-Kanal-Multiplexer CD74HC4067 zu installieren und jeweils einen STM-ADC-Kanal anzuschließen.



Gebühr



Beginnen Sie mit dem Verdrahten der Platine. Die Sensorkabel sind lang, daher mussten wir sie überlappen.















Bevor ich die Leiterplatte bestellte, beschloss ich, auf die Dehnungsmessstreifen zu warten. Und wie sich herausstellte, nicht umsonst.



Von den 80 Sensoren arbeiteten nur wenige und dann mit unterschiedlichen Parametern.







Sie unterscheiden sich deutlich von dem Bild auf der Website des Verkäufers.



Und was habe ich erwartet, als ich bei Ali Elektronik gekauft habe? ..



Und dann dämmerte es mir.



Schließlich können Sie eine andere Erkennungsmethode anwenden - die Kapazitätsmessung wie bei Berührungssensoren. Es ist viel billiger und erschwinglicher. Und wenn Sie die Mechanik richtig konstruieren, können Sie den Aufwand bestimmen.



Gut. Ich lösche alles, was getan wurde.







Neu anfangen



In der neuen Version des minimalistischen Proof-of-Concept habe ich Zylinder ausgewählt, die aus einem 4-mm-Kupferstab gesägt und als Sensorelemente auf die Platine gelötet wurden.



Jetzt müssen wir herausfinden, wie 78 Container gemessen werden können.



Umfrage von Sensoren



Ein wenig googeln, fand ich heraus , dass es viel Mikro - Controller von Touch - Tastaturen. Unter ihnen ist es uns gelungen, ein billiges 12-Kanal-Universal-Kapazitätsmessgerät zu finden. Es misst die Kapazität auf der Skala von Picofarad-Einheiten, was für die Kraftmessschaltung ausreichen sollte, die ich in den nächsten Modifikationen implementieren möchte.

Außerdem habe ich für alle Fälle einen Sitz für einen Knopf oder ähnliches an jedes Halselement gehängt. Und er hat Ausschnitte in das Brett gemacht, damit man den Zylinder nicht nur berühren, sondern auch hineindrücken kann. Sie können mit verschiedenen Spieltechniken experimentieren.



Die Mikroschaltung ist über eine I2C-Schnittstelle verbunden und verfügt über 2 Konfigurationspins, die die Adresse festlegen. Dementsprechend können maximal 4 Mikroschaltungen an einem Bus aufgehängt werden. Und ich brauche 12. Kein Problem, ich verteile sie in drei Gruppen und verbinde sie über einen Multiplexer mit dem STM-Bus.



Boards











Diesmal haben wir es geschafft, das Board zu bestellen und sogar auf seine Produktion zu warten.



Nachdem ich den Bausatz, die Kupferzylinder und die Potentiometer versiegelt hatte, stellte ich fest, dass das Design mit Kunststoffschnüren zu kompliziert ist. Aus diesem Grund habe ich mich entschlossen, die gleichen Sensorzylinder an das Deck zu hängen, aber authentischer. Um nicht die gesamte Karte zu wiederholen, habe ich eine kleine Überlagerung erstellt und sie an den zweiten I2C STM-Bus angeschlossen.







Das Stück Eisen ist fertig. Die nächste Aufgabe ist es, sie zum Spielen zu bringen.



Software



Der Plan ist wie folgt:



  1. Laden Sie einen virtuellen Synthesizer herunter, der mit MIDI-Geräten arbeiten und Gitarrensounds erzeugen kann.
  2. Schreiben Sie eine Firmware, die die Sensoren abfragt und die Ergebnisse etwa 100 Mal pro Sekunde über die benutzerdefinierte USB-HID-Schnittstelle auf den Computer überträgt.
  3. Schreiben Sie ein Programm in Python, das diese Daten empfängt, ein virtuelles MIDI-Gerät emuliert, MIDI-Pakete generiert und an einen virtuellen Synthesizer sendet.


Ich beschloss, etwas später herauszufinden, wie ich mich sofort als MIDI-Gerät ausgeben sollte.



Wie reproduziere ich Ton?



Es gibt einige virtuelle Synthesizer für Windows mit MIDI-Unterstützung. Ich habe Ableton live ausprobiert, RealGuitar, FL Studio, Kontakt. Ich habe bei RealGuitar wegen seiner Einfachheit und Präzision für die Gitarre angehalten. Er weiß sogar, wie man die Unvollkommenheiten des menschlichen Spielens nachahmt - das Gleiten der Finger über die Saiten, die zufälligen Parameter der Noten.







Verbindung zu einem virtuellen Synthesizer herstellen



Für Python ist es uns gelungen, eine Mido-Bibliothek zu finden, die einen virtuellen Midi-Port emulieren kann, der über einen externen Emulator des Midi-Kabels „Loopmidi“ mit dem Eingang eines virtuellen Synthesizers verbunden werden kann.







In der Programmoberfläche habe ich eine grafische Anzeige des gemessenen Kapazitätspegels für jeden Sensor erstellt, um die Filtereinstellung zu vereinfachen. Außerdem habe ich für die Zukunft Steuerungen für LEDs, einen Vibrationsmotor (ich weiß noch nicht warum, aber es wird auch in der Gitarre sein), eine Visualisierung des Beschleunigungsmessers und des Batterieladezustands hinzugefügt.







Um die Gitarrensaiten zu schlagen, um die richtigen Noten auszulösen, müssen alle 72 Sensoren auf dem Griffbrett der entsprechenden Note zugeordnet werden.



Es stellte sich heraus, dass von 72 Elementen bei 12 Bünden nur 37 einzigartige Noten sind. Sie sind nach einer bestimmten Struktur angeordnet, sodass anstelle eines großen Tisches eine einfache Gleichung abgeleitet werden konnte, die die Nummer der entsprechenden Note durch die Sensornummer angibt.







Prüfung



Es sieht so aus, als ob alles für den ersten Test bereit ist. Ich war zu faul, um die Stangen zu sehen und alle 12 Bünde zu löten, also beschränkte ich mich auf den 8 .. Moment der Wahrheit:





ES LEBT! Die Realisierbarkeit des Konzepts wurde bestätigt. Zum Glück gab es keine Grenzen! Aber du kannst dich nicht entspannen.



Der nächste Schritt besteht darin, LEDs, Beschleunigungsmesser, Vibrationsmotor, Batterie, Funk, Gehäuse und die Möglichkeit hinzuzufügen, auf allen gängigen Plattformen ohne Treiber oder Midi-Emulationsprogramme zu arbeiten.



LEDs



Um 84 LEDs anzuschließen, habe ich die einfachste Verkettung von 14 8-Bit-Schieberegistern gewählt. Es ist bequem, sie an den SPI-MOSI-Pin des STM anzuschließen und ein Datenarray über DMA ohne Beteiligung des Kernels zu senden.



Beschleunigungsmesser



Ich hatte keine besonderen Anforderungen an den Beschleunigungsmesser, deshalb habe ich das einfachste LIS3D genommen. Damit bestimmt die Gitarre ihre Neigung relativ zum Horizont, wodurch verschiedene Klangfilter moduliert werden können, während Sie mit Ihren Handbewegungen spielen.



Drahtlos



Für die drahtlose Datenübertragung habe ich mich für ESP32 entschieden. Es unterstützt verschiedene Bluetooth- und WI-FI-Protokolle, es wird etwas zu experimentieren geben (zu diesem Zeitpunkt wusste ich noch nicht, dass es in meinem Fall nur einen richtigen Weg gab, eine Verbindung herzustellen).



Körper Der



Körper muss faltbar sein, daher muss die Elektronik von Deck und Hals in zwei Platinen aufgeteilt und mit einem Flachbandkabel verbunden werden.



Das Einschalten erfolgt, wenn der Körper geöffnet wird, indem der Magnet am Hals näher an den Hallsensor auf dem Deckbrett gebracht wird.



Anfangen



Es wurde viel Arbeit geleistet, um mit verschiedenen taktilen Halsdesigns und LED-Diffusoren zu experimentieren. Ich wollte, dass die gesamte Oberfläche des Elements gleichmäßig leuchtet und gleichzeitig Berührungen erkannt und die Tasten gedrückt werden.







Ich wandte mich an einen Freund, der sich professionell mit Industriedesign beschäftigt. Wir haben uns das Design der Gitarrenbiegeeinheit ausgedacht und dann hat er einen Prototypkörper entworfen und gedruckt.







Es scheint, dass alles durchdacht ist, Sie können mit der Verkabelung der Platine beginnen.























MIDI-Gerät



In der neuen Version wollte ich zunächst, dass die Gitarre als MIDI-Gerät ohne zusätzliche Programme erkannt wird, wenn sie über USB angeschlossen wird.



Es stellte sich heraus, dass dies nicht so schwierig ist, alle Spezifikationen finden Sie auf der offiziellen Website usb.org. Alle Algorithmen, die auf der Seite der Python-Anwendung ausgeführt wurden, mussten jedoch in C im Controller neu geschrieben werden.



Ich war überrascht, dass es sofort auf allen Geräten funktionierte. Windows 10, MacOS, Debian 9, Android (über USB-Adapter). Schließen Sie einfach das Kabel an und ein MIDI-Gerät namens "Sensy" erscheint im System und wird von allen Synthesizern erkannt. Ich konnte noch nicht mit einem iPhone testen. kein Adapter. Aber es sollte genauso funktionieren.







Drahtlose Schnittstelle



Die nächste Herausforderung besteht darin, Dinge drahtlos zu erledigen.



Ich war zu faul, um sofort zu googeln, also habe ich mehrere Tage damit verbracht, verschiedene drahtlose Schnittstellen zu testen. Ich habe BLE sofort entlassen, weil In meinem Kopf war "Niedrige Energie" stark mit einer niedrigen Paketrate verbunden. Versuchte WI-FI im Client-Modus, WI-FI im Hotspot-Modus, Bluetooth im SPP-Modus usw. Überall gab es das gleiche Problem - eine große Verzögerung (mehr als 100 ms pro Auge) und eine ungleichmäßige pünktliche Paketankunft. Dies machte das Spiel unmöglich.



Ich wollte aufgeben und einen separaten Dongle herstellen, der an den USB-Stick eines Mobiltelefons oder Computers angeschlossen wird und über ein benutzerdefiniertes Radio Daten von einer Gitarre empfängt.



Aber dann bin ich versehentlich auf die Spezifikationen der neuen Versionen des BLE-Protokolls gestoßen und habe festgestellt, dass das minimale Verbindungsintervall 7,5 ms beträgt, was perfekt zu meinen Anforderungen passt.



Darüber hinaus stellte sich heraus, dass es ein BLE-MIDI-Protokoll gibt, das von allen neuen Betriebssystemen unterstützt wird und ohne Treiber wie USB-MIDI funktioniert.



Das einzige Problem war, dass ein so geringes Verbindungsintervall und BLE MIDI im Allgemeinen nur von relativ neuen Plattformen unterstützt werden. Die Details bleiben abzuwarten, aber die Tests mit den mir zur Verfügung stehenden Geräten waren erfolgreich.



Einige neue iPhones verfügen sogar über einen vorinstallierten virtuellen Garage Band-Synthesizer, der hochwertige Gitarrensounds erzeugen kann (falls nicht, können Sie ihn kostenlos aus dem App Store herunterladen).



Firmware



Nachdem ich alle minimal notwendigen Funktionen geschrieben hatte, ruhte ich genau auf der Größe des STM-Flashs. Nur 168 Bytes bleiben frei. Offensichtlich haben mich die Siliziumgötter bevorzugt, also gehe ich in die richtige Richtung.







Es wäre möglich, den Code genauer zu optimieren und den belegten Speicherplatz erheblich zu reduzieren. In der nächsten Version wird es jedoch einfacher sein, einen dickeren Controller zu verwenden, der 5 Cent mehr kostet und keine Zeit verschwendet. Außerdem wissen Sie nie, welche anderen Funktionen Sie hinzufügen möchten.

Die minimale Funktionalität reicht jedoch nicht aus, Sie müssen immer noch mit den Techniken des Spiels arbeiten. Zunächst möchte ich Folie implementieren. Dies ist der Zeitpunkt, an dem Sie eine Note mit einem bestimmten geklemmten Bund spielen und Ihre Hand über das Griffbrett schieben, um von Bund zu Bund zu springen.



Ich hatte bereits Spaß mit USB, sodass Sie den gesamten damit verbundenen Code und den freien Speicher auskommentieren können. Sie können auch drahtlos testen:





Wenn alle LEDs leuchten, kann die Gitarre verwendet werden, wenn Sie sich in einer dunklen Höhle verlaufen.







Was sind die Nachteile dieses Designs?



  1. An den Sensoren wird nirgendwo Druck gemessen. Dies bringt drei Probleme mit sich:

    • Sowohl auf dem Deck als auch auf dem Griffbrett gibt es konstante zufällige Schläge benachbarter Saiten. Dies macht das Spiel sehr herausfordernd.
    • Alle gespielten Noten werden mit der gleichen Lautstärke gespielt. Die meisten Probanden bemerken dies nicht, aber ich würde gerne näher an einer echten Gitarre spielen.
    • Unfähigkeit, Hammer-On-, Pull-Off- und Vibrato-Techniken anzuwenden
  2. LEDs sind einfarbig. Dies schränkt die Klarheit beim Spielen von Tabulaturen ein. Ich möchte in der Lage sein, verschiedene Methoden des Spiels in verschiedenen Farben anzuzeigen.
  3. . – . , , , .
  4. . , , , .
  5. . , .


.



Ich wechsle zum Controller der Serie STM32F07. Es hat bereits 128 KB Flash - das reicht für jede Funktionalität. Und auch für Ostereier.



Die Verwendung von ESP32 in der endgültigen Version der Gitarre wäre zu mutig, also suchte ich nach etwas Orthodoxerem. Die Wahl fiel auf NRF52 in Bezug auf Zugänglichkeit, Verfügbarkeit von Dokumentation und Angemessenheit des Standorts.



Natürlich werden auch drei wichtige Innovationen umgesetzt:



  • LEDs sind jetzt RGB,
  • An jedem Sensor der Leiste wird eine Kraftmessung durchgeführt (Takttasten werden nicht mehr benötigt).
  • Die Saiten auf dem Resonanzboden bewegen sich.


Im Moment sieht das Deck Board so aus (ich habe den ESP-Footprint für alle Fälle hinterlassen):





Das Projekt heißt Sensy und befindet sich derzeit in der aktiven Entwicklung. Es besteht bereits das volle Vertrauen, dass alle geplanten Funktionen implementiert werden, sodass eine Entscheidung über die weitere Entwicklung getroffen wurde.



Wir sind in St. Petersburg, jetzt besteht das Team aus zwei Personen: Ich kümmere mich um den technischen Teil, meinen Partner - Marketing, Finanzen, rechtliche Fragen.



Wenn es unter den Lesern Jedi im Bereich Rumpfdesign oder mobile Entwicklung gibt, die sich dem Projekt anschließen möchten, schreiben Sie mir bitte, wo und wann immer Sie möchten.



Wer daran interessiert ist, die Neuigkeiten des Projekts zu verfolgen - hinterlassen Sie eine E-Mail im Formular auf der Website und abonnieren Sie soziale Netzwerke.



Ich hoffe sehr auf Feedback von der Habrasocommunity mit Kommentaren und Vorschlägen!



Eine lustige Folge aus dem Entwicklungsprozess
NRF52, UART. . , , , .



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



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



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



.



Vielen Dank für Ihre Aufmerksamkeit!



All Articles