Arduino Guitar Jack-Schlüsselhalter mit Jack-Erkennung und OLED

Arduino Guitar Jack-Schlüsselhalter mit Jack-Erkennung und OLED - Gunook

Intro:

Diese Anleitung beschreibt detailliert den Aufbau meines Arduino-basierten Guitar Jack-Plugin-Schlüsselhalters

Dies ist meine allererste Anweisung. Bitte nehmen Sie sie mit, da ich auf dem Weg Änderungen / Aktualisierungen vornehmen kann

Zubehör:

Schritt 1: Teile & Werkzeuge

Die meisten Teile habe ich bei Amazon.de oder eBay gekauft, einige habe ich bereits gekauft - Hier ist eine Liste der benötigten Teile.

Amazon-Links sind alle Affiliate-Links. Möglicherweise finden Sie sie woanders günstiger. Ich benutze Amazon Prime häufig, daher war Amazon zufällig mein Ansprechpartner.

Ich wollte diesen Build relativ kostengünstig und budgetfreundlich halten. Sie könnten einen größeren TFT-Bildschirm verwenden, wie Sie es sich gewünscht haben, sowie einen anderen Arduino. Verwenden Sie kein NANO, da es aufgrund der hohen Speichernutzung abstürzt. Der Code belegt ungefähr 72% des Arbeitsspeichers des Pro Micro und ist stabil, aber beim Testen stürzt ein NANO ab und friert ein.

(Weitere Details im Codeschritt.)

TEILE

1x Arduino Pro Micro - http://amzn.to/2UeDt2K

1x 0.96 "OLED mit gelbem und blauem Display - http://amzn.to/2PaLyo3

4x WS2812 'Pixel' - http://amzn.to/2XcTMir

1x DS3231 RTC - http://amzn.to/2VGq8BP

4x 1/4 "Mono Jack (oder so viele wie Sie möchten) - Amazon (Gold) oder Amazon (Silber) oder eBay.co.uk

1x Mixed Resistor Pack - http://amzn.to/2v0IaCZ

4x 1/4 "Guitar Jacks - http://amzn.to/2KwX9iA

1x Micro-USB-Kabel Verlängerungskabel - http://amzn.to/2v4x6Vs

4x M3 Schrauben

WERKZEUGE & MATERIALIEN

- Lötkolben (Dies ist der, den ich gekauft habe - ein TS100 - da er mit zusätzlichen Tipps geliefert wurde http://amzn.to/2VLoY80)

- Löten

- Heißklebepistole (http://amzn.to/2UTd9PN)

- Wire (http://amzn.to/2VK2ILU)

- Drahtschneider / Abisolierer (http://amzn.to/2KzqUzp)

- 3D-Drucker oder 3D-Druckdienst

WAHLWEISE - Diese Elemente sind optional, je nachdem, wie Sie alles anschließen

- Veroboard / Stripboard (http://amzn.to/2KzMFPE)

- Schraubklemmen (2-polig | 3-polig | 4-polig)

- Leiterplatten-Header (http://amzn.to/2X7RjWf)

Schritt 2: 3D-Druck des Gehäuses

Ich druckte meine auf meinem Creality CR-10S mit Black PLA + (http://amzn.to/2X2SDtE)

Ich habe in 0,2 Lagen Höhe mit 25% Füllung gedruckt.

Schritt 3: Alles zusammenstellen + Schema

Wie Sie sich entscheiden, Ihr Arduino anzuschließen, liegt ganz bei Ihnen - ich persönlich habe mich sozusagen als "Schild" entschieden. Um die Abschirmung herzustellen, habe ich die Buchsenleisten passend zum Pro Micro auf das Veroboard gelötet und dann an den gegenüberliegenden Enden eine Schiene mit +5 V und GND hinzugefügt. Ich habe das + 5V mit einem Überbrückungskabel an meine jetzt 5V-Schiene angeschlossen und das Gleiche für die GND getan. Ich habe dann meine 4x 100k-Widerstände hinzugefügt, wobei ein Ende für alle mit +5 V verbunden ist und die andere Seite mit A0, A1, A2 bzw. A3 verbunden ist. Ich habe dann die analogen Pins A0, A1, A2 und A3 sowie die Pins 2 (SDA), 3 (SCL) und 4 mit Schraubklemmen versehen

Messen Sie Ihre Verkabelung aus und schneiden Sie sie auf die richtige Länge. Ich habe zuerst mit den WS2812 Pixel-LEDs begonnen - die ERSTE WS2812-LED wird mit +5 V vom Arduino, GND vom Arduino und DIN mit Pin 4 verbunden. Danach werden die restlichen 3 miteinander verkettet und alle 5 V> 5 V verkettet. GND> GND-Pins und DOUT von einem Pixel, verbindet mit DIN des nächsten. Drücken Sie diese nach dem Löten vorsichtig in die quadratischen Löcher oben und kleben Sie sie heiß ein, um die Rückseite vor versehentlichen Anschlüssen oder Kurzschlüssen zu schützen.

Nach den LEDs habe ich dann die Guitar Jack Sockets eingeschraubt. Jeweils ein Pin ist mit GND verbunden und der zweite Pin mit A0, A1, A2 und A3. Das sind also Sockel 1 bis A0, Sockel 2 bis A1, Sockel 3 bis A2 und Sockel 4 bis A3.

Als nächstes habe ich 4 Drähte an die OLED-Anschlüsse gelötet und überschüssiges Lot so weit wie möglich abgeschnitten. Sie möchten Ihre Drähte von der Rückseite des Bildschirms anschließen, damit Sie an der Vorderseite des Bildschirms löten.

Achten Sie auf die Stifte! Einige OLEDs haben außen GND, dann VCC, andere außen VCC und dann GND

Sobald Sie gelötet haben und die Lötverbindung so weit wie möglich getrimmt oder abgeflacht haben, sanft Drücken Sie den Bildschirm in seine Position. Es ist von Natur aus eine enge Passform, aber beachten Sie, dass sich unterschiedliche Drucktoleranzen darauf auswirken können. Daher müssen Sie möglicherweise einige geringfügige Nachbearbeitungen vornehmen, um die Passform zu gewährleisten. Sobald sie angebracht sind, geben Sie etwas Heißkleber über jede der 4 Ecken, um sie an Ort und Stelle zu halten.

Schließen Sie alles so an, dass es mit dem Schema und den Bildern übereinstimmt. Wenn Sie zufrieden sind, können Sie auch das Pro Micro und die RTC-Uhr heißkleben und dann die USB-Erweiterung an das Pro Micro anschließen.

Ich habe eine Micro-USB-Erweiterung verwendet, damit a) der USB zur Stromversorgung verwendet werden kann, aber mehr noch, b) das Pro Micro bei Bedarf neu programmiert werden kann, ohne dass alles auseinandergezogen werden muss

Wenn Sie glücklich sind, schrauben Sie das Gehäuse mit den 4 Schrauben zusammen

Schritt 4: Die Stecker!

Dies funktioniert so, dass ein Teil des Designs in jeder Hinsicht als "Ohmmeter" fungiert. Ein Ohmmeter ist ein Instrument zur Messung des elektrischen Widerstands. Die meisten Multimeter verfügen über diese Funktion, bei der Sie die Skala auswählen und dann einen Widerstand messen, um dessen Wert zu ermitteln. Das Arbeitsprinzip besteht darin, dass Sie einen BEKANNTEN Widerstand an den + ve anschließen, der dann an einen UNBEKANNTEN Widerstand angeschlossen wird, der an -ve angeschlossen wird. Die Verbindung zwischen den beiden Widerständen wird mit dem analogen Arduino-Pin verbunden, sodass die Spannung abgelesen und der Widerstand berechnet werden kann.

Es funktioniert wie ein Spannungsteiler und berechnet den Widerstand des unbekannten Widerstands.

Als Spannungsteilernetz der Widerstände R1 und R2

Vout = Vin * R2 / (R1 + R2)- Wir verwenden 100k für unseren bekannten (R1) Widerstand. Dies gibt uns den "Spannungsabfall"

Daraus können wir nun den Widerstand des unbekannten (R2) Widerstands berechnen,

R2 = Vout * R1 / (Vin - Vout) - wobei R1 unser 100k (100.000 Ohm) Widerstand ist

Durch die Verwendung eines anderen Widerstands in jeder Steckbuchse, die Sie verwenden möchten, können Sie den Code abhängig von der verwendeten Buchse entsprechend anpassen.

Ich benutze 4 Klinkenstecker. Ich entschied mich für:

Bekannter Widerstand (x4) - 100k

Klinkenstecker 1 - 5,6k

Klinkenstecker 2 - 10k

Klinkenstecker 3 - 22k

Klinkenstecker 4 - 39k


Sie können dies natürlich erweitern und beliebig viele Codes eingeben.

Schritt 5: Der Code

Zunächst benötigen Sie die Arduino IDE, die Sie hier herunterladen können: http://www.arduino.cc/en/Main/Software

Sie müssen auch sicherstellen, dass Sie einige Arduino-Bibliotheken haben:

Adafruit NeoPixel: http://github.com/adafruit/Adafruit_NeoPixel

u8g2: http://github.com/olikraus/u8g2

Adafruit RTCLib: http://github.com/adafruit/RTClib

Adafruit SleepyDog (optional): http://github.com/adafruit/Adafruit_SleepyDog

Ein Hinweis zur Auswahl des richtigen "Arduino" Boards. Ursprünglich habe ich dieses Projekt mit einem Arduino gestartet Nano, weil sie in Großbritannien für 3 bis 4 Euro super günstig sind, oder für nur 1,50 Euro, wenn Sie bei AliExpress einkaufen (aber es macht nichts aus, wenn Sie 30 bis 50 Tage warten). Das Problem mit dem Nano ist, dass es SRAM ist 2 KB (2048 Byte). Diese Skizze verwendet 1728 Bytes dynamischer Speicher mit globalen Variablen. Das sind 84% des SRAM, so dass nur 320 Byte für lokale Variablen frei bleiben. Dies war unzureichend und würde den Nano zum Einfrieren bringen.

Der Pro Micro (Leonardo) hat 2,5 KByte SRAM (2560 Byte), Dies bedeutet, dass für lokale Variablen 694 Byte frei sind (die Skizze verwendet 72% des SRAM von Pro Micro). Bisher hat sich dies für meinen Einsatz als vollkommen ausreichend und stabil erwiesen. Wenn Sie viele Klinkenstecker verwenden möchten, können Sie in Betracht ziehen, etwas mit mehr SRAM zu verwenden.

In Bezug auf den Flash-Speicher werden in dieser Skizze 88% (25252 Byte) von 30 KB verwendet (ATMega328p [Nano] und ATMega32u4 [Pro Micro] haben beide 32 KB, 2 KB sind jedoch für den Bootloader reserviert).

Ich habe im Laufe der Jahre Hunderte von Arduino-Skizzen geschrieben, aber ich bin ein Bastler. Denken Sie also daran, dass einige Teile des Codes möglicherweise ineffizient sind oder es "bessere Möglichkeiten gibt, dies zu tun". Davon abgesehen funktioniert es perfekt für mich und ich bin glücklich damit. Ich habe Bibliotheken verwendet, die auf den meisten Boards funktionieren SOLLTEN, egal ob es sich um AVR (die grundlegendsten Arduino-Geräte) oder SAMD21 (ich habe eine Handvoll Cortex M0-Geräte) handelt.

Ich wollte eine andere Grafik anzeigen, die auch auf der verwendeten Buchse basiert. Wenn Sie Ihre eigenen erstellen möchten, ist dies eine brillante, einfache Anleitung zum Erstellen des C-Arrays für Bilder, die mit dieser Anzeige verwendet werden sollen:

http://sandhansblog.wordpress.com/2017/04/16/interfacing-displaying-a-custom-graphic-on-an-0-96-i2c-oled/

Stellen Sie sicher, dass Sie PROGMEM für Ihre Grafiken verwenden. Z.B:

static const unsigned char YOUR_IMAGE_NAME [] PROGMEM = {}

Der Bildschirm wird nach 5 Sekunden "Timeout" und kehrt zur Anzeige der Uhrzeit zurück.

Die meisten Einstellungen finden Sie in Einstellungen.hInsbesondere sind die Namen der zugehörigen Klinkenstecker hier codiert:

#define PLUG1 "KEYS" #define PLUG2 "P2" #define PLUG3 "P3" #define PLUG4 "P4" #define GENERIC "NA"

Es sind auch einige wichtige Teile des Codes enthalten Variablen.h

Schwimmer R1 = 96700.0; Schwimmer R2 = 96300.0; float R3 = 96500.0; Float R4 = 96300.0;

Dies sind die bekannten Widerstandswerte in Ohm für jeden der 4 Widerstände.

R1 ist mit A0 verbunden, R2 mit A1, R3 mit A2 und R4 mit A3.

Es ist ratsam, Ihre 100k-Widerstände mit einem Multimeter zu messen und den genauen Wert des Widerstands zu verwenden. Messen Sie den Widerstand, sobald alles angeschlossen ist. (Aber nicht eingeschaltet).

Stellen Sie bei der Auswahl der Widerstände für Ihre Klinkenstecker sicher, dass ein guter Ohm-Abstand zwischen ihnen besteht, und geben Sie sich bei der Codierung einen schönen Bereich, der niedriger und höher ist als der von Ihnen gewählte Widerstand. Folgendes habe ich in meinem Code verwendet:

float P1_MIN = 4000.0, P1_MAX = 7000.0; // 5,6 K float P2_MIN = 8000,0, P2_MAX = 12000,0; // 10K float P3_MIN = 20000.0, P3_MAX = 24000.0; // 22K float P4_MIN = 36000.0, P4_MAX = 42000.0; // 39K

Der Grund dafür ist die Berücksichtigung der analogen Anzeige und der geringen Spannungsschwankungen usw

Wenn der erkannte Widerstand zwischen 4000 Ohm und 7000 Ohm liegt, wird davon ausgegangen, dass Sie einen 5,6-k-Widerstand verwendet haben. In diesem Fall wird der Code als Klinkenstecker 1 angezeigt. Wenn der gemessene Widerstand zwischen 8000 Ohm und 8000 Ohm liegt 12000 Ohm, die Annahme ist, dass es sich um einen 10k-Widerstand handelt und es sich um Klinkenstecker 2 usw. handelt.

Wenn Sie ein wenig debuggen müssen (lassen Sie keine Kommentare in der 'Produktion', da das serielle Debuggen wertvollen Speicherplatz verbraucht), kommentieren Sie einfach die Zeilen, die Sie oben benötigen Einstellungen.h

// # definiere SERIAL_DEBUG // # definiere WAIT_FOR_SERIAL

Entfernen Sie zum Entfernen des Kommentars einfach das // ...., um die Zeile wieder auszukommentieren, und fügen Sie das // erneut an der Vorderseite der Zeile hinzu.

SERIAL_DEBUG ermöglicht das serielle Debuggen und die Verwendung von Dingen wie (zum Beispiel)

Serial.println (F ("Hallo Welt"));

WAIT_FOR_SERIAL ist ein zusätzlicher Schritt, dh der Code wird erst fortgesetzt, wenn Sie den seriellen Monitor öffnen. So können Sie sicherstellen, dass Sie keine wichtigen Seriennachrichten verpassen. - LASSEN SIE DIESES NIEMALS AKTIVIERT

Wenn du tun Wenn Sie WAIT_FOR_SERIAL aktiviert lassen, können Sie Ihren Schlüsselhalter in keiner "realen" Umgebung verwenden, da er auf den Arduino IDE Serial Monitor warten muss, bevor er in die Hauptschleife der Skizze eingefügt werden kann. Wenn Sie das Debuggen abgeschlossen haben, stellen Sie sicher, dass Sie diese Zeile erneut auskommentieren, und laden Sie Ihre Skizze für die Produktion / Fertigstellung erneut hoch.

Bei Verwendung der Option SERIAL_DEBUG enthält mein Code Folgendes:

#ifdef SERIAL_DEBUG Serial.print (F ("ACTIVE JACK =")); Serial.println (ACTIVE_JACK); int len ​​= sizeof (SOCKET_1234_HAS_PLUGTYPE_X) / sizeof (SOCKET_1234_HAS_PLUGTYPE_X [0]); für (int i = 0; i

Die letzte Serial.print-Zeile gibt Auskunft über den Widerstand der zuletzt eingesteckten Buchse in Ohm. Sie können diese Skizze also auch als eine Art Ohmmeter verwenden, um den Widerstand eines Klinkensteckers zu überprüfen.

Schritt 6: Notizen

Ich denke, ich habe alles abgedeckt, aber bitte kommentieren Sie und ich werde mein Bestes tun, um zu lesen und zu antworten, wenn ich kann :)

Entschuldigung für das etwas schlechte Video - ich habe sozusagen kein Stativ, kein Recoding-Setup und keinen geeigneten Arbeitsbereich, daher wurde dies (schlecht) gefilmt, als ich das Telefon in einer Hand hielt und versuchte, es mit der anderen zu demonstrieren.

Danke fürs Lesen.

Schritt 7: Changelog

13. April 2019

  • Veröffentlicht

Dies ist ein Eintrag in der
Arduino-Wettbewerb 2019