IEEE Spectrum February, 2013 - 22

A keyboard command switches the spacecraft
between rotation and translation modes, which
simulates the action of the small thrusters that
real spacecraft use for both rotation and translation, but with different firing patterns. Another
vital keyboard command stops all spacecraft
rotation to prevent the spacecraft from drifting
into a confusing multiaxis spin.
With this in mind, I decided on two buttons-
one to switch thruster modes and the other to
kill any spin-along with small left- and righthand joysticks.
In rotation mode, the right joystick acts like a
traditional airplane joystick-pushing forward
pitches the nose down, pushing left rolls the
spacecraft to the left, and so on. Meanwhile,
moving the other joystick left and right makes
the spacecraft yaw back and forth. In translation mode, pushing forward, back, left, and
right on the right-hand joystick will accelerate
the spacecraft in the matching direction. Moving the left joystick forward and back accelerates the spacecraft up and down.
The joysticks, made by Parallax, cost $5 apiece.
These spring-loaded two-axis joysticks are
essentially two potentiometers set at right angles
22

|

FEB 2013

|

NORTh AMERICAN

|

to each other. Electrical resistance is proportional
to the position of the joystick along each axis.
I also added a switch that turns the Leonardo's
ability to send keystrokes on and off (as indicated
by an LED on the side of the controller). This switch
means I can leave the USB controller plugged in
when I'm not using Orbiter, without having to worry about, say, knocking against the device and inserting random characters into an e-mail.
Wiring up the components to the Leonardo was
easy by design. The Leonardo, like all Arduinos,
provides a 5-volt reference voltage and a number
of built-in analog-to-digital converters for making exactly the kind of resistance measurements
I needed to use the joysticks. The digital input pins
can be configured to use internal pull-up resistors
to prevent spurious readings, so I could connect
the switch and buttons directly to the Leonardo.
Digital output pins provide enough current to
power my indicator LED, so the only additional
component required in the whole system was a
current-limiting resistor in series with the LED.
Programming the Leonardo was only slightly
more difficult than wiring it up-about 100 lines
of code to map the inputs from the joysticks
and buttons to outgoing keystrokes, written

SPECTRUM.IEEE.ORG

stephen Cass (3)

E-Z USB: Arduino microcontrollers have supporting input/
output circuitry built in, so wiring up joysticks was trivial to do in
my test setup [top left]. To mimic signals from a USB keyboard,
I used an Arduino Leonardo. Wooden supports held the joysticks
at the right height [left]. After a minor tweak to the simulator's
configuration, I was in command of my virtual spacecraft [above].

in a version of C developed for
the Arduino.
The trickiest part was constructing the controller's enclosure. As
I live in a third-floor apartment,
I don't have space for a workshop
(or even a dedicated workbench). My
equipment is restricted to the small
hand tools I occasionally use to build
scale models. So a metal enclosure,
for example, wasn't really an option.
I settled on basswood. It's commonly used to make architectural
models, so beams and strips are
available from art supply stores in
precut shapes and sizes. Some sawing and gluing of about $5 worth
of wood produced an enclosure.
The joysticks were held in place by
grooves cut into supporting beams.
While this arrangement probably
isn't robust enough to withstand
the kind of button-mashing frenzy
a first-person-shooter video game
would elicit, it's just fine for the more
subtly operated Orbiter.
A micro USB cable connects the controller to
the computer running Orbiter: The computer's
USB port provides all the power the controller requires, but I had to install a driver to make
Microsoft Windows recognize the Leonardo.
When you operate the controller, the existing
keyboard and mouse remain active, so Orbiter's
full set of commands is available.
I did have to tweak Orbiter's configuration
to use the controller. Normally, Orbiter assigns
the rotation and translation commands to the
numeric keypad found on full-size keyboards.
However, the Leonardo does not support the
ability to distinguish between, say, the 8 on the
keypad and the 8 in the row above the letters.
Fortunately, Orbiter stores its key assignments
in an easily edited text file, so a few moments'
work mapped the relevant commands onto the
keystrokes I had programmed into the Leonardo.
Once that was done, I launched Orbiter and
was instantly able to control my virtual spacecraft with my new controller. A quick flight
around the ISS and a perfect docking confirmed
the new ease in spacecraft handling-and the
new ease in building custom USB hardware-
provided by the Leonardo. -stephen CAss


http://SPECTRUM.IEEE.ORG

Table of Contents for the Digital Edition of IEEE Spectrum February, 2013

IEEE Spectrum February, 2013 - Cover1
IEEE Spectrum February, 2013 - Cover2
IEEE Spectrum February, 2013 - 1
IEEE Spectrum February, 2013 - 2
IEEE Spectrum February, 2013 - 3
IEEE Spectrum February, 2013 - 4
IEEE Spectrum February, 2013 - 5
IEEE Spectrum February, 2013 - 6
IEEE Spectrum February, 2013 - 7
IEEE Spectrum February, 2013 - 8
IEEE Spectrum February, 2013 - 9
IEEE Spectrum February, 2013 - 10
IEEE Spectrum February, 2013 - 11
IEEE Spectrum February, 2013 - 12
IEEE Spectrum February, 2013 - 13
IEEE Spectrum February, 2013 - 14
IEEE Spectrum February, 2013 - 15
IEEE Spectrum February, 2013 - 16
IEEE Spectrum February, 2013 - 17
IEEE Spectrum February, 2013 - 18
IEEE Spectrum February, 2013 - 19
IEEE Spectrum February, 2013 - 20
IEEE Spectrum February, 2013 - 21
IEEE Spectrum February, 2013 - 22
IEEE Spectrum February, 2013 - 23
IEEE Spectrum February, 2013 - 24
IEEE Spectrum February, 2013 - 25
IEEE Spectrum February, 2013 - 26
IEEE Spectrum February, 2013 - 27
IEEE Spectrum February, 2013 - 28
IEEE Spectrum February, 2013 - 29
IEEE Spectrum February, 2013 - 30
IEEE Spectrum February, 2013 - 31
IEEE Spectrum February, 2013 - 32
IEEE Spectrum February, 2013 - 33
IEEE Spectrum February, 2013 - 34
IEEE Spectrum February, 2013 - 35
IEEE Spectrum February, 2013 - 36
IEEE Spectrum February, 2013 - 37
IEEE Spectrum February, 2013 - 38
IEEE Spectrum February, 2013 - 39
IEEE Spectrum February, 2013 - 40
IEEE Spectrum February, 2013 - 41
IEEE Spectrum February, 2013 - 42
IEEE Spectrum February, 2013 - 43
IEEE Spectrum February, 2013 - 44
IEEE Spectrum February, 2013 - 45
IEEE Spectrum February, 2013 - 46
IEEE Spectrum February, 2013 - 47
IEEE Spectrum February, 2013 - 48
IEEE Spectrum February, 2013 - 49
IEEE Spectrum February, 2013 - 50
IEEE Spectrum February, 2013 - 51
IEEE Spectrum February, 2013 - 52
IEEE Spectrum February, 2013 - 53
IEEE Spectrum February, 2013 - 54
IEEE Spectrum February, 2013 - 55
IEEE Spectrum February, 2013 - 56
IEEE Spectrum February, 2013 - 57
IEEE Spectrum February, 2013 - 58
IEEE Spectrum February, 2013 - 59
IEEE Spectrum February, 2013 - 60
IEEE Spectrum February, 2013 - 61
IEEE Spectrum February, 2013 - 62
IEEE Spectrum February, 2013 - 63
IEEE Spectrum February, 2013 - 64
IEEE Spectrum February, 2013 - 65
IEEE Spectrum February, 2013 - 66
IEEE Spectrum February, 2013 - 67
IEEE Spectrum February, 2013 - 68
IEEE Spectrum February, 2013 - 69
IEEE Spectrum February, 2013 - 70
IEEE Spectrum February, 2013 - 71
IEEE Spectrum February, 2013 - 72
IEEE Spectrum February, 2013 - Cover3
IEEE Spectrum February, 2013 - Cover4
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1217
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1117
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1017
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0917
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0817
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0717
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0617
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0517
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0417
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0317
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0217
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0117
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1216
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1116
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1016
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0916
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0816
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0716
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0616
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0516
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0416
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0316
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0216
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0116
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1215
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1115
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1015
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0915
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0815
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0715
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0615
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0515
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0415
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0315
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0215
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0115
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1214
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1114
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1014
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0914
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0814
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0714
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0614
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0514
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0414
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0314
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0214
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0114
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1213
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1113
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1013
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0913
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0813
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0713
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0613
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0513
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0413
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0313
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0213
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0113
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1212
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1112
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1012
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0912
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0812
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0712
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0612
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0512
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0412
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0312
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0212
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0112
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1211
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1111
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1011
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0911
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0811
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0711
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0611
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0511
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0411
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0311
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0211
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0111
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1210
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1110
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1010
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0910
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0810
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0710
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0610
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0510
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0410
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0310
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0210
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0110
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1209
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1109
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1009
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0909
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0809
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0709
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0609
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0509
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0409
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0309
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0209
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0109
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1208
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1108
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1008
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0908
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0808
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0708
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0608
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0508
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0408
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0308
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0208
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0108
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1207
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1107
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_1007
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0907
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0807
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0707
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0607
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0507
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0407
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0307
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0207
https://www.nxtbook.com/nxtbooks/ieee/spectrum_na_0107
https://www.nxtbookmedia.com