Competencia de Robótica MEGAMAN. Facultad de Ingeniería Universidad de Buenos Aires 8 de Junio de El Bigote. Escuela Técnica ORT, sede Almagro

Documentos relacionados
Laboratorio 8: Interrupción por Lectura de Entradas y por Desbordamiento del TMR0.

Laboratorio de Diseño de Robots Móviles Practica No. 2 Sistema mínimo del microcontrolador PIC16F877

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

COMUNICACIÓN I2C PROTOTIPO BRAZO ROBÓTICO BM001

ENTORNO DE SIMULACIÓN Y CONTROL DE UN ROBOT VELOCISTA

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

Esquema de partida. Maximum Operating Supply Voltage 5.5V USB 1 USART 1

Autor: María Soledad Proaño Rocha.

Robótica en la Universidad

PROYECTO DE INVESTIGACION SIP

Usando los Codificadores Cuadráticos

MICROPROCESADORES II LENGUAJE C EN LOS MICROCONTROLADORES PIC

PROYECTO: Velocista y coche teledirigido

CURSO: ROBÓTICA. CONECTANDO CON EL MUNDO FÍSICO

CONSTRUCCIÓN DE TIMER PARA VUELO CIRCULAR CON NANO ARDUINO

PROCESO DE SIMULACIÓN EN PROTEUS

Proyecto Rastreador + Coche Teledirigido

DOCUMENTACIÓN PARA LA FABRICACIÓN DE LA PLATAFORMA GUADALBOT. Placa Base I.E.S VIRGEN DE LAS NIEVES

Robótica Laboratorio de Robótica Curso (2º semestre)

Corporacion Universitaria Autonoma del Cauca EJEMPLARIZACION DE COMUNICACIÓN ENTRE DOS MODOULOS XBEE SERIE 2.

1-Introducción. KIT ARM- Ténicas Digitales II - Ing. Ruben M. Lozano /9

Curso Completo de Electrónica Digital

PIC16C5X (GAMA BAJA) Solo en dispositivos de 28 pins. Encapsulado y patillaje:

CURSO DE PROGRAMACIÓN N EN C PARA MICROCONTROLADORES PIC 16F87XX JULIO FP27CF153

Usando un PIC para la Generación de Tonos de Audio

Lector de códigos de barras con microcontrolador Motorola HC11

DISEÑO Y CONSTRUCCIÓN DE MICRORROBOTS

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE INGENIERÍA DIVISIÓN DE INGENIERÍA ELÉCTRICA DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN

Control de servomotores. (c) Domingo Llorente

EL MICROCONTROLADOR ARDUINO

Arduino. OPEN HARDWARE - David Cuartielles, Máximo Banti.

Comfort 220. Comfort 400. Automatismo para puertas de garaje. Comfort 220. Artículo Nº. de art. Función

GUIA GENERAL PARA LA PROGRAMACIÓN DEL SISTEMA EVOLUPIC Bootloader 16F88 BOOTLOADER: AN1310 DE MICROCHIP INDICE

Robótica y Linux. Andrés Prieto-Moreno Torres Ifara Tecnologías Profesor asociado UPSAM

EducaBot. Sensores 2º parte.

Programación de dispositivos Arduino Asignatura Sistemas Digitales!

DL 3155E10R. R e g u l a c i. ó n. C o n t. Bloques funcionales. Bloques funcionales. Argumentos teóricos. Argumentos teóricos

3 Apéndices A. Diagramas de flujo B. Código fuente Bibliografía... 55

Actuadores eléctricos - Motores

Implementación de Controlador PID con PIC. Objetivos específicos. Materiales y equipo

CURSO: ROBÓTICA. CONECTANDO CON EL MUNDO FÍSICO. ÍÑIGO MARTÍN MIMBELA.

I.E.S. Joan Miró (S.S. De los Reyes) Robot Elii. (Robot rastreador con LED,borde derecho y con memoria)

Alarma con Interfaz DTMF de Línea Telefónica basado en PIC16F84

DL 3155E10R. R e g u l a c i. ó n. C o n t. Bloques funcionales. Bloques funcionales. Argumentos teóricos. Argumentos teóricos

UNIVERSIDAD DE OVIEDO

Maqueta de control PID con Arduino

El objeto de este proyecto es el de construir un robot araña controlado por un PIC16F84A.

Registros SFR vistos hasta ahora: Microcontroladores PIC

PROGRAMANDO MICROCONTROLADORES PIC EN LENGUAJE C

Taller de Firmware. Introducción al PIC16F877. Facultad de Ingeniería Instituto de Com putación

Microprocesadores, Tema 6:

SECUENCIADOR PROGRAMABLE DE 8 CANALES

DFRduino Romeo, todo en un controlador (RoMeo V1.0) Por favor, lea atentamente este manual antes de encender el dispositivo.

Microchip Tips & Tricks...

Programación en ensamblador y en alto nivel (C)

CAPÍTULO 3. Las principales funciones del microcontrolador son: adquirir por medio del A/D y también, mostrar mensajes de pesos y voltaje en el LCD.

Especificaciones técnicas de los prototipos:

Raspberry Pi Expansion Board v1.01 Datasheet. Electroensaimada

Advertencia antes de la instalación. Compruebe el contenido del embalaje ES - 46

Ardunio. Test Placa. LunikSoft. Fco. Javier Andrade.

Competencia de Robótica R2-D2 2014

Modelo: L200 DAKAR $$ IVA PRECIO INCLUYE BONO. precio incluye bono $BONO $ IVA $$ IVA INCLUIDO PRECIO INCLUYE BONO

Clase 3: Sensores I. Conviértete en un Joven Inventor PENTA UC

Estructuras de Repetición (Repita para)

Tarjeta Desarrollo dspic. Bogobots ITEM-CEM

DESCRIPCIÓN DE LOS MONTAJES Y TARJETAS DE CIRCUITO IMPRESO

GUÍAS DE LOS LABORATORIO DE FÍSICA I Y LABORATORIO DE FÍSICA GENERAL

Robot seguidor de líneas

PRÁCTICA 4 LOS BITS DE CONFIGURACIÓN DEL PIC16F628

Transmisión óptica de datos DDLS 200 Robusta, compacta y con capacidad de comunicación internacional

Proyecto : Control coche Arduino-Android

PROPUESTA DE USO DE UN MICROCONTROLADOR PIC PARA LA ADQUISICIÓN DE DATOS EÓLICOS Y ELÉCTRICOS DE FORMA SIMULTÁNEA.

Sesión 3 (Práctica) Sensores Actuadores

Guión de Prácticas. PRÁCTICA METROLOGIA. Medición. 2. CONSIDERACIONES PREVIAS a tener en cuenta SIEMPRE

CONSTRUCCION DE TIMER PARA VUELO CIRCULAR CON MOTOR ELECTRICO

Regional Cesar CENTRO DE OPERACIÓN Y MANTENIMIENTO MINERO ANEXO TECNICO

Cámara Digital Coyote

KITS PARA INICIAR EN LA ROBÓTICA Y PROGRAMACIÓN EN SECUNDARIA

Taller de electrónica para usos creativos. Practicando con Arduino

Clase 4: Motores. Conviértete en un Joven Inventor PENTA UC

Desarrollo de un prototipo de bocina electrónica. Autora: Pilar Prieto Sanz Tutora: Carmen Quintano Pastor Director: Fco.

Placa de control MCC03

UNIVERSIDAD TECNOLOGICA NACIONAL F.R. AVELLANEDA

EJERCICIOS CON ARDUINO LED ENCENDIDO. Se conecta el Led al pin 52 y a alimentación. Compilar Se enciende el LED.

Sesión I: Robots en Directo

Prácticas de bajo coste basadas en la USBLab

Pasamos a describir los componentes de cada una de estas partes y su ensamblaje total.

Práctica de manejo de motores CC con arduino. Antonio Martínez

Ley de enfriamiento de Newton considerando reservorios finitos

Armado de la placa np07

Ángel Castillo Jordán TFC EPSC 25

Práctica 4. Entradas/Salidas Analógicas con Arduino

Investigación y Desarrollos en Open Hardware

Introducción a BMP085 Versión 1.0

Control por Computador. Manual de arduino. Jorge Pomares Baeza. Grupo de Innovación Educativa en Automática 2009 GITE IEA

Oferta educativa. Diplomados Energías renovables

Programación en C para plataforma CADmega128, basada en microcontrolador Atmel megaavr

Programación En Lenguaje C

METODO BASICO PARA IMPLEMENTAR UN CONTROLADOR DIGITAL PID EN UN MICROCONTROLADOR PIC PARA DESARROLLO DE APLICACIONES A BAJO COSTO

MAYA 50. Es una tarjeta electrónica diseñada para controlar y realizar prácticas de microcontroladores basada en el MCU PIC18F4550.

Transcripción:

El Bigote Escuela Técnica ORT, sede Almagro

Mecánica Vista superior Vista Inferior Dimensiones: 120 x 150mm. Altura 60mm 2 Ruedas de 60mm de diámetro Estructura: plaqueta de circuito impreso FR4 (10x13cm) Tracción diferencial (dos motores en la parte posterior) Punto de apoyo, tipo ball-caster Peso: 246 g Micro Controlador PIC18F4550 Driver de motores dc L293D Regulador lineal 5v (7805) Regulador lineal 12v (7812) 3 Sensores reflectivos CNY70 2 Baterias 9v Electrónica

Básicamente el funcionamiento tiene 4 etapas: Funcionamiento básico Calibración de los sensores: Se utilizan 3 sensores, cada sensor responde de manera parecida pero no idéntica al color detectado (emiten luz infrarroja y miden la intensidad de la luz recibida). Al presionar el pulsador, el robot barre 180º con sus motores, y durante ese movimiento captura muchas muestras de cada sensor, obteniendo al final un valor máximo y otro mínimo para cada uno individuamente. Estos valores son almacenados en RAM y luego utilizados. Luego, se presiona una vez más el pulsador y el programa entra en un loop continuo ejecutando 2 funciones principales: Adquisición, ajuste y procesamiento de la posición: Se leen los sensores, utilizando los máximos y mínimos obtenidos en el proceso de calibración, se ajusta la lectura de cada sensor, con una ecuación lineal a un valor entre 0 y 1000 (0 totalmente negro 1000 totalmente blanco). Con esos 3 valores entre 0 y 1000, se realiza una cuenta, ponderando la posición de los sensores y su valor, para obtener finalmente un número entero entre 0 y 2000 que indica el lugar donde se encuentra el robot respecto de la línea, siendo 0, 1000, 2000 los valores para los cuales el sensor 0, 1, 2, está justo arriba de la línea blanca respectivamente. Aplicación de ecuación de corrección: Al ser el sensor 1 el centro del robot, nuestro objetivo es mantener el valor de la lectura en 1000. Para esto se resta el valor 1000 al valor calculado (Línea), quedando un valor entre -1000 y 1000, siendo los extremos derecho e izquierdo, y el centro 0. Este valor (entre -1000 y 1000) indica cuan lejos estamos del valor ideal (0), por lo que lo multiplicamos por un factor que indica que debemos hacer con los motores en función de cuan alejados estamos del centro. A esto se lo llama constante proporcional. Además, se calcula la diferencia entre los dos últimos valores de la línea, y se obtiene un término derivativo, que nos permite tener una idea de la variación entre una lectura y la siguiente. Este factor, multiplicado por la constante derivativa, se suma también a la corrección. Modificación de velocidad de los motores: El valor obtenido se considera la diferencia de velocidad entre el motor derecho e izquierdo. Un motor siempre irá al máximo y el otro más lento (según lo calculado por la ecuación)

Costo total: Competencia de Robótica MEGAMAN. Facultad de Ingeniería Microcontrolador PIC 18F4550 ($85) Componentes y precios Driver motores dc L293D ($70) http://articulo.mercadolibre.com.ar/mla-463177311-pic-18f4550-pic18f4550-pic18f4550-ip-usbflash-microchip-_jm http://articulo.mercadolibre.com.ar/mla-460868479-l293d-l293-puente-medio-h-motoresrobotica-hobby-_jm Micro Motores 50:1 ($170) http://www.pololu.com/catalog/product/1098 Soporte para motores ($26) http://www.pololu.com/catalog/product/1089 Ruedas ($42) http://www.pololu.com/catalog/product/1420

Punto de apoyo rueda loca ($16) http://www.pololu.com/catalog/product/951 (2) Bateria 9v ($26) Placa circuito impreso FR4 ($20) http://articulo.mercadolibre.com.ar/mla-463315256-plaquetas-virgenesepoxi-10x10-cm-de-fibra-de-vidrio-oferta-_jm

Circuitos Esquemáticos Placa Principal

#include <18F4550.h> #device adc=10 Competencia de Robótica MEGAMAN. Facultad de Ingeniería Código fuente #FUSES NOWDT //No Watch Dog Timer #FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale #FUSES PLL1 //No PLL PreScaler #FUSES CPUDIV1 //No System Clock Postscaler #FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD) #FUSES NOFCMEN //Fail-safe clock monitor disabled #FUSES NOIESO //Internal External Switch Over mode disabled #FUSES PUT //Power Up Timer #FUSES NOBROWNOUT //No brownout reset #FUSES BORV45 //Brownout reset at 4.5V #FUSES NOVREGEN //USB voltage regulator disabled #FUSES NOPBADEN //PORTB pins are configured as digital I/O on RESET #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode) #use delay(clock=20000000) //#build(reset=0x1000) //#org 0x0000,0x0FFF #define LED_ROJO PIN_D0 #define LED_VERDE PIN_D1 #define LED_AMARILLO PIN_D2 #define LED_VERDE2 PIN_D3 #define IN_M1 PIN_B0 #define IN_M2 PIN_D7 #define BOTON1 PIN_B4 #define BOTON2 PIN_D4 //-------------------------------- //#define VEL 950 //------------------------------- #use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7) void motores(long izq,long der); void calibracion(void); void calibrar(void); void inicializar(void); void test(void); void Leer_Linea(void); signed long power_difference,vel; long lectura[8],calibrado[8][2],izq,der; signed long linea; signed long prop,ult_prop=0; void main()

long var; long long aux; int16 cont,pote,contrecta,contrecta2; //----------- setup_adc_ports(an0_to_an7 VSS_VDD); setup_adc(adc_clock_internal); setup_psp(psp_disabled); setup_spi(spi_ss_disabled); setup_wdt(wdt_off); setup_timer_0(rtcc_internal); setup_timer_1(t1_disabled); setup_timer_2(t2_div_by_1,249,1); setup_timer_3(t3_disabled T3_DIV_BY_1); setup_ccp1(ccp_pwm); setup_ccp2(ccp_pwm); setup_comparator(nc_nc_nc_nc); setup_vref(false); set_pwm1_duty(0); set_pwm2_duty(0); //---------- test(); /* while(1) set_adc_channel(0); delay_us(20); pote=read_adc(); delay_us(30); if (pote>1000) pote=1000; set_pwm2_duty(pote); //delay_ms(100); */ while (input(boton1)==1) inicializar(); calibracion(); output_high(led_verde2); while (input(boton2)==1) Leer_Linea(); prop=linea-1000; if (prop<0) output_high(led_rojo); output_low(led_verde); else output_low(led_rojo); output_high(led_verde); test(); while (input(boton2)==0)

var=70; aux=(long long)var*1000; motores(300,300); delay_ms(50); cont=0; VEL=500; Linea=1000; while(true) //if (cont<100) cont++; //else output_toggle(led_amarillo);cont=0; //var=70; //aux=(long long)var*1000; //if (aux==70000) output_toggle(led_verde2); //delay_ms(20); Leer_Linea(); prop=linea-1000; //printf(" %ld %ld ",linea, prop); if (prop<0) output_high(led_rojo); output_low(led_verde); else output_low(led_rojo); output_high(led_verde); #define umbral 150 if (abs(prop)<250) else output_high(led_verde2); if (contrecta<umbral) contrecta++; output_low(led_verde2); if (contrecta>0) contrecta--; if (contrecta==umbral) vel=1000; ult_prop=prop-ult_prop; //------------------------------------------------ power_difference = (prop*18)/20 + ult_prop*15; //------------------------------------------------ ult_prop=prop; else vel=800; ult_prop=prop-ult_prop; //------------------------------------------------ power_difference = prop/20 + ult_prop*3; //------------------------------------------------ ult_prop=prop;

// var = 50; if (power_difference > VEL) power_difference = VEL; if (power_difference < (-VEL)) power_difference = -VEL; // printf(" %ld %ld %ld",linea, prop,power_difference); if(power_difference < 0) motores(vel+power_difference, VEL); else motores(vel, VEL-power_difference); void test(void) int i; for(i=0;i<4;i++) output_high(led_rojo); output_high(led_verde); output_high(led_amarillo); output_high(led_verde2); delay_ms(100); output_low(led_rojo); output_low(led_verde); output_low(led_amarillo); output_low(led_verde2); delay_ms(100); void calibrar(void) int i; for(i=1;i<8;i++) set_adc_channel(i); lectura[i]=read_adc(); delay_us(50); for(i=1;i<8;i++) if (lectura[i]<calibrado[i][0]) calibrado[i][0]=lectura[i]; if (lectura[i]>calibrado[i][1]) calibrado[i][1]=lectura[i]; void calibracion(void) int counter,i;

motores(0,0); for(counter=0;counter<150;counter++) calibrar(); delay_ms(20); output_toggle(led_amarillo); output_low(led_amarillo); printf("\n\r"); printf("\n\r"); for(i=1;i<3;i++) printf("%u: min %lu printf("\n\r"); max %lu ",i,calibrado[i][0],calibrado[i][1]); for(i=3;i<6;i++) printf("%u: min %lu max %lu ",i,calibrado[i][0],calibrado[i][1]); printf("\n\r"); for(i=6;i<8;i++) printf("%u: min %lu max %lu ",i,calibrado[i][0],calibrado[i][1]); void motores(long izq,long der) set_pwm1_duty(izq); set_pwm2_duty(der); void inicializar(void) int i; output_low(in_m1); output_low(in_m2); for(i=0;i<8;i++) calibrado[i][0]=1023; calibrado[i][1]=0; //--------------- void Leer_Linea(void) int i,j,enlinea; signed long resta,dif; signed long long cociente;

for(i=1;i<8;i++) lectura[i]=0; for (j=0;j<5;j++) for(i=1;i<8;i++) set_adc_channel(i); lectura[i]+=read_adc(); delay_us(50); for(i=1;i<8;i++) lectura[i]=lectura[i]/5; printf("\n\r"); //for(i=1;i<8;i++) printf("%u: %4lu ",i,lectura[i]); for(i=3;i<6;i++) //printf("a%u: %4lu ",i,lectura[i]); resta=calibrado[i][1]-calibrado[i][0]; enlinea=0; for(i=3;i<6;i++) if (lectura[i]>200) enlinea=1; if (enlinea==1) cociente=(long long)lectura[4]*1000; cociente+=(long long)lectura[5]*2000; cociente=cociente/(lectura[3]+lectura[4]+lectura[5]); linea=cociente; else if (linea<1000) linea=0; else linea=2000; // for(i=3;i<6;i++) printf("%u: %4ld ",i,lectura[i]); //printf(" YYY: %4ld ",linea);