20.4 Implementation

20.4 Implementation

Fabrication and Assembly

The linkage mechanisms were fabricated using a combination of FDM-printed PLA, resin, and laser-cut film. Before full-scale assembly, a single-leg prototype was made and assembled to verify correct actuation. Once we validated the design, we proceeded with the complete fabrication and assembly of the whole system.

The links were produced using a Raise3D FDM printer located in TIW, while the joints were resin-printed and had laser-cut film to form compliant joints. These joints allowed for controlled flexibility without the need for traditional bearings or fasteners. The chassis, also 3D printed, housed the electronics and provided grounding for the legs.

The electronic system included an Arduino, a motor driver, and a battery. Actuation was achieved through a pulley system between the motor and a 6mm shaft that connects to both sides of the robot. Pulley tension could be adjusted via slotted mounts on the chassis for optimal motor alignment. An initial single-sided assembly was completed to test motor performance. When that side was successful, the second side was fabricated and assembled using the same process.

assem1.jpg
Leg mechanisms During Assmebly
assem2.jpg
One Side Fully Assembled
3e88b916-316b-4710-abac-3c1f95c7ec77.jpg
Assembled Without Electronics
bot.gif
Animated Assembly Side View
isobotgif.gif
Animated Assembly Isometric View

Bill of Materials

Part Name

Function

Source

Properties
(material, dimensions, voltage, etc)

Qty

Price Per Unit

Total Price

Part Name

Function

Source

Properties
(material, dimensions, voltage, etc)

Qty

Price Per Unit

Total Price

Acrylic

Linkages

TIW

1/4", 24"x24"

2

$27.64

$55.28

PLA

Robot body/motor mounts

TIW

Polylactic Acid, Density=1.24 g/cm³

1

$0.00

$0.00

TPU

Joints

TIW

Thermoplastic Polyurethane, Shore hardness- 60A-90A

20

$0.10

$2.00

Motor

Drives the robot

Amazon

Brand FLASH HOBBY
Model Name d3536
Speed 1450 RPM
Voltage 15 Volts
Horsepower 739.1 Watts

1

$19.99

$19.99

Wires

Electrical connection

TIW/RMD

20-24 guage

10

$0.00

$0.00

Clear Resin

Test/Final Joints

TIW

Form Labs Form 4 Clear Resin V5

334 mL

$0.30

$100.2

White Resin

Test/Final joints

TIW

Form Labs Form 4 White Resin V5

109 mL

$0.30

$32.7

Electronics and Circuitry

The electronic system consists of an Arduino Uno, an L298N motor driver, and a DC motor with an integrated gearbox and wheel, all powered by a 9V battery. The Arduino sends PWM signals to the motor driver to control motor speed via the enable pin, and the initialization pins are controlled by cycling high/low pulses. A common ground is shared between the Arduino and motor driver to maintain proper logic-level referencing for control signals. For mechanical motion, the motor drives a GT2 timing belt with a 1:1 ratio using FDM-printed pulleys.

IMG_0810.JPEG
Electronics
image-20250502-003530.png
Wiring Diagram

 

Software Development

The Arduino code is designed to control both the speed and the on/off state of the DC motor. It interfaces with the L298N motor driver using three digital pins: two for setting motor direction (IN1, IN2) and one PWM pin (ENA) for speed control. The system defaults to a fixed direction and starts with the motor turned off. Users can input serial commands such as "on", "off", or a specific speed percentage like "50%" to control the robot. The code interprets these commands, adjusts the PWM duty cycle accordingly, and provides feedback through the serial monitor. We wanted the speed to be able to be varied so we can test safely, and it allowed us to overcome the breakaway torque of the motor and run it at a lower speed afterward.

// === Pin Definitions === const int enaPin = 9;   // ENA - Speed control (PWM) const int in1Pin = 8;   // IN1 - Direction control const int in2Pin = 7;   // IN2 - Direction control void setup() {   Serial.begin(9600);   pinMode(enaPin, OUTPUT);   pinMode(in1Pin, OUTPUT);   pinMode(in2Pin, OUTPUT);   // Set default direction   digitalWrite(in1Pin, HIGH);   digitalWrite(in2Pin, LOW);   analogWrite(enaPin, 0);  // Start motor stopped   Serial.println("Type 'on', 'off', or a percentage like '30%':"); } void loop() {   if (Serial.available() > 0) {     String command = Serial.readStringUntil('\n');     command.trim();     if (command.equalsIgnoreCase("on")) {       analogWrite(enaPin, 255);       Serial.println("Motor ON (100%)");     }     else if (command.equalsIgnoreCase("off")) {       analogWrite(enaPin, 0);       Serial.println("Motor OFF (0%)");     }     else if (command.endsWith("%")) {       command.remove(command.length() - 1);  // Remove '%' character       int percent = command.toInt();       percent = constrain(percent, 0, 100);       int pwmValue = map(percent, 0, 100, 0, 255);       analogWrite(enaPin, pwmValue);       Serial.print("Motor set to ");       Serial.print(percent);       Serial.println("% speed.");     }     else {       Serial.println("Invalid command. Use 'on', 'off', or '50%' etc.");     }   } }