USB/HID-styrenhet till Kerbal Space Program

Berätta om dina pågående projekt.
Användarvisningsbild
arvidb
Inlägg: 4537
Blev medlem: 8 maj 2004, 12:56:24
Ort: Stockholm

USB/HID-styrenhet till Kerbal Space Program

Inlägg av arvidb »

Kerbal Space Program (KSP) är en rymdprogramssimulator där man i princip tar rollen som NASA, fast på planeten Kerbin, befolkad av Kerbals. :)

Jag testade nyligen en aktuell version (1.6.1) av KSP och upptäckte att det har blivit mycket bättre jämfört med den gamla 0.90-versionen som jag testade för ett antal år sedan. Det är riktigt kul nu när de har fått till vettig aerodynamik med mera! Så jag började spela en "Career mode"-omgång men upptäckte rätt snart att en joystick vore trevligt. Så jag slutade spela :roll: och har ägnat några veckor åt att istället googla efter lämplig sådan, hitta flera projektloggar över diverse avancerade hemmabyggda kontrollpaneler, bestämma mig för att det vore kul att mecka ihop en egen (något enklare) styrpanel själv, skaffa delar och att börja titta på programmering och schema.

Jag tänker mig en treaxlig joystick (yaw, pitch, roll), analogt pådrag och en Stage-knapp med tillhörande "Arm"-knapp (vad heter det på svenska - "aptera" kanske?). Att "stagea" är alltså att stöta bort utbrända raketsteg, aktivera fallskärmar med mera, och det vill man inte råka göra av misstag! Därav dubbelkommandot på denna funktion.

För detta införskaffades en "new old stock" industriell joystick (APEM 3140SAL600) och ett utvecklingskort med USB-stöd (MSP-EXP430F5529LP) och så letade jag fram ett par tryckknappar i lådorna hemma, en belyst och en motsvarande svart utan belysning. Tanken är att den svarta får bli "Arm"-knapp som aktiverar/tänder "Stage"-knappen vilken sedan kan aktiveras en gång. Sen får man göra om båda tryckningarna för att stagea igen.

TI har exempelkod för HID-enheter som jag har kunnat modifiera så att utvecklingskortet identifierar sig som en USB-joystick med fyra axlar. (Som tur är har jag jobbat med USB förut så jag hade hyfsad koll redan på protokollet.)

Joysticken är av halleffekttyp och ger en rätt högimpediv, ratiometrisk utsignal mellan 0,5 och 4,5 V (om jag förstår databladet rätt):
APEM3000-electrical.png
Mikrokontrollerns ADC är av SAR-typ (Successive approximation) och har en intern referens på 2,5 V:
MSP430-ADC12.png
Jag tänkte mig en 50 kΩ + 50 kΩ spänningsdelare på varje utgång på joysticken samt en kondensator, säg 3,3 nF, mellan den neddelade spänningen och jord. Det borde funka va?

Nu väntar jag främst på stiftlister och passande kontaktdon från Electrokit för att kunna löda ihop detta. På datorsidan är nog det närmaste momentet att kolla att det verkligen går att få KSP att känna av mina "fejkade" joystickaxlar.

Tips på lämpligt reglage för pådrag (throttle) mottages tacksamt. Jag tänker mig något som går att reglera med ett finger, i princip en potentiometer med ratt. Men gärna med snävare manövervinkel (kanske 150°-180°?) samt av kvalitet motsvarande joysticken och knapparna. Jag vet inte om det ens finns något passande?

Sen har jag inte funderat alls på hur man ska kapsla in det hela. Funktionen först. :)
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

Re: USB/HID-styrenhet till Kerbal Space Program

Inlägg av Lennart Aspenryd »

Kan du inte använda någon flygsimulatorgrej som utgångspunkt!
Panel med trycknappar och en arduino kan man väl komplettera med senare.
Användarvisningsbild
arvidb
Inlägg: 4537
Blev medlem: 8 maj 2004, 12:56:24
Ort: Stockholm

Re: USB/HID-styrenhet till Kerbal Space Program

Inlägg av arvidb »

Jovisst hade man kunnat göra det! Men detta kändes roligare.
Zhorts
Inlägg: 217
Blev medlem: 15 augusti 2011, 14:42:03

Re: USB/HID-styrenhet till Kerbal Space Program

Inlägg av Zhorts »

Roligt projekt!

Din spänningsdelare borde fungera - och är det något knas så kan du ju lätt byta värden. Räkna lite på den tidskonstant du får med valt R och C - blir det lagom trögt? Vill man kunna ställa trögheten externt i framtiden, för att se till att ge långsam input till stora farkoster och snabb input till smidiga landare?

Jag hade tittat på en linje-potentiometer för pådrag - den sort som sitter på mixerbord. 100mm längd borde ge bra känsla. Du kan ju också experimentera med en logaritmisk, se om du gillar den kontrollen bättre.

Och för apterings- och steg-brytarna så måste du ju ha den sorten som har någon form av "huva" på sig som man måste fälla upp! Men jag gillar din lösning med två olika knappar som måste tryckas i sekvens - på tok för lätt hänt att man dubbelklickar och gör om sin månlandare till en fyrverkeripjäs.
Tänk på kontaktstuds och hur du ska hantera det - mjukvara eller hårdvara (hint: både och!)

Som du kanske märker så har jag inte gett dig alla svar. Hälften av nöjet är ju att lära sig mer, så du har fått en del ledord att utgå ifrån. Återkom om du behöver mer information om något!
Användarvisningsbild
Anahka1975
Inlägg: 1271
Blev medlem: 30 augusti 2006, 21:49:46
Ort: Säffle

Re: USB/HID-styrenhet till Kerbal Space Program

Inlägg av Anahka1975 »

Som aptering så är en slik självklar :D
https://www.biltema.se/bil---mc/elsyste ... 2000019022
Användarvisningsbild
arvidb
Inlägg: 4537
Blev medlem: 8 maj 2004, 12:56:24
Ort: Stockholm

Re: USB/HID-styrenhet till Kerbal Space Program

Inlägg av arvidb »

Zhorts: Tack! Jo jag kollade tidskonstanten och det bör funka fint med upp till 100 nF tänker jag mig (ger stigtid 10%-90% på 2,2τ = 11 ms, och flinkare än så lär jag inte vara. ;)). Den andra aspekten är ju den nödvändiga samplingstiden som beskrivs i databladet (se bilden ovan). Med 50 kΩ källimpedans och 12 bitars sampling blir den minst 13 µs enligt ekvationen i databladet. Med 100 Hz samplingsfrekvens och fyra kanaler har jag 2500 µs till godo per sampling så även utan någon avkoppling alls så finns det mycket gott om tid! Men det känns ändå trevligt med lite avkoppling. :)

En trevlig sak med USB HID-enheter är att det går att tala om för hosten vad som är min- och maxvärden för respektive axel. Så det är inte nödvändigt att jag hamnar exakt rätt med motståndsvärdena. Och med 12 bitars upplösning så finns det en del dynamiskt omfång att slösa också. :)

Bra att du kommenterar detta så att jag får ett kvitto på att jag har tänkt på rätt grejer! :tumupp: Intressant tanke om ställbar tidskonstant. Men det löser jag nog hellre i mjukvara i så fall.

Jag gissar att du har kört en del KSP? :)

Zhorts & Anahka1975: Vad gäller uppfällbar huva så har jag sett att de flesta verkar köra med det (eller nyckelaptering), men då blir det ju typ trippelkommando (fäll upp, armera, stage) vilket känns lite väl krångligt. Dessutom vill jag inte ha funktionen (som alltså de flesta verkar köra med) med en enable/disable för stage; jag vill att varje stagening ska bli ett dubbelkommando. Så min tanke är att stage är apterad så länge som arm-knappen hålls nedtryckt, men att det bara går att göra en stage per aptering. Så fort stage trycks ner så slocknar lampan som visar att knappen är aktiv och för att stagea igen så måste man släppa båda knapparna och göra om arm+stage. (Detta tar ju också hand om problemet med kontaktstuds gratis, så att säga. :))

Mjo linjepotentiometer är ju ett alternativ, men jag vill gärna kunna kontrollera pådraget med joystickhanden, utan att släppa joysticken. Det blir nog till att bygga en dummy tror jag och känna efter vad som funkar bäst!
Användarvisningsbild
arvidb
Inlägg: 4537
Blev medlem: 8 maj 2004, 12:56:24
Ort: Stockholm

Re: USB/HID-styrenhet till Kerbal Space Program

Inlägg av arvidb »

Nu funkar joystickdelen i alla fall! :mrgreen:

Kod: Markera allt

$ sudo journalctl -f
apr 21 12:53:43 kernel: usb 1-1.4.1: new full-speed USB device number 6 using ehci-pci
apr 21 12:53:44 kernel: usb 1-1.4.1: New USB device found, idVendor=2047, idProduct=0310, bcdDevice= 2.00
apr 21 12:53:44 kernel: usb 1-1.4.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
apr 21 12:53:44 kernel: usb 1-1.4.1: Product: Rocket Poker v0.63
apr 21 12:53:44 kernel: usb 1-1.4.1: Manufacturer: Kerbin Sticks, Inc.
apr 21 12:53:44 kernel: usb 1-1.4.1: SerialNumber: F67A986F0A001B00
apr 21 12:53:44 kernel: input: Kerbin Sticks, Inc. Rocket Poker v0.63 as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4/1-1.4.1/1-1.4.1:1.0/0003:2047:0310.0005/input/input19
apr 21 12:53:44 kernel: hid-generic 0003:2047:0310.0005: input,hidraw4: USB HID v1.01 Gamepad [Kerbin Sticks, Inc. Rocket Poker v0.63] on usb-0000:00:1a.0-1.4.1/input0

$ sudo evtest /dev/input/event19
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x2047 product 0x310 version 0x101
Input device name: "Kerbin Sticks, Inc. Rocket Poker v0.63"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 304 (BTN_A)
    Event code 305 (BTN_B)
    Event code 306 (BTN_C)
    Event code 307 (BTN_X)
    Event code 308 (BTN_Y)
    Event code 309 (BTN_Z)
    Event code 310 (BTN_TL)
    Event code 311 (BTN_TR)
    Event code 312 (BTN_TL2)
    Event code 313 (BTN_TR2)
    Event code 314 (BTN_SELECT)
    Event code 315 (BTN_START)
    Event code 316 (BTN_MODE)
    Event code 317 (BTN_THUMBL)
    Event code 318 (BTN_THUMBR)
    Event code 319 (?)
  Event type 3 (EV_ABS)
    Event code 0 (ABS_X)
      Value      0
      Min    -1635
      Max     1635
      Fuzz      12
      Flat     204
    Event code 1 (ABS_Y)
      Value      0
      Min    -1635
      Max     1635
      Fuzz      12
      Flat     204
    Event code 2 (ABS_Z)
      Value      0
      Min    -1635
      Max     1635
      Fuzz      12
      Flat     204
    Event code 6 (ABS_THROTTLE)
      Value      0
      Min        0
      Max     4095
      Fuzz      15
      Flat     255
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Den uppmärksamme kanske noterar att den är programmerad att tala om att den är en gamepad. Det är för att försöka lösa det faktum att Kerbal Space Program inte verkar stödja vanliga joysticks! :doh: Återkommer om det när jag har haft möjlighet att testa lite mer.

Hela bygget som det ser ut nu:
SAM_2556_inkopplad.jpg
Adapterkortet mellan MSP-EXP430F5529LP-kortet och joysticken:
SAM_2557_pcb_top.jpg
SAM_2560_pcb_bottom.jpg
Det är för övrigt första projektet som jag löder med blyfritt lod. Jag kan inte säga att jag märker någon större skillnad, förutom att lödningarna inte blir lika blanka som med blyat lod. Just detta lod kanske har ett något svagare flussmedel än mitt gamla blyade lod också (jag fick dutta på lite extra flussmedel ibland).
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Skriv svar