Why SY Solitwin?

During my industrial design bachelors program I was inspired to do a personal side project. I wanted to do something that combines many of my skills and talents: computers, sailing, microelectronics and physics.

On bigger sailboats you often experience autopilot systems, that work in a comparable way like SY Solitwin. More often than not, you also experience problems with these systems.

I planned to build a model version of this to deeply understand how one would build a computer system that interacts with physical things and forces on the water.

SY Solitwin autonomously moving across the lake SY Solitwin autonomously moving across the lake
No steering inputs were coming from a human while recording this video.

Key Features

Arduino controlled: I wrote all the code to connect the sensors inputs and convert this in steering output

Autonomous Sailing: The boat can sail in two modes: course (wind-angle) hold and direction (magnetic) hold

Remote controlled modes: The operators is able to switch the autonomous modes via remote control

For more information and resources about this project, check out these pages:

Image of a rc sailboat on land with laptop connected to it Image of a rc sailboat on land with laptop connected to it
I chose a "M-Class" rc sailboat which is around 1 meter in length. Fitting all the electronics was less of a challenge with decent space in the boat.

Development Process

My background in sailing helped tremendously when working on the project.

Once I bought the boat, I started gathering all the sensors and hardware

Some 3D modeling and printing was involved to fit the parts together

I wrote the code to let the boat do what I as a human would do: calculating steering angle based on wind direction and heel

Testing on the lake to see what my code does, implementing these findings, repeating the cycle until it worked

Takeaways

Working with hardware and sensors is harder than I thought. It is fascinating to learn about all these low level systems working behind the scenes of our high performance computer systems nowadays.

It was very interesting, albeit annoying to work with the combination of electronics and water and learning about things like the capillary action.

In the next steps, I will implement the GPS logic, so that this boat can navigate waypoint missions.

. . .

Random facts from this project

Main Codefile

Here is the result of letting your favorite LLM Ai describe my approach to make this little boat sail itself:

1. Sensors

The boat uses three sensors:

  • Wind sensor (MLX90393): detects the direction the wind is coming from.
  • Compass (LSM303 magnetometer): shows which direction the boat is pointing.
  • Accelerometer (LSM303 accelerometer): measures the tilt (heeling) of the boat.

The raw sensor data gets smoothed to avoid jitter.

2. Control Modes

Two main modes are selected using Switch A:

Manual Mode

  • The RC transmitter directly controls the sail and rudder.
  • The system still shows wind, compass, and tilt data for the operator.

Autonomous Mode

  • The boat sails by itself based on wind direction.

  • Switch D selects the sailing style:

    • Close-hauled (upwind)
    • Beam reach (side wind)
    • Broad reach (rear-side wind)

The code checks whether the boat needs to:

  • Hold course (straight)
  • Bear away (turn away from the wind)
  • Luff up (turn into the wind)

It then adjusts the sail and rudder accordingly.

3. Core Logic

The system repeatedly:

  1. Reads wind direction and which side it hits the boat from.
  2. Decides what maneuver is needed for the selected sailing mode.
  3. Calculates the correct rudder and sail positions.
  4. Moves the servos to steer the boat. In manual mode, steps 1–3 are replaced by direct user input.

4. Smoothing & Stability

All inputs—wind readings, RC commands, and magnetic values—are averaged over several samples. This prevents sudden jumps and makes the boat behave smoothly and predictably.

5. Steering Helpers

Two functions handle directional changes:

  • luffUp() – turn toward the wind
  • bearAway() – turn away from the wind

They calculate how strongly to turn based on how far off the desired wind angle the boat is.

Original file on github.

. . .

Curves to calculate the compass heading

In order to get a heading (like 270° West) from the magnetic sensor, you need to interpret the raw sensor readings in x,y and z. These values constantly changed when moving the sensor in space.

Below you find two curves I measured and used for this purpose. The two curves were measured in 2 different locations in my house to account for magnetic deviation of surroundings.

In times before LLM Ai this stuff was an effort!

curve of mag sensor readings curve of mag sensor readings
curve of more mag sensor readings in x y and z curve of more mag sensor readings in x y and z

Main Codefile

Here is the result of letting your favorite LLM Ai describe my approach to make this little boat sail itself:

1. Sensors

The boat uses three sensors:

  • Wind sensor (MLX90393): detects the direction the wind is coming from.
  • Compass (LSM303 magnetometer): shows which direction the boat is pointing.
  • Accelerometer (LSM303 accelerometer): measures the tilt (heeling) of the boat.

The raw sensor data gets smoothed to avoid jitter.

2. Control Modes

Two main modes are selected using Switch A:

Manual Mode

  • The RC transmitter directly controls the sail and rudder.
  • The system still shows wind, compass, and tilt data for the operator.

Autonomous Mode

  • The boat sails by itself based on wind direction.

  • Switch D selects the sailing style:

    • Close-hauled (upwind)
    • Beam reach (side wind)
    • Broad reach (rear-side wind)

The code checks whether the boat needs to:

  • Hold course (straight)
  • Bear away (turn away from the wind)
  • Luff up (turn into the wind)

It then adjusts the sail and rudder accordingly.

3. Core Logic

The system repeatedly:

  1. Reads wind direction and which side it hits the boat from.
  2. Decides what maneuver is needed for the selected sailing mode.
  3. Calculates the correct rudder and sail positions.
  4. Moves the servos to steer the boat. In manual mode, steps 1–3 are replaced by direct user input.

4. Smoothing & Stability

All inputs—wind readings, RC commands, and magnetic values—are averaged over several samples. This prevents sudden jumps and makes the boat behave smoothly and predictably.

5. Steering Helpers

Two functions handle directional changes:

  • luffUp() – turn toward the wind
  • bearAway() – turn away from the wind

They calculate how strongly to turn based on how far off the desired wind angle the boat is.

Original file on github.

. . .

Curves to calculate the compass heading

In order to get a heading (like 270° West) from the magnetic sensor, you need to interpret the raw sensor readings in x,y and z. These values constantly changed when moving the sensor in space.

Below you find two curves I measured and used for this purpose. The two curves were measured in 2 different locations in my house to account for magnetic deviation of surroundings.

In times before LLM Ai this stuff was an effort!

curve of mag sensor readings curve of mag sensor readings
curve of more mag sensor readings in x y and z curve of more mag sensor readings in x y and z
. . .