Inhoudsopgave:

Arduino Keyboard Joystick Extender Box en Sound Controller Thing met Deej - Ajarnpa
Arduino Keyboard Joystick Extender Box en Sound Controller Thing met Deej - Ajarnpa

Video: Arduino Keyboard Joystick Extender Box en Sound Controller Thing met Deej - Ajarnpa

Video: Arduino Keyboard Joystick Extender Box en Sound Controller Thing met Deej - Ajarnpa
Video: 5 Best USB Volume Control Knobs for Audio Adjustment 2024, November
Anonim
Arduino Keyboard Joystick Extender Box en Sound Controller Thing met Deej
Arduino Keyboard Joystick Extender Box en Sound Controller Thing met Deej

Tinkercad-projecten »

Waarom

Ik wilde al een tijdje een kleine joystick aan mijn toetsenbord toevoegen om interface-elementen te besturen, of andere kleinere taken in games en simulators (MS Flight Sim, Elite: Dangerous, Star Wars: Squadrons, enz.).

Ook voor Elite: Dangerous worstel ik met het mixen van volumeniveaus van externe audio (de ingebouwde muziek, hoewel goed, wordt repetitief na vele uren in het zwart), in-game audio en externe voicepack-ondersteuning.

De ingebouwde bronmixer van Windows is 'ok', maar het is lastig om tijdens een game van scherm en muisbediening te wisselen. Een uitgebreide toetsenbordbedieningskast leek de beste keuze. Deej is de oplossing die ik heb gevonden.

Hoe

Ik heb onlangs over Arduino geleerd en kwam het deej-project op reddit tegen. Het zag ernaar uit dat dit beide problemen in één handig pakket zou oplossen. En ik kon er een handig 3D-hoesje mee ontwerpen en printen.

Wat is deej?

(van de site) deej is een **open-source hardware-volumemixer** voor Windows- en Linux-pc's. Hiermee kun je echte schuifregelaars (zoals een DJ!) je doet.

Mijn versie

Om de doos klein te houden, heb ik gekozen voor knoppen (draaibare lineaire potentiometer (potjes = weerstanden)) in plaats van schuifregelaars. Functioneel werken ze hetzelfde. Huidige en populaire deej-ontwerpen bevatten geen joystick, dus dit zal een beetje een hybride ontwerp zijn. Anders is het een vrij rechttoe rechtaan build.

Deej zal werken met een Arduino Nano, Pro Micro of Uno, maar de Nano en Pro Micro worden 'officieel aanbevolen' door de ontwikkelaar. Ik koos de Arduino Pro Micro omdat ik de joystick wilde, en de Arduino Joystick Library ondersteunt het. Ik kan de Arduino Keyboard Library ook gebruiken als ik de mute-functie van het mediatoetsenbord wil gebruiken (in plaats van de 'soft mute') met de joystickknop, maar dat is verder op de weg.

Stap 1: Benodigdheden

Benodigdheden
Benodigdheden
Benodigdheden
Benodigdheden
Benodigdheden
Benodigdheden

De doos

Download de STL-bestanden (ontworpen in Tinkercad):

  • Bijlagebestanden op Prusa (https://www.prusaprinters.org/)
  • Thingiverse (binnenkort beschikbaar)

De hardware (productie-eenheid)

  • 1x Arduino Pro Micro
  • 4x 10k roterende (knop) Potentiometers (geen Rotary Controllers, gebruik potten)
  • 1x Arduino KY-023 Joystick
  • 5ft schroot cat5 netwerkkabel
  • 1x USB A naar USB B microkabel (USB A is de grote vierkante connector, USB B micro is wat er op de Arduino Pro Micro zit)
  • 1x 5mm rode LED
  • 1x 220 ohm weerstand

Ik had wat extra onderdelen in de buurt, dus ik dacht dat ik een ontwikkeleenheid zou bouwen om dingen uit te testen. Alleen al het aansluiten van dingen op een breadboard maakte het gemakkelijker om het laatste ding te visualiseren.

  • 1x Arduino Pro Micro
  • 4x 10k roterende (knop) Potentiometers (geen Rotary Controllers, gebruik potten)
  • 1x kortstondige drukknopschakelaar (harde resetschakelaar)
  • 1x USB A naar USB B microkabel (USB A is de grote vierkante connector, USB B micro is wat er op de Arduino Pro Micro zit)
  • diverse jumperdraden
  • broodplankje
  • 1x 5mm rode LED
  • 1x 220 ohm weerstand

Stap 2: De behuizing

de behuizing
de behuizing
de behuizing
de behuizing
de behuizing
de behuizing
de behuizing
de behuizing

Het ontwerp

Ik vond enkele van de andere ontwerpen die in de deej-communitygalerij zijn geprofileerd leuk, dus gebaseerd op de functies die ik leuk vond:

  • Eenvoudig te ontwerpen en af te drukken
  • Sta mijn andere desktoprandapparatuur niet in de weg
  • Gebruik geen schroeven of bevestigingsmiddelen om de behuizing vast te zetten
  • Gelijkaardige ontwerpesthetiek als het toetsenbord

Ik heb twee prototypes ontworpen en afgedrukt voordat ik tot dit definitieve ontwerp kwam. Ik wil graag een fysieke versie hebben om mee te spelen in de ruimte waarin ik het gebruik, omdat het me een beter idee geeft van hoe het uiteindelijke object zal werken.

Ik ben kort begonnen met ontwerpen in Fusion360, maar ken het niet zo goed als Tinkercad dus schakelde over en werkte daar.

Omdat ik een schroefloos ontwerp wilde, heb ik een nestkast gemaakt. Het eerste prototype had een dun deksel en een diepe doos voor alles. Het tweede ontwerp verwisselde dat met een diep deksel en een ondiepe bodemdoos. Het moest alleen de Arduino Pro Mini bevatten, dus het hoefde echt niet groot te zijn. Ook de reliëfpictogrammen verwerkt.

Het derde ontwerp is aangepast aan de ruimte naast mijn toetsenbord.

De afdruk

Ik drukte de doos af in PLA, programmeerde een filament / laag-wissel van zwart naar rood voor het deksel waar de pictogrammen net zichtbaar zouden worden, en weer terug naar zwart voor de rest van het deksel.

Een probleem

Door dit alles was de joystickbevestiging een probleem. Zelfs in het derde ontwerp stoot de stick op één plek tegen de steunen. De volgende iteratie zal betere klaringen hebben. Ik had meer aan het ontwerp kunnen werken, maar wilde door naar de volgende fase, installatie.

Stap 3: Het circuit

Het circuit
Het circuit
Het circuit
Het circuit
Het circuit
Het circuit

Slechtste bedradingklus ooit

Ok, dit is mijn eerste volledige Arduino-project. Ja, ik heb eerder dingen op breadboards gedaan en gebruik er een om de ontwikkelingsversie hiervan te bouwen, maar wat betreft het daadwerkelijk fabriceren en monteren, dit is mijn eerste. Dus mijn bedrading ziet er niet uit. Daar, dat is uit de weg:)

Update: ik heb er sindsdien nog een gebouwd en de bedrading is daar veel mooier. Zie de afbeeldingen:)

Productie-eenheid -- Wat gaat waar heen?

De Arduino Pro Micro is een klein bordje en past in het gegoten gedeelte in de basis. Knoppen en joystick passen in hun respectievelijke gaten in het deksel. Maar monteer niets totdat je de soldeerconcurrentie hebt gekregen.

Bedrading

Ik had geen goede circuitdraad, maar had wel een overgebleven rol solid-core cat5-netwerkkabel, dus dat is wat ik gebruikte. Het is een beetje stijver en misschien brozer dan de gevlochten circuitdraad, maar het werkt.

Terwijl ik de componenten neerlegde in een benadering van hun uiteindelijke montagepositie, schatte ik de afstand voor elke draad, voegde een beetje meer toe voor speling, enz., knipte en knipte de draad af. Ik liet veel speling.

Verwijzend naar het bedradingsschema, heb ik de gemeenschappelijke aarde (zwart) en VCC (rood) naar de knoppen en joystick geleid waar aangegeven. Omdat netwerkkabel niet in deze kleuren verkrijgbaar is, heb ik gewoon een kleur gekozen en mijn bedrading consistent gehouden met de functie.

De individuele Pot. analoge lijnen (geel) liepen naar pinnen A0 - A3. De Joystick-lijnen (Oranje), ook analoog, liepen naar I/O-pinnen 8 en 9. Deze zullen in de Arduino-code als Analoog moeten worden aangeduid als A8 en A9.

De joystick switch pin (blauw) liep naar pin 7. Dit wordt een digitale pin in de code.

Isolatie

Omdat deze stijve draad in een kleine ruimte zal worden gestopt, heb ik ervoor gekozen om mijn soldeerverbindingen te isoleren met een gezonde klodder smeltlijm. Vervolgens stopte alles op zijn plaats en voerde een eenvoudige test uit op het bord en de potten met behulp van de versie van de Arduino-voorbeeld AnalogInput-code - aangepast om alle potten te lezen.

Tweede versie

De laatste twee afbeeldingen hierboven tonen de volgende doos die ik aan het bouwen ben. Deze heeft 5 knoppen en een kortstondige drukknop voor het dempen. Geen joystick. Zelfde maat doos.

Stap 4: Afwerking van de hardware

De hardware afmaken
De hardware afmaken

Tegen de tijd dat ik de joystick had geïnstalleerd, realiseerde ik me dat er niet veel ruimte was tussen het bord en de pin-headers op de Pro Micro.

Na een beetje voorzichtig buigen van de pin-headers en het opnieuw aanbrengen van smeltlijm (voor isolatie), sloot de behuizing goed.

Het plaatsen van de potten verliep vlekkeloos.

Weer met de draden

Draden met een massieve kern zijn een beetje stijf en kunnen broos worden als ze te vaak worden gebogen, dus vouw ze voorzichtig (zonder scherpe hoeken) in de beschikbare ruimte. Sommige van de mijne waren te lang en moesten wat extra worden gevouwen.

Zodra alles op zijn plaats zit, plaats je gewoon de basis op de bovenkant en je zou klaar moeten zijn met de hardware ….

Maar wacht, er is meer

Natuurlijk besloot ik na een paar weken gebruik dat ik een indicator nodig had om me te laten weten wat de status is van de soft-coded MUTE-functie.

Na het bewerken van de code om de LED-functionaliteit toe te voegen (zie volgende sectie), soldeerde ik snel de LED / draden / weerstand en verbond ze met het bord.

Ik heb meer tijd besteed aan het boren van het gat door de bovenkant van de behuizing, omdat ik de topafwerking niet wilde beschadigen. Ik markeerde een middelpunt, deukte het in en draaide vervolgens met de hand een boor om het gat te maken.

Extra zorgvuldig vijlen maakte het gat schoon en zorgde voor een mooie strakke perspassing om ervoor te zorgen dat de LED niet te ver boven het bovenoppervlak uitstak.

Stap 5: De software

De software
De software
De software
De software
De software
De software

Overzicht

Dit is dus een proces in twee delen.

  1. Krijg en begrijp hoe Deej werkt en bewerk het bestand Config.yaml
  2. Bewerk de Arduino-code zodat deze overeenkomt met de gewenste hardware en functies
  3. Download de Arduino Joystick-bibliotheek

In mijn geval wilde ik deze functies:

  • Knoppen die de niveaus regelen (microfoon en output)
  • Mute-schakelaar
  • 2-assige joystick herkend door Windows voor toepassingsgebruik

Niveaus

Deej zorgt vrijwel voor het eerste punt zoals het komt. Ik heb deze functionaliteit niet aangepast

Mute-schakelaar

Ik had al vroeg besloten dat ik de druk/schakelaar in de joystick zou gebruiken als een functionele mute-knop.

Als je de code bekijkt, zul je zien dat ik (aanvankelijk) heb gekozen voor een 'zachte' mute - wanneer de knop wordt ingedrukt, wordt het MIC-volume teruggebracht tot nul (en brandt de LED). Wanneer er nogmaals op wordt gedrukt, keert het MIC-volume terug naar de vorige instelling en gaat de LED uit.

Uiteindelijk zal ik kijken naar de implementatie van de Arduino-toetsenbordbibliotheek om de Mute-status te schakelen via de uitgebreide media Keyboard-codeset.

Joystick-implementatie

Dit vereist het gebruik van de Arduino Joystick-bibliotheek om ervoor te zorgen dat de joystick wordt herkend als een HID-apparaat door Windows en bijgevolg door elke game/toepassing.

Ik ben een beetje een noob als het gaat om codering en vond de documentatie van de Joystick-bibliotheek een beetje mager aan de feitelijke implementatiekant - maar een beetje gericht googlen leidde me naar andere voorbeelden die me hielpen te begrijpen wat er aan de hand is. Raadpleeg de sectie bronnen aan het einde voor meer informatie.

Het enige wat ik hoefde te doen was de X/Y-pinnen identificeren, hun status lezen en die naar de Joystick-bibliotheek sturen. De Arduino verscheen als een Leonardo voor Windows en was correct geconfigureerd als een Joystick-apparaat.

Ik was in staat om het in Elite Dangerous op te zetten, naast mijn bestaande HOTAS-opstelling en de joystick de zaken goed te laten besturen en niet in conflict te brengen met de HOTAS. Het werkt ook goed in Star Wars: Squadrons -- ik heb het ingesteld als een snelle schakelaar om de schilden op te zetten tijdens gevechten.

De bestanden die werken met mijn Joystick-configuratie

Ik heb mijn huidige (oktober 2020) bestanden geüpload naar Codepile.

  • Arduino-code (.ino-bestand)
  • Deej config.yaml

Stap 6: Einde

Einde
Einde

Nou, deze is klaar. Het werkt en ik ben best tevreden met hoe het tot stand is gekomen. En ik heb wat meer geleerd over hardwareontwerp, integratie en Arduino-programmering.

Stap 7: Addendum..dum..dum

Addendum..dum..dum
Addendum..dum..dum

VLC -- die geweldige audio- en videospeler heeft een beetje vreemdheid waarbij het volumeniveau, wanneer het extern wordt geregeld, van 0% naar 27% springt. Dit gebeurt niet bij het aanpassen van het niveau met behulp van de volumeregeling in de app-interface, alleen met externe bedieningselementen zoals Deej.

De Deej-ontwikkelaar vond snel een in-VLC-oplossing die het werk doet, zie de afbeelding hierboven:

"… als u dit "volggedrag" wilt uitschakelen, kunt u dit doen door de audio-uitvoermodule van VLC te wijzigen. Ik heb DirectX gebruikt in mijn pogingen hier. U moet VLC opnieuw opstarten om de wijziging door te voeren. (u zult nog steeds een Windows-audiosessie hebben en deze via deej kunnen bedienen, dit zal alleen voorkomen dat de VLC-volumebalk meebeweegt)"

Stap 8: Aanvullende bronnen

Aanvullende bronnen
Aanvullende bronnen

Gevonden via de machtige Goog, in willekeurige volgorde vermeld …

  • Arduino Joystick Library (v2) - nodig om de joystick te integreren
  • Sparkfun Pro Micro-aansluitgids - goede bron over deze Arduino
  • deej - de software die de knoppen aandrijft
  • Typen USB-connectoren - wie wist dat er zoveel varianten waren?
  • Arduino Pro Micro Analoge Pinouts
  • Arduino Leonardo Gaming Joystick - Leonardo is vergelijkbaar met Pro Micro, alleen groter
  • Arduino Pro Micro (Clone)-poort niet gedetecteerd (oplossing) - wanneer je je Pro Micro hebt gemetseld (ik deed het)
  • Arduino Leonardo/Micro als gamecontroller/joystick
  • Voorbeeld van het gebruik van een multimediatoets om te dempen - met behulp van de HID Project-bibliotheek
  • HID Projectbibliotheek voorbeeldcode om media te pauzeren/af te spelen
  • Nog een codevoorbeeld van de gamepad-controller.
  • ArduinoGamingController_updated - goede codebeschrijving van het gebruik van de joystickbibliotheek
  • LED-weerstandscalculator-dingetje - om erachter te komen hoe groot een weerstand je nodig hebt in je project
  • Pictogrambibliotheek - flaticon.com - bron van de afbeeldingen die boven de knoppen worden gebruikt
  • Nog een weerstandskleurdecoder - klik op een kleur en altviool!

Aanbevolen: