Proyecto I&P2023-2: (Robot ) / Grupo 2

De Casiopea


TítuloElba la robot interactiva
Tipo de ProyectoProyecto de Taller
Palabras Claveproyectoarduino
Período2023-
AsignaturaInteracción y Performatividad
Del CursoInteracción y Performatividad 2023-2
CarrerasDiseño
Alumno(s)Antonella Pascualetti, Antonella Sierralta, Sofía González, Fernanda Murillo, Pia Espinoza Schmith, Gabriela Cigarruista
ProfesorFranco Gnecco

Elba la robot interactiva

El proyecto consistió en la creación de un robot utilizando la plataforma Arduino. Este robot fue diseñado para moverse en cuatro direcciones y presentar expresiones emocionales a través de luces LED, tomando inspiración del carismático personaje Eva de la película Wall-E. Además, se implementó una interfaz intuitiva que permite su control mediante cualquier dispositivo móvil, utilizando una conexión Bluetooth para facilitar la interacción.

Sofía González- T. Interacción 1.jpg


Desarrollo robot

En la fase inicial del proyecto, nos enfocamos en tomar decisiones formales relacionadas con la adquisición de materiales, la construcción del cuerpo y la programación. Este proceso implicó una investigación exhaustiva sobre los componentes necesarios y sus costos. Posteriormente, con la orientación del profesor y la utilización de recursos como videos instructivos en YouTube, abordamos la codificación para la implementación de las funciones de luces, movimiento y conectividad Bluetooth.

Simultáneamente, abordamos el diseño del cuerpo en dos etapas. La dimensión y ubicación de las ruedas dependían del espacio ocupado por los componentes internos, lo que llevó a dividir esta tarea en dos partes. Esta decisión se tomó estratégicamente, ya que era crucial contar con las medidas específicas derivadas del trabajo previo en los códigos y la disposición de los componentes antes de finalizar el diseño del cuerpo del robot.


Componentes

-Protroboard mini 170 puntos (45 x 35 x 8 mm ), -Ruedas (auto de juguete), -Ruedas, -Resistencias, -Controlador de motores SL298N $3.750 , -Arduino tipo 1 $12.400, -Cable USB arduino tipo 1.
-Motor con caja reductora $1.500 c/u, -Conector bluethoot




Códigos

 #include <SoftwareSerial.h>
 SoftwareSerial miBT(0, 1);
  
   //DEFINICIÓN AVANZAR Y RETROCEDER
   const int Motor1A = 13; //avanzar
   const int Motor1B = 12; //retroceder
   const int Motor2C = 2;//avanzar
   const int Motor2D = 6;//retroceder
   
   //DDEFINICIÓN LUCES
   const int red1Pin = 9;
   const int green1Pin = 8;
   const int blue1Pin = 7;
   const int red2Pin = 3;
   const int green2Pin = 4;
   const int blue2Pin = 5;
    
   String cmd = "";
   
   void setup() {
   
     Serial.begin(9600);   // comunicacion de monitor serial a 9600 bps
     miBT.begin(38400);    // comunicacion serie entre Arduino y el modulo a 38400 bps
   
     pinMode(Motor1A, OUTPUT);
     pinMode(Motor1B, OUTPUT);
     pinMode(Motor2C, OUTPUT);
     pinMode(Motor2D, OUTPUT);
     pinMode(red1Pin, OUTPUT);  //Led RED
     pinMode(green1Pin, OUTPUT);  //Led GREEN
     pinMode(blue1Pin, OUTPUT);  //Led BLUE   
     pinMode(red2Pin, OUTPUT);  //Led RED
     pinMode(green2Pin, OUTPUT);  //Led GREEN
     pinMode(blue2Pin, OUTPUT);  //Led BLUE
     }
   
   void loop() {
     //Hacer color blanco, estado normal
     digitalWrite(red1Pin, HIGH);
     digitalWrite(green1Pin, HIGH);
     digitalWrite(blue1Pin, HIGH);
     digitalWrite(red2Pin, HIGH);
     digitalWrite(green2Pin, HIGH);
     digitalWrite(blue2Pin, HIGH);
     
     while (miBT.available() > 0) {
       cmd = char(miBT.read());
     //break;
     }
   
     if (cmd != "") {
       cmd = cmd[0];
       if (cmd == "S") { //Estado normal
         stopCar();
         Serial.println("s");
       } else if (cmd == "F") { //Robot avanza
         moveForwardCar();
         Serial.println("f");
       } else if (cmd == "B") { //Robot retrocede
         moveBackwardsCar();
         Serial.println("b");
       } else if (cmd == "L") { //Robot dobla a la izquierda
         turnLeftCar();
         Serial.println("l");
       } else if (cmd == "R") { //Robot dobla a la derecha
         turnRightCar();
         Serial.println("r");
       } else if (cmd == "W") { //Robot prende luz magenta
         emocionEnamorado();
         Serial.println("W");
       }else if (cmd == "U") { //Robot prende luz verde
         emocionFelicidad();
         Serial.println("U");
       }else if (cmd == "V") { //Robot prende luz roja
         emocionEnojo();
         Serial.println("V");
       }
       cmd = "";
     }
   
     delay(1000);
   }
   
   
   void emocionEnamorado() {
     // Ojos magenta
   digitalWrite(red1Pin, HIGH);
   digitalWrite(green1Pin,LOW);
   digitalWrite(blue1Pin, HIGH);
   digitalWrite(red2Pin, HIGH);
   digitalWrite(green2Pin,LOW);
   digitalWrite(blue2Pin, HIGH);
   }
   
   void emocionFelicidad() {
     //Ojos verdes 
    digitalWrite(red1Pin, LOW);
    digitalWrite(green1Pin, HIGH);
    digitalWrite(blue1Pin, LOW);
    digitalWrite(red2Pin, LOW);
    digitalWrite(green2Pin, HIGH);
    digitalWrite(blue2Pin, LOW);
   }
   
   void emocionEnojo() {
     //Ojos rojos 
     digitalWrite(red1Pin, HIGH);
     digitalWrite(green1Pin, LOW);
     digitalWrite(blue1Pin, LOW);
     digitalWrite(red2Pin, HIGH);
     digitalWrite(green2Pin, LOW);
     digitalWrite(blue2Pin, LOW);;
   }
   
   void stopCar() {
     digitalWrite(Motor1A, LOW);
     digitalWrite(Motor1B, LOW);
     digitalWrite(Motor2C, LOW);
     digitalWrite(Motor2D, LOW);
     delay(20);
     }
   void turnRightCar() {
     digitalWrite(Motor1A, HIGH);
     digitalWrite(Motor1B, LOW);
     digitalWrite(Motor2C, LOW);
     digitalWrite(Motor2D, LOW);
     delay(20);  
     }
   void turnLeftCar() {
     digitalWrite(Motor1A, LOW);
     digitalWrite(Motor1B, LOW);
     digitalWrite(Motor2C, LOW);
     digitalWrite(Motor2D , HIGH);
     delay(20);
     }
   void moveForwardCar() {
     digitalWrite(Motor1A, HIGH);
     digitalWrite(Motor1B, LOW);
     digitalWrite(Motor2C, LOW);
     digitalWrite(Motor2D, HIGH);
     delay(20);
     }  
   void moveBackwardsCar() {
     digitalWrite(Motor1A, LOW);
     digitalWrite(Motor1B, HIGH);
     digitalWrite(Motor2C, HIGH);
     digitalWrite(Motor2D, LOW);
     delay(20);
     } 
   void moveForwardLeft() {
     digitalWrite(Motor1A, HIGH);
     digitalWrite(Motor1B, LOW);
     digitalWrite(Motor2C, LOW);
     digitalWrite(Motor2D, HIGH);    
     delay(20);
     } 
   void moveForwardRight() {
     digitalWrite(Motor1A, HIGH);
     digitalWrite(Motor1B, LOW);
     digitalWrite(Motor2C, LOW);
     digitalWrite(Motor2D, HIGH);
     delay(20);
     }
   void moveBackwardsLeft() {
     digitalWrite(Motor1A, LOW);
     digitalWrite(Motor1B, HIGH);
     digitalWrite(Motor2C, HIGH);
     digitalWrite(Motor2D, LOW);
     delay(20);
     }    
   void moveBackwardsRight() {
     digitalWrite(Motor1A, LOW);
     digitalWrite(Motor1B, HIGH);
     digitalWrite(Motor2C, HIGH);
     digitalWrite(Motor2D, LOW);
     delay(20);
     }


Modelado

Las partes del robot se modelaron en el software Fusion 360 y los parámetros de impresión 3D se definieron en Creality Slicer.

Modelado digital cortes de la pieza de la cabeza
Modelado digital Fusion 360, vista material sin aristas.
Modelado digital Fusion 360, vista alabre sin aristas.
Modelado digital cortes de la pieza de la tapa de la cabeza
Modelado digital en Creality Slicer, definición parámetros de impresión.
Modelado digital en Creality Slicer, definición parámetros de impresión.
Modelado digital pieza de la cabeza unidas

Impresión 3D

Impresión en máquina 3D
Impresión en máquina 3D
Robot impreso en filamento PLA
Impresión en máquina 3D



Pruebas y armado

Se llevaron a cabo pruebas exhaustivas de los códigos que controlan el movimiento de las ruedas, la iluminación y la aplicación a través de Bluetooth desde el celular. Inicialmente, nos enfrentamos a desafíos con los códigos, experimentando errores básicos que requerían solución. Sin embargo, gracias a la orientación proporcionada a través de videos instructivos y la asistencia del profesor, logramos superar estos obstáculos y llevar a cabo la implementación exitosa de la visión inicial del proyecto.

La fase de ensamblaje también presentó desafíos, ya que fue necesario realizar ajustes en algunas partes del cuerpo para garantizar que todos los elementos se integraran sin inconvenientes. Optamos por ubicar las ruedas en el exterior del cuerpo debido a que su disposición interna generaba conflictos con otros componentes, impidiendo su movilidad. Este proceso de ajuste y reconfiguración demostró ser crucial para la funcionalidad general del robot, asegurando un rendimiento óptimo en su conjunto.

Proceso de armado (1)
Proceso de armado (2)
Proceso de armado (3)
Proceso de armado (4)



Video

Análisis grupal

Se llevaron a cabo pruebas exhaustivas de los códigos que controlan el movimiento de las ruedas, la iluminación y la aplicación a través de Bluetooth desde el celular. Inicialmente, nos enfrentamos a desafíos con los códigos, experimentando errores básicos que requerían solución. Sin embargo, gracias a la orientación proporcionada a través de videos instructivos y la asistencia del profesor, logramos superar estos obstáculos y llevar a cabo la implementación exitosa de la visión inicial del proyecto.

La fase de ensamblaje también presentó desafíos, ya que fue necesario realizar ajustes en algunas partes del cuerpo para garantizar que todos los elementos se integraran sin inconvenientes. Optamos por ubicar las ruedas en el exterior del cuerpo debido a que su disposición interna generaba conflictos con otros componentes, impidiendo su movilidad. Este proceso de ajuste y reconfiguración demostró ser crucial para la funcionalidad general del robot, asegurando un rendimiento óptimo en su conjunto.


Prototipo final

Video

https://youtube.com/shorts/gRRDxZMhQIo?si=ad9kluT7xBFn4n0v