VulcanoX

Integrantes

  • Beth Hana Romero
  • Alesandro Moreli
  • Tatiana Ramirez

1. Características generales

Vulcano es un Robot Sumo o robot luchador, el cual tiene una forma cónica que le permite absorber la energía cinética con la que el contrincante quisiera atacar, además cuenta con dos sensores de ultrasonido los cuales permiten ubicar al enemigo, dos sensores CNY70 que evitan que se salga del ring de combate, motores de alto torque para empujar al contrincante con suficiente fuerza para sacarlo del ring y esta programado para sacar al enemigo y no salirse del ring.


2. Normas del concurso

Se establecieron con base a otros concursos y se encuentran en el link: http://goo.gl/vc7XoD

3. Materiales

a. Cono externo

Se opto por la forma cónica, la cual permite que sea defensivo, ya que al acercarse el contrincante se encontrará con una superficie curva por cualquier lado, ademas el material es flexible y esta propiedad permite una absorción de la energía cinética producida por el choque haciendo menos efectivo el empuje del otro, para la parte del ataque decidimos dejar la base del cono cuadrada, la cual puede permitir atacar al otro para sacarlo del ring.
images?q=tbn:ANd9GcTWfRpLGphXbVKlJwD-Tzi1NkY5vYxzg8gSwesthAKC9kF6GNtY

b. Elección del motor:

Para elegir el motor, primero tuvimos en cuenta que solo queríamos controlar la dirección del mismo (hacia adelante o hacia atrás), tuvimos en cuenta dos tipos de motores:

  • Servomotores
  • Motorreductores

Se investigaron las características de las dos clases de motores, llegando a la conclusión de usar motorreductores ya que los servomotores solo trabajan a 180° y aunque se puede realizar un cambio en el para que maneje los 360°, el sistema de este motor esta mas adecuado para controlar la velocidad, y lo que se requiere para el robot sumo solo es controlar el sentido de jiro.

MOTORREDUCTORES

mini-motoreductor-dc-motorreductor-robotica-arduino-3273-MLM4832161268_082013-O.jpg

Ventajas

  • Alta eficiencia de la transmisión de potencia del motor.
  • Alta regularidad en cuanto a potencia y par transmitidos.
  • Poco espacio para el mecanismo.
  • Poco tiempo de instalación y mantenimiento.
  • Elemento seguro en todos los aspectos, muy protegido.

Desventajas

  • Para unir el motor a la programación del robot es necesario el uso de un puente H.

Conclusiones

  • Tanto el servomotor como el motorreductor tienen un alto torque o fuerza de empuje, que va a ser eficiente en el momento del combate.
  • Los dos ocupan un espacio moderado, para adecuar al robot.
  • Aunque el servomotor puede programarse directamente desde el PWM del atmega16A, exige una adecuación del motor mismo, ademas que la programación se basaria mas en el control de la velocidad y de la posición del mismo, que este caso no se necesita tener en cuenta.
  • El motorreductor es la mejor opción ya que aunque requiere un puente H, no es dificil de manejar, ya que el puente H puede controlarse directamente al atmega-16A.

Características del Motorreductor:

  • Velocidad de salida: 188 RPM.
  • PAR (o torque) a la salida: 3 KG/m

CONCEPTO DE PAR O TORQUE EN UN MOTORREDUCTOR

El “torque” o “par” es una fuerza de giro; que permitirá que podamos o no girar una determinada carga, cuanto más alto el “par” más grande será la carga que podamos girar. El que tan rápido podamos hacerlo dependerá de la potencia del motorreductor. Las dos características están interrelacionadas y dependen una de la otra.

La combinación de potencia, par y velocidad en un o motorreductor está regida por la siguiente fórmula:

motoreductor5.png

c. Puente H integrado

El puente H implementado es el L298N diseñado para aceptar niveles lógicos TTL estándar y unidad cargas inductivas tales como relés, solenoides, DC y motores paso a paso. Tiene dos entradas de habilitación (para habilitar o deshabilitar el dispositivo) independientemente de la entrada señales.

L298H+Pinagem+2.gif
Este integrado permite controlar dos motores (en este caso motorreductores) en sentido inverso o directo, usando compuertas lógicas y transistores internamente.

Para activar los puente H desde el microcontrolador se habilitan el pin que conecta el Enable1 y 2, del puente H para el control de los motores los pines de entrada 1-2 (motor 1), 3-4 (motor 2). Para conectar los motores al puente H se usan los puertos de salida 1 y 2 (output 1 y 2) para el motor 1, y para el motor 2 salidas 3 y 4 (output 3 y 4).

circuit_diagram_1773_thumbnail.png

d. Sensor CNY70

images?q=tbn:ANd9GcQ8LewKC_cCsEfeBulVklgeu3JPoG3dz0_xXNomAI6P-OADlNel
Este sensor se usa para determinar si esta saliendo del ring, es un pequeño dispositivo con forma de cubo y cuadro patas, en el interior contiene un diodo emisor de infrarrojos y un fototransistor en paralela, se debe tener en cuenta que la fuente de luz, que es el diodo emisor, y el detector, que es el fototransistor, se montan en la misma dirección. Por lo tanto la detección del objeto se consigue por la reflexión, o no, del haz infrarrojo sobre la superficie del objeto.
Características del sensor:
  • Longitud de onda del haz infrarrojo de 950mm
  • Intensidad del diodo emisor I_ak=50mA
  • Intensidad del colector I_c=50mA
  • Tensión emisor colector V_ec=7V
  • Consumo aproximado de 200mW
  • Distancia de detección de 0mm-5mm

Dado que con sólo la necesidad de cuatro resistencias y un transistor es fácil conectar un CNY70 a un microcontrolador; teniendo en cuenta que éste sensor detecta los colores que tiene el borde y el interior del ring y además acoplado no ocupará mucho espacio dentro del circuito del robot de sumo se ha optado por escogerlo para la realización del proyecto.

e. Microcontrolador Atmega-16A

ATMEGA16A-PU_3175f4.jpg

El microcontrolador es un circuito integrado programable el cual permite controlar en diferentes lenguajes, dispositivos como sensores, pantallas LCD, teclados matriciales, e.t.c., en este caso usaremos el puerto C para el control del puente H (motores), el puerto A para la lectura de los datos del CNY70 y los puertos B y D se usaran para la programación de los sensores de ultrasonido.

f. Llantas

Las ruedas de Neopreno se caracterizan por su alta tracción, ya que el área de contacto con la superficie es mayor comparada con otro tipo de ruedas características.
llanta%20neopreno_150x200.jpg

g. Sensor de Ultrasonido HC-SR4

hc-sr04.jpg
Los sensores de ultrasonido permiten medir distancias desde los 2-3 centímetros hasta los 3-6 metros (para algunos modelos populares) sin la necesidad de un contacto físico, lo cual es muy útil para detectar el rival en el campo de batalla.

Se comunica con el ATMega16 de manera que este envia un calculo del tiempo que tardo en volver, teniendo en cuenta la velocidad del sonido se puede hallar la distancia hasta el objetivo.

Tiene una interfaz simple de tres terminales y utiliza una sola linea para lograr una comunicación bidireccional con su dispositivo de control en este caso el microcontrolador Atmega-16A.


4. Realización del circuito

La conexión del CNY se realiza de la siguiente forma:
Esquema.PNG
Donde D es el pin a usar en el Atmega16A. PCB del CNY70:
PCB.PNG

Teniendo en cuenta los PinOut de cada elemento y su funcionamiento se realizo el siguiente montaje del circuito, primeramente en protoboard:

[https://youtu.be/pvE3dKv647I]

5. Programación

images?q=tbn:ANd9GcRz9n8dSAQZBFwz6huBQjnR2l3JW3n_Fwg-fC6lvobgPpIL-B9S
Se realizó un diagrama de estados para generalizar las funciones lógicas del sistema.

El código en lenguaje C++ aun no se ha unido, por ahora se realizó la programación del control del motor a través de la señal del sensor CNY70. Para unirlo a la programación del sensor ultrasonido se tomará este como la acción principal y habrá una interrupción cuando se reciba una señal de salida del ring por parte del CNY.
El código del CNY70 es el siguiente:

#include <avr/io.h>
 
int main(void)
{
PORTA=0x00;
PORTB=0xFF;
 
    while(1)
    {
 if (PORTA=0b0000001) //CNY adelante
 {
     //toco negro, siga avanzando
    PORTB=0b00010101;
 }
    else if (PORTA=0b00000000)
    {
        PORTB=0b00011010;
        //toco blanco, ande en sentido contrario
    }
  if (PORTA=0b0000010) //CNY Atras
  {
      //toco negro, siga avanzando
      PORTB=0b00011010;
  }
  else if (PORTA=0b00000000)
  {
      PORTB=0b00010101;
      //toco blanco, ande en sentido contrario
  }  
 
    }
    }

La programación del sensor de ultrasonido, calcula la distancia del enemigo, teniendo en cuenta la velocidad del sonido y el tiempo que dura la señal emitida por el sensor.

#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 8000000UL        // XTAL de 8 MHz
#endif
#include <avr/interrupt.h>
#include <util/delay.h>
 
#define setbit(sfr,bit) (_SFR_BYTE(sfr)|=(_BV(bit)))
#define clearbit(sfr,bit) (_SFR_BYTE(sfr)&=~(_BV(bit)))
#define bittoggle(sfr,bit)(_SFR_BYTE(sfr)^=_BV(bit))
 
unsigned int PERIODO=0,PERIODO_ANTERIOR=0,PERIODO_REAL=0;
unsigned char i;
 
ISR (TIMER1_CAPT_vect){
    //LEER DATO GUARDADO EN ICR1
 
        if (i==0)//IDENTIFICACION DE LECTURA INICIAL
        {
            PERIODO_ANTERIOR=ICR1;
            setbit(TCCR1B,ICES1);//SE CAMBIA LA CONFIGURACION DE INTERRUPCION POR UN FLANCO DE SUBIDA
            setbit(TIFR1,ICF1);//SE SETA LA BANDERA DE INTERRUPCION PARA EVITAR QUE SE DISPARE NUEVAMENTE LA INTERRPCION
                               //DE FORMA INPREVISTA 
            i=1;
        }
        else//IDENTIFICACION DE LECTURA FINAL
        {
            PERIODO=ICR1;
            clearbit(TCCR1B,ICES1);//SE CAMBIA LA SELECCION DE INETERRUPCION POR UN FLANCO DE BAJADA
            if (PERIODO>PERIODO_ANTERIOR)//SI EL VALOR LEIDO ES SUPERIOR AL VALOR PRECEDENTE REALIZAR LA SUSTRACCION DE
            {                            //FORMA NORMAL
                PERIODO_REAL=PERIODO-PERIODO_ANTERIOR;
            }
            else                         //SI EL VALOR LEIDO ES INFERIOR AL VALOR PRECEDNTE SUMAR 65536 A LA RESTA PARA
            {                            //OBTENER EL NUMERO REAL
                PERIODO_REAL=65536+PERIODO-PERIODO_ANTERIOR;
            }
 
            PERIODO_REAL=(PERIODO_REAL)/58;//DISTANCIA EN CENTIMETROS
            setbit(TIFR1,ICF1);//SE SETEA LA BANDERA DE INTERRUPCION POR CAPTURA PARA EVITAR QUE SE DISPARE UNA INTERRUPCION
 
            if (PERIODO_REAL>=255)//SI EL DATO LEIDO ES MAYOR O IGUAL A 255 SE ASIGANA 255 A LA VARIABLE PERIODO_REAL
            {
                PERIODO_REAL=255;
            }
            i=0;
        }
 
//CONFIGURAR COMPARADOR ANALOGICO
void COMPARADOR(){
 
    //ENTRADA NEGATIVA AIN1
    setbit(ADCSRB,ACME);
    setbit(ADCSRA,ADEN);
 
    //HABILITAR CAPTURA DE ENTRADA DEL COMPARADOR ANALOGICO
    setbit(ACSR,ACIC);
 
}
 
//CONFIGURACION DE TIMER1
void TEMPORIZADOR(){
        //CONFIGURACION DE PREESCALAMIENTO 64
        clearbit(TCCR1B,CS12);
        setbit(TCCR1B,CS11);
        clearbit(TCCR1B,CS10);
    //CONFIGURACION DE MODO DE GENERADOR DE FORMA DE ONDA
    //MODO NORMAL
    clearbit(TCCR1B,WGM13);
    clearbit(TCCR1B,WGM12);
    clearbit(TCCR1A,WGM11);
    clearbit(TCCR1A,WGM10);
 
    //FLANCO DE BAJADA DE ENTRADA DE CAPTURA
    clearbit(TCCR1B,ICES1);
}
 
int main(void)
{
    setbit(DDRB,DDB5);//TRIGGER
    COMPARADOR();
    TEMPORIZADOR();    
    //HABILITAR INTERRUPCION POR ENTRADA DE CAPTURA
    setbit(TIMSK1,ICIE1);
    //HABILITAR INTERRUPCION GLOBAL
    sei();
    while(1)
    {
        //TODO:: Please write your application code
        //INICIAR LECTURA
        setbit(PORTB,PB5);
        _delay_ms(15);
        clearbit(PORTB,PB5);
         _delay_ms(100);
    }
}

6. Referencias y links

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License