Grúa de Premios
Grupo 13: Antonio López Martínez, Diego Pablo Fernández y Guillermo Carranza García
Índice
1 – Introducción
2 – Funcionamiento
3 – Materiales
4 – Proceso
5 – Problemas
6 – Código
7 – Casos de uso
Introducción
En esta práctica se ha realizado un sistema empotrado utilizando una placa Arduino Mega 2560. El objetivo de esta es el de aplicar los conocimientos de la asignatura durante la elaboración de un sistema propio. En nuestro caso, se ha decidido elaborar una grúa de premios. Además, sustituyendo al tradicional gancho de estas máquinas se ha introducido un electroimán, cuya funcionalidad será la de recoger y soltar los diferentes premios.
Funcionamiento
El funcionamiento de esta máquina se puede resumir en 3 estados: esperando a que se inicie el movimiento, moviendo la grúa y devolviendo la grúa a su inicio.
La máquina comienza en un estado de espera, en el que se encuentra comprobando si se ha pulsado un botón que hemos definido como botón de inicio para que el usuario pueda comenzar la partida cuando desee y la máquina no esté continuamente activando los distintos motores debido a falsos positivos del joystick.
Una vez se ha pulsado el botón, se le da al usuario un intervalo de tiempo de 60 segundos para que coloque la grúa en la posición que él crea adecuada. El tiempo restante se ve reflejado en un display de 7 segmentos situado al lado del stick controlador de la grúa.
Cuando se le agota el tiempo al usuario, la grúa comienza a bajar automáticamente hasta llegar a la altura de los premios, momento en el que activa el imán situado en el extremo de la misma para intentar recoger alguno de los diferentes premios de la máquina. Una vez activo el imán, la máquina comienza a subir de nuevo y se desplaza hasta la parte de la rampa de recogida de premios, donde desactiva el imán para que cualquier premio que haya conseguido ser llevado hasta allá se caiga y lo pueda recoger el usuario que esté utilizando la máquina.
Materiales
Para la elaboración del empotrado, se han requerido de los siguientes materiales. Cabe destacar la contribución de terceros a la hora de aportación de material extra para la creación del sistema sin exigir precio alguno.
Proceso
Durante la creación del empotrado, se dividieron las tareas entre los diferentes miembros del grupo para un desarrollo del proyecto más ágil y eficiente. Mientras unos miembros del grupo se encargaban de la parte hardware del empotrado, otros tenían encargado el software del mismo. A lo largo de la creación de la grúa, se pudieron distinguir 4 etapas durante el desarrollo del mismo.
El primer paso fue expandir la idea inicial y diseñar el concepto del empotrado, además de su funcionamiento básico y un listado de los materiales que serían necesarios para la elaboración de la grúa.
Una vez recibidos todos los materiales imprescindibles, se procedió con la construcción de la estructura del empotrado. Para ello se utilizó madera obtenida de varios palés de madera, que se serró y se adaptó a las medidas establecidas anteriormente. Además, también se consiguió otro tipo de madera más fina para la base del empotrado.
Con la estructura ya montada, se comenzó el desarrollo del código, y todas las pruebas consiguientes que se tuvieron que realizar para comprobar el correcto funcionamiento de los materiales disponibles. Se tuvieron que descartar algunos elementos que no funcionaban correctamente, principalmente cables, y sopesar diferentes decisiones de la estructura básica del mismo.
Habiendo escrito ya el código y los elementos de hardware en sus respectivas posiciones, se procedió a desarrollar el mecanismo que permitiera el funcionamiento del empotrado, de manera que cumpliera la funcionalidad deseada. Además, se colocaron los elementos de cableado y tecnológicos de manera que estuvieran lo más escondidos posible de cara al usuario. Se tuvo en cuenta la accesibilidad a los mismos desarrollando una compuerta en la parte trasera del empotrado para acceder a la parte inferior del mismo que permitiría reconectar algún posible cable desconectado o comprobar el estado del Arduino. También se diseñó una tapa superior removible con un objetivo similar al anterior, solo que esta vez centrado más en posibles problemas con los rodamientos y los hilos que los conectaban. En adición a lo anterior, se diseñó una caja que albergara un motor que permitiera la subida y la bajada del imán, además de su movimiento en horizontal y vertical en la propia grúa.
Problemas
Se observaron diferentes problemas a lo largo del desarrollo de la máquina, entre los que destacan los siguientes:
- Malfuncionamiento de elementos
Nos encontramos con elementos del Kit inicial que no funcionaban correctamente y que nos resultaban esenciales, por lo que debimos de buscar repuestos para los mismos o comprar nuevos cuando no fuimos capaces de encontrar suficientes.
- Falta de presupuesto
No teníamos un presupuesto muy alto, lo que no nos permitió adquirir todos los materiales que nos hubiera gustado en un inicio, a lo que se tuvo que buscar alternativas dentro de nuestro rango de precios.
- Falta de potencia
Debido al alto número de elementos conectados, se requería de una potencia eléctrica mayor de la proporcionada por el arduino, por lo que nos vimos obligados a conectar varios arduinos extra, cada uno de ellos conectados a una batería, para que los motores tuvieran la energía suficiente para un correcto funcionamiento.
- Falta de torque y rozamiento
En un principio, conseguimos varios servomotores de rotación continua, pero estos no proveían la fuerza suficiente para mover la estructura de la grúa, por lo que se sustituyeron por unos motores steppers, que en teoría ofrecían una fuerza mayor. En un principio parecía que nos podían ofrecer la fuerza necesaria, pero al ir añadiendo conexiones y peso a la caja del centro de la grúa se mostraron deficientes, tanto de fuerza como de velocidad.
- Elección de materiales
Se eligió en un principio un hilo Gutermann para la transmisión de movimiento entre rodamientos, y se mantuvo esa decisión hasta el final, pese a no ser la más óptima. Además, debido a la tensión que tenían que soportar, varios hilos se rompieron durante el montaje y las pruebas de la máquina, por lo que tuvieron que sustituir y, posteriormente, cambiar completamente por otros hilos diferentes.
Código
El código de nuestra máquina se puede dividir en 3 partes: la parte de declaración de variables y librerías, el setup y el loop. La lógica del código se diseñó para cumplir, en la medida de lo posible, la funcionalidad teórica de la máquina y su comportamiento esperado.
En la parte de declaración de variables y librerías se incluyó la librería Stepper.h para poder utilizar los 3 distintos motores de nuestro sistema. Además, se declararon todos los distintos pines del Arduino a los que irían conectados los diferentes elementos de la máquina. A continuación se muestra un fragmento de dicha declaración.
const int buttonPin = 53;
const int stepsPerRevolution = 2048;
const int rolePerMinute = 17;
Stepper myStepperX(stepsPerRevolution, 2, 4, 3, 5);
Stepper myStepperY(stepsPerRevolution, 8, 10, 9, 11);
const int X_pin = A0;
const int Y_pin = A1;
…
Además, se crearon una serie de flags que permiten al código comportarse como una máquina de estados:
int enMovimiento = 0;
int cronometroIniciado = 0;
int movimientoGrua = 0;
int inicio = 1;
Una vez dentro del Setup, se establecen los diferentes modos de los pines del Arduino, y se le asigna a cada motor una velocidad a la que girar.
myStepperX.setSpeed(rolePerMinuteX);
myStepperY.setSpeed(rolePerMinuteY);
myStepperZ.setSpeed(rolePerMinuteY);
pinMode(electroIman,OUTPUT);
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
…
Ya habiendo declarado todos los elementos, comenzamos la parte del loop, donde se gestiona toda la lógica de nuestro código. Este se basa en 3 ifs que gestionan a qué parte del código accedemos en cada momento.
Si nos encontramos en el estado de Inicio, la máquina simplemente espera a que pulsemos el botón de inicio:
botonEmpezar = digitalRead(buttonPin);
if (botonEmpezar == LOW) {
segundosPornumero = maxsegundosNumero;
enMovimiento = 1;
inicio = 0;
segundosRestantes = 9;
DisplayNum(segundosRestantes);
}
Una vez pulsado el botón pasamos al estado de EnMovimiento, donde comprobamos el estado del joystick para desplazar la grúa y vamos disminuyendo poco a poco el temporizador del display de 7 segmentos:
if(XAxis > 750){
myStepperX.step(700);
}
else if (XAxis < 250){
myStepperX.step(-700);
}
else {
}
…
if(tiempo2 > (tiempo1+1000)){
tiempo1 = millis();
segundosPornumero--;
DisplayNum(99);
}
if(segundosPornumero <= 0){
segundosRestantes--;
segundosPornumero =maxsegundosNumero;
}
DisplayNum(segundosRestantes);
Una vez se agota el tiempo, se pasa al estado de MovimientoGrua, donde subimos y bajamos el imán y lo devolvemos a su punto de inicio:
myStepperZ.step(-stepsPerRevolution * 4);
digitalWrite(electroIman,HIGH);
delay(1000);
myStepperZ.step(stepsPerRevolution * 4);
myStepperY.step(-5* stepsPerRevolution);
myStepperX.step(-5*stepsPerRevolution);
delay(100);
digitalWrite(electroIman,LOW);
inicio = 1;
Casos de uso
Nuestra máquina tiene un uso principalmente recreativo, y no le vemos mucha utilidad posible fuera de ese ámbito. No obstante, se podría utilizar como elemento de refuerzo positivo en un ámbito educativo o similar, premiando a la persona con la utilización de la máquina con la promesa de un posible premio si se consigue utilizar correctamente. Además, se pueden realizar modificaciones tanto estéticas como funcionales para adaptar la máquina a otros ámbitos de uso fuera de la propia diversión del usuario.