04 Cone
Coding of controlled and passive movement
Project Information
Timeline
October 2023 - February 2024
Project Type
Explorative Robotics through Coding
Contributors
Florian Meyer
Delong Xiao
Applied Competencies
Creative Direction
Concept Generation 
Experimenting 
3d Development
Prototyping
Initial question
What happens when movement is not only controlled, but strategically released?
With Cone we explored control, timing, and mechanical intelligence through a small-scale robotic system. The initial challenge was to design an Arduino-controlled robot capable of navigating a defined obstacle course. But instead of relying solely on continuous motor control, we focused on how behavior could emerge from the interaction between mechanics and programming.
This 120 mm long and wide robot is precisely tailored to the requirements of the course.Its journey begins with driving up a ramp, followed by a 90-degree turn to the right. After it has moved a few centimeters further onto the ramp, the motors are disengaged using a specially developed system based on a cone. This system allows gravity to take over and the robot rolls down the ramp and overcomes a 20 cm gap. During the jump, the engine is re-engaged. This system allows the robot to come to a stop behind the finish line safely and precisely.
Challenges
1
How can controlled and passive movement work together in one system?
2
How to synchronise the the exact timing of motor disengagement and re-engagement?
3
How to deal with inconsistent behavior caused by small mechanical tolerances?
Testing & IDEATION
Prototypes
This shift from control to release became the core idea of the project. The robot rolls down the ramp, crosses a 20 cm gap purely through momentum, and reactivates its motors mid-transition to regain control and stop behind the finish line. Made possible through both code and mechanical design.

Through this process, we worked iteratively between prototyping, testing, and refining. I explored how simple mechanical elements can replace complex programming, and how constraints can lead to more efficient and elegant solutions.

Unfortunately, the robot did not manage to consistently complete the obstacle course during the project presentation. I continued working on it independently for a short while afterwards until it finally succeeded, though, regrettably, not consistently due to mechanical tolerances.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Housing
Wheels
Arduino
Motor driver
Voltage Converter
Gyroscope
Battery
DC Motor
Servomotor
Motor
Servo bracket
Cone
Bearings
Cover
Rails
Frontwheel
Code
#include <Servo.h>

const int A1A = 3;
const int A1B = 4;
const int B1A = 5;
const int B1B = 6;

const int servoPin = 9;
Servo myServo;

boolean motorRunning = true;
boolean servoRunning = false;

void setup() {
pinMode(A1A, OUTPUT);
pinMode(A1B, OUTPUT);
pinMode(B1A, OUTPUT);
pinMode(B1B, OUTPUT);

myServo.attach(servoPin);

myServo.write(70);

delay(3000);

// SECTION 1 - START AND RAMP UP

// Motor A (spin backward)
analogWrite(A1A, 255);
digitalWrite(A1B, LOW);

// Motor B (spin forward)
analogWrite(B1A, 255);
digitalWrite(B1B, LOW);

delay(15000);

// Stop Motor A and Motor B
digitalWrite(A1A, LOW);
digitalWrite(A1B, LOW);
digitalWrite(B1A, LOW);
digitalWrite(B1B, LOW);

delay(2000);

// SECTION 2 - ROTATION 90 DEGREES

// Motor A (spin backward)
digitalWrite(A1A, 255);
digitalWrite(A1B, LOW); 

// Motor B (spin forward)
digitalWrite(B1A, LOW);
digitalWrite(B1B, 255);

delay(700):

// Stop Motor A and Motor B
digitalWrite(A1A, LOW);
digitalWrite(A1B, LOW);
digitalWrite(B1A, LOW);
digitalWrite(B1B, LOW);

delay(2000);

// Motor A (spin backward)
analogWrite(A1A, 255);
digitalWrite(A1B, LOW);

// Motor B (spin forward)
analogWrite(B1A, 255);
digitalWrite(B1B, LOW):

delay(1000);

// Stop Motor A and Motor B
digitalWrite(A1A, LOW);
digitalWrite(A1B, LOW);
digitalWrite(B1A, LOW);
digitalWrite(B1B, LOW);

// Add delay between sections
delay(2000); // x-second delay

// SECTION 4 - DISENGAGE DC MOTOR 

myServo.write(20);
delay(3000):
myServo.write(70);

delay(2000);

// Motor A (spin backward)
analogWrite(A1A, 255);
digitalWrite(A1B, LOW);

// Motor B (spin forward)
analogWrite(B1A, 255);
digitalWrite(B1B, LOW);

delay(4000);

// Stop Motor A and Motor B
digitalWrite(A1A, LOW);
digitalwrite(A1B, LOW);
digitalWrite(B1A, LOW);
digitatWrite(B1B, LOW);

}

void loop() {
// Empty loop function to satisfy Arduino IDE
}
AI video based on images from the presentation
The project reflects my approach to design: combining technical systems with hands-on experimentation and using constraints as a driver for innovation. It’s less about building a robot that simply works, and more about understanding how behavior can emerge from the relationship between components, forces, and timing.
Questions I Asked During or After the Process
Experiment with different materials to make it stiffer
Refine the movement of motor disengagement and re-engagement
Further explore how mechanical intelligence can replace digital complexity
What I Would Continue Working On
How can passive physics become an active design tool?
How do constraints influence innovation and creativity?
At what point does simplicity become more efficient than complexity?
summary
Arduino-controlled robot designed for a defined obstacle course
Focus on interaction between mechanical systems and programmed behavior
Development of a cone-based mechanism to disengage and re-engage motors
Exploration of control vs. passive movement through gravity and momentum
Iterative prototyping process combining engineering and design thinking