Como tarea voluntaria tras haber realizado varios programas con IDE de Arduino, el profesor propuso a los alumnos la siguiente tarea. Con ella, se realizaría el programa a usar en el brazo robótico, ya que básicamente el mismo programa, sólo que con seis motores en lugar de dos.
int IN1; //Nombramos los pines para controlar los motores
int IN2;
int IN3; //IN3 e IN4 sólo se usarán para el control de la muñeca
int IN4;
int boton=7;
int ENA; //Pin para controlar la velocidad del motor
int ENB; //Sólo se usará para el control de la muñeca
int pot_hor=0; //Creamos variables para almacenar la lectura de los potenciómetros del joystick
int pot_ver=0;
int artic=1; //Variable para seleccionar articulación (cuerpo=1; hombro=2; codo=3; muñeca=4; pinza=5)
void setup() {
for (int i=2;i<7;i++) pinMode(i,OUTPUT); //Definimos como salidas los pines a usar para los pilotos
for (int j=8;j<14;j++) pinMode(j,OUTPUT); //Definimos como salidas los pines a usar para los enable
pinMode(44,OUTPUT); //Enable motor ficticio
for (int k=22;k<34;k++) pinMode(k,OUTPUT); //Definimos como salidas los pines a usar para los IN1 e IN2
pinMode(52,OUTPUT); //Pines de control motor ficticio
pinMode(53,OUTPUT);
pinMode(boton,INPUT_PULLUP); //Definimos el boton como entrada, activando su resistencia de pullup
}
void loop() {
bool estado_pulsador=digitalRead(boton);
if (estado_pulsador==false)
{
delay(250); //Nos damos tiempo para soltar el pulsador
for (int i=8;i<14;i++) digitalWrite(i,LOW); //Si se ha pulsado paramos inicialmente los motores
for (int j=22;j<34;j++) digitalWrite(j,LOW);
if(artic<5) artic++; //Y seleccionamos la siguiente articulación
else artic=1;
}
if (artic==1) //Si la articulación seleccionada es la 1 (cuerpo)
{
for (int k=2;k<7;k++) digitalWrite(k,LOW); //Apagamos todos los leds
digitalWrite(2,HIGH); //y encendemos el del cuerpo
IN1=22; //asignamos los pines correspondientes
IN2=23;
ENA=13;
IN3=52;
IN4=53;
ENB=44;
}
else if (artic==2) //Si la articulación seleccionada es la 2 (hombro)
{
for (int k=2;k<7;k++) digitalWrite(k,LOW); //Apagamos todos los leds
digitalWrite(3,HIGH); //y encendemos el del hombro
IN1=52; //asignamos los pines correspondientes
IN2=53;
ENA=44;
IN3=24;
IN4=25;
ENB=12;
}
else if (artic==3) //Si la articulación seleccionada es la 3 (codo)
{
for (int k=2;k<7;k++) digitalWrite(k,LOW); //Apagamos todos los leds
digitalWrite(4,HIGH); //y encendemos el del hombro
IN1=52; //asignamos los pines correspondientes
IN2=53;
ENA=44;
IN3=26;
IN4=27;
ENB=11;
}
else if (artic==4) //Si la articulación seleccionada es la 4 (muñeca)
{
for (int k=2;k<7;k++) digitalWrite(k,LOW); //Apagamos todos los leds
digitalWrite(5,HIGH); //y encendemos el de la muñeca
IN1=28; //asignamos los pines correspondientes
IN2=29;
ENA=9;
IN3=30;
IN4=31;
ENB=10;
}
else if (artic==5) //Si la articulación seleccionada es la (pinza)
{
for (int k=2;k<7;k++) digitalWrite(k,LOW); //Apagamos todos los leds
digitalWrite(6,HIGH); //y encendemos el del hombro
IN1=52; //asignamos los pines correspondientes
IN2=53;
ENA=44;
IN3=32;
IN4=33;
ENB=8;
}
pot_hor=analogRead(A0); //Leemos el estado del pot_hor y lo almacenamos
pot_ver=analogRead(A1); //Leemos el estado del pot_ver y lo almacenamos
if(pot_hor>=0 && pot_hor<400) //Si tenemos el pot_hor regulado a un lado
{
analogWrite(ENA,map(pot_hor,399,0,0,255)); //Controlamos la velocidad del motor seleccionado
digitalWrite(IN1,HIGH); //y lo ponemos en marcha en un sentido
digitalWrite(IN2,LOW);
if (artic==4)
{
analogWrite(ENB,map(pot_hor,399,0,0,255)); //En caso de estar seleccionada la muñeca
digitalWrite(IN3,LOW); //ponemos en marcha el segundo motor en sentido contrario
digitalWrite(IN4,HIGH); //para hacer que la articulación rote en un sentido
}
else
{
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
}
}
else if(pot_hor>600 && pot_hor<=1023) //Si lo tenemos regulado al otro lado
{
analogWrite(ENA,map(pot_hor,601,1023,0,255));//Controlamos la velocidad
digitalWrite(IN1,LOW); //y lo ponemos en marcha en el otro sentido
digitalWrite(IN2,HIGH);
if (artic==4)
{
analogWrite(ENB,map(pot_hor,399,0,0,255)); //En caso de estar seleccionada la muñeca
digitalWrite(IN3,HIGH); //ponemos en marcha el segundo motor en sentido contrario
digitalWrite(IN4,LOW); //para hacer que la articulación rote en sentido contrario
}
else
{
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
}
}
else if(pot_ver>=0 && pot_ver<400) //Si tenemos el pot_ver regulado a un lado
{
analogWrite(ENB,map(pot_ver,399,0,0,255)); //Controlamos la velocidad del motor seleccionado
digitalWrite(IN3,HIGH); //y lo ponemos en marcha en un sentido
digitalWrite(IN4,LOW);
if (artic==4)
{
analogWrite(ENA,map(pot_ver,399,0,0,255)); //En caso de estar seleccionada la muñeca
digitalWrite(IN1,HIGH); //ponemos en marcha el otro motor en el mismo sentido
digitalWrite(IN2,LOW); //para conseguir que la articulación bascule
}
else
{
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
}
}
else if(pot_ver>600 && pot_ver<=1023) //Si lo tenemos regulado al otro lado
{
analogWrite(ENB,map(pot_ver,601,1023,0,255));//Controlamos la velocidad
digitalWrite(IN3,LOW); //y lo ponemos en marcha en sentido contrario
digitalWrite(IN4,HIGH);
if (artic==4)
{
analogWrite(ENA,map(pot_ver,399,0,0,255)); //En caso de estar seleccionada la muñeca
digitalWrite(IN1,LOW); //ponemos en marcha el otro motor en el mismo sentido
digitalWrite(IN2,HIGH); //para conseguir que la articulación bascule hacie el otro lado
}
else
{
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
}
}
else //Y si esta en la posicion central
{
digitalWrite(IN3,LOW); //lo paramos
digitalWrite(IN4,LOW);
digitalWrite(ENB,LOW);
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(ENA,LOW);
}
}