lunes, 16 de febrero de 2015

Arduino: Brazo robot con servos ( Robot arm )

Muy buenas a todos Arduineros y Arduineras!

Infotronikblog tiene ahora su propio brazo robot. En total 3 ejes más pinza, aunque es el modelo básico, el modelo completo tiene 4 ejes más pinza. Puedes descargar el modelo en Thingiverse.

Este diseño es más que suficiente para enseñar como funciona un brazo robot y las 3 posiciones espaciales (X Y Z) en las que se moverá el brazo. Los ejes de referencia son:

  • Eje X: Es el movimiento de izquierda a derecha.
  • Eje Y: Es el movimiento de arriba o abajo.
  • Eje Z: Es el movimiento de avance o retroceso.

Ahora que ya sabemos por donde nos movemos, estos son los componentes que moverán los ejes que componen el brazo:

  • Arduino UNO o NANO.
  • 4 servos de tipo 9g.
  • 4 pulsadores.
  • 1 potenciómetro.

La parte blanca esta impresa en ABS y la parte azul es PLA, ya que es de las primeras cosas impresas y querían probar los diferentes materiales. Después de montarlo, creo que es mejor el PLA, ya que es mas rígido.

Los movimientos corren a cargo de 4 servos de 9g que van conectados a los pines 2, 3, 4, 5 de Arduino. Para la primera prueba (solo la pinza) utilice dos pulsadores, uno para abrir y otro para cerrar muy parecido al segundo ejemplo del articulo "Arduino moviendo un servo".


Para la segunda prueba (bazo completo) utilice cuatro pulsadores conectados a los pines 6, 7, 8, 9 asignado a cada uno de los servos y un potenciómetro en el pin A0 para darle movimiento. De tal manera que si pulsamos uno de los botones mientras movemos el potenciómetro accionaremos el servo asignado a ese pulsador.



Pulsando el botón y moviendo el potenciómetro podemos mover el brazo en cualquier dirección.


Si bien el sistema no es del todo perfecto, ya que si no movemos el potenciómetro antes de accionar el pulsador el servo adquiere la posición del ultimo movimiento. Pero es más que suficiente para este ejemplo.

Una mejora puede ser también implementar la memoria EPROOM para almacenar los movimientos en determinadas posiciones y para después reproducirlos en secuencia haciendo así una tarea repetitiva.

Aquí tenéis un vídeo para que veáis un poco mejor como funciona:


Y aquí el código que hace que funcione:


#include <servo.h>

#define POT A0
#define SWITCH1 2
#define SWITCH2 3
#define SWITCH3 4
#define SWITCH4 5
#define SERVO1 6
#define SERVO2 7
#define SERVO3 8
#define SERVO4 9


int posServo1 = 90; // Angulo servo 1 (base)
int posServo2 = 90; // Angulo servo 1 (antebrazo)
int posServo3 = 90; // Angulo servo 1 (brazo)
int posServo4 = 90; // Angulo servo 1 (pinza)


void setup() 
{ 
  Serial.begin(115200);

  servo.attach(sp1);
  pinMode(SWITCH1, INPUT_PULLUP);
  pinMode(SWITCH2, INPUT_PULLUP);
  pinMode(SWITCH3, INPUT_PULLUP);
  pinMode(SWITCH4, INPUT_PULLUP);
  
}

void loop() 
{
  
  // Show the value of the buttons on the serial monitor
  Serial.print("b1=");
  Serial.println(digitalRead(b1));
  Serial.print("b2=");
  Serial.println(digitalRead(b2));

  int potValue = analogRead(POT)
  int position = map(potValue, 0, 1023, 0, 180);
  
  
  if (digitalRead(SWITCH1) == HIGH)  servo1.write(position);
  else if (digitalRead(SWITCH1) == HIGH)  servo1.write(position);
  else if(digitalRead(SWITCH1) == HIGH)  servo1.write(position);
  else (digitalRead(SWITCH1) == HIGH)  servo1.write(position);

}

Saludos a todos!!

5 comentarios :

  1. necesito mover 4 servomotores controlados con pulsadores, necesito la imagen de como se conecta y su codigo para arduino. gracias

    ResponderEliminar
    Respuestas
    1. Hola mandame un mail y te mando todo. mail: ezevega44@gmail.com

      Eliminar
  2. Tenes el diseño? si me lo podrías pasar te lo agradecería.

    ResponderEliminar
    Respuestas
    1. Buenas, el diseño lo puedes encontrar en Thingiverse, este es el enlace: https://www.thingiverse.com/thing:34829 Saludos!!!

      Eliminar