Introduction: InchWorm Robot

This instructable was created in fulfillment of the project requirement of the Makecourse at the University of South Florida (

This is an Instructable on building an inchworm robot. This particular model was build for Make Course at the University of South Florida. The robot is designed to take small precise steps in a straight direction.

Step 1: Robot Body

First step in building a robot is designing its body. All the parts were designed in Autodesk Inventor and 3D printed. Only 2 parts had to be purchased.

Picture 1: Black Box, provided with the MakeCourse kit

Picture 2: Rear leg, 3D printed. The slit on top allows the leg move up and down in order to keep the body straight.

Picture 3: Front leg, 3D printed. Fully attached to the black box.

Picture 4: Rotator, 3D printed. Features an opening for the servo head to be inserted. This is the rotating part.

Picture 5: Rod, 3D printed. Is attached to the rotator and the rear leg. Delivers the motion to the rear leg.

Picture 6: Wheel, 3D printed. The opening in the middle is for the bearing to be inserted in.

Picture 7: Axle connector, 3D printed. Connect to the steel rod axle, and fits into the bearing to hold wheels.

Step 2: Purchasing Parts

Only 2 parts were purchased: steel rod for the axle, and one way ratchet bearings for the wheels.

The bearing have to rotating in one direction-forward. Therefore, when placing the bearings, make sure they are rotating the right way.

Links for purchase:

Steel Rod


Step 3: Body Assembly

After all the parts are obtained, assemble the body. Attach the front leg to the box first, then attach the rear leg. Put the axle rods through the openings in the legs, and attach the wheel assembly to the axle. Make sure wheels rotate in the forward direction.

Further, attach the rod to the rear leg, and to the rotator. Attach the servo motor inside the box and attach the rotator to the servo.

Make sure all parts fit nicely, without moving around.

Step 4: Control System Block Diagram

Create a control system block diagram to see how the control of the robot are gonna be done. This robot features proximity sensor, that runs the servo, if an object is placed closer than 10 cm to the proximity sensor. It also uses LED lights to indicate whether or not the robot is moving or standing.

Step 5: Circuit Board

The circuit board was then built. The image shows the completed board, as well as a Fritzing diagram. On the diagram, a infrared proximity sensor is shown, but ultrasound sensor was used for the actual robot.

Step 6: Arduino Sketch

Provided here is the complete Arduino sketch used for the project. After assembling the robot together and uploading the sketch, the robot will move forward when an object is placed within 10 cm of the proximity sensor.

PURPOSE: Inchworm Robot Created by

Mikhail Ivanovsit DATE: 4/13/2016 *******************************************/

#define echoPin 6 // This is the echo pin

#define triggerPin 7 // This is the trigger pin

#include //include proximity sensor library #include //include servo library

Servo myservo;

int pos=0; //define a variable to track the position of the servo

void setup() {

Serial.begin(115200); //start serial communication

pinMode(echoPin, INPUT);//set pinmodes

pinMode(triggerPin, OUTPUT);

myservo.attach(13); // attaches the servo on pin 9 to the servo object

myservo.write(pos); // sets the initial position of the servo to 0

pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

digitalWrite(3, HIGH); //set the red LED to be on, and the green LED off

digitalWrite(2, LOW); }

/***************************main loop*********************************************************/

float check; //variable to track the distane

void loop() {

Serial.print("The distance is : "); //start serial monitor to track analyze the code

digitalWrite(triggerPin, HIGH); // make a 10usec pulse, use the proximity sensor


digitalWrite(triggerPin, LOW); //turn off the trigger pin

float distance = pulseIn(echoPin,HIGH); //now read the pulse that is sent back by the sensor //pulseIn returns the pulse length in usec

distance= distance/58; //the distance in [cm] is calculated by pulselength[usec]/58

Serial.print(distance,DEC);// send the measurement to the serial monitor

Serial.println(" cm"); //serial monitor is used to keeo track of the data obtained by the proximity sensor

check=11; //assign an initial value to check higher than 10 cm

myservo.write(0); //return servo to position 0 in the beginning of the loop

delay(500); //delay was set to allow the servo to complete the 180 degree motion

check=distance; //assign variable check the value of distance

if (check<10) {

myservo.write(80); //if the distance is less than 10 cm, move the servo to position 180

digitalWrite(3, LOW); //light up green LED, and turn off red LED

digitalWrite(2,HIGH); }

else {

digitalWrite(2, LOW); //if the distance is more than 10cm, then keep the LEDs in initial state digitalWrite(3,HIGH);