lunes, 30 de enero de 2017

El año del Arduino en U.R.D.I

Año nuevo, plataforma nueva, este año en U.R.D.I. nos dedicaremos al usar la placa Arduino uno.

Arduino es el nombre de una familia de placas programables con un microcontrolador (generalmente ATMega328) que se programan mediante un lenguaje basado en C. Estas tarjetas son relativamente fáciles de usar y programar, y son muy útiles para crear prototipos de máquinas electrónicas y para hacer proyectos de electrónica, automatización, robótica, etc.

Todas las placas de arduino son muy similares y todas se programan con el mismo software, nosotros vamos a estar usando a la placa Arduino uno.

Esta es la arquitectura de la placa Arduino Uno y sus principales partes:


Arduino es una plataforma de acceso libre, los esquemas de las placas están al acceso del público y el software con el que se programan las placas es de código abierto y se puede descargar gratuitamente desde la pagina oficial de Arduino.

Niños de Quinto y Sexto grado en Competencia con Robi

Los niños y niñas de quinto y sexto grado del Instituto Técnico Nacional de Comercio participaron en competencia con Robi Seguidor de Línea y Sumo. Esta competencia fue citada por URDI, equipo de robótica de la institución. La competencia se celebró el 28 de Enero de 2017.

El equipo URDI ofreció Certificado de Participación a los 34 niños y realizó premiación para Primero y Segundo Puesto en las dos categorías : Robi Seguidor de Línea y Sumo.






Visita nuestro facebook, allí subimos las fotos de este evento.

domingo, 29 de enero de 2017

Curso de Robi realizado el 21 y 28 de enero de 2017

U.R.D.I., la Unidad Robótica de Instenalco organizó los días 21 y 28 de enero un curso de 8 horas para los estudiantes de quinto y sexto grado de la institución en el que mediante el uso de Robi se les enseñó a los niños las bases de la programación.

Participaron un total de 34 niños, los cuales también aprendieron a programar a Robi en retos como seguidor de linea y sumo.







lunes, 23 de enero de 2017

sumo de robi

Sumo es una modalidad de competencia de robots muy famosa en todo el mundo y de mucha estrategia, el juego se da entre dos robots, ambos se colocan en un circulo con fondo negro y borde blanco, el objetivo es sacar al otro robot del circulo empujándolo.

La pista siempre es la misma en toda competencia, lo que varia es el tamaño de esta:


Son tres rondas, el primero en ganar dos gana el partido, cada ronda es de tres minutos, si ningún robot ha salido después de los tres minutos, la competencia es empate, si después de tres rondas los jugadores siguen empatados se puede hacer una ronda de desempate.

el procedimiento para empezar es simple: se colocan ambos robots en el ring y se encienden al mismo tiempo, en la programación se debe incluir que no empiecen sino hasta cinco segundos después de encendidos.

En cada ronda los robots empiezan en una posición distinta: frente a frente. cola con cola, o posición de piscis:
frente a frente
cola con cola
"piscis"
El concepto para hacer el programa es muy parecido al seguidor de linea, solo que en vez de usar sensores de linea se utilizan los sensores de obstáculo: cuando haya algo al frente avanza, si esta a un lado, gira en esa dirección y avanza. También hay que pensar en lo que el robot hará cuando toque la linea, suponiendo que la tocará de frente haremos que retroceda, esta es la manera más básica de programar a un robi con sumo:



Si te fijas bien en el código notaras una diferencia fundamental con el código del seguidor de linea: cuando no se detecta nada el robot no puede simplemente quedarse quieto ya que seria susceptible a que lo ataquen, entonces en el código anterior, por ejemplo, el robi estará dando vueltas sobre su eje para buscar a su oponente. Según decidamos que va a hacer el robot encontramos que hay dos categorías: los radares y los trotamundos.

Los radares son robots que rotan sobre su propio eje buscando a su oponente por la pista, el de el ejemplo seria clasificado como un radar, un radar que gire muy rápido no alcanzará a detectar nada, pero si gira a la velocidad adecuada siempre terminarán por encontrar a su oponente.

Los trotamundos son robots que avanzan sin rumbo fijo y rebotan en el borde del tablero, avanzando por toda la pista hasta que se da la casualidad de que el robot oponente queda sobre ellos, lo malo es que podrían ser empujados por detrás y ellos mismos se ayudarían a salir de la pista.

También existen posiciones intermedias entre los dos tipos de robot sumo, que son los que dan vueltas en círculos o cerca del borde.

Algunos diseños más sofisticados de el código de "escape de la linea" involucran todos los sensores y le dan una respuesta distinta a cada sensor dada su ubicación en el robot.

Hay otro aspecto que debes tener en cuenta cuando quieras definir las velocidades y es la regla de oro para los motores:

"El torque y la velocidad son inversamente proporcionales en un motor"

Dicho más fácil: si quieres tener fuerza de empuje deberás sacrificar velocidad y si quieres velocidad deberás sacrificar fuerza de empuje, no puedes tener mucho de ambos: entonces mientras más lento andes, con más fuerza irás. Administrando fuerza y velocidad podras crear el robot ganador.

La práctica hace al maestro.

Seguidor de linea y seguidor de linea con obstáculos de robi

Hola, en esta ocasión vamos a estaremos hablando sobre el reto de "seguidor de linea", y veremos como se programa en robi.

El reto de "seguidor de linea" se ve mucho en las competencias escolares de robótica y consiste en que el robot siga una linea negra (de 1,6 cm de grosor) que esta pegada sobre un tablero o una lona blanca. Cada organizador diseña su propia pista de seguidor de linea, así que siempre son distintas.

Quien logre transitar por todo el circuito en el menor tiempo posible, sin salirse de la pista será quien gane este reto. La dificultad de la pista puede variar si tiene curvas cerradas o intersecciones. En otras modalidades dos robots se persiguen entre sí hasta que uno alcanza al otro.

Puedes ver un ejemplo de pista y descargarlo para robisoft aquí.

Para la programación usaremos los sensores de linea interiores, lo primero a tener en cuenta es que trabajaremos con un ciclo infinito (una vez acabado el programa volverá a empezar), para que el estado del robot se este actualizando indefinidamete.

En el código deberemos hacer que robi ande recto cuando este centrado sobre la linea y que si se sale por un lado corrija su trayectoria. Sabemos que mientras robi este centrado sobre la linea ambos sensores centrales percibirán "negro", pero si robi se desvía unos pocos milímetros solo uno de los sensores percibirá "negro" y el otro "blanco", usaremos esto para saber cuando y por cual lado se desvia el robot.

diagrama: seguidor de linea robi

Depende de cada pista que tan cerrada debe ser la curva, lo mejor es ir probando hasta que el movimiento del robot sea lo más fluido posible, una buena combinación para empezar a probar es 100-60.

Los errores más comunes que pueden presentarse son:

El robot simplemente no se mueve: El programa no se cargo con éxito o no se colocó un ciclo infinito.

El robot cabecea: Las curvas se están dando demasiado cerradas o se programó que una llanta se detuviera en las curvas.

Hay otra modalidad de competencia en la que el robot debe atravesar un circuito y al mismo tiempo esquivar obstáculos que están en la pista, para esto bastará con agregarle al código anterior una condición en la que cuando el sensor de obstáculos frontal perciba que hay algo se ejecute una secuencia de esquivado, hay muchas maneras de esquivar un obstáculo, pero según la pista hay que determinar si es más conveniente esquivar por la derecha o por la izquierda, aquí está la forma más básica de esquivar un obstáculo: 


Ten en cuenta que esta secuencia debe ir después de el código de seguidor de linea básico y no dentro de una condición del sensor de linea.

En este ejemplo el robot una vez detecta el obstáculo, apunta a la derecha, y luego avanza dando curva la izquierda, una vez toca linea el programa salta hasta las condiciones de seguidor de linea y todo sigue normal.

El único dato necesario para diseñar el programa de esquivado es el diámetro del obstáculo, ya que casi siempre los obstáculos se ubican sobre partes rectas, mientras más cerca pase el robot del obstáculo sin tocarlo y más fluido sea su movimiento mejor.

La práctica hace al maestro.

miércoles, 23 de noviembre de 2016

Medición de Ángulos: Grados vs Radianes

Seguramente ya habías oído sobre los grados como la unidad de medida usada para medir la amplitud de un ángulo, seguramente ya sabias que en una circunferencia hay 360 grados, sin embargo recordemos un poco sobre lo que es un grado. Tambien es importante saber que los ángulos positivos se miden en sentido horario.

Si tomas una circunferencia y trazas 360 segmentos desde el centro hasta 360 puntos equidistantes ubicados en la circunferencia, la separación entre cada par de segmentos adyacentes, que comparten uno de sus extremos equivale a un grado, entonces en una circunferencia podrás encontrar 360 grados, cada uno de estos grados es (como todo en la matemática) infinitamente divisible, por lo general se dividen decimalmente, de manera que podremos medir ángulos de 34,5 grados o de 3,33 grados. Otra manera de dividir a los grados es según un sistema sexagesimal: cada grado (º) se puede dividir en 60 minutos (´) y cada minuto en 60 segundos ("). Suena familiar no?, pues resulta que estas unidades de medida son las que se utilizan para dividir a la Tierra en los usos horarios, correspondientes a los meridianos, los meridianos dividen a la Tierra verticalmente, y la hora de cada zona depende de el meridiano en el que esté, por eso es que distintas partes del mundo pueden tener la misma hora, puesto que la única condición para que esto suceda es que estén sobre el mismo meridiano.

Mediciones de ángulos dadas en grados
Mediciones de ángulos dadas en radianes



Volviendo al  tema vamos a comentar de que se trata un radian. Pues sucede que, como con muchas otras magnitudes, no existe una sola unidad de medida aplicable, así como para medir longitudes podemos usar metros o pies y pulgadas y para medir la temperatura podemos usar grados celcius, kelvin o grados fahrenheit, para medir la amplitud de un angulo podemos usar grados o radianes.






y a cuanto equivale un radian?. Un radian se define como un ángulo central cuya longitud de arco equivale al radio. Un arco es un elemento de la circunferencia, es una "segmento"de la circunferencia entre dos puntos de esta. Entonces, con lo anterior y sabiendo que la relación entre la circunferencia y su radio es: "circunferencia = 2*𝛑*radio" tenemos que una circunferencia se puede dividir en 2𝛑 radianes, y como una circunferencia también equivale a 360° entonces 360°=2𝛑rad y por regla de 3: 1rad=57,2958°. 



Existen maneras sencillas de transformar ángulos a radianes y viceversa, son dos simples formulas que trabajan bajo una regla de tres ya que sabemos que 180° = 1rad:



Como ya te habrás dado cuenta, las medidas en radianes se suelen expresar como múltiplos o submúltiplos de 𝛑 ya que este numero es el que relaciona la longitud de la circunferencia con el radio, a continuación se muestra una tabla que relaciona a algunos ángulos con su valor en radianes:

G0°30°45°60°90°120°135°150°180°210°225°240°270°300°315°330°360°
R0π/6π/4π/3π/22π/33π/45π/6π7π/65π/44π/33π/25π/37π/411π/62π
Si te preguntabas por que existe esta extraña unidad de medida para los angulos quiza despeje un poco las dudas el que diga que es indispensable el uso de radianes como escala de medición para los angulos en la mayoria de las ecuaciones usadas en algunas ciencias como Física, cálculo infinitesimal, trigonometría y goniometría.

lunes, 21 de noviembre de 2016

Curso de C++ V: La Liberería Math.h

dime, que yo no sé güey

Como ya vimos anteriormente, al incluir librerías en el programa podremos tener acceso a nuevas funciones, la libreria "math.h" como es de suponer es una libreria que nos permitirá usar funciones metemáticas.

Las funciones más importantes se muestran en la siguiente lista:

Potenciación y radicación:

    pow(x,y)
        eleva un numero "x" a una potencia "y"

    sqrt(x)
        calcula la raíz cuadrada de un número "x"

    cbrt(x)
        calcula la raíz cúbica de un número "x"

    hypot(x,y)
        calcula la hipotenusa de un triangulo rectángulo de catetos "x" e "y"

Funciones trigonométricas:

    cos(x)
        Extrae el valor del coseno de un ángulo "x" dado en radianes (el resultado estará entre -1 y 1)

    acos(x)
        Calcula el valor en radianes de un ángulo con coseno "x" (x entre -1 y 1)

    sin(x)
        Extrae el valor del seno de un ángulo "x" dado en radianes (el resultado estará entre -1 y 1)

    asin(x)
        Calcula el valor en radianes de un ángulo con seno "x" (x entre -1 y 1)

    tan(x)
        Extrae el valor de la tangente de un ángulo "x" dado en radianes 

    atan(x)
        Calcula el valor en radianes de un ángulo con tangente "x"

Otras funciones:

    fmax(x,y)
        retorna el mayor valor entre "x" e "y"

    fmin(x,y)
        retorna el menor valor entre "x" e "y"

    fdim(x,y)
        retorna el resultado de x-y si es un valor positivo

Funciones de redondeo:

    round(x)
        Redondea "x" al número entero más cercano

    ceil(x)
        Redondea "x" al número entero mayor que "x" más cercano

    floor(x)
        Redondea "x" al número entero menor que "x" más cercano

    trunc(x)
        Elimina la parte decimal de "x"

    abs(x)
        Retorna el valor absoluto de "x" (valor positivo)

Aquí se muestran los resultados que darian las funciones de redondeo a algunos números:

        valor   round   floor   ceil    trunc

         2.3     2.0     2.0     3.0     2.0
         3.8     4.0     3.0     4.0     3.0
         5.5     6.0     5.0     6.0     5.0
        -2.3    -2.0    -3.0    -2.0    -2.0
        -3.8    -4.0    -4.0    -3.0    -3.0
        -5.5    -6.0    -6.0    -5.0    -5.0

ah, pos ahora sí güey


Tarea supersencilla:
Escribir un programa que permita calcular la hipotenusa de un triangulo sin utilizar la función hypot

-

{"handle":"robotica-instenalco","arch":"js","styles":{"a":"C8C8C8","b":82,"c":"000000","d":"000000","f":82,"i":82,"k":"C8C8C8","l":"C8C8C8","m":"C8C8C8","o":82,"p":"10","q":"C8C8C8","r":82,"cnrs":"0.41"}}