Skip to content

Final Project

THE AUTONOMOUS BOAT : final project documentation

1. MoldParts.stl 2. BurlapCut.dxf
3. FusionArchive 4. BoatduinoPackaging.stl
5. SensorPackaging.stl 6. DirectHighSpeedPropulsion.stl
7. RemoteHighSpeedPropulsion.stl 8. RemoteLowSpeedPropulsion.stl
9. ElectronicPackaging.stl 10. Skeleton.dxf
11. WaterWings.dxf 12. Cabin.dxf

I’ll document here the highlights of my project.

Project Hero Shot

1. Context

At Icam we are implementing a new way of becoming an engineer. It’s a distributed program focused on a problem based learning pedagogy. The students work every year on a project and study it part after part.

We are currently running the first year and we are planning for the second and third one. The project for these years is going to be an autonomous boat. I’ll make my own version of the boat as a prototype, the students and staff can work with.

With this in mind I want to make as many parts as possible using the machines, tools and softwares available in the fablab. I want the boat to be an experimental equipement so it must be modular for the electronic part and the propulsion system as well.

2. Research

Many things have been done on boats during the fabacademy and elsewhere:

Things have been done on navigation systems :

From this year

  • Italo from CIT lab is making a boat focused on a plastic disposal system
  • Antonio from FCT lab is making a boat focused on safety management

We are in touch with Antonio, I’ll focus on the navigation system and he’ll make a system to protect the boat if water goes in.

3. Project management

During the project management week I have detailed some project management tools I use for mechanical design. Here is SysmL diagram, the use case diagram:

4. 2D and 3D Modeling

During the principle and practices week I first thought of how I would like the boat to be :

My inspiration for the design was the famous 3D benchy. I’ve used parametric 3D modeling in Fusion 360 to make all the parts of my boat :

5. The 3D Model

During the computer aided design week I’ve made the 3D model of my boat using Fusion 360.

6. The Boat

Laser cut the skeleton

During the computer controlled cutting week I’ve made the skeleton using the lasercutter.

Finally during the project development week I made another version (smaller) with embedded housing for the electronics.

The hull

Making the mold

During the molding and casting week I’ve milled a mold using the shopbot in foam to make the hull.

Making the hull

During the wildcard week I’ve made the hull of the boat using my mold. I’ve used burlap and a bio epoxy resine.

7. Electronic design

For this project, I’ve decided to make my version of a boatduino and in the spirit of spiral development, I’ve done few different versions, to step by step add features to my board .

During the input device week I’ve made my boatduino V0.1 with the following features :

  • Atmel328p microcontroller
  • FTDI connector
  • I2C connector
  • Digital output indicator

During the output device week I’ve made my boatduino V0.2 with the following features added to the board :

  • Double H bridge to connect two motors
  • External power supply connector

During the project development week I’ve made my boatduino V0.3 with the following features added to the board :

  • Removed the H-bridge
  • Add two mosfests to start the two motors

The idea with this board is to switch on and off the motors seperatly. With the mosfets I can run a higher current to my motors compared to the H bridge.


I have issues with this version of the boatduino, I couldn’t switch high current properly as it created issues with the command part. As per Neil’s advice, I made a PCB simply for the power supply to seperate it from the command.


I can plug this PCB to my boatduino V0.1 if I want to supply higher current :

8.Coding part

I made all my codes using the arduino IDE. The steps of the code are always the same :

  1. Sense something from the environment :

    • The yaw angle (thanks to the MPU6050)
    • A magnetic direction (thanks to the compass)
    • A GPS position (thanks to the GPS module)
  2. Measure how the boat is moving according to the target

  3. Adjust the speed of the motors to adjust the direction of the boat

To adjust the speed of the boat I’ve made two codes :

  • One for switching on and off the motors :
//Initialize Motors
const int controlMotor1 = XX; // put the pin number connected to the mosfet
const int controlMotor2 = XX; // put the pin number connected to the mosfet

void setup()
  pinMode(controlMotor1, OUTPUT);
  pinMode(controlMotor2, OUTPUT);
  // pull the enable pin LOW to start
  digitalWrite(controlMotor1, LOW);
  digitalWrite(controlMotor2, LOW);

void loop()
  if (whateveryousense >= -30 && whateveryousense < 30) { // here change the values depending on what you sense
     // Turn on both motors
    digitalWrite(controlMotor1, HIGH);
    digitalWrite(controlMotor2, HIGH);
  else if (yaw < -30) {
     // Turn on motor1 and off motor 2
    digitalWrite(controlMotor1, HIGH);
    digitalWrite(controlMotor2, LOW);
    else if (yaw > 30) {
     // Turn on motor2 and off motor1
    digitalWrite(controlMotor1, LOW);
    digitalWrite(controlMotor2, HIGH);
  • One for adjusting the speeds of the motors (for smoother navigation) :
//Initialize Motor 1
const int controlPin1 = XX; // put the pin number connected to the H-bridge
const int controlPin2 = XX; // put the pin number connected the H-bridge
const int enablePin = XX;   // put the pin number connected to the H-bridge
int motorEnabled = 0; // Turns the motor on/off
int motorSpeed = 0; // speed of the motor
//Initialize Motor 2
const int controlPin3 = XX; // put the pin number connected to pin 7 on the H-bridge
const int controlPin4 = XX; // put the pin number connected to pin 2 on the H-bridge
const int enablePin2 = XX;   // put the pin number connected to pin 1 on the H-bridge
int motor2Enabled = 0; // Turns the motor on/off
int motor2Speed = 0; // speed of the motor

void setup()
    // initialize the inputs and outputs
  pinMode(controlPin1, OUTPUT);
  pinMode(controlPin2, OUTPUT);
  pinMode(controlPin3, OUTPUT);
  pinMode(controlPin4, OUTPUT);
  pinMode(enablePin, OUTPUT);
  pinMode(enablePin2, OUTPUT);
  pinMode(8, OUTPUT);
  // pull the enable pin LOW to start
  digitalWrite(enablePin, LOW);
  digitalWrite(enablePin2, LOW);

void loop()
  // Map the value of the sensor with the speed of the motors
  motorSpeed = map(whateverYouSense, -90, 90, 0, 255); // Here instead of whatever you sense you must put the variable with the value you sense
  motor2Speed = - (motorSpeed -255);
  // Turn on motor1
    digitalWrite(controlPin1, HIGH);
    digitalWrite(controlPin2, LOW);
  // Turn on motor2
    digitalWrite(controlPin3, HIGH);
    digitalWrite(controlPin4, LOW);
    // PWM the enable pin to vary the speed of both motors
    analogWrite(enablePin, motorSpeed);
    analogWrite(enablePin2, motor2Speed);

These two codes are to be integrated to sample codes given along with the libraries of the different breakout sensor boards we want to use.

9. Possible assemblies

My boatduinos can be used with whatever breakout board that uses I2C or RX TX communication protocols. I did few tries with different boards.

Bluetooth HC06

I’ve experiment with this bluetooth module during the networking and communication week.


This is the sensor I used the most. I’ve used it from the output device week.

This board can be used thanks to this MPU6050 library

During the Interface and application programming week I’ve used processing to have a visual position of my boat

LSM303 compass

This sensor is another way to control the direction of the boat.

This board can be used thanks to this LSM303 libray.

GPS module

Using this module is another way to control the direction of the boat.

This tutorial will guide you about how to use the module.

Sensing the boat environment

During the networking and communication week I found a way to create PCBs to read sensor values and send those values to a master boatduino board using the I2C protocol.

Here it means that I can send values from hundreds sensors to my main boatduino board.

10. The propulsion system

During the project development week I’ve designed three different propulsion systems with different features.

Low speed remote propulsion
High speed direct propulsion
High speed remote propulsion

To assemble or remove this system no need of glue or screws, it’s a snug firt.

11. Materials

Here are the materials I used to make the boat.

Qty Description Price Link Notes
1 PLA Filament 39.60 € makershop
1 5mm beech wood 17.42 € SMbois 0.7 m²
4 50mm Foam 18.62 € A4 technologies
1 Burlab 54.60 € cibytex 2m needed (10.92€)
1 SR GreenPoxy 56 48.60 € Sicomin 0.5L needed
1 Atmega328p 1.21 € Mouser
1 LSM6DS33TR 2.55 € Mouser
1 MPU6050 6.37 € Mouser
1 Atmega328p 1.21€ Mouser 1 per boatduino
1 Electronic components ~10.00€ Mouser
1 FR4 6.84€ CIF
1 MPU6050 6.99€ Amazon
1 GPS module 5.85€ Amazon
1 Compass 10.15€ Amazon
1 HC06-bluetooth 8.49€ Amazon
1 Brass rod 6.00€ Leroy merlin
1 Aluminium tube 2.00€ Leroy merlin
1 Screws/nuts/washers ~3.00€ Leroy merlin
1 Battery 14.99€ Amazon
1 Motors 19.99€ Amazon
1 Battery casing 7.99€ Amazon

12. Video presentation and Slide

Here’s the presentation slide of my project :

Here’s the presentation video of my project :

13. Possible improvements

This project is a work in progress and I could see some improvements to bring to it :

  • Develop an obstacle avoidance systems
  • Develop a power management system (using a solar panel for example)
  • Develop a series of I2C sensor modules to collect environmental data

14. The boat on water

Here’s a video of the boat moving on water :


I would like to thanks the people who helped, guided or supported me during these six months. First of all Neil for obvious reasons. Then Romain, Jonah (for taking care of my safety) and Camille for the great guidance and discutions. My friends, colleagues and family for the support and Icam management for sponsoring me and letting me experiment in this wonderful fablab community.

Licence Creative Commons
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.