Controlling an Arm with the Bot Board (Basic Atom) and the SSC-32

Last modified by Eric Nantel on 2026/04/06 11:03

Controlling an Arm with the Bot Board (Basic Atom) and the SSC-32

Make the Connection
 

Before writing a program to control the arm, the serial data connection must be made. The SSC-32 includes a short two-conductor cable assembly. The black wire goes to ground and the yellow wire carries the signal.

The .1" spaced end connects to the SSC-32 at the pins marked RX and ground. Make sure the SSC-32 is set for 38.4k baud. Remove the DB9 enable jumpers if present. Yellow goes to RX, black goes to ground.

The .2" spaced end connects to Bot Board I/O pin 15. The black wire goes closer to the outside edge of the board; the yellow wire goes closer to the IC. Note: the nylon standoff has been removed for this photo.

Figure 1.
Enabling the Servos
 

The SSC-32 will not send servo pulses until it receives the proper command. The program below enables channels 10 through 15, moving all servos to their mid positions (1500µs). Note: all serout commands must be one continuous line — if you copy and paste, remove any line breaks. You can substitute the 1500 values with other starting positions to prevent the arm from jumping.

serout p15,i38400,["#10 P1500 #11 P1500 #12 P1500 #13 P1500 #14 P1500 #15 P1500",13] start: goto start 'loop
Move the Arm Smoothly
 

The program below moves the arm from an initial position to a new position, then to another, then cycles back and forth. Each move takes 2 seconds to complete. These servo values are arbitrary — replace them with the actual positions you want the arm to move to.

serout p15,i38400,["#10 P1500 #11 P1500 #12 P1500 #13 P1500 #14 P1500 #15 P1500",13] start: serout p15,i38400,["#10 P1400 #11 P1400 #12 P1400 #13 P1400 #14 P1400 #15 P1400 T2000",13] pause 2000 serout p15,i38400,["#10 P1600 #11 P1600 #12 P1600 #13 P1600 #14 P1600 #15 P1600 T2000",13] pause 2000 goto start 'repeat
Code Specific to the Arm
 

Using variables and the gosub command makes the code easier to read. This program accomplishes the same thing as the previous one, but lets you set positions by name instead of raw numbers. The first serout still uses servo channel numbers directly.

base var word 'Base rotate shld var word 'Shoulder pivot elbo var word 'Elbow pivot wrst var word 'Wrist pivot grip var word 'Gripper open/close grpr var word 'Gripper rotate (L6 only) ttm var word 'Amount of time to take to move serout p15,i38400,["#10 P1500 #11 P1500 #12 P1500 #13 P1500 #14 P1500 #15 P1500",13] start: 'first move... base=1400: shld=1400: elbo=1400: wrst=1400: grip=1400: grpr=1400: ttm=2000 gosub send_data 'second move... base=1600: shld=1600: elbo=1600: wrst=1600: grip=1600: grpr=1600: ttm=2000 gosub send_data 'add more moves here... goto start send_data: serout p15,i38400,["#10P", DEC base, "#11P", DEC shld, "#12P", DEC elbo, "#13P", DEC wrst, "#14P", DEC grip, "#15P", DEC grpr, "T", DEC ttm, 13] pause ttm return
In Conclusion
 

I hope you find this simple tutorial helpful. More content will be added in the future. You can now control the Lynx arms easily and eloquently from a BASIC Atom / SSC-32.

Happy Roboting,
Jim Frye

Tags:
Created by Eric Nantel on 2024/07/03 09:21
Copyright RobotShop 2018