Inhaltsverzeichnis:

Arduino Gitarren-Klinkenschlüsselhalter mit Klinkenerkennung & OLED - Gunook
Arduino Gitarren-Klinkenschlüsselhalter mit Klinkenerkennung & OLED - Gunook

Video: Arduino Gitarren-Klinkenschlüsselhalter mit Klinkenerkennung & OLED - Gunook

Video: Arduino Gitarren-Klinkenschlüsselhalter mit Klinkenerkennung & OLED - Gunook
Video: SMARTES SPIELZEUG SELBER BAUEN - ONLINE LAB NIGHT 2024, November
Anonim
Image
Image
Arduino Guitar Jack Key Holder mit Jack Recognition & OLED
Arduino Guitar Jack Key Holder mit Jack Recognition & OLED

Einführung:

Dieses anweisbare wird den Build meines Arduino-basierten Guitar Jack-Plugin-Schlüsselhalters detailliert beschreiben

Dies ist mein erstes anweisbares, also bitte mit mir, da ich auf dem Weg Änderungen / Aktualisierungen vornehmen kann

Schritt 1: Teile & Werkzeuge

Teile & Werkzeuge
Teile & Werkzeuge
Teile & Werkzeuge
Teile & Werkzeuge
Teile & Werkzeuge
Teile & Werkzeuge

Die meisten Teile habe ich bei Amazon.co.uk oder eBay gekauft, einige hatte ich bereits herumgewirbelt - Hier ist eine Liste mit dem, was Sie brauchen.

Amazon-Links sind alle Affiliate-Links, die Sie woanders möglicherweise billiger finden können - ich benutze Amazon Prime viel, also war Amazon zufällig meine Anlaufstelle.

Ich wollte diesen Build ziemlich kostengünstig und budgetfreundlich halten. Sie können einen größeren TFT-Bildschirm verwenden, wenn Sie dies wünschen, sowie einen anderen Arduino. Verwenden Sie kein NANO, da es aufgrund der hohen Speicherauslastung abstürzt. Der Code verwendet etwa 72% des RAM des Pro Micro und ist stabil, aber nach Tests stürzt ein NANO ab und friert ein.

(Weitere Details im Schritt Code.)

TEILE

1x Arduino Pro Micro -

1x 0,96" OLED mit gelbem & blauem Display -

4x WS2812 'Pixel' -

1x DS3231 RTC -

4x 1/4 Mono Jack (Oder so viele Sie wollen) - Amazon (Gold) oder Amazon (Silber) oder eBay.co.uk

1x gemischtes Widerstandspaket -

4x 1/4 Gitarrenbuchsen -

1x Micro-USB-Kabelverlängerungskabel -

4x M3-Schrauben

WERKZEUGE & MATERIALIEN

- Lötkolben (Dies ist der, den ich gekauft habe - ein TS100 - da er mit zusätzlichen Tipps geliefert wurde

- Löten

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

- Draht (https://amzn.to/2VK2ILU)

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

- 3D-Drucker oder 3D-Druckservice

OPTIONAL - Diese Artikel sind optional, je nachdem, wie Sie alles anschließen

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

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

- PCB-Header (https://amzn.to/2X7RjWf)

Schritt 2: 3D-Druck des Gehäuses

3D-Druck des Gehäuses
3D-Druck des Gehäuses
3D-Druck des Gehäuses
3D-Druck des Gehäuses
3D-Druck des Gehäuses
3D-Druck des Gehäuses
3D-Druck des Gehäuses
3D-Druck des Gehäuses

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

Gedruckt habe ich mit 0,2 Schichthöhe, mit 25% Füllung.

Schritt 3: Alles zusammenfügen + Schaltplan

Alles zusammenfügen + Schaltplan
Alles zusammenfügen + Schaltplan
Alles zusammenfügen + Schaltplan
Alles zusammenfügen + Schaltplan
Alles zusammenfügen + Schaltplan
Alles zusammenfügen + Schaltplan
Alles zusammenfügen + Schaltplan
Alles zusammenfügen + Schaltplan

Wie Sie Ihr Arduino anschließen, liegt ganz bei Ihnen - ich habe mich persönlich dafür entschieden, mich sozusagen zu einem "Schild" zu machen. Um die Abschirmung herzustellen, habe ich Buchsenleisten an das Veroboard gelötet, um dem Pro Micro zu entsprechen, und dann an gegenüberliegenden Enden eine Schiene von + 5 V und GND hinzugefügt. Ich habe ein Überbrückungskabel verwendet, um die + 5 V mit meiner jetzt 5 V-Schiene zu verbinden, und dasselbe für die GND. Ich habe dann meine 4x 100k-Widerstände hinzugefügt, ein Ende für alle mit +5V verbunden und dann die andere Seite mit A0, A1, A2 und A3 verbunden. Ich habe dann den analogen Pins A0, A1, A2 & A3 sowie den Pins 2 (SDA), 3 (SCL) & 4. Schraubklemmen hinzugefügt

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

Nach den LEDs habe ich dann die Gitarrenbuchsen eingeschraubt. Jeweils ein Pin wird mit GND verbunden, und der zweite Pin von jedem wird entsprechend mit A0, A1, A2 und A3 verbunden. Das sind Buchse 1 bis A0, Buchse 2 bis A1, Buchse 3 bis A2 und Buchse 4 bis A3.

Als nächstes lötete ich 4 Drähte an die OLED-Anschlüsse und kürzte überschüssiges Lot so weit wie möglich. Sie möchten Ihre Drähte von der Rückseite des Bildschirms anbringen, also löten Sie an der Vorderseite des Bildschirms.

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

Sobald Sie gelötet haben und Sie die Lötverbindung so weit wie möglich getrimmt oder abgeflacht haben, drücken Sie den Bildschirm vorsichtig in seine Position. Es ist vom Design her ein bisschen eng, aber seien Sie sich bewusst, dass unterschiedliche Drucktoleranzen dies beeinflussen können und Sie möglicherweise einige kleinere Nachbearbeitungen vornehmen müssen, um es passend zu machen. Sobald es an Ort und Stelle ist, legen Sie etwas Heißkleber über jede der 4 Ecken, um es an Ort und Stelle zu halten.

Schließen Sie alles so an, dass es dem Schaltplan und den Bildern entspricht, und wenn Sie zufrieden sind, können Sie auch das Pro Micro und die RTC-Uhr mit Heißkleber anbringen und dann die USB-Verlängerung an das Pro Micro anschließen.

Ich habe eine Micro-USB-Verlängerung verwendet, damit a) der USB zur Stromversorgung verwendet werden kann, aber mehr noch, b) damit es möglich ist, den Pro Micro bei Bedarf neu zu programmieren, ohne alles auseinander zu nehmen

Wenn Sie zufrieden sind, schrauben Sie das Gehäuse mit den 4 Schrauben zusammen

Schritt 4: Die Stecker

Die Stecker!
Die Stecker!
Die Stecker!
Die Stecker!
Die Stecker!
Die Stecker!

Dies funktioniert so, dass ein Teil des Designs in jeder Hinsicht als "Ohmmeter" funktioniert. Ein Ohmmeter ist ein Instrument zur Messung des elektrischen Widerstands. Die meisten Multimeter haben diese Funktion, bei der Sie die Skala auswählen und dann einen Widerstand messen, um seinen Wert zu ermitteln. Das Arbeitsprinzip besteht darin, dass Sie einen BEKANNTEN Widerstand mit +ve verbinden, der dann mit einem UNBEKANNTEN Widerstand verbunden wird, der mit -ve verbunden ist. Die Verbindung zwischen den 2 Widerständen ist mit dem Arduino-Analogpin verbunden, damit die Spannung gelesen und der Widerstand berechnet werden kann.

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

Als Spannungsteilernetzwerk aus Widerständen 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 Widerstandswert 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 gewünschten Steckerbuchse können Sie dann den Code entsprechend der verwendeten Buchse anpassen.

Ich verwende 4 Klinkenstecker. Ich habe mich für die Verwendung entschieden:

Bekannter Widerstand (x4) - 100k

Klinkenstecker 1 - 5,6 k

Klinkenstecker 2 - 10k

Klinkenstecker 3 - 22k

Klinkenstecker 4 - 39k

Sie können dies natürlich erweitern und so viele Codes einfügen, wie Sie möchten.

Schritt 5: Der Code

Der Code
Der Code

Zuerst benötigen Sie die Arduino IDE, die hier erhältlich ist:

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

Adafruit NeoPixel:

u8g2:

Adafruit RTCLib:

Adafruit SleepyDog (optional):

Ein Hinweis zur Auswahl des richtigen "Arduino"-Boards. Ursprünglich habe ich dieses Projekt mit einem Arduino Nano begonnen, weil sie in Großbritannien mit etwa 3 bis 4 £ oder nur 1,50 £ beim Kauf bei AliExpress super günstig sind (aber die 30-50 Tage Wartezeit haben nichts ausgemacht)). Das Problem mit dem Nano ist, dass sein SRAM 2 KB (2048 Bytes) beträgt. Diese Skizze verwendet 1728 Bytes dynamischen Speichers mit globalen Variablen. Das sind 84 % des SRAM, sodass nur 320 Byte für lokale Variablen frei bleiben. Dies war unzureichend und würde dazu führen, dass der Nano blockiert und einfriert.

Der Pro Micro (Leonardo) hat 2,5K SRAM (2560 Bytes), was bedeutet, dass 694 Bytes für lokale Variablen frei sind (Der Sketch verwendet 72% des SRAMs des Pro Micro). Bisher hat sich dies für meine Verwendung als völlig ausreichend und stabil erwiesen. Wenn Sie viele Klinkenstecker verwenden möchten, sollten Sie möglicherweise etwas mit mehr SRAM verwenden.

Was den Flash-Speicher betrifft, verwendet dieser Sketch 88% (25252 Bytes) von 30k (Der ATMega328p [Nano] und der ATMega32u4 [Pro Micro] haben beide 32k, aber 2k ist 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 ineffizient sein können oder es möglicherweise "bessere Möglichkeiten" gibt, dies zu tun. Wie gesagt, bei mir funktioniert es einwandfrei und ich bin zufrieden. Ich habe Bibliotheken verwendet, die auf den meisten Boards funktionieren sollten, sei es AVR (die meisten grundlegenden Arduinos) oder SAMD21 (ich habe eine Handvoll Cortex M0-Geräte).

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

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 absichtlich nach 5 Sekunden "timeout" und kehrt zur Anzeige der Zeit zurück.

Die meisten Einstellungen sind in Settings.h zu finden, insbesondere sind hier die Namen der zugehörigen Klinkenstecker codiert:

#define STECKER1 "SCHLÜSSEL"

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

Es gibt auch einige wichtige Codeteile in Variables.h

Schwimmer R1=96700.0;

Schwimmer R2=96300.0; Schwimmer R3=96500.0; Schwimmer R4=96300.0;

Dies sind die BEKANNTEN Widerstandswerte in Ohm von jedem der 4 Widerstände.

R1 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. Nehmen Sie die Messung des Widerstands vor, wenn alles angeschlossen ist. (Aber nicht eingeschaltet).

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

Schwimmer P1_MIN=4000.0, P1_MAX=7000.0; // 5,6K

Schwimmer P2_MIN=8000.0, P2_MAX=12000.0; // 10K Float P3_MIN=20000.0, P3_MAX=24000.0; // 22K Schwimmer P4_MIN=36000.0, P4_MAX=42000.0; // 39K

Der Grund dafür ist, den analogen Messwert und die geringfügigen Spannungsschwankungen usw. zu berücksichtigen

Wenn der erkannte Widerstand zwischen 4000 Ohm und 7000 Ohm liegt, gehen wir davon aus, dass Sie einen 5,6-k-Widerstand verwendet haben und der Code dies als Jack Plug 1 sieht. Wenn der gemessene Widerstand zwischen 8000 Ohm und. liegt 12000 Ohm, die Annahme ist, dass es sich um einen 10k-Widerstand handelt und es sich um einen Klinkenstecker 2 usw. handelt.

Wenn Sie etwas debuggen müssen (lassen Sie es in der 'Produktion' nicht unkommentiert, da das serielle Debuggen kostbaren Arbeitsspeicher verbraucht), entkommentieren Sie einfach die gewünschten Zeilen oben in Settings.h

//#define SERIAL_DEBUG

//#define WAIT_FOR_SERIAL

Zum Entkommentieren einfach die // …. Um die Zeile wieder auszukommentieren, fügen Sie das // am Anfang der Zeile erneut hinzu.

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

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

WAIT_FOR_SERIAL ist ein zusätzlicher Schritt, das heißt, bis Sie den Serial Monitor öffnen, wird der Code nicht fortgesetzt. Dadurch wird sichergestellt, dass Sie keine wichtigen Seriennachrichten verpassen. - LASSEN SIE DIES NIEMALS AKTIVIERT

Wenn Sie WAIT_FOR_SERIAL aktiviert lassen, können Sie Ihren Schlüsselhalter nicht in einer "realen Welt" verwenden, da er auf den seriellen Arduino IDE-Monitor wartet, bevor er in die Hauptschleife des Sketches weitergehen kann. Nachdem Sie das Debugging abgeschlossen haben, stellen Sie sicher, dass Sie diese Zeile wieder auskommentieren und Ihre Skizze für die Produktion/Vervollständigung erneut hochladen.

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<len;i++) {Serial.print (F("SOCKET_1234_HAS_PLUGTYPE_X[")); Serial.print (i); Serial.print (F("] = ")); Serial.println (SOCKET_1234_HAS_PLUGTYPE_X); } Serial.println(); if (INSERTED[socket]) {Serial.print (F("Steckdose einstecken")); Serial.print (Buchse + 1); Serial.print (F(" hat einen Widerstand von: ")); Serial.println (Widerstand); } #endif

Die letzte Serial.print-Zeile zeigt Ihnen den Widerstand in Ohm der zuletzt eingesteckten Buchse an. 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 kein Stativ, kein Aufnahme-Setup oder einen richtigen Arbeitsraum, also wurde dies (schlecht) gefilmt, als ich das Telefon in einer Hand hielt und mit der anderen versuchte, es zu demonstrieren.

Danke fürs Lesen.

Empfohlen: