KETJO
From Curuxa Community
| 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
Main Board: MBP18
|
| 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. |
| 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.
Pictures
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(); }
