Unidad Robótica Aplicada II Sesión 02 Ensamble Robot Recolector de Objetos
Ensamble Robot Recolector de Objetos Qué aprenderemos en esta sesión? En esta sesión vamos a continuar con la relación de engranajes, específicamente con la relación de fuerza para realizar el ensamble de un sistema para agarrar objeto, y poder desarrollar el reto recolector de botellas. Recordemos la relación de engranajes Relacion de Engranajes = #Dientes Engranaje Conducido #Dientes Engranaje Conductor De esta manera realicemos la relación de los engranajes que se muestran en la imagen a continuación. Para observar esto con ayuda de nuestro robot, construiremos una pinza que nos servirá como actuador del robot y nos va a permitir cumplir diferentes tareas que impliquen de recolección de objetos. 2
Ensamble Robot Recolector de Objetos Paso 1: Colocar las piezas Soporte #11 sobre los componentes Motorreductores e insertar los Tornillos #1/4 de tal forma que este componente quedará fijado por estos soportes. Paso 2: Colocar la pieza Engranaje #8 en el componente Motorreductor y asegurarlo con un Tornillo #1/4. 3
Paso 3: Insertar el Tornillo #40, en las piezas Engranaje #24, Soporte #6 y Soporte #11 del paso anterior y usar el Poste #12 para separar los Soportes #11 y darle mayor rigidez. Paso 4: La parte que sobresale del Tornillo #40, puesto en el paso anterior, se inserta en las piezas Soporte #6 y Soporte #11, dejando los soportes en la dirección mostrada en la figura y asegurarlos con sus respectivas Tuercas. 4
Paso 5: Insertar el Tornillo #10 en las piezas Engranaje #24 y Soporte #6 para darle mayor rigidez. Paso 6: Insertar dos Tornillos #10 en las piezas Soporte L #6 y Soporte #6 para darle mayor rigidez, como se muestra en la figura, en la parte superior de las pinzas, y asegurarlos con sus respectivas Tuercas. 5
Paso 7: Insertar dos Tornillos #10 en las piezas Soporte L #6 y Soporte #6 para darle mayor rigidez, como se muestra en la figura, en la parte inferior de las pinzas, y asegurarlos con sus respectivas Tuercas. Paso 8: Insertar el Tornillo #40 en las piezas Soporte L #6 y hacer uso de los Postes 12 y un Separador circular como separación de soportes y asegurarlos con sus respectivas Tuercas. 6
Paso 9: Insertar dos Tornillos #10 en las piezas Soporte #6 y Soporte L #6 para darle mayor rigidez, como se muestra en la figura, en la parte superior de las pinzas, al lado izquierdo, y al lado inferior de las pinzas, al lado derecho y asegurarlos con sus respectivas Tuercas. Paso 10: Insertar dos Tornillos #10 en las piezas Soporte L #6 y Soporte #6 para darle mayor rigidez, como se muestra en la figura, en la parte superior de las pinzas, al lado derecho, y al lado inferior de las pinzas, al lado izquierdo y asegurarlos con sus respectivas Tuercas. 7
Paso 11: Insertar dos Tornillos #10 en las piezas Soporte #11 y Plataforma para conectarlo al robot y asegurarlos con sus respectivas Tuercas, en los orificios mostrados en el diagrama. Finalmente debemos conectar los cables del motor en el puerto M3, 8
Programación Robot Recolector de Objetos Inicio El robot debe iniciar con las pinzas abiertas, así: Recolectar objeto Los pasos para recolectar el objeto, una vez este es detectado por el sensor de ultrasonido: 1. Encender el motor hacia atrás. 2. Esperar unos milisegundos. 3. Apagar motor. IMPORTANTE: El tiempo de espera depende del objeto que se va a recolectar. 9
Qué objetos recoge el robot? El reto que se va a realizar propone que los objetos en la pista que debe recolectar el robot sean botellas con las siguientes características (aproximadas): Botella en forma cilindrica, con 20cms de altura y 5cms de diametro. Peso de 2 gramos. Conozcamos otras funciones de nuestro Robot A continuación vamos a ver cómo optimizar nuestro código aprendiendo nuevas funciones: goforward() Descripción Enciende hasta 2 motores hacia adelante con sólo una línea de código. Sintaxis goforward(motor_izquierdo,motor_derecho); Parámetros MOTOR_IZQUIERDO: indica el primer motor que debe girar hacia adelante. MOTOR_DERECHO: indica el segundo motor que debe girar hacia adelante. Devuelve Esta función no devuelve valor. Esta función es equivalente a las funciones motoron como se usan a continuación goforward(m3,m1); motoron(m3,forward); motoron(m1,forward); VENTAJA: con sola una instrucción se puede hacer lo que antes hacían dos, Ahora todo es más rápido!. 1 0
goreverse() Descripción Enciende hasta 2 motores hacia atrás. Sintaxis goreverse(motor_izquierdo,motor_derecho); Parámetros MOTOR_IZQUIERDO indica el primer motor que debe girar hacia atrás. MOTOR_DERECHO: indica el segundo motor que debe girar hacia atrás. Devuelve Esta función no devuelve valor. goreverse(m2,m4); motoron(m2,reverse); motoron(m4,reverse); VENTAJA: con sola una instrucción se puede hacer lo que antes hacían dos, Ahora todo es más rápido! motorsoff() Descripción Permite apagar 2 motores con solo una instrucción. Sintaxis motorsoff(motor_izquierdo,motor_derecho); Parámetros MOTOR_DEREHO: Se indica el motor ubicado a la derecha del robot. MOTOR_IZQUIERDO: Se indica el motor ubicado a la izquierda del robot. Devuelve Esta función no devuelve valor. motoroff(m2); motoroff(m1); VENTAJA: con sola una instrucción se puede hacer lo que antes hacían dos, Ahora todo es más rápido!. Nuestro código ahora será más corto y más rápido para nosotros programar! 1 1
Repaso Cómo sabe nuestro robot la distancia a la que está un obstáculo? a) ultrasoundread (). b) lineread (). c) goforward (). ultrasoundread() nos dará la distancia a la que se encuentra un objeto, entre 0 y 150 cm, los parámetros que debemos ingresar es el puerto (p.e. J3) Y ahora! Cómo saco las botellas de la pista? Recordemos que debemos dar instrucciones precisas al robot, en los siguiente 7 pasos vamos ver cómo hacer que nuestro robot agarre una botella y la desplace a otro sitio. PASO 1 : DETECTAR BOTELLA Algoritmo : Parar el robot cuando encuentre el objeto (Parar motores). Damos tiempo para que paren los motores if(ultrasoundread(j3) < 15){ //Detenerse - Stop delay(200); //Paso 2 - Pick up (Recoger) //Paso 3 - Turn Left (Girar Izquierda) //. //. //. } else{ goforward(m2,m1); } PASO 2 : AGARRAR BOTELLA Algoritmo: Encender motor de la pinza hacia atrás, por cierto tiempo. Apagar motor de la pinza. //Paso 2 - Pick up - Recoger motoron(m3, FORWARD); motoroff(m3); 1 2
PASO 3: GIRAR HACIA LA IZQUIERDA POR CIERTO TIEMPO. Algoritmo: Encender motor derecho (M1) hacia adelante. Encender motor izquierdo (M2) hacia atrás Esperar un tiempo. //Paso 3 - Turn Left - Girar Izquierda motoron(m1,forward); motoron(m2,reverse); PASO 4: IR HACIA ADELANTE POR UN TIEMPO DETERMINADO Algoritmo: Encender hacia adelante los motores por cierto tiempo. Apagar motores //Paso 4 - Bring - Llevar goforward(m2,m1); delay(300); PASO 5: DEJAR BOTELLA Algoritmo: Encender motor de la pinza hacia atrás por cierto tiempo. Apagar motor. //Paso 5 - Drop - Soltar motoron(m3, REVERSE); delay(600); motoroff(m3); 1 3
PASO 6: RETROCEDER ROBOT Algoritmo: Encender motores hacia atrás por cierto tiempo. Apagar motores. //Paso 6- Come back - Volver goreverse(m2,m1); delay(300); PASO 7: GIRAR HACIA LA DERECHA Algoritmo: Encender motor derecho (M1) hacia atrás. Encender motor izquierdo (M2) hacia adelante. Esperar un tiempo. Apagar motores //Paso 3 - Turn Right - Girar Derecha motoron(m1,reverse); motoron(m2,forward); TIP Los tiempo determinados en delay() deben ser calibrados según las distancias que el robot deba recorre. TIP En el paso 3 se propone girar a la izquierda y en el paso 7 girar hacia la derecha, tú puedes invertirla, según mejor te convenga. IMPORTANTE: El motor de la pinza se debe encender solo por un tiempo (el suficiente para agarrar el objeto o soltarlo), sin importar en qué dirección se encienda. Esto es para evitar inconvenientes con la tarjeta y los motores, por eso es importante siempre terminar el cierre con la función motooff(m3) y así evitar daños el motor. 1 4
Actividad - 1 Cómo queda nuestro código? Rellena en los espacios vacíos con la palabra que crees que hace falta para completar el código de detención de objetos y luego carga el programa en tu robot y coloca en frente un objeto cilíndrico (botella) que te permita moverlo a otro lugar. void setup(){ linecompare(j1,900); linecompare(j5,900); motorspeed(m1,80); motorspeed(m2,80); } M3 - FORWARD - J3 REVERSE M1 M2 void loop(){ if(ultrasoundread( ) < 15){ //Paso 1 Stop (Parar) delay(200); //Paso 2 - Pick up - Recoger motoron(, ); motoroff( ); //Paso 3 - Turn Left - Girar Izquierda motoron(, ); motoron(, ); //Paso 4 - Bring - Llevar goforward(m2,m1); //Paso 5 - Drop - Soltar motoron(m3, ); delay(300); motoroff(m3); //Paso 6 come back -Volver goreverse(, ); //Paso 7 - Turn Right - Girar Derecha motoron(m1, ); motoron(m2, ); } else{ goforward(m2,m1); } } TENER CUENTA: Puedes jugar con los tiempos que se proponen para retirar la botella, trata de buscar el que más te convenga. 1 5