Maker 101
Published © GPL3+

3D Printed Theo Jansen Style Octopod Robot (Arduino Based)

Hi everyone! In this project, I will show you an amazing eight-legged robot in the Octopod style!

BeginnerFull instructions provided3 hours837
3D Printed Theo Jansen Style Octopod Robot (Arduino Based)

Things used in this project

Hardware components

5V DC Gear Motor
×2
M3 Bolts and Nuts
×1
Arduino Board
×1
L293D Motor Driver
×1
3S 7.4V Li-Ion Battery
×1
Required 3D Parts
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

3D Printer (generic)
3D Printer (generic)
Soldering iron (generic)
Soldering iron (generic)
Solder Wire

Story

Read more

Custom parts and enclosures

inks_1.stl

Sketchfab still processing.

inks_2.stl

Sketchfab still processing.

leg.stl

Sketchfab still processing.

clip-washer.stl

Sketchfab still processing.

axe-main.stl

Sketchfab still processing.

clip-washer.stl

Sketchfab still processing.

base.stl

Sketchfab still processing.

right_side.stl

Sketchfab still processing.

left_side.stl

Sketchfab still processing.

upper.stl

Sketchfab still processing.

axe-mtr.stl

Sketchfab still processing.

axe-drive.stl

Sketchfab still processing.

Schematics

Bill of Materials

Code

Remote_Control_Result_Code.ino

Arduino
Remote Control Results Code
#include <IRremote.h>

#define irPin 12

IRrecv irrecv(irPin);
decode_results results;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.print("Command Received: ");
    Serial.println(results.value, HEX);
    irrecv.resume();
  }
}

Motor_Control_IR_Code.ino

Arduino
Main Code
#include <IRremote.h>

//Motor A
const int motorA1 = 2;
const int motorA2 = 4;

//Motor B
const int motorB1 = 11;
const int motorB2 = 10;

//IR sensor
#define irPin 12

// Change to the HEX values of your remote control
#define FWRD 0xFF18E7UL  //Forward
#define BKWD 0xFF4AB5UL  //Backward
#define LEFT 0xFF10EFUL  //Turn Left
#define RGHT 0xFF5AA5UL  //Turn Right
#define STOP 0xFF38C7UL  //Stop Motors

IRrecv irrecv(irPin);
decode_results results;

void setup() {
  Serial.begin(9600);
  pinMode(motorA1, OUTPUT);
  pinMode(motorA2, OUTPUT);
  pinMode(motorB1, OUTPUT);
  pinMode(motorB2, OUTPUT);

  irrecv.enableIRIn();
}

void loop() {
  static unsigned long lastCommand = 0;
  if (irrecv.decode(&results)) {
    if (results.value != lastCommand) {
      if (results.value != 0xFFFFFFFF) { 
        lastCommand = results.value;
        switch (results.value) {
          case FWRD:
            motorsFWRD();
            break;
          case BKWD:
            motorsBKWD();
            break;
          case RGHT:
            motorsRGHT();
            break;
          case LEFT:
            motorsLEFT();
            break;
          case STOP:
            motorsSTOP();
            break;
          default:
            Serial.println("Unknown command!");
            break;
        }
      }
    }
    irrecv.resume();
    delay(100);
  }

  if (!irrecv.isIdle()) {
    delay(50);
  }
}

void motorsFWRD() {
  digitalWrite(motorA1, HIGH);
  digitalWrite(motorA2, LOW);
  digitalWrite(motorB1, HIGH);
  digitalWrite(motorB2, LOW);
}

void motorsBKWD() {
  digitalWrite(motorA1, LOW);
  digitalWrite(motorA2, HIGH);
  digitalWrite(motorB1, LOW);
  digitalWrite(motorB2, HIGH);
}

void motorsLEFT() {
  digitalWrite(motorA1, LOW);
  digitalWrite(motorA2, HIGH);
  digitalWrite(motorB1, HIGH);
  digitalWrite(motorB2, LOW);
}

void motorsRGHT() {
  digitalWrite(motorA1, HIGH);
  digitalWrite(motorA2, LOW);
  digitalWrite(motorB1, LOW);
  digitalWrite(motorB2, HIGH);
}

void motorsSTOP() {
  digitalWrite(motorA1, LOW);
  digitalWrite(motorA2, LOW);
  digitalWrite(motorB1, LOW);
  digitalWrite(motorB2, LOW);
}

Credits

Maker 101
56 projects • 187 followers
Maker 101; Beginner and intermediate level Maker projects!
Contact

Comments

Please log in or sign up to comment.