Indholdsfortegnelse:

Arduino Guitar Jack -nøgleholder med jackgenkendelse og OLED: 7 trin
Arduino Guitar Jack -nøgleholder med jackgenkendelse og OLED: 7 trin

Video: Arduino Guitar Jack -nøgleholder med jackgenkendelse og OLED: 7 trin

Video: Arduino Guitar Jack -nøgleholder med jackgenkendelse og OLED: 7 trin
Video: Arduino Guitar Jack Key Holder with Jack Recognition & OLED 2024, November
Anonim
Image
Image
Arduino Guitar Jack -nøgleholder med jackgenkendelse og OLED
Arduino Guitar Jack -nøgleholder med jackgenkendelse og OLED

Intro:

Denne instruktive vil beskrive opbygningen af min Arduino -baserede Guitar Jack -plugin -nøgleholder

Dette er min første instruerbare nogensinde, så vær venlig at holde med mig, da jeg kan foretage ændringer / opdateringer undervejs

Trin 1: Dele og værktøjer

Dele og værktøjer
Dele og værktøjer
Dele og værktøjer
Dele og værktøjer
Dele og værktøjer
Dele og værktøjer

De fleste dele købte jeg fra Amazon.co.uk eller eBay, nogle havde jeg allerede sparket rundt på - Her er en liste over, hvad du skal bruge.

Amazon -links er alle tilknyttede links, du kan muligvis finde billigere andre steder - jeg bruger meget Amazon Prime, så Amazon var tilfældigvis min go -to.

Jeg ville beholde denne konstruktion temmelig billigt og budgetvenligt. Du kan bruge en større TFT -skærm, hvis du havde ønsket det, såvel som en anden Arduino. Brug ikke en NANO, da den vil gå ned på grund af høj hukommelsesforbrug. Koden bruger omkring 72% af Pro Micros RAM og er stabil, men fra test vil en NANO gå ned og fryse.

(Flere detaljer i kodetrinnet.)

DELE

1x Arduino Pro Micro -

1x 0,96 OLED med gul og blå skærm -

4x WS2812 'Pixels' -

1x DS3231 RTC -

4x 1/4 Mono Jack (Eller så mange du vil) - Amazon (guld) eller Amazon (sølv) eller eBay.co.uk

1x blandet modstandspakke -

4x 1/4 guitarstik -

1x forlængerkabel til mikro -USB -kabel -

4x M3 skruer

VÆRKTØJ OG MATERIALER

- Loddejern (Dette er det, jeg købte - en TS100 - da det kom med yderligere tips

- Lodning

- Hotlimpistol (https://amzn.to/2UTd9PN)

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

- Wire cutters/strippers (https://amzn.to/2KzqUzp)

- 3D -printer eller 3D -udskrivningstjeneste

VALGFRIT - Disse elementer er valgfri, afhængigt af hvordan du vælger at forbinde alt

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

- Skrueterminalstik (2 polet | 3 polet | 4 polet)

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

Trin 2: 3D -udskrivning af sagen

3D -udskrivning af sagen
3D -udskrivning af sagen
3D -udskrivning af sagen
3D -udskrivning af sagen
3D -udskrivning af sagen
3D -udskrivning af sagen
3D -udskrivning af sagen
3D -udskrivning af sagen

Jeg printede min på min Creality CR-10S ved hjælp af Black PLA+ (https://amzn.to/2X2SDtE)

Jeg printede i 0,2 laghøjde, med 25% fyldning.

Trin 3: Sæt det hele sammen + skematisk

Sætter det hele sammen + skematisk
Sætter det hele sammen + skematisk
Sætter det hele sammen + skematisk
Sætter det hele sammen + skematisk
Sætter det hele sammen + skematisk
Sætter det hele sammen + skematisk
Sætter det hele sammen + skematisk
Sætter det hele sammen + skematisk

Hvordan du vælger at forbinde din Arduino er helt op til dig - jeg valgte personligt at gøre mig til et "skjold" så at sige. For at lave skjoldet har jeg loddet kvindelige overskrifter til veroboard for at matche Pro Micro, jeg tilføjede derefter en skinne på +5v og GND i modsatte ender. Jeg har brugt jumper wire til at forbinde +5v til min nu 5v 'skinne', og gjorde det samme for GND. Jeg tilføjede derefter mine 4x 100k modstande, den ene ende tilsluttet +5v for dem alle, og derefter forbinder den anden side henholdsvis A0, A1, A2 og A3. Jeg har derefter tilføjet skrueterminaler til analoge ben A0, A1, A2 og A3 og også ben 2 (SDA), 3 (SCL) & 4

Mål dine ledninger og skær til passende længder. Jeg startede med WS2812 Pixel LED'erne først - den FØRSTE WS2812 LED tilsluttes til +5v fra Arduino, GND fra Arduino og DIN tilsluttes til Pin 4. Herefter kædes de resterende 3 sammen og kæder alle 5v> 5v, GND> GND -ben og DOUT fra en Pixel, opretter forbindelse til DIN i den næste. Når de er loddet, skal du trykke dem forsigtigt ind i de firkantede huller i toppen og varme lim på plads og også for at beskytte bagsiden mod utilsigtede forbindelser eller shorts.

Efter lysdioderne skruede jeg derefter i Guitar Jack Sockets. En pin af hver forbinder til GND, og derefter forbinder den anden pin af hver A0, A1, A2 og A3 i overensstemmelse hermed. Så det er Socket 1, til A0, Socket 2 til A1, Socket 3 til A2 og Socket 4 til A3.

Dernæst lodde jeg 4 ledninger til OLED -forbindelserne og trimmede alt overskydende loddemetal så meget som muligt. Du vil vedhæfte dine ledninger fra bagsiden af skærmen, så du lodder på forsiden af skærmen.

Vær opmærksom på stifterne! Nogle OLED'er har GND på ydersiden, derefter VCC, nogle har VCC på ydersiden og derefter GND

Når du er loddet, og du har trimmet eller fladt ned i loddetilslutningen så meget som muligt, skal du trykke forsigtigt på skærmen til dens placering. Designet er lidt stramt, men vær opmærksom på, at forskellige udskrivningstolerancer kan påvirke dette, og derfor skal du muligvis foretage en mindre efterbehandling for at få det til at passe. Når den er på plads, skal du lægge lidt varm lim hen over hvert af de 4 hjørner for at holde den på plads.

Tilslut alt for at matche skematisk og billeder, og når du er glad, kan du derefter varme lime Pro Micro- og RTC -uret på plads og derefter tilslutte USB -udvidelsen til Pro Micro.

Jeg brugte en mikro -USB -udvidelse, så a) USB'en kan bruges til at levere strøm, men mere, b) så det var muligt at omprogrammere Pro Micro, hvis det var nødvendigt uden at trække alt fra hinanden

Når du er glad, skrues kabinettet sammen med de 4 skruer

Trin 4: Stikkene

Stikkene!
Stikkene!
Stikkene!
Stikkene!
Stikkene!
Stikkene!

Den måde, det fungerer på, er, at en del af designet for alt i verden fungerer som et "ohmmeter". Et ohmmeter er et instrument til måling af elektrisk modstand. De fleste multimetre har denne funktion, hvorved du vælger skalaen og derefter måler en modstand for at finde dens værdi. Arbejdsprincippet er, at du tilslutter en Kendt modstand til +ve, som derefter tilsluttes en UKendt modstand, som forbinder til -ve. Samlingen mellem de 2 modstande forbinder til den analoge Arduino -pin, så den kan aflæse spændingen og beregne modstanden.

Det fungerer som en spændingsdeler og beregner modstanden fra den ukendte modstand.

Som et spændingsdelingsnetværk af modstande R1 og R2, Vout = Vin * R2 / (R1 + R2) - Vi bruger 100k til vores kendte (R1) modstand. Dette giver os "spændingsfaldet"

Ud fra dette kan vi nu beregne modstanden fra den ukendte (R2) modstand, R2 = Vout * R1 / (Vin - Vout) - hvor R1 er vores 100k (100.000 ohm) modstand

Ved at bruge en anden modstand i hvert stik, du ønsker at bruge, kan du derefter justere koden i overensstemmelse hermed afhængigt af stikket i brug.

Jeg bruger 4 stik. Jeg valgte at bruge:

Kendt modstand (x4) - 100k

Jackstik 1 - 5.6k

Stikkontakt 2 - 10k

Jackstik 3 - 22k

Jackstik 4 - 39k

Du kan naturligvis udvide dette og kode så mange ind, du vil.

Trin 5: Koden

Koden
Koden

For det første skal du bruge Arduino IDE, tilgængelig herfra:

Du skal også sikre dig, at du også har et par Arduino -biblioteker:

Adafruit NeoPixel:

u8g2:

Adafruit RTCLib:

Adafruit SleepyDog (valgfrit):

En note om valg af det rigtige "Arduino" -bræt. Oprindeligt startede jeg dette projekt med en Arduino Nano, fordi de er superbillige til omkring £ 3- £ 4 i Storbritannien, eller så lidt som £ 1,50, hvis du køber fra AliExpress (men gider ikke 30-50 dages ventetid). Problemet med Nano er, at det er SRAM er 2 KB (2048 bytes). Denne skitse bruger 1728 bytes dynamisk hukommelse med globale variabler. Det er 84% af SRAM, hvilket kun efterlader 320 bytes til lokale variabler. Dette var utilstrækkeligt og ville få Nano til at låse sig fast og fryse.

Pro Micro (Leonardo) har 2,5K SRAM (2560 bytes), hvilket betyder, at der er 694 bytes gratis til lokale variabler (skitsen bruger 72% af Pro Micro's SRAM). Indtil videre har dette vist sig helt tilstrækkeligt og stabilt til min brug. Hvis du har til hensigt at bruge mange stik, kan du overveje at bruge noget med mere SRAM.

Hvad angår Flash -lagring, bruger denne skitse 88% (25252 bytes) af 30k (ATMega328p [Nano] og ATMega32u4 [Pro Micro] har begge 32k, men 2k er forbeholdt bootloaderen)

Jeg har skrevet hundredvis af Arduino -skitser gennem årene, men jeg er en hobbyist - så husk på, at nogle dele af koden kan være ineffektive, eller der kan være "bedre måder at gøre dette" på. Når det er sagt, fungerer det perfekt for mig, og jeg er glad for det. Jeg brugte biblioteker, der SKAL fungere på de fleste boards, uanset om det er AVR (mest basale Arduino's) eller SAMD21 (jeg har en håndfuld Cortex M0 -enheder)

Jeg ville også vise en anden grafik baseret på det anvendte stik. Hvis du vil lave din egen, er dette en glimrende simpel guide til, hvordan du opretter C -arrayet, så billeder kan bruges med dette display:

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

Sørg for at bruge PROGMEM til din grafik. F.eks:

statisk const unsigned char YOUR_IMAGE_NAME PROGMEM = {}

Efter design "vil timeout" skærmen efter 5 sekunder og vende tilbage til visning af tiden.

De fleste af indstillingerne findes i Settings.h, specifikt er navnet på de tilhørende jackstik kodet her:

#define PLUG1 "NØGLER"

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

Der er også nogle vigtige dele af koden inde i Variables.h

flyde R1 = 96700,0;

flyde R2 = 96300,0; flyde R3 = 96500.0; flyde R4 = 96300,0;

Disse er de Kendte modstandsværdier i ohm for hver af de 4 modstande.

R1 tilsluttet A0, R2 til A1, R3 til A2 og R4 til A3.

Det er tilrådeligt at måle dine 100k modstande ved hjælp af et multimeter og bruge den nøjagtige værdi af modstanden. Tag målingen af modstanden, når alt er forbundet. (Men ikke tændt).

Når du vælger modstande til dine jackstik, skal du sørge for, at der er et godt ohm -hul mellem dem, og når du koder dem, skal du give dig selv et godt område lavere og højere end din valgte modstand. Her er hvad jeg brugte i min kode:

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

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

Grunden til dette er at tage højde for den analoge aflæsning og de mindre spændingsudsving osv

Så hvad der sker er, hvis den detekterede modstand er mellem 4000 ohm og 7000 ohm, formoder vi, at du har brugt en 5,6 k modstand, og derfor vil koden se dette som stikket 1. Hvis den målte modstand er mellem 8000 ohm og 12000 ohm, antagelsen er, at det er en 10k modstand og er Jack Plug 2 og så videre.

Hvis du har brug for at foretage fejlfinding (Lad ikke være ukommenteret i 'produktion', da seriel fejlfinding bruger kostbar ram), skal du blot kommentere de linjer, du har brug for, øverst i Indstillinger. H

//#definere SERIAL_DEBUG

//#definere WAIT_FOR_SERIAL

For at fjerne en kommentar skal du blot fjerne //…. For at kommentere linjen tilbage, tilføj // igen til forsiden af linjen.

SERIAL_DEBUG muliggør seriel fejlfinding og brug af ting som f.eks.

Serial.println (F ("hej verden"));

WAIT_FOR_SERIAL er et ekstra trin, det betyder, at koden fortsætter ikke, før du åbner Serial Monitor. Dette hjælper med at sikre, at du ikke går glip af vigtige serielle meddelelser. - FORLAD ALDRIG DETTE AKTIVERET

Hvis du efterlader WAIT_FOR_SERIAL aktiveret, kan du ikke bruge din nøgleholder i noget "virkeligt" miljø, da den sidder fast og venter på Arduino IDE Serial monitor, før den kan fortsætte ind i skitsens hovedsløjfe. Når du har afsluttet din fejlfinding, skal du sørge for at fjerne kommentaren fra denne linje igen og uploade din skitse til produktion/færdiggørelse.

Når jeg bruger indstillingen SERIAL_DEBUG, indeholder min kode følgende:

#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]); for (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 (); hvis (INSERTED [socket]) {Serial.print (F ("Plug in socket")); Serial.print (stik+1); Serial.print (F ("har en resitans på:")); Serial.println (modstand); } #Afslut Hvis

Den sidste Serial.print -linje fortæller dig, hvad modstanden er i ohm, for det sidst indsatte stik. Så du kan også bruge denne skitse som en slags ohmmeter til at kontrollere modstanden på et stik.

Trin 6: Noter

Jeg tror, jeg har dækket alt, men kommenter venligst, og jeg vil gøre mit bedste for at læse og svare, når jeg kan:)

Undskyld for den lidt dårlige video - jeg har ikke et stativ, omkodningsopsætning eller et ordentligt arbejdsområde så at sige, så dette blev filmet (dårligt) og holdt telefonen i den ene hånd og forsøgte at demonstrere den med den anden.

Tak fordi du læste.

Anbefalede: