Innehållsförteckning:

Arduino Keyboard Joystick Extender Box and Sound Controller Thing Using Deej: 8 Steps
Arduino Keyboard Joystick Extender Box and Sound Controller Thing Using Deej: 8 Steps

Video: Arduino Keyboard Joystick Extender Box and Sound Controller Thing Using Deej: 8 Steps

Video: Arduino Keyboard Joystick Extender Box and Sound Controller Thing Using Deej: 8 Steps
Video: Arduino Leanardo Project || USB Keyboard || HID Device || #Shorts || #ShortVideo | #TrendingVideo 2024, November
Anonim
Arduino Keyboard Joystick Extender Box and Sound Controller Thing Using Deej
Arduino Keyboard Joystick Extender Box and Sound Controller Thing Using Deej

Tinkercad -projekt »

Varför

Ett tag har jag velat lägga till en liten joystick på mitt tangentbord för att styra gränssnittselement eller andra mindre uppgifter i spel och simulatorer (MS Flight Sim, Elite: Dangerous, Star Wars: Squadrons, etc).

För Elite: Dangerous har jag också kämpat med att blanda volymnivåer från externt ljud (den inbyggda musiken, medan den är bra, blir repetitiv efter många timmar i svart), ljud i spelet och externt röstpaketstöd.

Windows inbyggda källmixer är "ok", men det är jobbigt att byta skärm och musstyrningsspelare mitt i ett spel. Att ha en utökad tangentbordskontrollbox verkade vägen att gå. Deej är lösningen jag hittade.

Hur

Jag har nyligen lärt mig om Arduino och stötte på deej -projektet på reddit. Det såg ut som om detta skulle lösa båda problemen i ett praktiskt paket. Och det skulle låta mig designa och skriva ut ett snyggt 3D -fodral.

Vad är deej?

(från webbplatsen) deej är en ** hårdvaruvolymblandare med öppen källkod ** för Windows- och Linux-datorer. Det låter dig använda reglage i verkligheten (som en DJ!) För att ** sömlöst styra volymerna för olika appar ** (till exempel din musikspelare, spelet du spelar och din röstchatt-session) utan att behöva stoppa vad du gör.

Min version

För att hålla lådan liten valde jag rattar (roterande linjär potentiometer (krukor = motstånd)) snarare än reglage. Funktionellt fungerar de på samma sätt. Nuvarande och populära deej -mönster innehåller inte en joystick, så det här blir lite av en designhybrid. Annars är det en ganska rak framåtbyggnad.

Deej kommer att arbeta med en Arduino Nano, Pro Micro eller Uno, men Nano och Pro Micro rekommenderas officiellt av utvecklaren. Jag valde Arduino Pro Micro eftersom jag ville ha joysticken och Arduino Joystick Library stöder den. Jag kan också använda Arduino Keyboard Library när jag vill använda tystnadsfunktionen för mediatangentbordet (snarare än den”mjuka tystnaden”) med joystick -knappen, men det är längre ner på vägen.

Steg 1: Tillbehör

Tillbehör
Tillbehör
Tillbehör
Tillbehör
Tillbehör
Tillbehör

Lådan

Ladda ner STL -filer (utformade i Tinkercad):

  • Bilagefiler på Prusa (https://www.prusaprinters.org/)
  • Thingiverse (kommer snart)

Hårdvaran (produktionsenhet)

  • 1x Arduino Pro Micro
  • 4x 10k roterande (vred) Potentiometrar (inte roterande kontroller, använd krukor)
  • 1x Arduino KY-023 joystick
  • 5ft skrot cat5 nätverkskabel
  • 1x USB A till USB B mikrokabel (USB A är den stora fyrkantiga anslutningen, USB B micro är vad som finns på Arduino Pro Micro)
  • 1x 5 mm röd LED
  • 1x 220 ohm motstånd

Jag hade några extra delar runt så jag tänkte bygga en utvecklingsenhet att testa saker på. Bara att ansluta saker till en brödbräda gjorde det lättare att visualisera det sista.

  • 1x Arduino Pro Micro
  • 4x 10k roterande (vred) Potentiometrar (inte roterande kontroller, använd krukor)
  • 1x tillfällig tryckknappsbrytare (hård återställningsknapp)
  • 1x USB A till USB B mikrokabel (USB A är den stora fyrkantiga anslutningen, USB B micro är vad som finns på Arduino Pro Micro)
  • diverse bygelkablar
  • bakbord
  • 1x 5 mm röd LED
  • 1x 220 ohm motstånd

Steg 2: Kapslingen

Kapslingen
Kapslingen
Kapslingen
Kapslingen
Kapslingen
Kapslingen
Kapslingen
Kapslingen

Designen

Jag gillade några av de andra mönster som profilerades i deej -communitygalleriet, så baserade mina funktioner som jag gillade:

  • Lätt att designa och skriva ut
  • Kommer inte i vägen för mina andra stationära kringutrustning
  • Använd inte skruvar eller fästelement för att säkra höljet
  • Liknande designestetik som tangentbordet

Jag designade och skrev ut två prototyper innan jag bestämde mig för denna slutliga design. Jag gillar att ha en fysisk version att leka med i det utrymme jag använder den i eftersom det ger mig en bättre känsla av hur det slutliga objektet kommer att fungera.

Jag började kortfattat designa i Fusion360, men vet inte det så bra som Tinkercad så bytte om och arbetade där.

Eftersom jag ville ha en skruvlös design skapade jag en hölje. Första prototypen hade ett tunt lock och en djup låda för allt. Den andra designen bytte den med ett djupt lock och en grund bottenlåda. Den behövde bara hålla Arduino Pro Mini så det behövde verkligen inte vara stort. Inkluderade också de präglade ikonerna.

Tredje designen ändrades för att passa utrymmet bredvid mitt tangentbord.

Trycket

Jag skrev ut rutan i PLA och programmerade en filament / lagerbyte från svart till rött för locket där ikonerna bara skulle börja synas, och igen tillbaka till svart för resten av locket.

Ett problem

Hela detta var joystickfästet ett problem. Även i den tredje designen stöter pinnen mot fästena på ett ställe. Nästa iteration kommer att få bättre clearances. Jag kunde ha arbetat mer med designen men ville gå vidare till nästa fas, installationen.

Steg 3: Kretsen

Kretsen
Kretsen
Kretsen
Kretsen
Kretsen
Kretsen

Värsta ledningsjobb någonsin

Ok, det här är mitt första fulla Arduino-projekt. Ja, jag har gjort saker på brödbrädor tidigare och använder en för att bygga utvecklingsversionen av detta, men när det gäller att tillverka och montera är det här min första. Så min ledning ser ut som skit. Där är det ur vägen:)

Uppdatering: Jag har sedan byggt en till och ledningarna är mycket trevligare där. Se bilderna:)

Produktionsenhet - Vad händer var

Arduino Pro Micro är en liten liten bräda och passar i den formade sektionen i basen. Knoppar och joystick passar i respektive hål i locket. Men montera ingenting förrän du får lödningstävlingen.

Kabeldragning

Jag hade ingen korrekt kretskabel, men hade en kvarvarande rulle med solid-core cat5-nätverkskabel, så det är vad jag använde. Det är lite styvare och kanske mer sprött än den strandade kretskabeln, men det fungerar.

Genom att lägga ut komponenterna i en approximation av deras slutliga monteringsposition, uppskattade jag avståndet, för varje tråd, lade till lite mer för slack, etc., klippte och trimmade sedan tråden. Jag lämnade mycket slapphet.

Med hänvisning till kopplingsschemat körde jag den gemensamma marken (svart) och VCC (röd) till knapparna och joysticken där det anges. Eftersom nätverkskabeln inte finns i dessa färger, valde jag bara en färg och höll min ledning konsekvent för funktionen.

Den enskilda potten. analoga linjer (gul) gick till stift A0 - A3. Joysticklinjerna (Orange), också analoga, gick till I/O -stift 8 och 9. Dessa måste betecknas som analoga i Arduino -koden som A8 och A9.

Joystick -omkopplaren (blå) gick till stift 7. Detta kommer att vara en digital stift i koden.

Isolering

Eftersom den här styva tråden kommer att stoppas i ett litet utrymme valde jag att isolera mina lödanslutningar med en hälsosam klick smältlim. Sedan stoppade allt på plats och körde ett enkelt test på tavlan och krukorna med hjälp av version av Arduino Exempel AnalogInput -kod - modifierad för att läsa alla krukor.

Andra versionen

De två sista bilderna ovan visar nästa låda jag bygger. Den här kommer att ha 5 rattar och en tillfällig tryckknapp för stumma. Ingen joystick. Låda i samma storlek.

Steg 4: Avsluta maskinvaran

Avsluta hårdvaran
Avsluta hårdvaran

När jag hade installerat joysticken insåg jag att det inte var mycket utrymme mellan kortet och stifthuvudena kvar på Pro Micro.

Efter lite noggrann böjning av stifthuvudena och en ny applicering av smältlim (för isolering), stängde höljet ordentligt.

Att installera krukorna gick utan problem.

Återigen med trådarna

Massiva kärntrådar är lite styva och kan vara spröda om de böjs för många gånger, vik dem försiktigt (utan skarpa hörn) till det tillgängliga utrymmet. Några av mina var för långa och krävde lite extra vikning.

När allt är på plats, passar bara basen på toppen och du bör vara klar med hårdvaran ….

Men vänta, det finns mer

Naturligtvis, efter några veckors användning bestämde jag mig för att jag behövde en indikator för att låta mig veta vad statusen för den mjukkodade MUTE-funktionen är.

Efter att ha redigerat koden för att lägga till i LED -funktionen (se nästa avsnitt), löd jag snabbt upp lysdioden / ledningarna / motståndet och kopplade dem till kortet.

Jag spenderade mer tid på att borra hålet genom ovansidan av fodralet eftersom jag inte ville skada toppytan. Jag markerade en mittpunkt, bucklade den och sedan snurrade jag en borr för hand för att göra hålet.

Ytterligare noggrann arkivering rensade upp hålet och säkerställde en fin tät presspassning för att säkerställa att lysdioden inte stack ut för långt ovanför den övre ytan.

Steg 5: Programvaran

Mjukvaran
Mjukvaran
Mjukvaran
Mjukvaran
Mjukvaran
Mjukvaran

Översikt

Så det här är en process i två delar.

  1. Få och förstå hur Deej fungerar och redigera Config.yaml -filen
  2. Redigera Arduino -koden för att matcha hårdvaran och önskade funktioner
  3. Skaffa Arduino Joystick -biblioteket

I mitt fall ville jag ha dessa funktioner:

  • Vred som styr nivåer (mikrofon och utgång)
  • Stäng av strömbrytaren
  • 2 -axlig joystick som känns igen av Windows för applikationsanvändning

Nivåer

Deej tar ganska mycket hand om den första punkten när den kommer. Jag justerade inte den här funktionen

Stäng av strömbrytaren

Jag hade tidigt bestämt att jag skulle använda pressen/omkopplaren i joysticken som en funktionell ljudknapp.

När du undersöker koden ser du att jag (inledningsvis) har valt att använda en 'mjuk' tyst - när knappen trycks ned reduceras MIC -volymen till noll (och lysdioden lyser). När den trycks in igen återgår MIC -volymen till den tidigare inställningen och lysdioden släcks.

Så småningom kommer jag att titta på att implementera Arduino -tangentbordsbiblioteket för att växla avstängningsstatus genom den utökade mediatangentkodset.

Joystickimplementering

Detta kräver användning av Arduino Joystick -biblioteket för att säkerställa att joysticken känns igen som en HID -enhet av Windows och följaktligen av alla spel/applikationer.

Jag är lite av en noob när det gäller kodning och tyckte att Joystick -biblioteksdokumentationen var lite gles på själva implementeringssidan - men lite fokuserad googling ledde mig till andra exempel som hjälpte mig att förstå vad som händer. Kontrollera resursavsnittet i slutet för mer information.

Allt jag behövde göra var att identifiera X/Y -stiften, läsa deras tillstånd och skicka det till joystick -biblioteket. Arduino framträdde som en Leonardo till Windows och var korrekt konfigurerad som en joystick -enhet.

Jag kunde ställa in den i Elite Dangerous, tillsammans med min befintliga HOTAS -installation och låta joysticken ordentligt styra saker och inte komma i konflikt med HOTAS. Det fungerar också bra i Star Wars: Squadrons - jag har det inställt som en snabb växling för att sätta upp sköldarna medan du är i strid.

Filerna som fungerar med min joystick -installation

Jag har laddat upp mina nuvarande (oktober 2020) filer till Codepile.

  • Arduino -kod (.ino -fil)
  • Deej config.yaml

Steg 6: Avsluta

Slutet
Slutet

Den här är klar. Det fungerar och jag är ganska nöjd med hur det gick ihop. Och jag lärde mig lite mer om hårdvarudesign, integration och Arduino -programmering.

Steg 7: Tillägg..dum..dum

Tillägg..dum..dum
Tillägg..dum..dum

VLC - den fantastiska ljud- och videospelaren har lite konstigheter där volymnivån, när den styrs externt, hoppar från 0% till 27% ish. Detta händer inte när du justerar nivån med volymkontrollen i appen, bara med externa kontroller som Deej.

Deej-utvecklaren hittade snabbt en in-VLC-lösning som gör jobbet, se bilden ovan:

"… om du vill inaktivera detta" Spårning "-beteende kan du göra det genom att ändra VLC: s ljudutmatningsmodul. Jag använde DirectX i mina försök här. Du måste starta om VLC för att ändringen ska träda i kraft. (Du kommer fortfarande har en Windows -ljudsession och kan styra den via deej, detta kommer bara att förhindra att VLC -volymraden rör sig med den)"

Steg 8: Ytterligare resurser

Ytterligare resurser
Ytterligare resurser

Hittade via den mäktiga Goog, listad i ingen särskild ordning …

  • Arduino Joystick Library (v2) - behövs för att integrera joysticken
  • Sparkfun Pro Micro -anslutningsguide - bra resurs om denna Arduino
  • deej - programvaran som driver knapparna
  • USB -anslutningstyper - vem visste att det fanns så många varianter?
  • Arduino Pro Micro Analog Pinouts
  • Arduino Leonardo Gaming Joystick - Leonardo liknar Pro Micro, bara större
  • Arduino Pro Micro (Clone) -port upptäcktes inte (lösning) - när du murar din Pro Micro (jag gjorde)
  • Arduino Leonardo/Micro som spelkontroll/joystick
  • Exempel på att använda en multimediaknapp för att stänga av ljudet - med hjälp av HID -projektbiblioteket
  • HID Projektbiblioteksexempelkod för att pausa / spela upp media
  • Ett annat kodexempel som visar spelkontrollen.
  • ArduinoGamingController_updated - bra kodbeskrivning av användningen av joystickbiblioteket
  • LED -motståndskalkylator - för att ta reda på hur stort motstånd du behöver i ditt projekt
  • Ikonbibliotek - flaticon.com - källa till bilderna som används ovanför knapparna
  • En annan motståndsfärgavkodare - klicka på en färg och altfiol!

Rekommenderad: