Carro Control Remoto

18
INSTITUTO TECNOLÓGICO Y DE ESTUDIOS SUPERIORES DE MONTERREY Campus Estado de México Laboratorio de Sistemas Digitales Controlador de un carro a control remoto Desarrollado por: Alejandro Alemán Castilla 451471 Erik Riveroll Fuster 444187 Resumen Nuestro proyecto consiste en aprovechar las características de control de un sistema mínimo con un microcontrolador 8031 para controlar un coche a control remoto y memorizar una ruta, establecida por comandos de dirección inmediatos o un archivo de ruta pregrabado.

Transcript of Carro Control Remoto

Page 1: Carro Control Remoto

INSTITUTO TECNOLÓGICO Y DE ESTUDIOS SUPERIORES DE MONTERREYCampus Estado de México

Laboratorio de Sistemas Digitales

Controlador de un carro a control remoto

Desarrollado por:

Alejandro Alemán Castilla 451471Erik Riveroll Fuster 444187

ResumenNuestro proyecto consiste en aprovechar lascaracterísticas de control de un sistemamínimo con un microcontrolador 8031 paracontrolar un coche a control remoto y

memorizar una ruta, establecida porcomandos de dirección inmediatos o unarchivo de ruta pregrabado.

Page 2: Carro Control Remoto

I N T R O D U C C I Ó N

Una de las principales aplicacionesde la electrónica y los sistemas de controlestán en los juegos electrónicos, estossistemas cada vez son más complejos ycumplen con una mayor cantidad defunciones.

Además, estos sistemas desarrolladospara juegos infantiles permite un estudio deposibles aplicaciones en la industria, pues losmismos dispositivos empleados puedenadaptarse a condiciones industriales parafuncionar de manera muy similar a como lohacen en los juegos.

Lo anterior nos hace reflexionaracerca de lo importante que son los juegospara la electrónica y nos muestra laimportancia de implementar nuevos sistemaspara analizar su funcionamiento.

O B J E T I V O S P A R T I C U L A R E S

a. Analizar el sistema de comunicaciónentre el control remoto y el carro.

b. Adaptar una etapa de potencia para podercontrolar al carro a partir de señalesemitidas por el sistema mínimo.

c. Integrar una comunicación serial con unacomputadora para controlar al carrooprimiendo las flechas de lacomputadora.

d. Almacenar la ruta indicada por lacomputadora para poder reproducirla.

El material que utilizamos para eldesarrollo del proyecto es un carro de controlremoto, un sistema mínimo, unacomputadora, cable serial y los dispositivosnecesarios para la adaptación de la etapa depotencia.

D E S C R I P C I Ó N

Este controlador consta de un sistema mínimo(8051), una etapa de potencia y una etapa de

control remoto. Es un sistema que permitecontrolar al carro mediante una computadoray grabar la trayectoria que sigue el carro paratiempo después repetirla.

C A R A C T E R Í S T I C A S

• El sistema mínimo está diseñado enconfiguración de Loader para que puedaser utilizado mediante el programaSIEV31.

• El sistema hace posible operar al carromediante la utilización de las flechas delteclado de una computadora.

• Es capaz de guardar hasta 2 horas y 10minutos de trayectoria.

• La trayectoria que repite el carro esdesplegada en el LCD del sistemamínimo, al mismo tiempo que es enviadaa la computadora para su futuroalmacenamiento.

• El sistema es capaz de recibir de lacomputadora una trayectoria grabada enun archivo de texto (.TXT) y ejecutarla.

• El carro a control remoto consta de dosmotores, uno para adelante y atrás y otropara derecha e izquierda.

• El control remoto del carro es a base deswitches, cada motor dispone de trescontactos, uno común y otros dos queespecificarán la dirección del motor, estosignifica que para activar un motor haciauna dirección hay que juntar la terminalcomún con la terminal correspondiente ypara que vaya en la dirección contrariahay que juntar el común con la otraterminal.

F U N C I O N A M I E N T O

Todo el funcionamiento del sistema se basaen el programa controlador, es decir, nuestrosistema es controlado por software y no porhardware.

Page 3: Carro Control Remoto

El sistema mínimo.

El sistema utilizado en este proyecto es unsistema mínimo en configuración de "loader",el sistema consta de:

• Microcontrolador 8031A• Eprom 27C256 es decir, 32K• RAM 62256 , memoria de 32K• LCD 491• MAX232 Adaptador para transmisión

serial.• Controlador de teclado 74C922• Puerto serial.

El programa controladorCaracterísticas

El programa fue desarrollado enlenguaje ensamblador y permite alsistema para realizar las siguientestareas:

Recepción de comandos.Interpretación de comandos.Almacenamiento de la trayectoria.Reproducción de lo almacenado.Despliegue en el LCD.Despliegue en la computadora.

Page 4: Carro Control Remoto

Funcionamiento

ORG 2000H AJMP MAIN ORG 2023H LJMP SERIAL

;Para evitar problemas con elSiev31, se reenvía a una nuevadirección para interrupción serial

Subrutina de interrupción serial

ORG 20F9HSERIAL JNB TI, RECEP CLR TI CLR A MOVC A,@A+DPTR JZ INICIA MOV SBUF,A INC DPTR RETIINICIA SETB REN MOV DPTR,#$2300 RETIRECEP CLR RI MOV A,SBUF CJNE A,#$45,SIGGG ACALL BORRA SJMP SAASIGGG CJNE A,#$52,SA SETB PSW.5 SJMP SAASA ACALL MODO JB PSW.6,TEXT ACALL CARRO SJMP SAATEXT ACALL GRABARSAA RETI

;Determina transmisión o recepción;Limpia la bandera

;Despliega el mensaje de “RecepciónPreparada” para indicar que haybuena conexión serial.

;Una vez desplegado el mensaje,habilita recepción y prepara DPTRpara grabar trayectoria;Borra bandera de recepción

;Verifica que si se desea borrar oes otro comando.

;Analiza el comando para ver si eslectura (repetición) o escritura

;Llama a subrutina para establecermodo de control (inmediato/texto).;Modo de control inmediato.

;Modo de control por texto.

Subrutina de movimiento del carro

ORG 212AHCARRO CJNE A,#$41,ATRAS ACALL LIMPIA JB PSW.5,CON1 ACALL GRABARCON1 MOV R0,#$00 ACALL DISPLAY MOV P1,#$08 MOV A,P1 MOV R2,A SJMP PREATRAS CJNE A,#$42,IZQ ACALL LIMPIA MOV P1,#$04 JB PSW.5,CON2

;Si el comando es A,B,C o D indicamovimiento del carro, estasubrutina verifica que movimientoes en específico, después llama ala subrutina “limpia” para borrarel LCD, si no está repitiendo latrayectoria llama a la función“grabar” y finalmente llama a lafunción “Display” para desplegar elcomando en el LCD y la pantalla dela Computadora. Seguido de esto,se envía al puerto 1 el código deactivación de los switchescorrespondientes a ese movimiento.

Page 5: Carro Control Remoto

ACALL GRABARCON2 MOV R0,#$09 ACALL DISPLAY MOV A,P1 MOV R2,A SJMP PREIZQ CJNE A,#$44,DER ACALL LIMPIA MOV P1,#$02 JB PSW.5,CON3 ACALL GRABARCON3 MOV R0,#$0F ACALL DISPLAY MOV A,P1 MOV R4,#$60VU ACALL LARGO DJNZ R4,VU SJMP DISPDER CJNE A,#$43,WAIT ACALL LIMPIA MOV P1,#$01 JB PSW.5,CON4 ACALL GRABARCON4 MOV R0,#$19 ACALL DISPLAY MOV A,P1 MOV R4,#$60VU1 ACALL LARGO DJNZ R4,VU1 SJMP DISPWAIT CJNE A,#$57,SALE ACALL LIMPIA MOV P1,#$00 JB PSW.5,CON5 ACALL GRABARCON5 MOV R0,#$21 ACALL DISPLAY SJMP PREDISP ORL A,R2 MOV P1,APRE ACALL CONT MOV P1,#$00SALE RET

;En el comando de adelante y atrás,se graba el registro R0 con elvalor para poder decidir si algúnmovimiento posterior a la izquierdao derecha se realizará haciaadelante o atrás.;En los comandos de izquierda yderecha se da un tiempo de retardopara activar el switch paraizquierda o derecha yposteriormente se activa el switchpara que avance hacia adelante oatrás dando la vuelta, esto se debea que el control remoto no aceptaambos comandos simultaneamente(incluso de manera manual).El comando “Wait” sólo indica queel carro deberá detenerse uninstante.

;Aquí se envía el comando paraavanzar cuando se da vuelta.;Llama a subrutina para que seavance aprox. 0.2 seg.

Subrutina de tiempo de movimiento

ORG 21A8HCONT MOV R7,#$02SE1 MOV R6,#$00SE2 MOV R5,#$00SE3 DJNZ R5,SE3 DJNZ R6,SE2 DJNZ R7,SE1 RET

;Como no se quiere que el carroavance de manera permanente serealiza esta cuenta para que sólose envíe un impulso de avance de unpoco más de 0.2 segundos porcomando.

Page 6: Carro Control Remoto

Subrutina para repetir trayectoria

ORG 21B5HLEER SETB PSW.5 MOV DPTR,#$2300AQUI MOVX A,@DPTR JZ FIN ACALL CARRO INC DPTR SJMP AQUIFIN CLR PSW.5 RET

;Establece modo lectura (no graba);Inicio de trayectoria grabada

;Revisa por fin de trayectoria;Conforme lee, envía señal paramover el carro y busca el sig.Comando en la trayectoria;Elimina modo lectura (puedecontinuar grabando)

Subrutina de grabación

ORG 21C5HGRABAR MOVX @DPTR,A INC DPTR MOV A,#$00 MOVX @DPTR,A RET

;Envía el comando a la siguientedirección de la última direcciónutilizada y después graba con 00 lasiguiente dirección para indicarfin de trayectoria.

Subrutina para borrar LCD

ORG 21D2HLIMPIA MOV P2,#$60 MOV R1,#$00 MOV R3,A MOV A,#$01 MOVX @R1,A MOV A,R3 ACALL LARGO RET

;Esta subrutina se emplea paraborrar el mensaje que tengaactualmente el LCD paraposteriormente desplegar el mensajede el movimiento que se estáefectuando.

Subrutina para desplegar movimiento en el LCD y pantalla.

ORG 21E0HDISPLAY MOV A,R0 MOV R3,ADISPL MOV P2,#$22 MOVX A,@R0 CJNE A,#$01,SIGUE MOV A,R3 MOV R0,A ACALL COMPU SJMP ENDDSIGUE MOV R1,#$01 MOV P2,#$60 MOVX @R1,A ACALL CORTO INC R0 SJMP DISPLENDD RET

;Guarda el valor del registro parareutilizarlo en el despliegue enpantalla.;Lee caracter a desplegar;Al terminar el mensaje en LCDbusca el valor inicial del registroy llama a subrutina para despliegueen pantalla.

;Lazo para desplegar en display,considerando retardos para envío dedatos al LCD.

Page 7: Carro Control Remoto

Mensajes desplegados

ORG 2200H DB 'ADELANTE' DB 01H DB 'ATRAS' DB 01H DB 'IZQUIERDA' DB 01H DB 'DERECHA' DB 01H DB 'DETENIDO' DB 01H

; Estos son cada uno de losmensajes que se despliegan según elcomando de movimiento. El byte 01,se utiliza como fin de mensaje.

Subrutina de despliegue en pantalla

ORG 2230HCOMPU MOV P2,#$22 MOVX A,@R0 MOV SBUF,ACO0 JNB TI,CO0COMP1 CLR TI INC R0 MOV P2,#$22 MOVX A,@R0 CJNE A,#$01,COMP SJMP CFINCOMP MOV SBUF,ACO4 JNB TI,CO4 SJMP COMP1CFIN MOV A,#$0A MOV SBUF,ACO1 JNB TI,CO1 CLR TI MOV A,#$0D MOV SBUF,ACO2 JNB TI,CO2 CLR TI RET

;Se regresa al punto inicial delmensaje y se lee el caracter.;Se envía el primer caracter;Retardo hasta que se termine detransmitir el caracter y se borrabandera.Con un lazo se repite el proceso delectura del caracter a transmitir yse comprueba que no se hayaterminado el mensaje.;Se transmite caracter y se esperaa que se termine transmisión paratransmitir el sig. caracter.;Una vez terminados los caracteres,se envían comandos para generar un“Enter” o “Return” y empezar en lasiguiente linea.

Subrutina de modo de control

ORG 2270HMODO CJNE A,#$49,TEXTO CLR PSW.6 SJMP SALMODTEXTO CJNE A,#$54,SALMOD SETB PSW.6SALMOD RET

;Según el modo de control deseado,inmediato o grabación (para enviartexto) se desactiva o activa labandera PSW.6 respectivamente.

Page 8: Carro Control Remoto

Subrutina de borrado

ORG 2280HBORRAR MOV A,DPL DEC A CJNE A,#$FF,BOR1 MOV DPL,A MOV A,DPH DEC A MOV DPH,A SJMP SALBORBOR1 MOV DPL,ASALBOR MOV A,#$00 MOVX @DPTR,A RET

;Esta subrutina permite eliminar elúltimo caracter escrito dentro dela trayectoria del carro.

Rutina de inicio

ORG 208BHMAIN MOV TH1,#$FD MOV TL1,#$FD MOV TMOD,#$20 MOV TCON,#$00 MOV IE,#$90 MOV SCON,#$40 MOV P1,#$00 CLR PSW.5 CLR PSW.6 MOV DPTR,#$6000 MOV A,#$3C MOVX @DPTR,A ACALL CORTO MOV A,#$01 MOVX @DPTR,A ACALL LARGO MOV A,#$06 MOVX @DPTR,A ACALL CORTO MOV A,#$0C MOVX @DPTR,A ACALL CORTO MOV A,#$80 MOVX @DPTR,A ACALL CORTO MOV DPTR,#LCD SETB TR1 SETB TILAZO JNB PSW.5,LAZO MOV IE,#$00 ACALL LEER MOV IE,#$90 SJMP LAZO

;Establece Baud rate = 9600

;Modo del temporizador

;Habilita interrupción serial;Modo de transmisión serial;Limpia puerto 1.;Limpia bandera lectura;Limpia bandera modo de control;Comienza inicialización del LCD

;Termina inicialización LCD;Dirección mensaje “Recepciónpreparada”;Activa trigger 1 e int. serial.;Espera a modo lectura;Deshabilita interrupciones;Llama subrutina lectura;Rehabilita interrupción serial.

Page 9: Carro Control Remoto

Subrutina de tiempo

ORG 20D4HCORTO MOV R6,#$13ESP DJNZ R6,ESP RET

;Subrutina para tiempo de retardocorto para envío de datos ycomandos al LCD.

Subrutina de tiempo

ORG 20D9HLARGO MOV R6,#$3WAIT2 MOV R7,#$00WAIT1 DJNZ R7,WAIT1 DJNZ R6,WAIT2 RET

;Subrutina de retardo largo paraenvío de datos y comandos al LCD.

Mensaje de confirmación

ORG 20E2HLCD DB 'RECEPCION PREPARADA' DB 0AH DB 0DH DB 00H END END

;Mensaje para confirmar transmisiónserial entre sistema mínimo ycomputadora.

C O N E X I O N E S Y M A N E J O

ConexiónEl sistema mínimo se conecta a una fuente dealimentación de 5V. Se conecta la etapa depotencia al puerto 1 delsistema y el controlremoto a su vez a la etapade potencia. El controlremoto se alimenta conuna pila de 9V y el carrose alimenta con un bancode 4 baterías de 1.5Vcada una.

Se carga el programacontrolador al loadermediante el puerto serialutilizando el SIEV31, una vez cargado elprograma e iniciado (mediante la instruccióng 2000), cerramos el SIEV31 mediante latecla F1, pero no desconectamos el loader,una vez hecho esto abrimos hyperterminal deWindows y establecemos una conexión através del puerto serial a un baudrate de 9600sin paridad. Esto se hace debido a que elSIEV31 tiene un error: este programa,

además de no reconocer el código ASCII delas flechas de control, interviene en latransmisión serial del programa controlador eintroduce cadenas de espacios en blanco, todoesto se traduce en un mal funcionamiento del

circuito.

ManejoUna vez obtenida laconexión serialpodemos empezar amanejar el carromediante el uso de lasflechas de adelante,atrás, izquierda yderecha para generarmovimiento o presionarla tecla "W" para

indicar al carro que se detenga por uninstante. Una vez concluida nuestratrayectoria podemos presionar la tecla R delteclado de la computadora para hacer que elsistema repita la trayectoria grabada.También es posible borrar uno a uno elúltimo comando presionando la letra "E".

Page 10: Carro Control Remoto

T X T R A

Este programa esta hecho en C++ y suobjetivo es convertir un archivo con texto aun archivo con el formato R&A.

El formato R&A

Sus siglas responden a los apellidos de losautores y se basa en secuencias de las letrasA,B,C,D y W que especifican la acción queejecutará el carro:

A= Adelante B= Atrás C= Derecha D= Izquierda W=Esperando

Creación de una trayectoria pregrabadaPara enviar una trayectoria al sistemapodemos crear un archivo que contenga unasecuencia de las letras anteriormente citadas,por ejemplo:

Si creamos un archivo con la siguientesecuencia de letras:

AAWBCD

y lo enviamos por puerto serial utilizandoHyperterminal, el carro se moverá de lasiguiente forma:

ADELANTEADELANTEESPERANDOATRASDERECHAIZQUIERDA

Para evitar crear el archivo utilizando lasletras A,B,C,D,W podemos hacer uno con laspalabras completas (ADELANTE, ATRAS,IZQUIERDA, DERECHA, ESPERANDO)en mayúsculas y con un cambio de línea entrecada una ("enter") y utilizar el programaTXTRA para que convierta ese archivo enuno con el formato R&A llamado "ruta.r&a".

Una vez obtenido el archivo podemosenviarlo al sistema para su ejecución.

El código fuente de este programa se muestraa continuación:

Page 11: Carro Control Remoto

/* Programa que convierte un archivo de texto en formato R&A */

/* Inclusión de las librerías necesarias */#include <iostream.h>#include <stdio.h>#include <string.h>#include <dir.h>#include <conio.h>

int main(void)

/* Limpia la pantalla y realiza la presentación del programa */ clrscr(); cout<<endl<<endl; cout<<endl<<"TXTRA 1.0"<<endl<<endl; cout<<endl<<"ITESM-CEM Laboratorio de Sistemas Digitales"; cout<<endl<<"Programado por Alejandro Alemán y Erik Riveroll"; cout<<endl<<"Copyright, 1999"<<endl<<endl; cout<<endl<<"Programa para convertir formato TXT a formato R&A"<<endl<<endl;

/* Declaración de variables */ FILE *in, *out; fpos_t filepos; int j,dato,datos[25],enter; char *fname,fuente[250]; char a[] = "A"; char b[] = "B"; char c[] = "C"; char d[] = "D"; char w[] = "W";

/* Pide el nombre del archivo fuente */ cout<<"Dame el nombre del archivo fuente: "; cin>>fuente; fname=fuente;

/* Checa si es posible abrir el archivo fuente (in) y crear el archivo destino(out), si no es posible manda un mensaje de error y termina el programa */ if ((in = fopen(fname, "rt")) == NULL) fprintf(stderr, "No se puede abrir el archivo.\n"); getch(); return 1;

if ((out = fopen("ruta.r&a", "wt")) == NULL) fprintf(stderr, "No se puede crear el archivo destino.\n"); getch(); return 1;

/* Si es posible abrir el archivo fuente y crear el destino, empieza el procesode codificación */cout<<endl<<endl<<"El contenido del archivo "<<fname<<" es: "<<endl;

/* Busca el inicio del archivo fuente */fseek(in, 0,SEEK_SET);

Page 12: Carro Control Remoto

/* Empieza la codificación */while(!feof(in))

/* Toma las 3 primeras letras del archivo fuente y suma el valor correspondientea cada letra. *//* Ejemplo: ADE= 65+68+69=202 */ dato=0; for (j=0;j<=2;j++) dato=dato+fgetc(in);

/* Verifica si el número obtenido corresponde al de "ADELANTE" */ if (dato==202)

cout<<"ADELANTE"<<endl;

/* Escribe en el archivo destino la letra A */fwrite(a, strlen(a), 1, out);

/* Busca el cambio de línea (10) o el fin del archivo (-1) */enter=0;while(enter!=10)

enter=fgetc(in);if(enter==-1)

enter=10;

/* Verifica si el número obtenido corresponde al de "ATRAS" */if (dato==231)

cout<<"ATRAS"<<endl;

/* Escribe en el archivo destino la letra B */fwrite(b, strlen(b), 1, out);

/* Busca el cambio de línea (10) o el fin del archivo (-1) */enter=0;while(enter!=10)

enter=fgetc(in);if(enter==-1)

enter=10;

/* Verifica si el número obtenido corresponde al de "IZQUIERDA" */

if (dato==244)

cout<<"IZQUIERDA"<<endl;

/* Escribe en el archivo destino la letra D */fwrite(d, strlen(d), 1, out);

Page 13: Carro Control Remoto

/* Busca el cambio de línea (10) o el fin del archivo (-1) */enter=0;while(enter!=10)

enter=fgetc(in);if(enter==-1)

enter=10;

/* Verifica si el número obtenido corresponde al de "DERECHA" */if (dato==219)

cout<<"DERECHA"<<endl;

/* Escribe en el archivo destino la letra C */fwrite(c, strlen(c), 1, out);enter=0;

/* Busca el cambio de línea (10) o el fin del archivo (-1) */while(enter!=10)

enter=fgetc(in);if(enter==-1)

enter=10;

/* verifica si el número obtenido corresponde al de "ESPERANDO" */if (dato==232)

cout<<"ESPERANDO"<<endl;

/* Escribe en el archivo destino la letra W */fwrite(w, strlen(w), 1, out);enter=0;

/* Busca el cambio de línea (10) o el fin del archivo (-1) */while(enter!=10)

enter=fgetc(in);if(enter==-1)

enter=10;

/* Cierra los archivos fuente y destino */ fclose(in); fclose(out);

/* Termina el programa */cout<<endl<<endl<<"Trabajo Finalizado --> ruta.r&a"<<endl<<endl;getch();return 0;

Page 14: Carro Control Remoto

B I T Á C O R A D E L P R O Y E C T O

Primera semana

Durante esta semana hicimos las siguientesactividades:• Adquisición del coche a control remoto• Probamos el coche y después procedimos

a desarmar el control remoto para ver dequé manera se accionaban los motoresdel carro. Nuestra primera buena noticiafue que el sistema de control se basaba enun conjunto básico de switches.

• El sistema de control consta de dospartes, una que mueve los motores deatrás y adelante y otra que mueve los delos lados. Cada uno de estas partes estáncompuestas de 3 contactos, uno de loscuales es común (tierra) y los otros tienenel voltaje de Vcc (9V). Lo único que setiene que hacer para activar un motor esunir el extremo correspondiente al motordeseado con el contacto común.

• Investigamos también, mediante unmultímetro, la corriente que circula porestos contactos (43mA). Esto nosserviría para establecer la configuraciónde la "etapa de potencia" necesaria paraactivar el control remoto.

• Decidimos la manera en la que se iba amanejar el coche, mediante las flechas deadelante-atrás-izquierda-derecha delteclado de cualquier computadora, por loque el siguiente paso fue diseñar unprograma para poder ver el código que segenera al oprimir cada tecla.

Segunda semana

• Desarrollo del programa para encontrar elcódigo ASCII al apretar las flechasadelante,atras, izquierda, derecha:El programa empleado para encontrar elcódigo enviado por las flechas de lacomputadora consistió en recibir de modoserial el código y enviarlo al LCD; este

programa lo obtuvimos del proyecto finalde la materia de Microprocesadores yperiféricos, aunque tuvimos quemodificarlo al encontrarnos con algunasirregularidades:

a) El LCD únicamente desplegaba unespacio al momento de apretar latecla, por lo que no sabíamosexactamente cual era el dato.

b) El programa Siev31, presenta unproblema de envío constante de unaseñal al sistema mínimo, pararesolver lo anterior, decidimosutilizar la comunicación serial porHyperterminal de Windows paratener una comunicación sin envío deinformación no deseada.

Al momento de utilizarHyperterminal nos dimos cuenta quelas flechas al apretar las flechas seobtenía: ” [A”, ” [B”, “ [C”, “ [D”, alapretar arriba, abajo, derecha eizquierda respectivamente, es decir,recibíamos 3 caracteres con sólopresionar una tecla. Nuestra soluciónvino con el mismo programa, puesdecidimos utilizar un programa queúnicamente desplegara en el displayA, B, C o D, sin considerar todo lodemás, incluso así se pudo utilizar elSiev31, pero únicamente con lasletras, no con las flechas.

c) Al estar utilizando las flechas para elcontrol, nos dimos cuenta queapretando 2 teclas simultaneamenteno era posible recibir otra señaldistinta, sino que se recibían ambasseñales, pero si se dejaban apretadaslas teclas, únicamente aparecía laseñal de la última tecla apretada, porlo tanto, no sería posible controlar los6 movimientos diferentes que tiene elcarro.

Nuestra solución fue modificarnuevamente el programa para utilizarlos números para controlar losmovimientos del automóvil, y en esta

Page 15: Carro Control Remoto

misma semana readaptamos elprograma para su funcionamiento.Este programa únicamente manda lasseñales y sólo las quita hasta que unanueva señal modifica los valores quehay en el puerto 1 (Este es el puertoque utilizamos para controlar nuestrocontrol remoto).

• Por otra parte, en el aspecto deimplementación física en cuanto a laetapa de potencia, decidimos la forma enla que la desarrollaríamos y encontramosque un transistor 2N2222 soportabafácilmente la demanda de corriente porparte del control remoto al activar cadaswitch, por lo que sólo tuvimos queconfigurarlo para que actuara comoswitch, conectando el emisor a la tierra yel colector con una resistencia a Vcc,pudiendo controlar la base para losestados de corte y saturación. Esteproceso lo evaluamos con un transistor,verificando que se pudiera controlar y elresultado fue correcto. El circuitorespondió bien al momento de mandarlela señal para hacer que el carro semoviera.

Tercera semana

• Se implementó completamente la etapade potencia para nuestro control, estaconsiste en un transistor 2N2222 y 2resistencias por cada switch (4 switchesen total). El transistor se conectó con unaresistencia que tiene un valor cercanoinicial a los 200Ω para tener los 43mA decorriente entre el emisor y el colector, laotra resistencia es de 18KΩaproximadamente, conectada a la base.El colector se conectó a Vcc del switch,el emisor a tierra y la base recibe nuestraseñal de control. Esta etapa se encuentraensamblada en protoboard puescontinuamos haciendo pruebas.

• Además durante el fin de semanaencontramos la forma de controlar alcarro con las flechas de la computadora(nuevamente), insistimos en utilizar las

flechas por lo explícitas que son encuanto al movimiento del carro. Lasolución para poder tener los 6movimientos es utilizando comoreferencia para la dirección (adelante oatrás) el último dato empleado paramanifestar la misma. Es decir siqueremos dar vuelta a la derecha haciaenfrente, es necesario que primeroavancemos hacia enfrente (si antesestabamos avanzando hacia atrás) ydespués enviar la señal de vuelta a laderecha. Si la última ocasión queavanzamos hacia enfrente o hacia atráses la misma que la que queremos almomento de indicar una vuelta, sólo esnecesario presionar la tecla de vuelta.En esta semana logramos implementareste programa y funcionó de acuerdo acomo queríamos. Posteriormente vinoun problema con el programa:Dentro de nuestra programaciónincluimos la letra “Q” para indicarle alcarro que se detuviera por completo, y lalógica empleada funcionó correctamenteal igual que los comandos demovimiento, sin embargo, si después deuna “Q” decidíamos reiniciar elmovimiento con una vuelta haciacualquier lado, el auto se iba haciaenfrente o atrás (dependiendo del últimovalor) pero no daba la vuelta, despuésnos dimos cuenta que el problema noestaba en la programación directamente,pues incluso si se daba la mismainstrucción de modo manual, el carrorespondía de la misma manera.Buscamos la manera de solucionarlo yahí nos surgío otro problema pues alimplementar la solución dando unretardo en cada señal, el programa dejóde funcionar, cosa que no nos habíasucedido hasta la fecha y por más queestuvimos intentando regresar alprograma anterior donde el problemaestaba en el funcionamiento del carro yno en el programa, no logramosconseguirlo y nuestro programa tuvo unerror que tendríamos que corregir.

Page 16: Carro Control Remoto

Cuarta semana

• Después de solucionar el problema conel retardo decidimos establecer una basede tiempo de medio segundo para elmuestreo de instrucciones recibidas de lacomputadora. Cada vez que seoprimiera una tecla el microcontroladormantendría la señal correspondiente enel puerto 1 durante medio segundo.

• Como ya contábamos con una base detiempo, eliminamos la opción de la teclaQ, puesto que ya no era necesaria.

• Agregamos al programa la capacidad demandar la dirección a la que se dirigía elcarro (adelante, atrás, izquierda,derecha), directamente al LCD.

• En esta semana comenzamos con elproceso de almacenamiento de datos (apartir de la dirección 2300H). Cada vezque el programa recibe un dato válido,despliega en el LCD lo que significa, loalmacena y envía la instruccióncorrespondiente al puerto 1.

• El almacenamiento y la lectura de datosfunciona de la siguiente manera:

a) Al momento de recibir unainstrucción, ésta es grabada a partirde la dirección 2300H de la RAMexterna. La localidad de memoriasiguiente es borrada (00H).b) Al momento de acabar de grabar laruta se oprime la tecla R de lacomputadora y el microcontroladorentra en una subrutina de lectura, éstelee cada dato a partir de la dirección2300H y realiza la subrutina decontrol de movimiento del carro,deteniéndose si encuentra que el datoque va a mandar es 00H.c) Si se sigue grabando después de lalectura de datos, el programaalmacenará la ruta a partir de laúltima dirección de memoriautilizada, por lo que si se ejecuta"Repetición" (tecla R), elmicrocontrolador mandará latrayectoria indicada desde el

principio y añadirá las instruccionesnuevas.

• Esta última etapa de nuestro diseño secomplicó debido a la complejidad delprograma, sin embargo todo salió comolo planeado y estábamos listos paraprobar el carro.

• Probamos el carro al aire libre ydemostramos que funciona, se puedemanejar libremente el carro y despuéspedirle que repita la trayectoria.

Quinta semana

Esta semana fue de evaluación del avance delproyecto, por lo que no hubo un avancesignificativo, pues estuvimos observando losproyectos de los demás equipos ypresentando el nuestro.

Sexta semana

• En esta semana desarrollamos elprograma para poder desplegar en lapantalla de la computadora la trayectoriadel proyecto, es decir, despliega unmensaje con la dirección que el carro estásiguiendo en ese momento, pero al irdesplegando cada uno, se puede observarla trayectoria del proyecto. Para estepunto tuvimos ciertos problemas con elprograma que teníamos, pues no permitíala transmisión serial dado que todonuestro control se realizaba en lainterrupción del puerto serial y norealizaba una "interrupción serial dentrode sí misma". Para resolver el problemase desarrolló otro programa donde sepudiera realizar una recepción muchomás rápida dentro de la interrupción yliberarla rápidamente. Una vezfuncionando el programa, decidimos unirambos programas para fusionar ambasfunciones.

• En el programa fusionado establecimos 2comandos de control "T" que indicaposibilidad de recibir un archivo de textoy que su peculiaridad es que no realiza la

Page 17: Carro Control Remoto

trayectoria hasta que se presiona la tecla"R", y el comando "I" que es para unarespuesta inmediata a la indicación demovimiento con las flechas.

• Nuevamente decidimos modificar elprograma, para tener también laposibilidad de detener el carro poralgunos instantes en su recorrido, estecomando se ejecuta presionando la tecla"W".

• En esta semana también modificamos elprograma para que pudiera desplegar latrayectoria escrita en la pantalla de lacomputadora, este proceso se lleva a cabosin utilizar la interrupción serial.

• Se mejoró la estética de la etapa depotencia eliminando el protoboard yfijándola en una tablilla con soldadura.

Septima semana

• Realización de pruebas finales.• Programación en C++ de programas

accesorios. Este programa consiste enleer un archivo *.txt que contenga lasinstrucciones: "ADELANTE","ATRAS", "IZQUIERDA","DERECHA", "ESPERA".El programa realizará laconversión a un formato*.R&A que se podrátransmitir al controladorpara realizarse.

• Presentación final.

A P L I C A C I O N E S

Desde un principiose mencionó laimportancia de losjuegos electrónicosen la actualidad, yel desarrollo deeste proyecto tieneun enfoqueorientadoprecisamente a una

modificación a este tipo de tecnología.Además, este proyecto tiene la posibilidad deaplicarse en la industria, pues si se requiererealizar movimientos predeterminados (rutas)invariables, donde no se tenga posibilidad de"tráfico", este sistema puede responderadecuadamente a cualquier trayectoriaasignada de este tipo.

C O N C L U S I O N E S

Creemos que lo más importante de esteproyecto es el hecho de que logramosimplementar por completo todos los objetivosinicialmente planteados, incluso al grado deagregar un buen número de detalles extras alsistema.

Consideramos además, que este proyecto nosdio la oportunidad de integrar realmentenuestros conocimientos en el área de losSistemas Digitales en una aplicación prácticay útil.

Para agregarle los detalles antesmencionados, tuvimos la suerte de poderutilizar conocimientos de Computaciónhaciendo una integración mayor deconocimientos en un mismo proyecto.

Un aspectoimportante quedescubrimos coneste proyecto esla capacidad delmicrocontroladorque estamosutilizando, puesno fue necesariauna gran

implementaciónfísica de

dispositivos para generar estaaplicación, pero fue muynecesario trabajar en laprogramación del controlador.

El trabajar en equipo es algoque deja mucho de provechoya que los integrantes delmismo aprenden a cooperar y

Page 18: Carro Control Remoto

a ayudarse entre ellos y lo más importante, aconfiar en el trabajo de las demás personas.

Creemos que es necesario realizar unprograma monitor que no tenga lasrestricciones del SIEV31 en cuanto atransmisión y recepción serial, al igual que elreconocimiento de mnemónicos en unprograma, pues le resta a la configuración"Loader" las grandes ventajas queimplicitamente representa.

B I B L I O G R A F Í A :

MACKENZIE, Scott. The 8051Microcontroler, 2ª edición. Ed. Prentice Hall,USA, 1995

Manual del Microcontrolador 8051

Apuntes de Microprocesadores y Periféricos

http://www.national.com

http://www.ti.com

http://www.fairchildsemi.com