detector de obstaculos

Proyecto final microcontroladores
Carrito detector de obstáculos (En este proyecto se implementa un “ carro detector de obstáculos “ usando un microcontrolador de la familia AVR en este caso el atmega16)


Anlly milena barrera Obando , ingeniería de telecomunicaciones, oc.ude.gobbsu.aimedaca|arerrabma#oc.ude.gobbsu.aimedaca|arerrabma


Introducción

En el presente trabajo se hará uso del lenguaje C++ aplicado en el microprocesador ATMEGA16 para así poder generar respuesta deseada para generar un carro detector de obstaculos . Para ello se realizara una leve explicación del funcionamiento del ATMEGA16 y las conexiones establecidas en el para poder generar el correcto funcionamiento del carro.


Objetivos

objetivo general

• construir un “ Carrito detector de obstáculos “ el cual cumpla la función de detectar un obstáculo en el camino que este transcurriendo y sea capaz de evadirlo ( que al detectar el obstáculo una de las llantas se detenga y la otra haga la función de girar al punto que se aleje del obstáculo para asi poder seguir su trayectoria

objetivos especificos

• Diseñar un vehículo programable haciendo uso del ATMEGA 16
• Generar el algoritmo correspondiente para el correcto funcionamiento del vehículo.
• implementar los conocimientos establecidos en las clases para poder realizar la implementación del lenguaje C++ para generar el algoritmo para el funcionamiento del carro .


Descripción del problema

Realizar un proyecto basándonos con lo aprendido en clase. Se pensó en un proyecto que consistirá en el diseño e implementación de un carro detctor de obstaculos programable. Que sea controlador por un microcontrolador atmega El cual ira acompañado de circuitos eléctricos de control como puentes h, motores, sensores entre otros.
La idea principal del carro es evadir los obstáculos que se cruzen en su trayectoria .para ello el sensor de distancia será el encargado de obtener las lecturas asi decidirá cuando hacer el cambio de trayectoria cuando tenga un obstáculo cerca a 15 cm y también se procede a realizar un código c++ en el ATmehga 16 donde se pueda desarrollar un conjunto de algoritmos que se encarguen de controlar las funciones del carrito detector de obstáculos


Materiales y costos

12065856_10208268432374541_3296679768475313355_n.jpg?oh=1a832367c63a1468094741a16b7c2671&oe=56BE85D5&__gda__=1455757464_6b070910807dfab59ad3484043adf27d

Funcionamiento
El presente proyecto tiene como fin crear un carro detector de obstáculos haciendo uso del ATMega16 y el lenguaje C++ se programara para que cuando detecte un obstaculo por ultrasonido a una distancia menor a 15cm el carro se detenga, retroceda, gire esquivando el obstaculo y retome la marcha:


Diseño e implementación

En este proyecto se implemtena un “ carro detector de obstáculos “ usando un microcontrolador de la familia AVR en este caso el atmega16

El diseño general del carro consiste básicamente en la implementación y la aplicación interna de diferentes etapas, por ejemplo:la programcion de sensor de distancia , el controlador de motores o puente H, la etapa de sensores y el desarrollo de la programación para usuario.

La estructuración física incluye la conexión interna del vehículo de las diferentes etapas entre sí y desde el microcontrolador.

10984133_10208268432334540_6706356401789799838_n.jpg?oh=ad3afb211fd95597b88b434b683f8679&oe=56F8CB88

Teniendo en cuenta el microcontrolador a usar (atmega16). Puede implementarse en el puerto A la etapa de sensores, en el puerto C puede ubicarse el módulo de luces, al puerto B se puede colocar el programador y finalmente el puerto D podría estar dedicado a los motores.

Para la creación del carro se sabe que se recurrirá a un sistema de alimentación el cual se constituirá por una pila de 5v . Se hace una selección la cual se realiza por medio de un balance de potencia entre la potencia entregada por las mismas y el consumo del sistema en su totalidad; de igual manera debe resaltarse que durante el arranque, los motores consumen altos picos donde también es importante tener en cuenta que la carga de bateria debe ser lo suficientemente resistente en el hecho de que se deba reemplazar la corriente demandada por los motores de arranque.

Debido a que se cuenta con ciertos dispositivos electrónicos como el microcontrolador, los cuales pueden operar de manera incorrecta debido a pequeñas variaciones en el nivel de tensión es necesario contar con algún elemento que logre mantener un nivel de tensión estable para asegurar el correcto funcionamiento del sistema en general y evitar problemas de calidad de la energía.

SENSOR ULTRASONICO HC-SR04

El HC-SR04 es un sensor de distancia que funciona por ultrasonido. Básicamente lo que hace es enviar un pulso llamado trigger, inaudible para cualquier ser humano, rebotar en algún objeto y recibirlo (eco). Con este principio es posible medir distancias sabiendo que la velocidad del sonido es de 345m/s

11218981_10208268433334565_3421232415125536181_n.jpg?oh=3bcab4cdf347b92fa84e14d335b68c27&oe=56C28649

PUENTE H

Un Puente H es un circuito electrónico que permite a un motor eléctrico DC girar en ambos sentidos, avance y retroceso.
Los puentes H están disponibles como circuitos integrados, pero también pueden construirse a partir de componentes discretos.
El integrado L293D incluye cuatro circuitos para manejar cargas de potencia media, en especial pequeños motores y cargas inductivas, con la capacidad de controlar corriente hasta 600 mA en cada circuito y una tensión entre 4,5 V a 36 V.
Los circuitos individuales se pueden usar de manera independiente para controlar cargas de todo tipo y, en el caso de ser motores, manejar un único sentido de giro. Pero además, cualquiera de estos cuatro circuitos sirve para configurar la mitad de un puente H.
El integrado permite formar, entonces, dos puentes H completos, con los que se puede realizar el manejo de dos motores. En este caso el manejo será bidireccional, con frenado rápido y con posibilidad de implementar fácilmente el control de velocidad.

12241274_10208268432934555_6120297288698179591_n.jpg?oh=93648a996855f95b4a3f2fb338241c46&oe=56C37472

PANTALLA LCD

El LCD(Liquid Crystal Dysplay) o pantalla de cristal líquido es un dispositivo electrónico utilizado para la visualización e impresión de contenidos o información de una forma visual, mediante caracteres, símbolos o pequeñas figuras. La LCD de 16x2, posee 2 filas de 16 caracteres cada una. Los píxeles de cada símbolo o carácter, varían según el modelo.

11693876_10208268431614522_7738186453934260941_n.jpg?oh=96660ce6ac52b60b95faf07937f9ffbd&oe=56B97D3E

MICROCONTROLADOR ATmega 16A

12240125_10208268432534545_8721030834452682159_n.jpg?oh=27f890a25ad9337b6b3fa7ebf256143e&oe=56C4B064&__gda__=1454114112_733d0f77f0b66134f48820ba4ba28a16

El ATmega 16 es un microcontrolador de alto rendimiento de 8 bits, 32 pines I/O disponibles, memoria de programa flash 16 kB, SRAM 1 kB, EEPROM de datos 512 Bytes, ADC de 10 bits y 8 canales, 3 timers/comparadores/contadores, 4 canales PWM, USART, SPI, TWI, comparador análogo

ATMEL STUDIO

12227057_10208268431294514_2990128684635448559_n.jpg?oh=0fe9300db1cc1f3ce4a1814059d4524d&oe=56B718ED

Atmel Studio 6 es la plataforma de desarrollo integrada (PDI) para el desarrollo y la depuración de Atmel RAM , Atmel AVR y microcontrolador (MCU) .el cual tiene aplicaciones basadas en su tipo de lenguaje de programación . Atmel Studio 6 le da un ambiente transparente y fácil de usar para escribir, crear y depurar sus aplicaciones escritas en C / C ++ o código ensamblador.

PROGRAMADOR USBasp

programador-usbasp-isp-para-atmel-avr.jpg

USBasp es un programador USB para los controladores AVR Atmel. Simplemente consiste en un ATmega88 o un ATMega8 y un par de componentes pasivos. El programador utiliza un controlador USB - firmware solamente, no se necesita ningún controlador USB especial.

Conclusiones
• Gracias a lo aprendido en clase se pudo tener la ventaja y la facilidad para poder montar un proyecto de este tipo

bibliografia

-MikroElektronika. El mundo de los microcontroladores. Disponible en: http://www.mikroe.com/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/
-Electrocomponentes. ATmega. Disponible en: http://www.electrocomponentes.com/articulos/octubre07/atmel.html
-TecMikro. LCD 2x16. Disponible en: http://www.programarpicenc.com/libro/cap03-display-lcd-16x2-2x16-hd44780-mikroc-pro.html
-Parada Alejandro. Diagrama esquemático. Bogotá: 2014
-cplusplus.com. C++. Disponible en: http://www.cplusplus.com/info/description/

ANEXOS

12243011_10208268431494519_640603190827403661_n.jpg?oh=679b8d510e9525d4c7d98225ff113615&oe=56B1585A12208776_10208268431574521_8149189895619352030_n.jpg?oh=b18d08e4bac888b3bc9b3f832be6dd8c&oe=56F3F2F4

CODIGO

/*
* carro_detec.cpp
*
* Created: 09/11/2015 5:16:21 p. m.
* Author: Anlly
*/

#define F_CPU 1000000 //frecuencia a 1MH
#include <avr/io.h>
#include <util/delay.h>
#include <math.h>
#include "C:/Users/Anlly/Documents/lcd.h" // los 8 pines del puerto A y los 3 primeros del pueto B
#define adelante_d 7
#define adelante_iz 6
#define atras_d 5
#define atras_iz 4

int cm_en_U,cm_en_D,cm_en_C,cm;

int main(void)
{
LCD_init(); //iniializa la pantalla
DDRD=0x01; //puerto D para utilizar el sensor_distancia
while(1)
{

PORTB|=(1«adelante_d);
PORTB|=(1«adelante_iz); //carro arranca
PORTD=0x00; //inicializa el purto D en 0
_delay_us(10);
PORTD=0x01; //envia el pulso de 1 a trig por 10Us
_delay_us(10);
PORTD=0x00; //termina de enviar el pulso
TCNT1=0x0000; //contador del timer en 0
while(!(PIND & 0x02)); //cerifica si se a recibido algun dato del pin eco
TCCR1A=0x00; //inicializa el contador de 16byts como normal y sin pre escalado
TCCR1B=0x01;
while(PIND & 0x02); //revisa si ya se temino de recivir el pulso del pin eco del sensor
TCCR1B=0x08; //detiene el timer
cm=((TCNT1/29)/2); //convercion a cm del valor recibido por el timer

if (cm<10) //conversion para mostrar en pantalla unidades , decenas y centenas
{
cm_en_U=cm;
cm_en_C=0;
cm_en_D=0;
}

if (cm>=10 && cm<100)
{
cm_en_D=cm/10;
cm_en_U=cm-(cm_en_D*10);
cm_en_C=0;
}
if (cm>=100 && cm<=500)
{
cm_en_C=cm/100;
cm_en_D=(cm-(cm_en_C*100))/10;
cm_en_U=(cm-(cm_en_C*100))-(cm_en_D*10);
}
if (cm<=15) //condicion que si detecta un obstaculo en menos de 15cm trata de esquivar
{
PORTB&=~(1«adelante_d); //detiene los motores
PORTB&=~(1«adelante_iz);
PORTB|=(1«atras_d);
PORTB|= (1«atras_iz); //arranca hacia atras
_delay_ms(900);
PORTB=~(1«atras_d); //hace in giro
_delay_ms(500);
PORTB&=~(1«atras_iz); //termina de hacer el giro y arranca de nuevo
PORTB|=(1«adelante_d);
PORTB|=(1«adelante_iz);
}

LCD_wait(); //imprime el valor medido por el timer en la pantalla de 16x2
LCD_command(0x80);
LCD_wait();
LCD_write("distancia en cm:");
LCD_wait();
LCD_command(0xC0);
LCD_wait();
LCD_putchar(cm_en_C+48);
LCD_wait();
LCD_putchar(cm_en_D+48);
LCD_wait();
LCD_putchar(cm_en_U+48);
7

}
}

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