Editar Nuevo Proyecto: Proyecto I&P2024-1: (Perro Robot 3D) / Grupo 1 No tienes permiso para modificar esta página, por el siguiente motivo: La acción que has solicitado está restringida a los usuarios del grupo: Usuarios. Título: Imagen: Subir archivo Tipo de Proyecto: Proyecto de Taller Proyecto de Curso Proyecto de Tutoría Proyecto de Titulación Proyecto de Posgrado Proyecto Extracurricular Proyecto Propio Proyecto de Pregrado Anteproyecto de Titulación Proyecto de Financiamiento Externo o Fondo Concursable Importante: Si se trata de un proyecto de Investigación, hay que cambiar el tipo de plantilla editando directamente el código de esta página. Para esto hay un link en la cabecera EDITAR CÓDIGO. Desde cambiar de {{Proyecto}} a {{Proyecto de Investigación}} porque éstos tienen otros campos y particularidades especiales. Palabras Clave: todo en bajas, separadas por coma Año de Inicio: Año de Término: Carreras Relacionadas: Arquitectura Diseño Magíster Otra Asignaturas Relacionadas: Interacción y Performatividad Cursos Relacionados: Interacción y Performatividad 2024-1 Profesor: Alumnos: María Jesús MattaConstanza PomodoroIsabella ZanettiMaria Alejandra Pérez PDF: URL: Posición: Calcular coordenadas utilizando la dirección Texto libre: =Proyecto Final= Nuestro proyecto consiste en construir un perro robot básico capaz de realizar diversas acciones. Utilizaremos piezas impresas en 3D para su ensamblaje y desarrollaremos un código especial que le permitirá ejecutar estas funciones. Además, mediante una aplicación para teléfonos Android, podremos controlar de manera inalámbrica el perro robot mediante conexión Bluetooth. El circuito eléctrico que utilizaremos tiene la capacidad de controlar hasta 9 servomotores para gestionar los movimientos del perro. === Componentes === #Arduino uno #9 servomotores #Protoboard #Jumper #Sensor de ultrasonido #Módulo bluetooth ===Avances piezas 3D=== '''Archivos:''' Se descargaron los archivos en formato STL. Algunos tuvieron que ser modificados debido a fallas en el software Fusion 360. Para la impresión, se utiliza el software Ultimaker Cura con los siguientes parámetros de impresión: resolución normal de 0.15 mm, densidad de relleno (infill density) del 20%, soporte tipo rama de árbol (tree support), patrón de relleno en cuadrícula (infill pattern grid), grosor de la pared (shell thickness) de 0.8 mm y 1.0 mm. {{#widget:Sketchfab|id=b984239fce2f4ba7bc50ad9dd59968ee|width=100%|height=400}} {{#widget:Sketchfab|id=81d29fd3f96347d5acbc18176e3361c2|width=100%|height=400}} {{#widget:Sketchfab|id=cbfa341e94b44c1fac8ba1220efa3f5d|width=100%|height=400}} ===Avances circuito eléctrico=== [[Archivo:PF.IyP.CP.MJM.MAP.IZ.1.png|right|550px]] '''Código''' #include <Servo.h> Servo Leg1F; //13 - 80 Servo Leg1B; //12 - 100 Servo Leg2F; //11 - 100 Servo Leg2B; //10 - 80 Servo Leg3F; //2 - 80 Servo Leg3B; //3 - 100 Servo Leg4F; //4 - 100 Servo Leg4B; //5 - 80 Servo Headservo; //D9 - 90 void setup() { Leg1F.attach(13); Leg1B.attach(12); Leg2F.attach(11); Leg2B.attach(10); Leg3F.attach(2); Leg3B.attach(3); Leg4F.attach(4); Leg4B.attach(5); Headservo.attach(10); Leg1F.write(80); Leg1B.write(100); Leg2F.write(100); Leg2B.write(80); Leg3F.write(80); Leg3B.write(100); Leg4F.write(100); Leg4B.write(80); Headservo.attach(90); } void loop() { // put your main code here, to run repeatedly: } === Piezas === <gallery mode="packed" heights=200px> Archivo:WhatsApp Image 2024-06-06 at 3.52.54 PM (4).jpeg|Cabeza perro Archivo:WhatsApp Image 2024-06-06 at 3.52.54 PM (1).jpeg|Cuerpo Archivo:WhatsApp Image 2024-06-06 at 3.52.54 PM (3).jpeg|Patas (4) </gallery> === Proceso === <gallery mode="packed" heights=150px> Archivo:WhatsApp Image 2024-06-06 at 3.52.53 PM (4).jpeg|Impresion Patas Archivo:WhatsApp Image 2024-06-06 at 3.52.53 PM (3).jpeg|Impresion Cabeza Archivo:WhatsApp Image 2024-06-06 at 3.52.54 PM (2).jpeg|Impresion Cuerpo </gallery> <gallery mode="packed" heights=200px> Archivo:WhatsApp Image 2024-06-06 at 10.28.46 AM (2).jpeg|Proceso lijado Archivo:WhatsApp Image 2024-06-06 at 10.28.47 AM.jpeg|Proceso lijado Archivo:WhatsApp Image 2024-06-06 at 10.28.46 AM (1).jpeg|Union de piezas patas </gallery> <gallery mode="packed" heights=250px> Archivo:WhatsApp Image 2024-06-06 at 1.02.30 PM.jpeg|Cargado de Batería Archivo:WhatsApp Image 2024-06-06 at 10.28.46 AM.jpeg|Organización de cables Archivo:WhatsApp Image 2024-06-06 at 1.02.31 PM.jpeg|Proceso de soldadura de cables Archivo:WhatsApp Image 2024-06-06 at 10.28.53 AM.jpeg|Prueba de Servomotores </gallery> <gallery mode="packed" heights=200px> |Prueba de circuito final |Prueba de circuito final |Prueba de circuito final </gallery> === Resultado final === Se realiza la reposición de 5 servomotores que estaban en estado defectuoso. Se hicieron las pruebas respectivas para corroborar su funcionamiento. Se vuelven a ajustar los cables que habían quedado sueltos. Se toma la decisión de quitar el módulo bluetooth ya que no se pudo concretar bien su funcionamiento. Se realiza un código para que las patas puedan moverse en un loop. Sin embargo, el artefacto no fue capaz de moverse correctamente debido a que las piezas de las patas se desgastaron y algunas se rompieron. '''Código actualizado''' Este código controla un robot con seis servos para las patas y uno para la cabeza, y utiliza un sensor de distancia para detectar objetos. Inicializa la comunicación serial, configura los pines del sensor y adjunta los servos a sus respectivos pines, colocando todos en la posición media al inicio. En el bucle principal, mide la distancia con el sensor de ultrasonido y mueve la cabeza de un lado a otro. Si la distancia medida es menor a 20 cm, el robot se detiene y realiza un movimiento de giro. En ausencia de objetos, el robot alterna el movimiento de sus patas para simular un caminar. Cada ciclo del bucle incluye un retraso de 100 ms para permitir que se procesen los cambios. #include <Servo.h> // Definir los servos Servo servos[6]; // Pines de los servos int servoPins[6] = {13, 12, 11, 2, 4, 5}; // Pines del sensor de distancia const int trigPin = 6; const int echoPin = 3; // Inicializar servo para detección de obstáculos Servo headServo; int headPosition = 90; // Posición inicial de la cabeza int headDirection = 1; // Dirección de movimiento de la cabeza (1: derecha, -1: izquierda) void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); headServo.attach(7); // Pin 7 para el servo de la cabeza // Adjuntar servos a los pines for (int i = 0; i < 6; i++) { servos[i].attach(servoPins[i]); } // Poner todos los servos en posición inicial for (int i = 0; i < 6; i++) { servos[i].write(90); } headServo.write(headPosition); // Posición inicial de la cabeza delay(1000); } void loop() { long duration, distance; // Leer distancia del sensor digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration * 0.034 / 2; Serial.print("Distancia: "); Serial.print(distance); Serial.println(" cm"); // Mover la cabeza gradualmente headPosition += headDirection; if (headPosition >= 180 || headPosition <= 0) { headDirection = -headDirection; // Cambiar dirección al llegar a los límites } headServo.write(headPosition); // Si la distancia es menor a 20 cm, detenerse y girar if (distance < 20) { for (int i = 0; i < 6; i++) { servos[i].write(90); // Poner todos los servos en posición neutral } delay(1000); // Girar para evitar obstáculo // Pata delantera izquierda hacia adelante servos[0].write(30); // Pata delantera derecha hacia atrás servos[3].write(150); // Pata trasera izquierda hacia adelante servos[2].write(30); // Pata trasera derecha hacia atrás servos[5].write(150); delay(500); // Volver a la posición inicial for (int i = 0; i < 6; i++) { servos[i].write(90); } delay(500); } else { // Movimiento continuo para caminar // Fase 1: Mover pata delantera izquierda y trasera derecha hacia adelante servos[0].write(30); // Pata delantera izquierda (Pin 13) servos[5].write(150); // Pata trasera derecha (Pin 5) delay(500); // Fase 2: Volver a la posición inicial servos[0].write(90); servos[5].write(90); delay(500); // Fase 3: Mover pata delantera derecha y trasera izquierda hacia adelante servos[3].write(150); // Pata delantera derecha (Pin 2) servos[2].write(30); // Pata trasera izquierda (Pin 11) delay(500); // Fase 4: Volver a la posición inicial servos[3].write(90); servos[2].write(90); delay(500); } delay(100); // Espera 100 milisegundos antes de la próxima lectura } <gallery mode="packed" heights=200px> |Proceso lijado |Proceso lijado |Union de piezas patas </gallery> ==Servos y la posición de su hélice== '''Lado Izquierdo:''' Pata delantera izquierda: Servo 1 (Pin 13): Mirando hacia adelante. Pata trasera izquierda: Servo 4 (Pin 11): Mirando hacia atrás. Pata central izquierda: Servo 3 (Pin 12): Mirando hacia adelante. '''Lado Derecho:''' Pata delantera derecha: Servo 5 (Pin 2): Mirando hacia adelante. Pata trasera derecha: Servo 8 (Pin 5): Mirando hacia atrás. Pata central derecha: Servo 7 (Pin 4): Mirando hacia adelante. '''Cabeza (Pin 7)''' === Video === SmileyBot está programado para responder a la presencia de su dueño simulando movimientos de felicidad. Cuando detecta la presencia del dueño, el robot pasa de estar sentado a levantarse y mueve sus patas y cabeza para mostrar alegría. Se ha diseñado para que los movimientos sean más rápidos cuando el dueño se acerca y más lentos cuando se aleja, lo que busca intensificar la interacción y la expresión emocional positiva durante el encuentro. {{#widget:YouTube|id=FMi1BSUuN4w}} '''Reflexión sobre el proyecto:''' Durante el desarrollo del proyecto, enfrentamos varios desafíos significativos. En primer lugar, algunas de las piezas impresas no coincidieron exactamente con las medidas requeridas, lo que nos obligó a utilizar herramientas como un Dremel para ajustarlas. Este proceso resultó en piezas que quedaron demasiado lijadas y, en algunos casos, demasiado delgadas, lo que ocasionó problemas como patas que se soltaban o se rompían durante el funcionamiento. Además, experimentamos dificultades específicas con la primera pieza impresa del cuerpo, ya que hubo un problema de configuración con la impresora 3D que afectó la calidad de la impresión y nos obligó a reimprimir la pieza. Otra dificultad significativa fue la gestión de la potencia de los servomotores. Con un total de nueve servos, la demanda energética fue alta y las baterías utilizadas no fueron suficientes para mantener un rendimiento estable. Esto nos llevó a prescindir de dos servos para asegurar la estabilidad del sistema. Además, el peso adicional y la presión ejercida por las piezas impresas complicaron el movimiento fluido de los motores. A pesar de estos desafíos, esta experiencia nos dejó valiosas lecciones para futuros proyectos. Destacamos la importancia de la precisión en las técnicas de impresión, la organización meticulosa de los cables y la verificación exhaustiva de cada componente antes del montaje final. Aunque el proceso fue complejo, nos proporcionó un aprendizaje significativo y enriquecedor que sin duda aplicaremos en proyectos futuros. Resumen: Esta es una edición menor Vigilar esta página Guardar la página Mostrar previsualización Mostrar los cambios Cancelar