FLEXO AUTOMATIZADO – FLEXUINO

Hola, somos Daniel Gómez-Escalonilla Sáez y Raúl Rico Martín-Caro, miembros del Grupo 8 de la asignatura de Sistemas Empotrados y de Tiempo Real. Os presentamos nuestro proyecto «Flexuino».

INTRODUCCIÓN

La idea del proyecto fue crear un flexo automatizado que funcione de manera eficiente y que no ocupe mucho espacio. Muchas veces el escritorio o mesa de trabajo de los estudiantes está lleno de hojas, documentos, herramientas para trabajar, y puede resultar algo incomodo tener un flexo de grandes dimensiones ocupando gran espacio de la mesa. También, muchas veces el enchufe se encuentra en una posición no muy cómoda dificultando la conexión del flexo. Por lo que, nuestro principal objetivo era suplir estos problemas y crear un flexo cómodo para el estudiante.

IMPLEMENTACIÓN

En primer lugar, el flexo se encuentra en una posición inicial plegada. Cuando el usuario desee que se active, pasará la mano por un sensor provocando que se levante a través de sus dos brazos: el primero de ellos, gracias a la fuerza de los dos motores adheridos en la parte superior de nuestra base, logrará proporcionar la verticalidad necesaria para que, el segundo brazo, proporcione, gracias al motor ubicado en la parte superior de éste, un ángulo adecuado que apunte hacia la posición donde el estudiante trabaja. Posteriormente, tras ambos levantamientos, el led se iluminará aportando la luminosidad buscada.
Cuando el estudiante haya acabado su jornada y quiera desactivar el flexo, volverá a pasar la mano por el mismo sensor, y éste volverá a su posición inicial, tras realizar el proceso inverso al mencionado anteriormente.

También, se ha añadido una funcionalidad que consiste en lo siguiente: si el sensor detecta algo a una distancia mayor al umbral con el que se activa el flexo, se encenderá un led indicándolo, pero en ningún caso se desplegará. Con este aviso, se logra evitar que cualquier movimiento o cosa externa se confunda con la activación intencionada por parte del usuario. Por otro lado, si el sensor no detecta nada, el flexo se quedará en su posición.

El sensor empleado se trata de un ultrasónico ubicado en el lateral de la base cuya función será la detección de distancias, dando paso a los diferentes mecanismos mencionados.

PASOS DADOS

A) FASE DE DESARROLLO DE LA BASE: en una primera instancia, decidimos construir una base que pudiera soportar todo el peso de nuestro flexo y, además, contuviera en su interior tanto la Placa Protoboard como la Placa Arduino como también las diferentes conexiones que presentaba nuestro proyecto. Para ello, nos servimos de una caja de cartón resistente que, tras unas modificaciones, cumplía con dicho objetivo.

B) SENSOR ULTRASÓNICO Y LED: se han añadido ambos componentes en nuestra base. El sensor ultrasónico se ubicará en la parte lateral mientras que el led, se encontrará en la parte superior.

C) MOTORES: una vez que contábamos con la base del flexo, adherimos dos motores a su parte superior. Éstos deberían ser lo suficientemente potentes para levantar la estructura de nuestro flexo.

D) ESTRUCTURA FÍSICA: el desarrollo de la estructura física de nuestro proyecto se dividió en dos partes:

a. PRIMER BRAZO: para el brazo inferior, usamos pares de piezas metálicas unidas entre sí mediante tuercas, tornillos y alambres, obteniendo un brazo sólido y resistente.
b. SEGUNDO BRAZO: para el brazo superior, seguimos la misma metodología, añadiendo un motor menos potente para lograr levantar este segundo brazo. También se le añadió un cuello de botella con otro led en su interior, simulando la parte superior de un flexo original.

E) ESTÉTICA: para conseguir una mejor versión del producto, se decidió darle tanto a la base como a ambos brazos una capa de pintura negra.

F) CONEXIONES: para lograr el funcionamiento de los diferentes componentes de nuestro proyecto, se realizaron las conexiones oportunas para lograr nuestro objetivo, mediante la utilización de diferentes tipos de cables.

REPARTO DE TAREAS

Durante el desarrollo de nuestro proyecto, ambos alumnos realizaron todas las funciones y tareas de forma paralela y sin ningún tipo de prioridad ni interés en particular.

COSTES

En cuanto a los costes que se tuvieron en la elaboración de nuestro proyecto, los podemos dividir en 3 grupos:

A) MATERIALES DEL KIT: en este apartado, nos servimos de la Placa Protoboard, de la Placa Arduino, del sensor ultrasónico, del diodo led, del servo motor SG90 y de cables. El coste fue de 0€, ya que fue proporcionado por nuestro profesor.

B) MATERIALES RECICLADOS: uno de los principales objetivos que nos marcamos a la hora de planificar nuestro proyecto fue el de la utilización del máximo número de componentes reciclables, para contribuir con el medio ambiente. Empleamos una botella, unas piezas de metal, alambres, tornillos y tuercas. El coste fue de 0€ ya que eran materiales reciclados.

C) MATERIALES ADQUIRIDOS:


a. Caja: 2.5€
b. Servo Motor MG996R: 2 x 6.6 = 13,2€
c. Led SMD 3W: 2.5€
d. Servo Motor SG90: 0€ *
e. Sensor PIR: 6€ **
TOTAL: 24,20 €


(*) = Cabe destacar que en un primer momento adquirimos 5 Servo Motores SG90 para utilizarlos en lugar de los motores MG996R. Sin embargo, al ver que no podían levantar el peso exigido, devolvimos el producto.

(**) = Inicialmente ibas a iniciar el mecanismo de nuestro proyecto mediante la detección de movimiento a través de un sensor PIR, pero, tras no conseguir el resultado esperado, decidimos sustituirlo por el sensor ultrasónico del KIT.

PROBLEMAS ENCONTRADOS

Los problemas más relevantes que tuvimos fueron los siguientes:

A. El giro de los servo motores para levantar el brazo se realizaba al revés de como nosotros queríamos. Lo que hicimos fue inicializar los servo motores inferiores a 0 y 70 y el superior a 40. De esta forma, conseguimos el movimiento esperado.

B. Otro de los problemas estuvo relacionado con la potencia de los servo motores que levantan el brazo inferior. Según fuimos construyendo los brazos, se iba comprobando si los servos eran capaces de levantar el brazo. Inicialmente, mediante un servo motor SG90, se lograba.
Sin embargo, según fuimos añadiendo piezas, la potencia quedó insuficiente. Barajamos la opción de colocar dos servos del mismo tipo, consiguiendo así levantarlo. Pero al añadir las últimas piezas y el servo superior, la potencia de la combinación de ambos servos volvía a ser insuficiente. Por lo que, finalmente decidimos comprar dos servo motores bastante más potentes, que lograban levantar toda la estructura sin problema.

C. Inicialmente compramos sensores PIR de movimiento. Sin embargo, tras muchas pruebas, no logramos que funcionasen. A día de hoy, no hemos encontrado ninguna explicación a ello. Lo que hicimos para solucionar este problema fue usar un sensor de ultrasonidos, cuya función nos servía. Tuvimos que adaptarnos sutilmente, pero se conseguía el objetivo.

D. Por último, compramos un Led que emitía mucha más luz que los diodos led convencionales. Sin embargo, la potencia fue insuficiente y optamos por comprar otro led mucho más potente. Consideramos que este aspecto es bastante importante, ya que la función principal de un flexo es iluminar.

CASOS DE USO

Para finalizar con la presente memoria, introducimos 4 casos de uso:

  • El flexo se encuentra en estado inicial y el usuario pasa la mano por el sensor a una distancia entre 3 y 20 centímetros. El flexo procederá a desplegarse y se encenderá el led superior, iluminando el entorno apropiado.
  • El flexo se encuentra en activo y el usuario pasa la mano por el sensor a una distancia entre 3 y 20 centímetros. En primer lugar, el led se apagará y, posteriormente, el flexo procederá a plegarse, volviendo al estado inicial.
  • El flexo se encuentra activo o inactivo y el sensor ultrasónico capta un objeto a una distancia superior a los 20 centímetros e inferior a los 60 centímetros. El flexo se mantendrá en su estado actual y se encenderá el led rojo indicando dicha detección.
  • El flexo se encuentra activo o inactivo y el sensor ultrasónico detecta algo a una distancia mayor a los 60 centímetros. Se considera que no se ha detectado nada y no se llevará a cabo ninguna acción.
Casos de Uso correspondientes al Grupo 8 – Sistemas Empotrados y de Tiempo Real
CÓDIGO
#include <Servo.h>

int pEcho = 4;
int pTrig = 6;
int led_b = 7; 
int led_r = 13;
long duracion, distancia;
boolean activo = false;
Servo s1;
Servo s2;  
Servo s3; 
 
void setup() {                
  Serial.begin (9600);       // inicializa el puerto seria a 9600 baudios
  pinMode(pEcho, INPUT);     // define el pin 6 como entrada (echo)
  pinMode(pTrig, OUTPUT);    // define el pin 7 como salida  (triger)
  pinMode(led_r, OUTPUT);            // Define el pin 13 como salida
  pinMode(led_b, OUTPUT);            // Define el pin 7 como salida
  s1.attach(9);  // Servo motor inicializado a 70 inferior derecha
  s2.attach(10); // Servo motor inicializado a 40 superior
  s3.attach(11); // Servo motor inicializado a 0 inferior izquierda
}
  
void loop() {
  
      digitalWrite(pTrig, LOW);
      delayMicroseconds(2);
      digitalWrite(pTrig, HIGH);   // genera el pulso de triger por 10ms
      delayMicroseconds(10);
      digitalWrite(pTrig, LOW);
      
      duracion = pulseIn(pEcho, HIGH);
      distancia = (duracion/2) / 29;            // calcula la distancia en centimetros
      
      if (distancia <= 20 && distancia >= 3){                     // si la distancia es mayor a 500cm o menor a 0cm 
            Serial.print(distancia); 
            Serial.println("cm"); 
            Serial.println("Se despliega el brazo");
            if (activo == false){
              
              //Movimiento brazo inferior
              for(int i=70; i>=0; i--){
                s1.write(i);
                s3.write(70-i);
                delay(30);
              }
              
              //Movimiento brazo superior
              for(int i=40; i>=0; i--){
                s2.write(i);
                delay(50);
              }
              
              //ENCENDER LED
              digitalWrite(led_b, HIGH);

              activo = true;
                               
            }
            else{
              //APAGAR LED
              digitalWrite(led_b, LOW);
              
              //Movimiento brazo superior
              for(int i=0; i<=40; i++){
                s2.write(i);
                delay(50);
              }
              
              //Movimiento brazo inferior
              for(int i=0; i<=70; i++){
                s1.write(i);
                s3.write(70-i);
                delay(30);
              }

              activo = false;
            }
      }
      else {
            if (distancia > 20 && distancia <= 60){
                Serial.print(distancia);           // envia el valor de la distancia por el puerto serial
                Serial.println("cm");              // le coloca a la distancia los centimetros "cm"
                digitalWrite(led_r, HIGH);               // en alto el pin 13
                Serial.println("Se ha detectado algo lejano");  
                delay(1000);
                digitalWrite(led_r, LOW);               // en bajo el pin 13
            }
            else{
                Serial.println("No detecta nada");
            }
      } 
      delay(400);                                // espera 400ms para que se logre ver la distancia en la consola
}
VIDEO EXPLICATIVO
Video explicativo del proyecto

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *