Electric Canoe




About: Here is a site from when I Lived aboard and cruised in a wooden boat: www.slowtimes.com Current blog of randomness: growdown.blogspot.com I am trying to concentrate my dwindling hobby time only on boats as...
This is a series of 9 short videos about how I set up my electric canoe. It's not exactly instructions, but I do go through a many of the different parts. I hope that others who are building electric boats, or thinking about it, might enjoy some of my rambling. This canoe is unique in that its twin screw (two propellers), and is driven by a wii nunchuck. It's powered by two golf cart batteries. The motors are Minkota Endura 30s.

Also, Here is the original movie I made about this boat last year:

Step 1: Batteries and Wiring

Give a general description of the Step

FLexiwire at mcmaster.com:

9620T22 6 Ft. 392 Deg F Hi-voltage/high-flex Wire, 10 Awg, .330" Od, 20000 Vdc, Clear

Step 2: Motor Mount Hinge

The rest of the wiring and the hinge setup
to drop the motor down.

The hinge part:
1513A39 2 Each Mortise-mnt Nontemplate Hinge W/removable Pin, Square Corners,dull 304ss, 4"h Leaf, 4"open Widt

Step 3: Electronics

Here is the arduino code I used:

WiiChuck.h and ServoTimer1.h are both available on-line. Drop a message if you want them and cant find them.


#include "Wire.h"
#include "WiiChuck.h"
#include "ServoTimer1.h"

#define TILL_POWER_PIN 8
#define TILL_STBD_PIN 10
#define TILL_PORT_PIN 9

#define THROTT_DIFF_PIN 12
#define THROTT_MAIN_PIN 11

#define MINTILLPULSE 1100 // Minimum servo position
#define MAXTILLPULSE 1900 // Minimum servo position

#define MINTHROTTPULSE 1000 // Minimum servo position
#define MAXTHROTTPULSE 1965 // Maximum servo position

//ServoTimer1 tiller = ServoTimer1();
WiiChuck chuck = WiiChuck();

int tillerPulse = 1500; // Amount to pulse the servo
int throttlePulse = 1500; // Amount to pulse the servo

int throttleDiffPulse = 1500; // Amount to pulse the servo

int lastTillerPulse = 1500;
int baseTillerPulse = 1500;

int move = 10;

long lastPulse = 0; // the time in milliseconds of the last pulse
int refreshTime = 20; // the time needed in between pulses

int analogValue = 0; // the value returned from the analog sensor
int analogPin = 0; // the analog pin that the sensor's on

boolean wake = true;
long sleeptimer = 0;
boolean dothrottle = true;

void setup() {


for (int i =8; i<13;i++) {
pinMode(i, OUTPUT); // Set servo pin as an output pin

int angle;
void loop() {

lastTillerPulse = tillerPulse;

if (chuck.buttonC) {
baseTillerPulse = (int)(1500.0 - chuck.readRoll() * 3);
throttleDiffPulse = (int)(1500.0 + chuck.readJoyX() * 5);
tillerPulse = baseTillerPulse;
else {
if (abs(chuck.readJoyX()) > 10) {
tillerPulse = baseTillerPulse - chuck.readJoyX();
else {
tillerPulse = baseTillerPulse;

if (chuck.buttonZ) {
throttlePulse = (int)(1500.0 + chuck.readJoyY() * 5);


if (throttlePulse < MINTHROTTPULSE) {
throttlePulse = MINTHROTTPULSE;
if (throttlePulse > MAXTHROTTPULSE) {
throttlePulse = MAXTHROTTPULSE;

if (throttleDiffPulse < MINTHROTTPULSE) {
throttleDiffPulse = MINTHROTTPULSE;
if (throttleDiffPulse > MAXTHROTTPULSE) {
throttleDiffPulse = MAXTHROTTPULSE;

if (tillerPulse < MINTILLPULSE) {
tillerPulse = MINTILLPULSE;
if (tillerPulse > MAXTILLPULSE) {
tillerPulse = MAXTILLPULSE;

Serial.print(", ");

if (tillerPulse != lastTillerPulse) {
wake = true;
sleeptimer = 0;
else {
sleeptimer += 1;

if (sleeptimer > 80)
wake = false;

if (wake) {
digitalWrite(TILL_POWER_PIN, HIGH);
else {


void updateServos() {

//analogValue = analogRead(analogPin); // read the analog input
//tillerPulse = (analogValue * 19) / 10 + MINPULSE; // convert the analog value
// to a range between MINPULSE
// and MAXPULSE.

if (dothrottle) {
// tillerPulse the servo again if rhe refresh time (20 ms) have passed:
digitalWrite(THROTT_MAIN_PIN, HIGH);
digitalWrite(THROTT_MAIN_PIN, LOW); // Turn the motor on

digitalWrite(THROTT_DIFF_PIN, HIGH);
digitalWrite(THROTT_DIFF_PIN, LOW); // Stear Motors
delayMicroseconds(5000 - throttlePulse - throttleDiffPulse);

else {
dothrottle = !dothrottle;

digitalWrite(TILL_STBD_PIN, HIGH); // Turn the motor on
digitalWrite(TILL_PORT_PIN, HIGH); // Turn the motor on
delayMicroseconds(tillerPulse); // Length of the pulse sets the motor position
digitalWrite(TILL_STBD_PIN, LOW); // Turn the motor on
digitalWrite(TILL_PORT_PIN, LOW); // Turn the motor on



Step 4: WiiChuck Steering

The Demo step shows what's connected with what. The Electronics step has the Arduino code that does it.

Step 5: Steerage

5520K124 2 Each 1-1/4" Cast Bronze Companion Flange

9959K33 2 Each Chrome-plated Steel One-piece Clamp-on Collar, 1-3/8" Bore, 2-1/4" Outside Diameter, 9/16" Widt

The Sprocket:
2737T287 1 Each Steel Finished-bore Roller Chain Sprocket, For #25 Chain, 1/4" Pitch, 40 Teeth, 1-3/8" Bore

upper Bronze Sleeve to adapt the sprocket
6381K567 2 Each Alloy 932 (sae 660) Bronze Sleeve Bearing, For 1-1/8" Shaft Diameter, 1-3/8" Od, 1" Length

The lower bronze sleeve
6381K251 2 Each Alloy 932 (sae 660) Bronze Sleeve Bearing, For 1-1/8" Shaft Diameter, 1-3/8" Od, 4" Length

Chain: (links)
6261K108 4 Each #25 Connecting Link For, Standard Ansi Roller Chain
6261K284 1 Each Standard Ansi Roller Chain, #25, Sngl Strand,1/4"pitch, Rollerless,.13"dia,4l

The Hone I was talking about:
4424A75 1 Each Flexible Cylinder Hone, 1-1/8" Cylinder Id, 120 Grit, 8" Overall Length

Step 6: The Motor Mount Clamp and Setup

Step 7: The Demo!

See things running, and how to drive with a wiichuck.

Step 8: The Canoe Cart

The cart might be my favorite part.

McMaster parts list:

78155T17 40 Each Cart-smart Junior Caster, Rigid, 2" X 1" Rubber Wheel, 90# Capacity

92364A245 2 Packs Type 410 Ss Pan Head Phil Self-drill Screw, 10-16 Thread, 3/4" Length, Drill Point #3

3644T51 1 Each Horizontal-pulling Hand Winch, For 1/8"dia Wire Rope,1 Speed,600# First Layer Cap

5458T42 1 Each Aluminum Narrow-width Ladder, 8 Height, 12" Width, 300 Lb Capacity

44745K81 1 Each Slit Foam Rubber Insulation For Pipe & Tube, 1" Thick, 1-3/8" Insulation Id, 6 Length

Add to this some wide two sided velcro straps, and a boat cart. The boat cart is sold on ebay as an instep cc100, but it goes by other names elsewhere. That appears to be the cheapest version though. A solid cart on its own.



    • Pocket Sized Contest

      Pocket Sized Contest
    • Weaving Challenge

      Weaving Challenge
    • Epilog X Contest

      Epilog X Contest

    32 Discussions


    5 years ago on Step 5

    do a base line voltage test. on the motors . look up the wheel chair conversions 4 more info


    5 years ago on Step 4

    have u thought of putting on guard blocks to prevent damage to the connectors


    Hi I'm trying to make a similar launch trolley.
    I'd love to see a video of retrieving the canoe from the water.


    Reply 8 years ago on Introduction

    I made it. It's pretty simple though. It's a narrow gauge ladder from mcmaster with casters screwed into and a winch on one end, strapped to a canoe cart. Its great for unofficial boat launches, made necessary by the silly weight of golf cart batteries in canoe. That canoe weighed at least 250. I wouldn't recommend this cart setup for anything over 200, if that. It felt iffy at times. But did the job!



    8 years ago on Introduction

    Just out of curiosity, when you were experimenting, did you ever try changing the speed and direction (forward or reverse) of the engines as a method of steering, instead of using the servo setup?

    1 reply

    Reply 8 years ago on Introduction

    Yes I did. Originally, I had wondered if could do all the steering this way (and avoid the whole servo complication), but since it turns out that doesn't work at speeds (ie. 3 knots), I'm glad I can turn the motors too.

    You can use the joystick on the nunchuck to allow for "tractor drive" style steering. Given the placement of the motors at the stern, and the length of the canoe, it wasn't particularly effective. For docking maneuvering, it was more fun. In theory, the combination of both angling the motors, and adjusting their relative speeds, should allow the boat to do crazy stuff like crabbing. There are some commercially available power boats that do this kind of thing. I never got around to actually trying to implement that kind of stuff though.



    8 years ago on Step 6

    0:05 "One long ASH piece" Made me LOL!

    el greeno

    9 years ago on Introduction

    The european style connector block you used is known as a chocolate block here in the UK.


    9 years ago on Introduction

    brilliant idea using an arduino and a nunchuck. could you please send me the wiichuck.h and servo1.h firles please as i am struggling to find them.
    many thanks and kudos
    Tom J

    2 replies

    9 years ago on Step 3

    You could probably mount all of the electronics in a o-ring sealed aluminum housing. You could then heatsink the motor controller to the case.


    Reply 9 years ago on Introduction

    Sure. My first setup was super simple. I recommend a minnkota endura 30 motor. 115 shipped I think. A group 27 battery which gets you about 3-4 hours of run time. A simple battery box comes from the same autoparts store where you can find the battery. Then with two long lag bolts from the hardware store and a 2x4, you can make a simple cheap motor mount for the endura. Cut one piece to fit under your gunwales. That makes the bottom of the clamp with the wide dimension up against he gunwales. Cut another piece to go ontop of the gunnels, and stick out on one side of the boat about a foot. Long enough to clamp on the motor to. This piece is oriented with the narrow edge against the gunwale. In this orientation the motor clamps to the 2x4 easily. Last use the lag bolts to squeeze the two pieces together an clamp to the gunwale. You will just need drill aligned holes through the two pieces. On my setup, I also extended the motor wires with some 8 gauge wire so I could put the battery in the front of the boat. Copper wire is costly though, so you can decide I that is worth it. The whole thing is less than 200 I think. I don't know f that is cheap enough for you. Cheaper still is an old paddle! Good luck Tim


    Reply 9 years ago on Introduction

    thanks. do you think a water pump from a car would work as an outboard? batteries are not the problem.


    Reply 9 years ago on Introduction

    I sure don't know. But that's a great idea to try. Maybe multiple pumps together If one isn't enough. I'd be curious to hear about your experiments. I'd hook one up and just feel how much force it generates. have you googles stuff like "diy Jet drive" ? T


    Reply 9 years ago on Introduction

    not yet. ill do it though. if a car water pump isnt enough, how about a power washer!


    9 years ago on Step 6

    great instructable. well made. seems you put a lot of thought and $$$ into project. which says you love what you do.


    9 years ago on Introduction

    Hey Timothy, Great job on the construction, you have some talent there. Here is one item that you may want to consider altering. I noticed that the wires exiting the large sprocket rub on the interior of motor tubing. Eventually this rubbing action will wear the plastic coating off the wires and these will short out, especially in a wet environment. This short might have a devastating effect on your control . I would not like this to see this happen out in the middle of a big lake. One more item, since servos are quite expensive then why did you choose to use two individual servos? You may have been able to get away with one slightly larger servo and them mechanically link (with additional chain and idler sprockets) the two motors? If you want to add to your invention a small solar panel could help recharge the batteries while not in use. Baudeagle