Electric Canoe
Also, Here is the original movie I made about this boat last year:
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
FLexiwire at mcmaster.com:
9620T22 6 Ft. 392 Deg F Hi-voltage/high-flex Wire, 10 Awg, .330" Od, 20000 Vdc, Clear
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
The hinge part:
1513A39 2 Each Mortise-mnt Nontemplate Hinge W/removable Pin, Square Corners,dull 304ss, 4"h Leaf, 4"open Widt
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() {
Serial.begin(9600);
chuck.begin();
chuck.update();
//tiller.setMaximumPulse(2500);
//tiller.setMinimumPulse(500);
for (int i =8; i<13;i++) {
pinMode(i, OUTPUT); // Set servo pin as an output pin
}
}
int angle;
void loop() {
chuck.update();
lastTillerPulse = tillerPulse;
if (chuck.buttonC) {
//tiller.attach(9);
//tiller.write(angle);
//tiller.attach(10);
//tiller.write(angle);
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(tillerPulse);
Serial.print(", ");
Serial.println(throttlePulse);
if (tillerPulse != lastTillerPulse) {
wake = true;
sleeptimer = 0;
}
else {
sleeptimer += 1;
}
if (sleeptimer > 80)
wake = false;
if (wake) {
digitalWrite(TILL_POWER_PIN, HIGH);
}
else {
digitalWrite(TILL_POWER_PIN,LOW);
}
updateServos();
}
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);
delayMicroseconds(throttlePulse);
digitalWrite(THROTT_MAIN_PIN, LOW); // Turn the motor on
digitalWrite(THROTT_DIFF_PIN, HIGH);
delayMicroseconds(throttleDiffPulse);
digitalWrite(THROTT_DIFF_PIN, LOW); // Stear Motors
delayMicroseconds(5000 - throttlePulse - throttleDiffPulse);
}
else {
delayMicroseconds(5000);
}
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
delayMicroseconds(5000-tillerPulse);
}
WiiChuck Steering
The Demo step shows what's connected with what. The Electronics step has the Arduino code that does it.
Steerage
Flange
5520K124 2 Each 1-1/4" Cast Bronze Companion Flange
Collars:
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
The Motor Mount Clamp and Setup
The Demo!
See things running, and how to drive with a wiichuck.
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.
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.