8.4 | Fabrication

8.4 | Fabrication

Finalizing CAD

After our last prototype, we did some thinking and decided to take some inspiration from our very first project and use the steel rails and linear bearings we had lying around in our box for the bottom joint instead of a pin and slot!

10.JPG

Additionally, we started to work on the final model for our oar system.

We added 3D printable threads to one end for easy removal and finalized the clamp design, taking some learnings from the first prototype model to improve it.

Capture.JPG
2.JPG
3.JPG

 

We settled on the below design, with a small divot for the pin to rest in, pivoting oars, and threads for the top to screw on to.

4.JPG

We then started to assemble everything into a final CAD with some… less than optimal assemblies initially. We found a few bevel gears from a previous project that we wanted to use so we added those in to reduce space usage.

jakf;sd.JPG

 

Finally, we got a semi-functional CAD and got started on the electronics.

asdjfka.JPG

Finalizing Electronics

The electronics were needed to turn the motor, and we wanted to include some LED lights on the project to emulate the waves splashing.

We drew up an electronic diagram to make sure we had everything we needed.

Schematic_RMD-Trireme_2026-05-02.png

In the video we also attached a speaker because we wanted the whole project to be able to turn on with just the flip of a switch, but we elected to just play music during our demo.

Wiring everything up and writing some basic code, we were able to get the motor moving and the LEDS turning on!

IMG_0381.mov

Finalizing the code

We worked on the code a little bit after this, implementing an animation for the LEDs.

#include <Adafruit_NeoPixel.h> #include <math.h> const int IN1 = 9; const int IN2 = 10; const int ENA = 11;   // PWM pin const int LED_PIN = 13; const int NUM_LEDS = 300; Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800); unsigned long lastFrame = 0; const unsigned long FRAME_MS = 20;  // animation speed void setup() {   pinMode(IN1, OUTPUT);   pinMode(IN2, OUTPUT);   pinMode(ENA, OUTPUT);   strip.begin();   strip.setBrightness(70);   strip.show();   // Motor forward   digitalWrite(IN1, HIGH);   digitalWrite(IN2, LOW);   analogWrite(ENA, 255); } void setOceanEffect() {   float t = millis() / 400.0;  // faster animation   for (int i = 0; i < NUM_LEDS; i++) {     float x = (float)i / NUM_LEDS;     // Strong wave motion     float wave1 = sin(t + x * 20.0);     float wave2 = sin(t * 1.7 + x * 35.0);     float wave3 = sin(t * 2.3 + x * 60.0);     // Combine waves for chaos     float combined = (wave1 + wave2 + wave3) / 3.0;     // Make contrast sharper (nonlinear boost)     combined = combined * combined * (combined > 0 ? 1 : -1);     // Extreme color mapping (high contrast)     uint8_t r = (uint8_t)(10 + 120 * max(0.0, -combined));     uint8_t g = (uint8_t)(20 + 200 * max(0.0, combined));     uint8_t b = (uint8_t)(50 + 255 * fabs(combined));     strip.setPixelColor(i, strip.Color(r, g, b));   }   strip.show(); } void loop() {   // Keep motor running forward   digitalWrite(IN1, HIGH);   digitalWrite(IN2, LOW);   analogWrite(ENA, 255);   // Update LED animation   if (millis() - lastFrame >= FRAME_MS) {     lastFrame = millis();     setOceanEffect();   } }

Finalizing the Trireme

As the mechanism grew and changed shape, we redesigned the ship as well, eventually settling on the below (slightly overkill) design.

uiprqew.jpg
11.jpg
poirew.jpg

Assembly

While that was happening, we 3D printed our mechanism, combining our CAD work, manufacturing of new parts, current hardware, and existing electronics to get our final prototype made!

7.jpg

Now, we knew that something would break, and we really wanted to have a reliable demo come Demo Day so we tested it. For 300 cycles.

IMG_1530.mov

After 300 cycles we had a bearing pop out. Our press-fits weren’t as sturdy as we wanted them to be. Additionally, there were a few small spacing issues, so we decided to 3D print spacers and got some lock collars to hold everything down in place with the hope that we wouldn’t experience a similar issue on Demo Day.

Presentation

Additionally, we knew we wanted to have as presentable a project as possible, so we designed an electronics box to hold our main components down and hide some wires.

1.JPG
As it was coming together, we laser-cut the boat pieces and used wood glue to hold everything down and let it dry.
6.jpg

Finally, right before demo day we were having some trouble with the plastic base pieces, so we laser cut a wooden plate to hold everything instead.

5.jpg