This page is about the making of my BB-8 droid. The drive mechanism is based on the design from James Bruton’s X-Robots website.  His was 3D printed, but most of mine is made from wood because I didn’t have a 3D printer at the time when this project was started.  I was originally planning to paint it orange and white like the movie droid, but decided in the end to do something unique and paint only the orange parts and gray details to give it a sort of vintage retro look. 

Ball Construction

The main body ball is made from half inch baltic birch plywood for the ring walls and poplar for the ball slats.  I cut all the slats and then tapered them on a special jig on the table saw.  Once they were tapered, they were glued to the ring walls until the complete drum was formed.

After I had the drum together, a turning jig was used to spin the drum to grind and sand it smooth, both on the outside and the inside.

The side panels for the drum started as segmented rings cut out on the CNC machine.  The side panels were made with the original intent to cover the whole thing with an outer skin much like the XRobots BB-8… 

…but I then decided that the wood was too good of a look to cover up so the side panels received fill pieces to make them solid.

Once the ball was complete, I used a Dremel tool to carve the details and then filled all the carved slots with walnut wood putty and sanded everything smooth again.

Head Construction

BB-8’s head is a hollow styrofoam half-sphere from Michael’s arts and crafts that was covered with iron-on wood edge banding.  The bottom ring of the head was machined from a poplar ring and glued onto the covered styrofoam piece. 

Inside the head there is a carriage with three casters that rides against the ball.  I got my CR-10S 3D printer sometime while building the head, so the caster mounts and the central column of the carriage were the some of my first 3D printed parts, and the casters themselves were cut out from poplar.  The wheels of the casters were printed in TPU plastic.  Note the large magnets that couple the head to the body.  I found that the steel bolts that pass through the column were making the rotation lumpy due to the magnetic attraction as the head rotated, so the bolts were replaced with threaded brass rods.

The head has five neopixel LEDs, one RGB LED, and four tilt switches that connect to an Arduino Nano.  The program drives the lights in different flashing and color combinations depending on the tilt switch inputs.


The flywheel provides side-to-side stability as it is actively pivoted and also allows for BB-8 to lean to turn while rolling.  It also can be spun as a reaction wheel to get BB-8 to turn on the spot.  The flywheel shell was formed by CNC routing the blank for the hollow inside and then turning it over to shape the outside.  About 15 pounds of lead were melted and poured into the inside form to give it the needed weight. 

The flywheel mounts on a large lazy susan bearing that also can pivot along the centerline of BB-8’s body.  The centerline pivot is made of blocks of HDPE (high density polyethylene) that can rotate around the central aluminum axle.  The flywheel tilt motor is a windshield wiper motor and the two spin motors that act in tandem are spring-loaded against the inside of the wheel.  The spring arrangement shown in the picture below was later changed to a more vertical arrangement to get the battery boxes to fit.

Internal Mechanism

The internal mechanism starts with a carriage made of 1/2″ plywood.  The guide wheels around the edge are ball bearings with 3D printed TPU tires.  The flywheel tilt mechanism is actuated from a curved track that has threaded rod tapped into the bottom, and is mounted to the carriage.  The drive wheel is powered by a windshield wiper motor.  There also is a 3D printed box to hold the LiPo (Lithium Polymer) batteries that power the droid.

Here you see the internals test fit into the ball.  The tilt angle between the carriage and the flywheel mount is measured with a potentiometer.  The tilt mechanism for the flywheel mount is a second windshield wiper motor that drives a wheel which rides along the curved track. 

The ball has grooves routed between the LED openings to embed the wiring.  Once the wires were connected, the grooves and the LED openings were filled with epoxy and then sanded smooth.  In the finished droid, the motor drivers and power switches are on one side and the processors, audio boards, and Bluetooth receiver are on the other.  Both sides have a slip ring and a wiring arm to connect the ball LEDs to the processor.  The slip rings allow the internal mechanism to rotate independent of the ball itself.  The three springs on each side are the connection to the LEDs on the ball side panels.  The ball side panels snap on to the magnets embedded in the wood around the perimeter, and the springs make the necessary electrical contact.


The droid’s main processor is an Arduino Mega 2560. There are also two Arduino Nano processors that take care of the neopixel LED processing and the IMU processing. There’s an MP3 sound player that holds the recordings of the BB-8 sounds as well as a bunch of music files. Speakers in the ball are from an old Bose clock radio and are powered from an audio amplifier. The control of the robot’s functions is via Bluetooth.  There are four drivers on the other side of the droid that take PWM signals from the Mega to power the motors.  Also on the motor driver side are the power and enable switches for the various functions.


The remote has four joysticks, an LCD display, a Bluetooth transceiver, and an Arduino Nano to control it all. 

The Whole Thing

Here are some pictures of the unpainted head and body, before I filled all the carved slots with walnut wood putty.  Dave looks very excited in the third photo.

And here are some pictures of the droid after painting, but before varnishing.

And finally, a picture of the finished droid.


Here is a zip file with all the software for the five processors used in the droid:

BB-8 Software

Comments are closed.