Gato Biónico

Grupo 6 – Mario Tena Sánchez y Adrián Sánchez Negró

En este blog trataremos nuestra experiencia en los siguientes puntos:

  • Idea
  • Materiales
  • Componentes
  • Conexiones
  • Código
  • Problemas
  • Resultado Final
  • Posibles Mejoras

Idea

Tras barajar varias ideas decidimos decantarnos por hacer un gato, pues nos pareció una gran idea y además podíamos implementar y desarrollar nuevas ideas y funciones constantemente, y es que aunque ahora mismo se encuentra en una fase en la que no es capaz de realizar muchas funciones con un poco mas de desarrollo seria capaz de hacer cualquier cosa.

Para perfeccionar nuestra idea realizamos varios esquemas y pensamos como debía ser el desarrollo tanto software como hardware. También pensamos en los problemas que nos podrían surgir en el proceso de creación, aunque no pensamos ni la mitad de los que luego ocurrirían. Os dejamos una imagen de nuestra idea inicial.

REPARTOS DE TAREAS

Tras llegar a la conclusión de que íbamos a realizar un gato domótico, creímos que la mejor idea era llevar a cabo la idea juntos y no repartir el trabajo, pues esto nos daría una gran ventaja a la hora de avanzar en la creación y ejecución de nuevas ideas y sobre todo en la resolución de posibles problemas que nos pudiesen surgir a lo largo del trabajo.

Nuestra primera decisión fue de que material realizar el cuerpo y patas del gato, tras barajar varias opciones, y encontrarnos ambos en el Bricomart, decidimos que la mejor idea era el contrachapado. Cuando tuvimos todo el material comprado, fuimos a las salas de trabajo en grupo de la biblioteca para ensamblar el gato y programar todas las funciones que se nos ocurrió que nuestro gato podría realizar.

Gracias a haber realizado todo juntos, los dos integrantes del grupo sabemos a la perfección como se realizan las conexiones y como funciona el código.

PASOS A SEGUIR

  1. Compramos todos los materiales necesarios para construir y hacer que se mueva nuestro gato.
  2. Tras tener todo comprado procedimos a construir el cuerpo y las patas del gato, para luego unirlos.
  3. Cuando unimos el cuerpo con las patas empezamos a programar el movimiento del gato, pero nos encontramos con el problema de que las patas no eran capaces de sostener el cuerpo del gato (debido al peso de este) correctamente a la vez que realizaba el movimiento y por tanto decidimos cambiar el cuerpo del gato a algo más liviano.
  4. Realizamos otra vez el montaje del gato cambiándole el cuerpo y conseguimos realizar tanto el movimiento como las funciones auxiliares finales.

MATERIALES

Nuestra idea principal, como ya explicamos en el apartado de «REPARTO DE TAREAS», era la de crear el cuerpo y patas del gato con contrachapado pues nos pareció que podía ser el material más ligero, y dentro de nuestras posibilidades (también pensamos en la impresión 3D) , el más sencillo para llevar a cabo la estructura, para unir estos componentes usamos tuercas y tornillos y silicona caliente para la base de las patas usamos bolas de poliestireno, cortadas por la mitad, puesto que era lo que más estabilidad daba al gato. Por último comentar que finalmente el cuerpo del gato, lo realizamos con bandejas de un contrachapado aun más ligero que el que compramos al principio.

MaterialUsados
Contrachapado3 tablas
Tornillos y Tuercas40 piezas
Silicona caliente4 barras
Bolas de Poliestireno2
Bandejas2
Total5 materiales

COMPONENTES

Los componentes que hemos usado, han sido casi todos proporcionados por la universidad. Y hemos usado un total de 8 componentes, aunque algunos de ellos ya explicaremos que paso con ellos en el apartado de «PROBLEMAS»

  1. Arduino Elegoo UNO R3

    La Placa Arduino Elegoo UNO R3 es la encargada de hacer que el resto de componentes funcionen correctamente. La alimentaremos mediante una pila de 9V que será la encargada de alimentar a todo el circuito por medio de la placa.

  2. Cables de corriente

    Los cables de corriente son los encargados de transmitir las señales enviadas desde la placa a los distintos componentes electrónicos que usaremos. Hemos necesitado un total de 39 cables, repartidos de la siguiente forma: 3 por cada servomotor (5V, tierra, entrada digital), 3 para el receptor de frecuencias(5V, tierra, entrada digital), 4 para el sensor de ultrasonido(5V, tierra, trigger, echo), 2 para el zumbador y otros 6 para las conexiones eléctricas de la protoboard.

  3. Protoboard pequeña

    Decidimos escoger una protoboard pequeña debido a dos aspectos. El primero, y principal, fue reducir el peso. El segundo fue el tamaño reducido que nos ayudaba a una mejor gestión de cableado.

  4. Servomotores

    Usamos un total de 8 servomotores, los cuales simulaban cada una de las articulaciones que tiene un gato en su pierna. Aunque debido al peso y al continuo esfuerzo al que estaban sometidos los mismo se rompieron algunos de ellos y al final usamos un total de 11 servomotores.

  5. Mando Elegoo

    El mando es el encargado de controlar los movimientos del gato mediante una serie de frecuencias que nosotros asignamos en el código.

  6. Lector de infrarrojos

    El lector de infrarrojos es el encargado de recoger la señal enviada por el mando y transmitirla a la placa la cual pondrá en funcionamiento los motores, realizando la acción que le pedimos.

  7. Ultrasonidos

    La idea del ultrasonido era hacer que el gato no pudiese chocar con ningún objeto que se interpusiese en su camino, debido a algunos problemas que ya os contaremos en esa sección no fuimos capaces de implementarlo.

  8. Zumbador

    Por ultimo quisimos implementar un zumbador que emitiese sonidos si había algún tipo de problema, pero como ya os explicaremos también nos originó algunos problemas.

COSTES

Material / ComponenteCoste PiezasNuestro Gasto
Contrachapado3,89€/unidad15,56€
Tornillos y Tuercas0,05€-0,20€/unidad9€
Silicona Caliente0,25€/unidad1€
Bolas de Poliestireno0,125€/unidad0,75€
Bandejas0,50/unidad1€
Arduino Elegoo UNO R319,99€/unidadUniversidad
Cables9,99€/100 unidadesUniversidad
Protoboard4,50€/unidadUniversidad
10 Servomotores1,89€/unidad18,90€
Lector infrarrojos y Mando5,99€/unidadUniversidad
Ultrasonido5,49€/unidadUniversidad
Zumbador1,05€/unidadUniversidad
Total79,65€46,21€

CONEXIONES

Hemos realizado las conexiones de la siguiente manera:

  1. Servomotores: Hemos configurado 1 entrada digital del Arduino por cada motor ocupando un total de 8 pues hemos usado 8 servomotores en total. Cada servo también estaba alimentado por una fuente de alimentación y conectado a tierra.
  2. Lector de infrarrojos: Hemos configurado una entrada digital del Arduino para el lector de infrarrojos, y como los servos van conectados a una fuente de alimentación y a tierra. Este recoge las señales enviadas por el mando Elegoo.
  3. Ultrasonidos: Hemos configurado dos entradas digitales del Arduino, una de entrada y otra de salida, para el sensor de ultrasonidos, y también van conectados a una fuente de alimentación y a tierra. Este sirve para que el gato pueda detectar cualquier objeto que tenga a una determinada distancia.
  4. Zumbador: Hemos configurado una entrada analógica del Arduino para el zumbador, y como los demás componentes, van conectados a una fuente de alimentación y a tierra. Este emite un sonido cuando detecta un objeto a determinada distancia.

Y el esquema electrónico, hecho en tinkercad, que nos quedo es el siguiente:

CÓDIGO

#include <IRremote.h>
#include <Servo.h>
Servo arriba_dcha_delantera;
Servo abajo_dcha_delantera;
Servo arriba_izq_delantera;
Servo abajo_izq_delantera;
Servo arriba_dcha_trasera;
Servo abajo_dcha_trasera;
Servo arriba_izq_trasera;
Servo abajo_izq_trasera;

  int TRIGGER=9; //captura
  int ECHO=8;// recibe
  int arg;
  IRrecv IR(6);

  int zumbador= A0;
   

  int i;
  int j;
  int Distancia;
  int Tiempo;
  
void setup() {
  Serial.begin(9600);
  IR.enableIRIn();
  arriba_dcha_delantera.attach(5); // delanteras arriba--> naranja
  abajo_dcha_delantera.attach(4); // delanteras abajo--> blanco
  arriba_izq_delantera.attach(2);
  abajo_izq_delantera.attach(3);
  arriba_dcha_trasera.attach(10); // traseras arriba--> amarillo
  abajo_dcha_trasera.attach(11);// traseras abajo--> verde
  arriba_izq_trasera.attach(12); // derechas-->atras, izquierdas--> alante
  abajo_izq_trasera.attach(13);  //negros-->arriba,  
  arg=0;

  pinMode(TRIGGER, OUTPUT); //salida
  pinMode(ECHO, INPUT); //entrada
 
 //inicializamos 
arriba_izq_delantera.write(80);
  arriba_dcha_trasera.write(95);
  arriba_dcha_delantera.write(85);
   arriba_izq_trasera.write(90);

  abajo_izq_delantera.write(95);
  abajo_dcha_trasera.write(85);
  abajo_dcha_delantera.write(95);
  abajo_izq_trasera.write(90);
  delay(5000);
  

}

void loop() {
 
  if(IR.decode()){
     Serial.println(IR.decodedIRData.decodedRawData, HEX);
    
     if(IR.decodedIRData.decodedRawData==0xE718FF00){
      Serial.print("2");
     agacharse();
    }
     if(IR.decodedIRData.decodedRawData==0xF30CFF00){
      Serial.print("1");
      movimiento();
      
    }
     if(IR.decodedIRData.decodedRawData==0xB847FF00){
      Serial.print("FUNC/STOP");
        ponteRecto();
    }
     if(IR.decodedIRD ata.decodedRawData==0xA15EFF00){
      Serial.print("3");
        sentarse();
    }
     if(IR.decodedIRData.decodedRawData==0xF708FF00){
      Serial.print("4");
       levantar_pata();
      
    }
    if(IR.decodedIRData.decodedRawData==0xE31CFF00){
      Serial.print("5");
      movimiento();
      movimiento();
      movimiento();
      movimiento();
      movimiento();
      movimiento();
      movimiento();
      movimiento();
      movimiento();
      movimiento();
      
    }
    delay(1500);
    IR.resume();

  }




}
void movimiento(){
i=85;
     for(int arg=95; arg<125;arg++){
    if(i>60){
      arriba_izq_delantera.write(i);
  delay(15);
  i--;
    }
 abajo_izq_delantera.write(arg);
  delay(15);
  }

 //4
 i=90;
 for(int arg=85; arg>55;arg--){
   if(i<115){
     arriba_dcha_trasera.write(i);
  delay(15);

  i++;
   }
 abajo_dcha_trasera.write(arg);
  delay(15);
  }
  delay(1000);
arriba_dcha_delantera.write(90);
  
 abajo_dcha_delantera.write(90);
  
    abajo_izq_trasera.write(90);
  
    arriba_izq_trasera.write(90);
    delay(15);

  

//PASO 2

  i=125;
for(int arg=55; arg<90;arg++){
    if(i>90){
    abajo_dcha_delantera.write(i);
    delay(15);
    i--;
    }
    arriba_dcha_delantera.write(arg);
    delay(15);
  }
delay(1000);
//8
  i=125;
   for(int arg=45; arg<90;arg++){
    if(i>90){
      arriba_izq_trasera.write(i);
    delay(15);
    i--;
    }
    
    abajo_izq_trasera.write(arg);
    delay(15);
  }
  delay(500);
  arriba_izq_delantera.write(80);
  
 abajo_izq_delantera.write(90);
  
    abajo_dcha_trasera.write(90);
  
    arriba_dcha_trasera.write(90);
    delay(15);


}

void agacharse(){


for(int i=0; i<25; i++){
    abajo_izq_delantera.write(85-i);
    abajo_dcha_trasera.write(95-i);
    abajo_dcha_delantera.write(90+i);
    abajo_izq_trasera.write(85+i);
    arriba_izq_delantera.write(80+i);
  arriba_dcha_trasera.write(90+i);
  arriba_dcha_delantera.write(85-i);
   arriba_izq_trasera.write(90-i);
   delay(20);
}
delay(1000);
}

void ponteRecto(){
  arriba_izq_delantera.write(80);
  arriba_dcha_trasera.write(90);
  arriba_dcha_delantera.write(85);
   arriba_izq_trasera.write(90);

  abajo_izq_delantera.write(95);
  abajo_dcha_trasera.write(85);
  abajo_dcha_delantera.write(95);
  abajo_izq_trasera.write(90);
}

void sentarse(){
  for(int i=0; i<15; i++){
    abajo_dcha_trasera.write(95-i);
    abajo_izq_trasera.write(85+i);  
    arriba_dcha_trasera.write(90+i);
    arriba_izq_trasera.write(90-i);
   delay(20);
}
for(int i=0; i<45; i++){
    abajo_izq_delantera.write(85-i);
    abajo_dcha_delantera.write(90+i);
    
    delay(20);
    
}

for(int i=0; i<30; i++){
    
    arriba_izq_delantera.write(80+i);
    arriba_dcha_delantera.write(85-i);
    delay(20);

}


delay(1000);
}


void levantar_pata(){
  for(int i=0; i<25; i++){
    abajo_izq_delantera.write(85-i);
    abajo_dcha_trasera.write(95+i);
    abajo_dcha_delantera.write(80-i);
    arriba_izq_delantera.write(80+i);
  arriba_dcha_trasera.write(90-i);
  arriba_dcha_delantera.write(105+i);
   delay(50);
}

for(int i=0; i<90; i++){
      abajo_izq_trasera.write(85+i);
      delay(20);
}
delay(3000);

for(int i=0; i<90; i++){
      abajo_izq_trasera.write(175-i);
      delay(20);
}
for(int i=0; i<25; i++){
    abajo_izq_delantera.write(60+i);
    abajo_dcha_trasera.write(120-i);
    abajo_dcha_delantera.write(55+i);
    arriba_izq_delantera.write(105-i);
  arriba_dcha_trasera.write(65+i);
  arriba_dcha_delantera.write(130-i);
   delay(20);
}

}
/*void detectar(){
digitalWrite(TRIGGER,LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER,HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER,LOW);
  
  Tiempo = pulseIn(ECHO,HIGH);
  Distancia = (Tiempo/2)/29;

 // Serial.println(Distancia);
  

  delay(100);
  }*/

/*void melodia(){
  tone(zumbador, 800, 500);
  delay(500);
  tone(zumbador, 1200, 500);
  delay(500);
}*/

PROBLEMAS

A pesar de que antes de empezar el proceso de construcción de nuestro proyecto pensamos en los problemas que podíamos tener, nos hemos encontrado con distintos problemas que no fuimos capaces de prever mientras construíamos y programábamos nuestro gato.

  • Peso: El peso ha sido el problema principal de nuestro proyecto, pues al hacer el cuerpo con tableros de contrachapado, las patas, que eran del mismo material, eran capaces de soportar el peso del cuerpo pero no de soportarlo y moverlo a la vez, y, por tanto, decidimos cambiar el cuerpo por algo un poco mas liviano, siendo esto una bandeja de cartón. A parte de cambiar el cuerpo, pensamos que era buena idea usar una protoboard con un tamaño menor a las protoboards normalmente usadas, quitando así algo más de peso. Tras realizar estos cambios las patas fueron capaces de realizar el movimiento y las funciones auxiliares sin problema.
  • Servomotores y Pila: El problema que tuvimos con los servomotores fue que quedando cuatro días para la presentación del proyecto se rompieron tres y por tanto tuvimos que ir a comprar más. La pila proporcionada por la universidad no tenia batería suficiente y también tuvimos que comprar una nueva.
  • Librería «IRremote.h»: Tras terminar los últimos detalles de nuestro proyecto la librería «IRremote.h» decidió actualizarse en ambos portátiles de los integrantes del grupo, haciendo esto que dejase de funcionar el mando Elegoo y, por tanto, dejando de funcionar nuestro proyecto el día de antes de la presentación. La primera solución que se nos ocurrió fue volver a instalar la versión que estábamos utilizando antes de la actualización, pero aun así no funcionaba, por tanto acudimos a foros de internet y finalmente encontramos una solución para dicho problema, haciendo así que el lector de infrarrojos funcionase correctamente.
  • Ultrasonido y Zumbador: Una vez arreglado el problema de la Librería, empezaron a dar problemas tanto el sensor de ultrasonido como el zumbador, pues en cuanto estos recibían cualquier señal, el lector de infrarrojos no captaba correctamente las señales enviadas por el mando, y por tanto decidimos eliminar estos dos componentes de nuestro «loop».

Resultado final

Software Gato Biónico
Hardware Gato Biónico
Prueba Funcionamiento

Posibles mejoras

Nuestro proyecto tiene algunas posibles mejoras que no hemos podido llevar a cabo ya que no teníamos ni los componentes ni el presupuesto necesario. Las posibles mejoras son las siguientes:

  • Cambiar el material con el cual se ha construido el gato por materiales hechos con una impresora 3D.
  • A partir de tener el cuerpo y las patas del gato construidas por una impresora 3D, se podría mejorar la fluidez del movimiento del gato.
  • Añadir funcionalidades nuevas y más complejas.

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 *