domingo, 23 de marzo de 2014

Robot 4WD. Un robot con 4 ruedas direccionales. (Robot Arduino, Raspberry, PICAXE, ROS)

En este vídeo se muestra una de las principales características del robot Andromina; sus 4 ruedas direccionales girando de 90 grados a 0º y a 180º. Los 4 servos que controlan las 4 ruedas pueden girar independientemente unos de otros.


En el primer video giran todos los servos en el mismo ángulo y al mismo tiempo. Pero en el segundo video Arduino esta programado para girar con multitud de combinaciones de giro. Esto permite que tengamos una maniobrabilidad muy buena del robot. Un control muy parecido al de los "rovers" que se usan para la exploración de la Luna o de Marte.
Mars Rover
El "Mars Rover" con sus ruedas multidireccionales.
En esta prueba inicial se ha usado un Arduino Uno, 6 pilas de 1,2 voltios (a 7,2 voltios), un condensador y una placa de pruebas. Los 4 servo motores están conectados directamente a 7,2 voltios, ya que estos servos pueden trabajar de 3 a 7,2 voltios y también están conectados al Arduino. Este montaje eléctrico solo es de prueba y no es el habitual, en próximas entradas se realizaran más montajes.
Carro Arduino UNO
Montaje de pruebas realizado 
Arduino y 4 servo motores.
Esquema realizado.
Programa básico de prueba para Arduino Uno:
/*Programa para Arduino UNO de Jordi T. C.(23-03-2014)
  Programa de prueba del Robot Andromina, de control de los 4 servos por la libreria
  Estos valores los he probado con 4 servos y con una pila de 7,2v
  Funciona bien sin saltos y movimiento continuo.
  Posición mínima: 450 micro Seg.
  Posición para 0º: 500 micro Seg.
  Posición para 90º: 1300 micro mSeg.
  Posición para 180º: 2100 micro Seg.
  Posición máxima: 2200 micro Seg.
*//// Declaración de las variables ////////////////////////////////////////////////////
#include <Servo.h>
int salida_6=6; // pin por el que mandaremos un tren de pulsos
int salida_9=9; // pin por el que mandaremos un tren de pulsos
int salida_10=10; // pin por el que mandaremos un tren de pulsos
int salida_11=11; // pin por el que mandaremos un tren de pulsos
Servo servo_6;
Servo servo_9;
Servo servo_10;
Servo servo_11;
//// Configuración del Arduino ////////////////////////////////////////////////////////
void setup(){
  Serial.begin(115200);         // Velocidad de conexión entre el PC y el Arduino
  servo_6.attach(salida_6);
  servo_9.attach(salida_9);
  servo_10.attach(salida_10);
  servo_11.attach(salida_11);}
//// Inico de programa //////////////////////////////////////////////////////////
void loop(){
  delay(3000); // Espera tres segundos antes de empezar
  servo_6.writeMicroseconds(500);  // coloca el servo en posición 0º
  servo_9.writeMicroseconds(500);  // coloca el servo en posición 0º
  servo_10.writeMicroseconds(500);  // coloca el servo en posición 0º
  servo_11.writeMicroseconds(500);  // coloca el servo en posición 0º
  Serial.print("Pulso= 500, 0 grados \n "); // Imprime en pantalla la posición
  delay(3000); // Espera dos segundos antes de empezar
  servo_6.writeMicroseconds(1300);  // coloca el servo en posición 90º
  servo_9.writeMicroseconds(1300);  // coloca el servo en posición 90º
  servo_10.writeMicroseconds(1300);  // coloca el servo en posición 90º
  servo_11.writeMicroseconds(1300);  // coloca el servo en posición 90º
  Serial.print("Pulso= 1300, 90 grados \n"); // Imprime en pantalla la posición
  delay(3000);
  servo_6.writeMicroseconds(2100);  // coloca el servo en 180º
  servo_9.writeMicroseconds(2100);  // coloca el servo en 180º
  servo_10.writeMicroseconds(2100);  // coloca el servo en 180º
  servo_11.writeMicroseconds(2100);  // coloca el servo en 180º
  Serial.print("Pulso= 2100, 180 grados \n"); // Imprime en pantalla la posición
  delay(3000);
  servo_6.writeMicroseconds(1300);  // coloca el servo en posición 90º
  servo_9.writeMicroseconds(1300);  // coloca el servo en posición 90º
  servo_10.writeMicroseconds(1300);  // coloca el servo en posición 90º
  servo_11.writeMicroseconds(1300);  // coloca el servo en posición 90º
  Serial.print("Pulso= 1300, 90 grados \n"); // Imprime en pantalla la posición
  delay(3000);
  servo_6.writeMicroseconds(2100);  // coloca el servo en posición 180º
  servo_9.writeMicroseconds(2100);  // coloca el servo en posición 180º
  servo_10.writeMicroseconds(2100);  // coloca el servo en posición 180º
  servo_11.writeMicroseconds(2100);  // coloca el servo en posición 180º
  Serial.print("Pulso= 2100, 180 grados \n");} // Imprime en pantalla la posición
//// Fin del programa ////////////////////////////////////////////////////

No hay comentarios :

Publicar un comentario

Google analytics