STL files and a Build Guide are now available on Thingiverse so that you can build your own boat!
I designed and 3D printed a big radio controlled boat. It’s designed as a sort of utility airboat and will house water monitoring and other utility systems. In part one of this video series I build the basics of the boat and test it out on some open water. I actually started concepts for this project in 2016, but I was a bit time poor to bring it to life. My 3D printer (RepRap clone) at the time wasn’t up to the task, so I considered resin and fibreglass or carbon fibre for the job and then put the project on the back burner as life got busier. The upside to this was that 3D printers got A LOT better and I was able to kick off the project properly at the end of 2019. Printing the boat took a mammoth 250 hours of print time (with a big nozzle set-up). The videos below document the build.
Part one covers the hull and drive system. Part two covers the water sampling system. The sampling system utilises a pump, relay and contactless liquid level sensor. It’s all powered by LiPos and a UBEC and controlled by two Arduino Nano Every and receiver controlled switches that allow it to be operated by the same transmitter that controls the boat’s drive system. See the schematics and sketches below.
Part three of the video series features a road trip to take the boat on a blue-green algae sampling mission. The algae test result reports are available below (beneath the sketches) for anyone that’s interested.
A Build Guide is available below and the STL files are up on Thingiverse.
Sample Bottle Carousel Code
/*
This sketch is used to turn a bipolar stepper motor a quarter of a turn. It's used to select a sample bottle on a four bottle carousel.
Find more details and see video here: www.electrosync.com.au
*/
#define DIR_PIN 2
#define STEP_PIN 3
void setup() {
pinMode(DIR_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
//rotate a specific number of degrees (negative for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
rotateDeg(360, 1);
}
void rotateDeg(float deg, float speed){
int dir = (deg > 0)? HIGH:LOW;
digitalWrite(DIR_PIN,dir);
int steps = abs(deg)*(6.244);
float usDelay = (1/speed) * 60;
for(int i=0; i < steps; i++){
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(usDelay);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(usDelay);
}
}
void loop(){
}
Water Sample Pump Code
/*
This sketch is used to switch a water pump on and off using a relay and a contactless liquid level sensor. An LED is used to indicate the status of the pump.
Find more details and see video here: www.electrosync.com.au
*/
int input=A1; //Water Sensor In
int output=A5; //Relay Out
int LED=2; //Strobon LED
int maxSecondsOn=100;
int minSecondsOn=0;
int state=0;
int secondsOn=0;
void setup()
{
pinMode(input, INPUT_PULLUP);
pinMode(output, OUTPUT);
pinMode(LED, OUTPUT);
Serial.begin(9600);
digitalWrite(output, 1);
delay(0);
digitalWrite(output, 0);
Serial.println("Started");
Serial.print("Min Seconds On:");
Serial.println(minSecondsOn);
Serial.print("Max Seconds On:");
Serial.println(maxSecondsOn);
}
void loop()
{
int newState=digitalRead(input);
Serial.print("Output State:");
Serial.print(state);
Serial.print("Sensor state:");
Serial.print(newState);
Serial.print("Seconds On:");
Serial.println(secondsOn);
if(state==1)
{
secondsOn=secondsOn + 1;
if(secondsOn > maxSecondsOn)
{
newState=0;
}
if(secondsOn < minSecondsOn)
newState=1;
digitalWrite(LED, LOW);
}
if(newState!=state) //Status Changed
{
Serial.print("Changing Output to");
Serial.println(newState);
state=newState;
secondsOn=0;
digitalWrite(output, state);
digitalWrite(LED, HIGH);
}
delay(500);
}
