Arm
Your Atari - Part 2 of 2 by Ted Wilmot ANALOG Computing,
August 1986, p. 85-90
Welcome back for another installment of
Arm your Atari. I hope your construction efforts have been
successful up to now, because the real fun's about to begin. As I
mentioned at the close of last month's section, no matter how skilled you
become, when you control the arm with timing loops, you can never really
be sure of its position. If you tried programming the arm to move the game
pieces supplied with it, you were greatly dissappointed. There was no way
of predicting the arm's position. Right now, our arm is essentially
lost--it can't tell the computer where it is in space. However, with
directional feedback, the computer can continuously monitor the position
of every joint, compare this data to some preprogramed values and allow
compensation for any errors. Moreover, with feedback, the arm can be
programmed to automatically perform any task the operator would have had
to execute manually. Also, with feedback, the arm will be able to repeat
tasks with great precision--just like an industrial robot. To add
feedback to the arm, potentiometers (Atari paddle controllers) must be
attached to every joint. This way, the computer can simply read (in BASIC)
the values of the paddles. It can then output data corresponding to the
direction the arm should be moved, with respect to some reset values. In
all, four potentiometers will be required: two for the shoulder joints,
plus one for the elbow and one for the wrist. If you've been keeping
track, two joystick ports will be required for the feedback data (one port
for every two potentiometers), in addition to the port required for the
output data. Let's see ... that's three! I'll bet you XL owners are
really happy at this point, but don't despair; I'm revising the
hardware/software to allow you to get away with two ports, with a slight
decrease in speed. If there's enough interest, I'll test the design and
send it in.
Onward. Enough preliminary stuff;
let's plunge in! To begin with, you'll need four (4) 1-meg ohm linear
taper potentiometers with 1/4" shafts (preferably plastic). Atari paddles
are really 1-meg potentiometers in disguise, but I wouldnt recommend using
them. The shafts are too large, and the potentiometer housings are
difficult to work with. Cut the shafts of two potentionieters, so that
1/2" projects from the housing. Then cut four pieces of sheet metal into
1/2" by 3" strips. Drill them according to Figure 1, depending on the type
of potentiometer you're using.
Figure 1. (click image to
enlarge)
|
| Next, attach two potentiometers and strips,
bending the strips as per Figure 2. Then set the elbow/wrist joints in
their mid-positions. Set the potentiometers in their midpositions, as
well. Referring to Figure 3, install the wrist and elbow potentiometers.
Wasn't that easy?
Figure 2. (click image to
enlarge)
|
|
Figure 3. (click image to
enlarge)
|
| Beware--life gets harder. Drill two 3/32" holes
in the shifts Of the remaining two potentiometers, to a 1/4" depth. Now
obtain a 3" piece of 7/8"-round stock threaded with 6NC32 threads. A cut
off screw works well, or you can thread a piece of the energy level
indicator support left over from last time. Cut the threaded stock into
1" and 2" pieces. Screw the 1" piece into one of the potentiometers. Now,
remove the housing on the end of the arm, the one that says Radio Shack
ARMATRON and drill a 1/4" hole in the housing, as in Figure 4.
Figure 4. Shoulder Potentiometer
Instructions -- Side View. (click image to enlarge)
|
| Now, remove the screw that would lie directly
behind the hole and reinstall the housing. Firmly screw the end of the
shaft into the hole. Next, attach one of the sheet metal strips to the
potentiometer, and drill a hole through the strip and the housing as in
Figure 4. Use a small machine screw to hold the bracket to the
housing. Now for the bottom-potentiometer. As I mentioned last time, a
potentiometer has to be mounted under the arm's chassis to detect the
shoulder's position. As you probably know by now, the shoulder, like the
wrist, is capable of rotary motion. Unfortunately, the potentiometer
has a limited turning angle. Therefore, we must construct a free-spining
potentiometer capable of rotary motion. To do this, we must disassemble
the remaining potentiometer. With it taken apart, you'll notice a dimple
in the housing directly below the contacts. This is the enemy; destroy it,
being careful not to damage the rest of the potentiometer's
housing. With the dimple removed, the wipers (electrical contacts on
the shaft's end) must be altered. Bend the wipers at the ends, so they
wont get caught on the contacts--regardless of the direction of
rotation. Now, remove the screw directly below the arm's main shaft;
screw in the remaining 2" threaded piece. Attach the remaining metal
bracket to the potentiometer and screw it onto the shaft. Drill a hole
through the bracket and the chassis as seen in Figure 4 and attach the
bracket to the chassis using a sheet metal screw. Now for the wrist ...
Unlike the other arm joints, the wrist joint is nearly impossible to mount
a potentiometer on. The joint is fed by three gears: one to raise and
lower, one to rotate, and one to open or close the "jaw." All are
contained in the wrist housing, making it too cramped to mount a
potentiometer inside. How can we achieve feedback from the wrist to the
computer? Well, I'm sure you electrically oriented types have just thought
up at least a dozen ways-optical, magnetic and similar approaches, all of
which can be implemented outside the wrist housing. While optical and
magnetic routes are perfectly acceptable, they would generally be too
expensive and technically involved for our application. I've decided to
use micro switches for the job. In this way, the switches can be mounted
outside the wrist housing, and may be actuated by the turning jaw-thus
eliminating any wires to the jaw itself! Moreover, the switches, like
the potentiometers, can be read directly by the computer in BASIC with a
PTRIG command. If you have a 400/800 machine with four joystick ports, you
could (theoretically) read eight switches. While that amount of resolution
would be nice, the wiring would be obtrusive. I elected to go with two
switches on my prototype arm, one each for vertical and horizontal jaw
orientation. This doesn't sound like many switches, and there isn't any
angular resolution to speak of, but it's more than adequate for our
purposes. Before. the switches can be mounted on the wrist housing, the
latter must be altered. To do this, the wrist must be dissassembled.
Remove the wrist-mounted potentiometer and the two round black
"bearings." Then remove the two screws holding the wrist housing
together. Separate them, releasing the jaw and associated gears. Now, file
down the round collar at the end of the wrist housing as shown in Figure
5. Next, drill the housing pieces as in Figure 6 and install the
switches/mounting brackets. Note: make sure all switch levers
face the same direction of rotation with respect to the jaw's axis of
rotation. With the switches in place, reassemble the wrist housing and
reinstall the wrist potentiometer. Now for some wiring ... In my arm,
the potentiometers and switches were wired as you see in Table 1. it would
be worth your while to check the response of each joint individually, with
a simple PTRIG/PADDLE(x) routine, before soldering any wires
together. If you're unfamiliar with the wiring convention used in Atari
paddles, Figure 7 shows how to connect two potentiometers to a single
joystick port.
Figure 5. Collar File Guide. (click
image to enlarge)
|
| Note: to avoid software conflicts, use joystick
port 3 to read the PTRIG (wrist) values--i.e., PTRIG (4-5). If you've
been wondering why no feedback has been added to the jaw itself, the
answer is simple. The jaw is intemally protected from damage due to too
much opening and closing. Therefore, it's best to use simple timing loops
to control it.
Trying it out.
Now to test
our creation ... Listing 1 shows a BASIC program that allows you to read
in'the values of the various joints in a data statement, and have the arm
execute the movements you wish-based on your data. To use the program
manually (with the joysticks), move the arm to the object you want to pick
up. Align the wrist so one of the two switches is closed (the orientation
may be important at times). Type GOSUB 5000 to read the joint values-and
write them down. Manually move the arm to the target destination and,
again, type GOSUB 5000.
Figure 6. Collar Drill Guide. (click
image to enlarge)
|
| Repeat the above procedure for all the objects
you want to move, then put the data into Line 170's data statement. Note:
change the variable L (Line 10) to reflect the number of iterations
required (i.e., the number of data values divided by 2). Good luck with
your new toy. I hope all of you enjoy your creations as much as I do
mine!
Ted Wilmot is a senior at SUNY Binghamton, majoring in
Electrical Engineering Technology. He has an A.A.S. in E.E.T. and
has been interested in computer/electronics since 1972. He's
designed and built numerous electronic/software projects, most
frequently with BASIC, APL and assembler. |
The two-letter checksum code preceeding the
line numbers here is not a part of the BASIC program. For
further information, see the BASIC Editor II,
page 43. |
Listing 1. BASIC listing.
|
ZI 5 P=PEEK(54018):POKE 54018,P-4:POKE 54
016,127:POKE 54018,P
AV 6 REM SET UP PORT 1 FOR OUTPUT
AJ 10 FOR L=1 TO 4:REM # OF ITERATIONS OF
# OF DATA VALUES/2
WO 11 FOR Z=1 TO 450:POKE 54016,76:POKE 5
4016,12:NEXT Z
SN 12 FOR Z=1 TO 550:POKE 54016,74:POKE 5
4016,10:NEXT Z:POKE 54016,64:POKE 5401
6,0
HJ 13 FOR I=1 TO 9
MQ 14 READ PA,PB,PC,PE,WL,PPA,PPB,PPC,PPE
TN 15 GOSUB 40
SW 16 FOR Z=1 TO 450:POKE 54016,65:POKE 5
4016,1:NEXT Z
OR 17 FOR Z=1 TO 300:POKE 54016,74:POKE 5
4016,10:NEXT Z:POKE 54016,64:POKE 5401
6,0
OV 35 PA=PPA:PB=PPB:PC=PPC:PE=PPE
TR 36 GOSUB 40
JF 37 NEXT I
KI 38 NEXT L
ZJ 39 END
DK 40 C=PADDLE(2):REM MAIN MOVEMENT ROUTI
NE
DE 50 E=PADDLE(4)
DC 60 A=PADDLE(5)
CH 70 B=PADDLE(3)
SY 80 IF APA THEN D=9:N=5:X=PA:GOSUB 200
0
ET 100 IF BPB THEN D=2:N=3:X=PB:GOSUB 20
00
ID 120 IF CPC THEN D=7:N=2:X=PC:GCSUB 20
00
NJ 131 IF WL=1 THEN GOSUB 3000
NZ 132 IF WL=0 THEN GOSUB 4000
UM 140 IF EPE THEN D=10:N=4:X=PE:GOSUB 2
000
ZJ 160 RETURN
JX 170 DATA 112,145,1,80,1,228,106,49,131
QU 900 REM
ES 910 REM MAIN OUTPUT ROUTINES
QY 920 REM
HM 1000 A=PADDLE(N)
AN 1020 IF AX THEN GOTO 2050
FZ 2030 POKE 54016,64:POKE 54016,0
AM 2040 RETURN
OZ 2050 POKE 54016,D+64:POKE 54016,D
NS 2060 GOTO 2000
UE 3000 P=PTRIG(4)
QJ 3010 IF P=1 THEN GOTO 3040
FX 3020 POKE 54016,64:POKE 54016,0
AX 3030 RETURN
PO 3040 POKE 54016,69:POKE 54816,5
OB 3050 GOTO 3000
UT 4000 P=PTRIG(5)
RH 4010 IF P=1 THEN GOTO 4040
FY 4020 POKE 54016,64:POKE 54016,0
AL 4030 RETURN
PP 4040 POKE 54016,69:POKE 54016,5
ON 4050 GOTO 4000
KU 4997 REM
AR 4998 REM ROUTINE TO OBSERVE JOINT VALU
ES
LC 4999 REM
RY 5000 C=PADDLE(2)
SK 5010 B=PADDLE(3)
TL 5020 A=PADDLE(5)
TX 5030 E=PADDLE(4)
BV 5040 PRINT A,B,C,E
OZ 5050 GOTO 5000
| |
Figure 7. Paddle/Switch Wiring
Diagram. (click image to enlarge)
|
|
Table 1.
|
ARM PADDLE VALUE
OUTPUT DATA REACTION REACTION
--------------------------------------------------------
2 ELBOW L DECREASE
3 ELBOW R INCREASE
4 HAND CCW *
5 HAND CW *
6 HAND UP INC
7 HAND DOWN DEC
8 SHOULDER CW INC
9 SHOULDER CCW DEC
10 SHOULDER UP DEC
11 SHOULDER DOWN INC
12 JAW OPEN -
1 JAW CLOSE -
| | |