BRAZO MECÁNICO         

Control de un brazo mecánico.


Componentes:

Tarjeta ARDUINO UNO o mas potente.
Una fuente de 5 volts.
2 motores PAP 28byj-48 con sus driver.
1 motor comun de 5 volt CC.
Joystick XY Con Pulsador.
1 Rele 5 volts cc.
1 Diodo led rojo.
2 Diodo led verde.
2 resistencias de 330 ohm.
cables y algunas piezas metálicas para el armado
(Las piezas metálicas son sobras de lectoras viejas etc)

Las conexión es bastante fácil.

Si se mira bien la programación esta todo explicado ahí mismo, y en castellano con sus respectivos comentarios detallando cada linea de programación.

Los detalle de los planos están separados por motivo de tiempo, mas adelante haré los planos completos. 

Acá esta el código: 

//******************************************************
// Creaciones Stricker Ruben Dario
// Stricker1972@yahoo.com.ar
//******************************************************
// Definicion de pins y variables
//******************************************************
const int PinMotorPAP1 = 9; // In1 Motor 1 al pin digital (I/O 2 al 13) N°9
const int PinMotorPAP2 = 10; // In2 Motor 1 al pin digital (I/O 2 al 13) N°10
const int PinMotorPAP3 = 11; // In3 Motor 1 al pin digital (I/O 2 al 13) N°11
const int PinMotorPAP4 = 12; // In4 Motor 1 al pin digital (I/O 2 al 13) N°12
//------------------------------------------------------
const int PinMotorPAP5 = 3; // In1 Motor 2 al pin digital (I/O 2 al 13) N°3
const int PinMotorPAP6 = 4; // In2 Motor 2 al pin digital (I/O 2 al 13) N°4
const int PinMotorPAP7 = 5; // In3 Motor 2 al pin digital (I/O 2 al 13) N°5
const int PinMotorPAP8 = 6; // In4 Motor 2 al pin digital (I/O 2 al 13) N°6
//******************************************************
int VelocidadMotor1 = 850; // variable para fijar la velocidad (minimo 800) (maximo 15000)
int PasoContador1 = 0; // contador para los pasos
int PasosPorVueltas1 = 2; // pasos para una vuelta completa 2048, ojo al poner mas de 64 ya que es 32/1 de vueltas y podria ser que no frene en donde quieres
//------------------------------------------------------
int VelocidadMotor2 = 850; // variable para fijar la velocidad (minimo 800) (maximo 15000)
int PasoContador2 = 0; // contador para los pasos
int PasosPorVueltas2 = 2; // pasos para una vuelta completa 2048, ojo al poner mas de 64 ya que es 32/1 de vueltas y podria ser que no frene en donde quieres
//******************************************************
// Secuencia1, 1 fase, si se usa esta secuencia1, borrar o dejarla en forma de comentario la secuencia 2
//const int NumeroPaso1 = 4; // fase completa
//const int Pasos1[4] = { B1000, B0100, B0010, B0001 }; // Fases de secuencia
//const int NumeroPaso2 = 4; // fase completa
//const int Pasos2[4] = { B1001, B1100, B0110, B0011 }; // Fases de secuencia
//******************************************************
// Secuencia2, 1/2 fase, si se usa esta secuencia1, borrar o dejarla en forma de comentario la secuencia 1
const int NumeroPaso1 = 8; // 1/2 fase
const int Pasos1[8] = { B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001 }; // Fases de secuencia
const int NumeroPaso2 = 8; // 1/2 fase
const int Pasos2[8] = { B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001 }; // Fases de secuencia
//******************************************************
int CoordenadaY = A0; // a la entrada del jostick
int CoordenadaX = A1; // a la entrada del jostick
//******************************************************
int PinJoystickR3 = 2; // Boton del jostick
//******************************************************
int PosicionX = 0; // posicion del jostick
int PosicionY = 0; // posicion del jostick
int EstadoR3 = 0; // posicion del jostick
//******************************************************
void setup() {
//******************************************************
pinMode(8, OUTPUT); // Pin I/O 8 salida para el rele.(Usar el rele para activar led y motor)
//******************************************************
Serial.begin(9600); // Establece la velocidad de datos en bits por segundo (baudios) para la transmisión de datos en serie (Monitor).
//******************************************************
digitalWrite(8, LOW); // pin I/O 8 desactivo
//******************************************************
pinMode(PinMotorPAP1, OUTPUT); // declarar pines como salida pinMode(motorPinX, OUTPUT)
pinMode(PinMotorPAP2, OUTPUT); // declarar pines como salida pinMode(motorPinX, OUTPUT)
pinMode(PinMotorPAP3, OUTPUT); // declarar pines como salida pinMode(motorPinX, OUTPUT)
pinMode(PinMotorPAP4, OUTPUT); // declarar pines como salida pinMode(motorPinX, OUTPUT)
pinMode(PinMotorPAP5, OUTPUT); // declarar pines como salida pinMode(motorPinX, OUTPUT)
pinMode(PinMotorPAP6, OUTPUT); // declarar pines como salida pinMode(motorPinX, OUTPUT)
pinMode(PinMotorPAP7, OUTPUT); // declarar pines como salida pinMode(motorPinX, OUTPUT)
pinMode(PinMotorPAP8, OUTPUT); // declarar pines como salida pinMode(motorPinX, OUTPUT)
//******************************************************
pinMode(CoordenadaX, INPUT); // declarar pines como entrada jostick analogico
pinMode(CoordenadaY, INPUT); // declarar pines como entrada jostick analogico
//******************************************************
pinMode(PinJoystickR3, INPUT_PULLUP); // declarar pines como entrada jostick R3
}
//******************************************************
void loop() {
//******************************************************
PosicionX = analogRead(CoordenadaX); // lee posicion de X
PosicionY = analogRead(CoordenadaY); // lee posicion de X
//******************************************************
EstadoR3 = digitalRead(PinJoystickR3); // lee estado de jostick R3
//******************************************************
if (PosicionX > 900) // (SI) lectura de X es mayor a 900
{
//------------------------------------------------------
for (int i = 0; i < PasosPorVueltas1 * 1; i++) // Cantidad de pasos ( PasosPorVueltas1 * 1 ) EJEMPLO: si se cambia el ( * 1 ) por ( * 10 ) dara 10 pasos seguidos
{
haciaAbajo1(); // Inicia el motor 1 hacia donde indica
delayMicroseconds(VelocidadMotor1); // Velocidad del motor 1
Serial.print("Abajo = X:"); // Aviso al puerto serial
Serial.print(PosicionX); // Aviso ai puerto serial
Serial.print(" Y:"); // Aviso al puerto serial
Serial.println(PosicionY); // Aviso al puerto serial
}
//------------------------------------------------------
}
if (PosicionX < 100) // (SI) lectura de X es menor a 100
{
//------------------------------------------------------
for (int i = 0; i < PasosPorVueltas1 * 1; i++) // Cantidad de pasos ( PasosPorVueltas1 * 1 ) EJEMPLO: si se cambia el ( * 1 ) por ( * 10 ) dara 10 pasos seguidos
{
haciaarriba1(); // Inicia el motor 1 hacia donde indica
delayMicroseconds(VelocidadMotor1); // Velocidad del motor 1
Serial.print("Arriba = X:"); // Aviso al puerto serial
Serial.print(PosicionX); // Aviso al puerto serial
Serial.print(" Y:"); // Aviso al puerto serial
Serial.println(PosicionY); // Aviso al puerto serial
}
//------------------------------------------------------
}
if (PosicionY < 100) // (SI) lectura de Y es menor a 100
{
//------------------------------------------------------
for (int i = 0; i < PasosPorVueltas2 * 1; i++) // Cantidad de pasos ( PasosPorVueltas1 * 1 ) EJEMPLO: si se cambia el ( * 1 ) por ( * 10 ) dara 10 pasos seguidos
{
haciaAbajo2(); // Inicia el motor 2 hacia donde indica
delayMicroseconds(VelocidadMotor2); // Velocidad del motor 2
Serial.print("Derecha = X:"); // Aviso al puerto serial
Serial.print(PosicionX); // Aviso al puerto serial
Serial.print(" Y:"); // Aviso al puerto serial
Serial.println(PosicionY); // Aviso al puerto serial
}
//------------------------------------------------------
}
if (PosicionY > 900) // (SI) lectura de Y es mayor a 900
{
//------------------------------------------------------
for (int i = 0; i < PasosPorVueltas2 * 1; i++) // Cantidad de pasos ( PasosPorVueltas1 * 1 ) EJEMPLO: si se cambia el ( * 1 ) por ( * 10 ) dara 10 pasos seguidos
{
haciaarriba2(); // Inicia el motor 2 hacia donde indica
delayMicroseconds(VelocidadMotor2); // Velocidad del motor 2
Serial.print("Izquierda = X:"); // Aviso al puerto serial
Serial.print(PosicionX); // Aviso al puerto serial
Serial.print(" Y:"); // Aviso al puerto serial
Serial.println(PosicionY); // Aviso al puerto serial
}
//------------------------------------------------------
}
if (EstadoR3 < 1) // (SI) lectura de jostick R3 es 0
{
//------------------------------------------------------
digitalWrite(8, HIGH); // Activa Rele con pin I/O 8
Serial.print("Rele Activado"); // Aviso del puerto serial
Serial.print(" "); // Aviso al puerto serial
Serial.println(EstadoR3 + 1); // Aviso al puerto serial
delay(500); // Timer para el rele al presionar jostick R3
digitalWrite(8, LOW); //Desactiva Rele con pin I/O 8
Serial.print("Rele Desactivado"); // Aviso al puerto serial
Serial.print(" "); // Aviso al puerto serial
Serial.println(EstadoR3); // Aviso al puerto serial
//------------------------------------------------------
}
//******************************************************
delay(1); // Timer para la lectura
//******************************************************
}
//******************************************************
void haciaAbajo1()
{
PasoContador1++;
if (PasoContador1 >= NumeroPaso1) PasoContador1 = 0;
Salida1(PasoContador1);
}
//******************************************************
void haciaarriba1()
{
PasoContador1--;
if (PasoContador1 < 0) PasoContador1 = NumeroPaso1 - 1;
Salida1(PasoContador1);
}
//******************************************************
void haciaAbajo2()
{
PasoContador2++;
if (PasoContador2 >= NumeroPaso2) PasoContador2 = 0;
Salida2(PasoContador2);
}
//******************************************************
void haciaarriba2()
{
PasoContador2--;
if (PasoContador2 < 0) PasoContador2 = NumeroPaso2 - 1;
Salida2(PasoContador2);
}
//******************************************************
void Salida1(int step)
{
digitalWrite(PinMotorPAP1, bitRead(Pasos1[step], 0));
digitalWrite(PinMotorPAP2, bitRead(Pasos1[step], 1));
digitalWrite(PinMotorPAP3, bitRead(Pasos1[step], 2));
digitalWrite(PinMotorPAP4, bitRead(Pasos1[step], 3));
}
//******************************************************
void Salida2(int step)
{
digitalWrite(PinMotorPAP5, bitRead(Pasos2[step], 0));
digitalWrite(PinMotorPAP6, bitRead(Pasos2[step], 1));
digitalWrite(PinMotorPAP7, bitRead(Pasos2[step], 2));
digitalWrite(PinMotorPAP8, bitRead(Pasos2[step], 3));
}
//******************************************************

Esquema del relé con el motor y los 2 led

Esquema del joystick analogico



Esquema del motor PAP n° 1



Esquema del motor PAP n° 2

Grupo Facebook

Archivo:

Quien quiera el archivo del proyecto, pedirlo via Mail, y en la brevedad sera enviado, sepan disculpar las molestias.

¡Crea tu página web gratis! Esta página web fue creada con Webnode. Crea tu propia web gratis hoy mismo! Comenzar