KETJO

From Curuxa Community

Jump to: navigation, search
Application:
KETJO
Type Robotics
Author Adrián Bulnes Parra, aka Urriellu
Status Development
Date February 2010


This project is an octopod robot built using K'NEX and a couple Curuxa Modules.

Contents

Description

The mechanics of this robot is the most complex part. It's not extremmely complex but it requires a couple hours to design and assemble. It has been built using 845 K'NEX pieces: ~55 for each leg, ~122 for each side of the body and 129 for the center. The structure is mostly an original design, loosely based on a much simpler version found around the internet. The leg movement is based on Theo Jansen design. The entire robot weights 1.53kg.

By using differential leg movement the octopod can walk in multiple directions: forward, backwards, turn and rotate around itself to both sides. When batteries are fully charged or it's powered from an external power supply the body is pretty stable and can carry another extra kilogram.

Hardware

Used Main Boards and Modules

MBP18 Main Board: MBP18
  • Based on a PIC16F88
  • Up to 4096 instructions
  • RAM: 360 bytes
  • EEPROM: 256 bytes
  • 31kHz-8MHz internal oscillator
  • 10-bit, 7-channel Analog-to-Digital Converter
  • Up to 16 data input/outputs


MC2A 1x MC2A

Bidirectional, two-motor controller. Max 1A.

Powers both motors. Each motor moves four legs at the same time.

Pinout can be found at the source code.


CMIR-RC 1x CMIR-RC

Infrared remote control receiver with decoder.

Receives the signal from a remote control.

Connect it to RB0 (pin 6).

Servo axis

All legs are powered from just two motors. I've used two modified Futaba S3003 servos screwed to some k'nex plastic pieces. All components fit perfectly, no plastic pieces were cut or drilled.

Servo-K'nex Servo-K'nex Servo-K'nex Servo-K'nex Servo-K'nex


Pictures

Octopod Octopod Octopod Octopod

The last picture is a closer look of the electronic circuits, placed at the middle of the robot.

Videos

Finished robot

The slow speed is due to the batteries.

Development tests

Source Code

Main.c

/*==================================================================
* Main source code file for SampleOctopod
*
* Settings:
* Left motor: Motor 1
* Right motor: Motor 2
* Infrared receiver: RB0 (pin 6)
*
* Adrian Bulnes
*
* http://community.curuxa.org
*
*=================================================================*/
 
#include <MBP18.h>
 
ConfigBits1(_CP_OFF & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_IO);
 
#define OSC_8MHz
#include <Delays.h>
 
//Pinout
#define M1Enable RA2
#define M1In1 RA3   
#define M1In2 RA4   
#define M2Enable RA1
#define M2In1 RA0   
#define M2In2 RA7   
#define RC RB0      
 
#include <L293.h>
#include "BaseMovement.h"
 
void Setup(){
        AdcDisable();
 
	TRISA0=DigitalOutput;
	TRISA1=DigitalOutput;
	TRISA2=DigitalOutput;
	TRISA3=DigitalOutput;
	TRISA4=DigitalOutput;
	TRISA7=DigitalOutput;
	TRISB0=DigitalInput; 
 
	SetIntosc8MHz();
}                   
 
void main(){
	int i=0;
 
        Setup();
 
	Stop();
 
        while(1){
                if(RC==0) i++;
		else i=0;
		if(i>5){
			MvFwd(); DelaySec(5);
			RotateL(); DelaySec(3);
			MvFwd(); DelaySec(6);
			RotateR(); DelaySec(6);
			MvFwd(); DelaySec(6);
			RotateL(); DelaySec(3);
			MvFwd(); DelaySec(7);
			Stop();
		}
	}
}


BaseMovement.h

//Move robot forward
void MvFwd(){
	M1Fwd();
	M2Fwd();
}
 
//Stop robot
void Stop(){
	M1Free();
	M2Free();
}
 
//Move backwards
void MvBck(){
	M1Bck();
	M2Bck();
}
 
//Turn left
void TurnL(){
	M1Free();
	M2Fwd();
}
 
//Turn right
void TurnR(){
	M1Fwd();
	M2Free();
}
 
//Rotate left
void RotateL(){
	M1Bck();
	M2Fwd();
}
 
//Rotate right
void RotateR(){
	M1Fwd();
	M2Bck();
}
Personal tools