Personal Project · Arduino · 2023
Remote-Control Sailboat
A catamaran sailboat I could steer from shore over a radio link, from either a laptop or a joystick. The hardest part was not the firmware: the only radio shield I owned was built for a board twice the size of the one I needed, so I soldered my own adapter.
2023 · Personal project
Arduino (C++) · Python · XBee Radios · Soldering · Onshape · 3D Printing
Objective
A sailboat I could control from shore: trim the sail and steer the rudder over a radio link, from either a laptop or a handheld joystick, running on batteries for as long as possible.
- BoatArduino Nano · XBee radio on an Uno shield · SG90 and FS90MR servos · 4×AA pack
- RemotesPython on a laptop with a USB XBee, or an Arduino Uno with a joystick
- StructureTwo water bottles · 3D-printed deck, keel, rudder, and electronics holder
Hull Design
I made the boat a catamaran: two water bottles joined by a 3D-printed deck and keel. Two hulls make it far more stable than one, it moves quickly, and because the printed parts are held on with zip ties, I could redesign any single part without rebuilding the boat.


Shield Incompatibility
To make the batteries last, the boat runs on an Arduino Nano and micro servos. But the only XBee radio shield I had was made for the Arduino Uno, a much larger board with a different layout, and space on the deck was tight.
So I made my own adapter: a soldered perfboard that mounts the Nano and the Uno shield together and wires one to the other, laid out to take as little room as possible in the electronics holder.



Firmware and Radio Link
Commands travel over the XBee link as single characters at 9600 baud: one pair for sail in and out, one for rudder left and right, and a neutral command for when the stick is released. Both remotes only send when the input changes, and the joystick remote ignores small movements around center, so the radio carries events instead of a constant stream.
The boat does the rest. While a rudder command is active, it steps the rudder one degree every 25 ms until it hears neutral, clamped between 5° and 160° to keep it within its range of motion. The joystick button starts a rescue mode that swings the rudder hard from side to side to work the boat free.
Structural Iteration
The rudder and sail both went through more than one version. The original sail frame was made from kebab sticks, which are weak and limited how big the sail could be. I rebuilt it from pencils connected by 3D-printed joints, which made it much stiffer and let me fit a larger, more powerful sail.


Result
The boat sails and steers on open water from either remote, on a circuit board I designed around the parts I actually had.