CrashBot
12242215_10207314007823872_1313809429_n.jpg

Integrantes


Luis Ángel Gil ( Ing. Electrónica)
Jeffrey Leonardo ( Ing. Electrónica)
Julian Piñeros ( Ing. Mecatrónica)


Resumen

Un sumo robot es un tipo de auto programado, diseñado para competir en una arena circular negra de borde blanco, por lo general, y tiene como objetivo sacar a algún oponente de su misma clase (robot sumo) de dicho entorno de batalla utilizando únicamente la fuerza de sus motores.
CrashBot es un sumo robot que está diseñado para envestir a robots de su mismo tipo y sacarlos de la arena de competencia, que posee sensores los cuales actúan como activadores de sus motores que giran dependiendo su posición en la arena y la de su enemigo.


Especificaciones


CrashBot es carro que posee un chasis en un 90 % conformado de aluminio de gran resistencia a choques de rivales y a la misma ves un peso moderado, posee un alerón delantero a ras del piso para levantar a sus enemigos y dos motores que le brindan la fuerza necesaria de arrastre al enemigo. Para su funcionamiento posee un sensor de vista infrarroja de largo alcance y otros infrarrojos de corto alcance para la detección de su oponente y la posición en la arena de batalla, dichos elementos controlador por un Micro-controlador.

12207794_10207314007743870_834277916_n.jpg

Microcontrolador


Para este proyecto se utilizo un micro-controlador ATmega16 el cual se programo para llevar a cabo el buen funcionamiento del circuito de CrashBot, dicho Chip que consta de 4 puestos cada uno de 8 bits, y uno de ellos tiene una función especial que es convertir señales analógicas a digitales, lo cual es esencial en este proyecto para la lectura de los sensores.

atmel-avr-atmega32a-16pu_pin-outs-diagram.jpg

Puente H

El puente H es un circuito que sirve para invertir la corriente en un circuito, en este proyecto es de gran uso ya que funciona como controlador de los motores. Se utilizo el integrado L293d, el cual es un puente H encapsulado que permite dar sentido a corriente DC para controlar motores dependiendo como se ajusten sus entradas de tipo binario, para esto se utilizo el micro-controlador. Dicho dispositivo con una alimentación de funcionamiento de 5 voltios permite ademas adecuar una fuente de potencia para los motores que puede variar de 0 a 36 voltios y una corriente hasta de 2 amperios.

lm293d.JPG

Sensores

Sensor Sharp

El sensor Sharp es un sensor infrarrojo que mide distancias en los rangos de 10 a 80 centímetros, se utilizo uno en este proyecto para detectar la posición del robot contrincante y embestirlo rápidamente, dicho elemento tiene tres pines, dos de alimentación y una de salida analógica, por lo cual se utilizo el ADC del micro para la lectura de este.

GP2D12_pin.jpg

Sensor CNY70

Estos son sensores, también infrarrojos, de corto alcance que detectan el color de la superficie hacia donde se apunten, su rango es aprox de 0 a 3 cm, y su salida es 1 si la superficie es blanca o 0 si es oscura. Se utilizaron para detectar la linea blanca en el borde de la arena y evitar que el sumo se salga de esta.

CNY701.png

Código

En esta parte se muestra el código que se utilizo, donde se inicializa el Conversor analógico digital para evaluar el pin 1 del puerto A, donde se conecto un sensor Sharp y dependiendo del voltaje de este se puso en el puerto D un valor que modula a el puente H, ademas por el puerto B, pin 2, se evalúan las salidas de los CNY70.

/*
 * Puente_H.cpp
 *
 * Created: 24/10/2015 13:29:31
 *  Author: Angell
 */ 

 #include <stdio.h>
 #include <stdlib.h>
 #include <avr/io.h>
 #include <util/delay.h>
 #include <math.h>
 int VADC;

void adc_sharp (void)
{
    ADMUX = 0b00100000;
    ADCSRA=0b10000000;
}

 void adc_all(void)
 {
    int shar,cnya,cnyb;

     // Sensor sharp
     adc_sharp();
     ADCSRA |= (1<<ADSC);
     while((ADCSRA & 0x40) == 0x40){}
     VADC=ADCH;
     shar=VADC;

     if ((PINB & 0b0000010)==0b0000010)
     {

         PORTD=0b1010;
         _delay_ms(3000);
     }

 else if (shar>18)
     {
         _delay_us(10);
         PORTD=0b0101;
         _delay_us(10); 
     }

     else PORTD=0b1000;
         _delay_us(10);
}
int main(void)
{
    DDRB=0b00;
    DDRD=0xFF;
    _delay_ms(4000);

    while(1)
    {

        adc_all();

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