top of page
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)

Conexión:
​
​
 
 
 
 
​

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 quieras
//------------------------------------------------------
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 quieras
//******************************************************
// 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));
}
//******************************************************

BRAZO MECÁNICO

Control de un brazo mecánico.

bottom of page