Manual Tecnico

1. INTRODUCCIÓN

En el presente manual se realizará una especificación a fondo de cada uno de los componentes utilizados a nivel de la programación para un vehículo implementado con sistema sonoro, sistema de detección de color, y cuatro movimientos primarios, ademas de tener implementado un sistema de manejo manual, teniendo en cuenta que el programa se desarrollo vía web utilizando una herramienta de programación compatible para la utilización de la tarjeta núcleo FE446RE, además de una herramienta para enviar y recibir comandos como lo es el programa Coolterm.

Inicialmente se desarrolla el programa en lenguaje c, orientada a objetos.

2. OBJETIVOS

a. OBJETIVO GENERAL

Implementar una especificación completa sobre el programa para que futuros técnicos puedan modificar el software.

b. OBJETIVOS ESPECIFICOS

- Instruir al técnico en el uso adecuado del software, así como comprenderlo en su totalidad. - Describir los archivos relevantes del sistema los cuales orientan a la correcta configuración de este. - Implementar el uso adecuado de las herramientas utilizadas para el correcto funcionamiento del software.

3. ALCANCE

El software desarrollado esta destinado a ser implementado en un vehículo capaz de detectar colores, con la posibilidad de que a cada color detectado por medio de un buzzer y con la configuración implementada tenga diferentes sonidos. El sistema esta limitado a detectar solo cuatro colores, además al detectar un color diferente a los predeterminados debe devolver un mensaje de error o de color no reconocido, estos mensajes serán devueltos en comandos hexadecimales, el software permite experimentar con cuatro sonidos diferentes modificando su tiempo de actividad, así mismo es posible que el vehículo tenga diferentes desplazamientos como lo es adelante, atrás, izquierda y derecha los cuales son movimientos propios del software, también es posible cambiar el manejo del vehículo por medio de la UART para ser controlado por medio de joystick .

4. REQUERIMIENTOS

a. HARDWARE

Fuente de alimentación de 5V DC generalmente es tomada de la tarjeta núcleo FE446RE. Tarjeta núcleo FE446RE

b. SOFTWARE

Como la programación se realiza mediante una plataforma online llamada MBED, los requerimientos para la aplicación son mínimos, se debe contar con un computador con una velocidad de trasferencia de datos como se ha especificado en el programa, en este caso debe ser de mínimo de 115200, además de contar con acceso a internet.

i. LENGUAJE DE PROGRAMACIÓN

Como se mencionó en la introducción el lenguaje utilizado para trabajar en la plataforma MBED es lenguaje C orientado a objetos.

ii. OTRAS TECNOLOGÍAS

Se necesita un programa secundario para el envió de comandos y recepción de datos provenientes del software implementado, en este caso se utiliza la herramienta Coolterm, esta herramienta nos que permite tener una terminal para nuestros puertos serie ya que tiene un menú de configuración muy completo, permitiendo elegir desde una lista los puertos disponibles y seleccionar su velocidad y demás parámetros; además despliega los datos recibidos tanto en ASCII como en hexadecimal.

c. INSTALACION y CONFIGURACIONES

Para obtener una programación correcta de la tarjeta Núcleo FE446RE es importante saber como se realiza la programación mediante la plataforma MBED. En primer lugar, se debe crear un usuario en la página principal de la plataforma MBED https://www.mbed.com/en/ el uso de la plataforma es muy sencillo y similar a otros programadores. El código se encuentra disponible en la dirección https://os.mbed.com/users/Darstack/code/Final3_copy/ Nos encontraremos con la opción de importar el código con todos sus archivos correspondientes, el código será guardado en la cuenta creada con el nombre que se le asigne.

Después de haber importando el programa, se procede a realizar la compilación de este, como es una plataforma de programación online, se compila y luego se descarga un archivo que se guarda en una ruta especifica.

Como ultimo para realizar la programación de la tarjeta núcleo FE446RE lo que se debe hacer es conectar la tarjeta en uno de los puertos USB del computador, luego se procede a copiar el archivo previamente descargado lo copiamos en el almacenamiento de la tarjeta.

Para lograr una comunicación con el sistema y el programa como tal, se debe descargar la herramienta Coolterm para esto nos vamos a la pagina oficial y se realiza la descarga. /media/uploads/MarlonQ/2.0.jpg /media/uploads/MarlonQ/3.jpg /media/uploads/MarlonQ/4.jpg Al crear la carpeta y ubicarla en la ruta escogida a preferencia procedemos a ejecutar la herramienta. /media/uploads/MarlonQ/8.jpg

Ahora se procede a realizar la configuración del Coolterm para poder utilizarlo acorde a las especificaciones de nuestro programa. Es necesario realizar esta configuración cada vez que se vaya a probar el programa ya que las configuraciones no quedan guardadas, también es importante realizar la configuración y la comunicación con la tarjeta con esta conectada al computador. En primer lugar, configurar la velocidad de trasferencia de datos, se utiliza la velocidad especificada en el programa que en este caso son 115200, para esto vamos a option y luego damos click en baudrate. /media/uploads/MarlonQ/9.jpg /media/uploads/MarlonQ/10.jpg /media/uploads/MarlonQ/11.jpg

Luego de realizar los pasos anteriores se hace la conexión entre la interfaz y la tarjeta para esto solo damos click en la opción connect. /media/uploads/MarlonQ/12.jpg Para enviar los comandos para realizar la lectura de colores y verificar el funcionamiento correcto del programa se procede a oprimir las teclas ctrl + t, luego damos click en hex (hexadecimal), escribimos FE01 y le damos enviar. /media/uploads/MarlonQ/13.jpg

5. PROGRAMA

Ahora se encuentra la descripción del programa como tal, como se menciono en las secciones anteriores el lenguaje de programación esta orientado a objetos y se utilizó C. Al momento de realizar la importación del programa se generan tres archivos con código, el primero es el main.cpp que es el código principal, luego encontramos el archivo scolor_TCS3200.cpp y el archivo scolor_TCS3200.h, estos dos últimos son códigos para la configuración del sensor TCS3200.

/media/uploads/MarlonQ/q.png

En este primer archivo se define lo que es la clase que se utilizara para definir el sensor, se definen los atributos públicos como la lectura del censado que realiza el sensor para la detección de color, estos atributos entregan el periodo de la señal, de tal manera están definidos como variables long, también se les da nombre a lo que son los pines de entrada y salida del sensor, en la parte superior se definen las escalas de lectura, según el datasheet se configura la escala de lectura dependiendo de la configuración de los pines como se ve a continuación:

/media/uploads/MarlonQ/11.png

Como atributos privados se definen las entradas y salidas de nuestro sensor, se define el timer para la lectura del tiempo de la señal y se define la variable long pulsewidth que es la que almacenara el ancho de pulso.

/media/uploads/MarlonQ/a.png

En el código presente se toman trabajan con los atributos definidos en la clase anterior, como se puede observar se toman los pines nombrados en la sección anterior, así como también se define la escala con la que trabajaremos el sensor. Para obtener unos intervalos para la configuración de los colores a detectar, se debe configurar los pines S2 y S3 según como lo muestra el datasheet. El principio de funcionamiento de este sensor es el siguiente. El sensor de color ha de proporcionarnos 3 valores para poder definir el color que está leyendo. La combinación de estos 3 colores, que son el Rojo, Verde y Azul para obtener el resto.

Por ejemplo, para obtener el color amarillo, será una combinación predominante de los colores Rojo y Verde y muy poco o nada de azul. Y así con todos. El problema, es que los fotoreceptores no se activan todos a la vez, sino de uno e uno. Así que primero deberemos leer la cantidad de rojo, después medir la cantidad de verde, luego la de azul, y pasarlo a una escala determinada de colores para poder interpretarlo. Para controlar estas lecturas, el fabricante, nos proporciona 2 pines de control que se asocian al S2 y al S3 para saber cuál estamos midiendo y el pin de lectura, es el que se nos indica como OUT. A través de la siguiente tabla podemos observar como activar estas lecturas.

/media/uploads/MarlonQ/im1.png

/media/uploads/MarlonQ/im2.png

Para estimar los niveles de rojo, azul y verde al momento de realizar la lectura, se tiene en cuenta la tabla anterior, donde se encuentran los valores aproximados de lectura de los tres colores mencionados, si esta dentro de este rango que se encuentra en frecuencia, se puede estimar los colores leídos, pero primero por medio de la programación se debe pasar esa frecuencia a periodo y por medio de ensayos se plantean los intervalos de frecuencia y periodo para obtener una lectura correcta.

Esta configuración de lectura se aplica como se ve en el código y nos retornara el ancho de pulso de la señal, seguidamente se realiza el switch para la selección de la escala de medición, como ya se ha mencionado se esta trabajando al 100%, y se finaliza con la función para obtener el periodo de la señal, mientras en S_in se encuentre negado se activara el timer, cuando esta condición cambien el timer se detiene, se almacena la medición en micro segundos y se resetea el timer, retornando la medida almacenada.

/media/uploads/MarlonQ/im4.png

/media/uploads/MarlonQ/im5.png

En primer lugar definimos los tipos de respuesta que tendrá el sistema, así como el comando que se debe enviar para ejecutar las diferentes instrucciones, luego definimos el periodo de diferentes sonidos que tendrá el sistema al detectar los cuatro colores seleccionados y el sonido que realizará al no reconocer un quinto color.

Luego se definen los puertos que se utilizaran para controlar los elementos que componen el vehículo, tales como son el sensor de color que estará controlado por los puertos PA_9, PC_7, PB_6, PA_4, PB_3, los motores paso a paso que son controlados por dos puertos para cada uno, respectivamente están controlados por PB_4, PB_5 para el primer motor y PB_10, PB_8 para el segundo motor, también tenemos los puertos A0, A1 que son los puertos análogos para la conexión del joystick, recordemos que este funciona de manera análoga y el software ayuda a pasar esa lectura análoga a una digital, por ultimo encontramos el puerto PB_9 el cual es el que estará conectado para el manejo del buzzer.

Finalizado esto continuamos con la definición de variables, en las cuales se encuentra VELOCITY la cual es la encarga de controlar la frecuencia con la cual los motores darán cada uno de sus pasos, entre mayor sea esta variable los pasos que dará cada motor se verán con menor velocidad, de lo contrario si esta variable disminuye, se vera que los motores trabajan con mayor velocidad.

Las dos siguientes variables Lectura [ 2 ] y In[ 1 ] son las variables utilizadas para almacenar el comando y el parámetro que se envían por medio de la herramienta coolterm.

Lo ultimo que se hace en esta sección es definir las funciones que serán utilizadas para el control y manejo total del vehículo, en primer lugar esta la función encargada de configurar la velocidad de trasferencia de datos por medio de la UART, sin esta función no existiría comunicación alguna. Luego esta la función leer_datos que en primer lugar se asegura que la variable de comunicación enviada por medio de la herramienta sea el mismo que se configuro al inicio del programa, de no ser así no funcionara ninguna instrucción enviada que se encarga de realizar la lectura de los comandos enviados por medio de la herramienta coolterm y almacenar los datos leídos. Después nombramos leer_color que es la encargada de controlar, almacenar y entregar los datos de los colores leídos. Por ultimo encontramos la función funcionesrobot, esta es la encargada de almacenar y realizar todas las funciones incluidas en el vehículo, dependiendo de las instrucciones enviadas al software por medio de esta función se realizara todo movimiento o sonido implementado en el hardware.

/media/uploads/MarlonQ/im6.png

Nuestro main estará conformado por la función encargada de configurar la velocidad de envió de datos, ademas se agregan dos interrupciones lo cual, la primera permite que el sensor de color este en funcionamiento constante, logrando que el resto del programa funcione al mismo tiempo, la segunda interrupción ayuda a que por medio del botón que tiene integrado la STM, se pueda detener el funcionamiento del carro en cualquier momento ,dentro de un while infinito se llama la funcion para realizar el reset de la pantalla lcd, llamaremos la funciones leer_datos y funcionesrobot para poder ejecutar de manera indefinida cualquier instrucción para hacer uso del vehículo.

Para visualizar diferentes colores en la LCD tenemos que tener en cuenta ciertos aspectos antes de simplemente compilar y probar el código. Lo primero que debemos tener en cuenta es que el tamaño de las pantallas LCD existentes en el mercado pueden ser el mismo, aunque con diferente pantalla, dependiendo del tipo de pantalla que se utilice el código puede variar significativamente. Para nuestro proyecto utilizamos una LCD con conexión SPI sin touch, cuanta con un tamaño de 2,2 pulgadas y la pantalla es de referencia Ili9341, al revisar el datasheet observamos que existen diferentes métodos de conexión y de igual forma la respectiva información de como usar cada una de ella, para nuestro dispositivo en función se usara el 4-line Serial Interface II.

/media/uploads/MarlonQ/im8.png

La elección de esta forma de comunicación es debido a que contamos con un pin extra, que en nuestro caso será el SD0 o también conocido como D/C, este pin me permite decirle a la LCD si quiero que reciba un comando o quiero enviarle algo a nuestro sistema embebido. Es por esto que en nuestro código tenemos dos funciones llamadas write_cmd y write_data, dichas funciones me permiten indicarle a la LCD si quiero recibir o enviar datos, puesto que para poder dibujar en la LCD tenemos que indicarle que registros modificar, esto quiere decir que la LCD cuenta con registros al igual que un microcontrolador, en el datasheet podremos leer con mayor detención, pero nos vamos a centrar en los usados en el código:

  • Frame Control (B1): La comunicación serial necesita de una señal tipo reloj, por medio del Frame establezco la relación de división para los relojes internos del modo normal en la interfaz MCU. Puesto que vamos a modificar un registro de nuestra pantalla debemos colocar el D/C en 0 para luego por uso de la función spi.write (uint8_t), especificar que registro tenemos modificar, al enviar el comando (B1) tendremos que vamos a usar una interfaz tipo MCU format.
  • Pixel Format (3Ah): Con este comando establecemos el formato de pixeles para los datos de imagen RGB, como para este comando necesitamos enviarle una serie de datos que establecen el tipo de formato es necesario que después de enviar el parámetro, le indiquemos formato vamos a utilizar por esta razón la función Pixel Format requiere de un write_data

/media/uploads/MarlonQ/im9.png

Como elegimos el Frame por MCU tenemos que elegir el formato de colores en nuestro caso son 16 bit / pixel. Que explicaremos a continuación.

  • 16bit Color (55d): Para seleccionar nuestra escala de colores tenemos dos opciones el RGB565 con el que tenemos 65536 colores para seleccionar o esta el RGB666 en donde podremos seleccionar 262144 colores para utilizar 16bot Color, según el datasheet de la pantalla tenemos que enviar un (101) que en binario corresponde al “5” pero como tenemos dos tipos de registro, (RGB Y DBI), tenemos que enviar dos veces dicho número, es por esto que enviamos un (55), en nuestro write_data.
  • Sleep Out (11h): Un dato curioso de nuestra LCD es que siempre va a estar apagada, para deshabilitar ese modo de reposo tenemos que usar la función sleep out que desactiva el modo de suspensión y habilita el convertidor CC/CC he inicia el oscilador interno así mismo como el escaneo de panel. Sin esta función nuestra LCD no recibiría ni enviaría datos.
  • Display On (29h): Este comando recupera la LCD del Display OFF, al estar en modo OFF la LCD no mostrara los datos que existan en memoria, al pasar de OFF a ON los datos se mostraran en la LCD.

• Column Address Set (2Ah): Conjunto de direcciones de columna en español, me permite delimitar la LCD con respecto a los pixeles ubicados a lo ancho. Para nuestro caso será desde [0:240]

/media/uploads/MarlonQ/im10.png

• Page Address Set (2Bh): Conjunto de direcciones de página en español, me permite delimitar la LCD con respecto a los pixeles ubicados a lo ancho. Para nuestro caso será desde [0:340]

/media/uploads/MarlonQ/im11.png

• Memory Write (2Ch): Este comando se usa para enviar datos de la MCU ( Lugar donde establecemos los colores ), a la memoria, al leer este comando los registros de columna y de pagina se restablecen las posiciones de inicio [0:0], luego de esto el registro de columnas de páginas se incrementa, en el código existe la función tft_clear la cual primero establece los parámetros de alto y ancho y los escribe en la memoria por medio del Memory Write, luego de esto pinta cada pixel de la pantalla, desde la posición [0:0], hasta [240:340].

A la hora de conectar la LCD a nuestro STM23 446RE, usaremos un SPI y tres salidas digitales (CS, DC, RST), Para poder indicarle a la LCD que vamos a escribir en ella, tenemos que previamente haber mandado una serie de pulsos por estos tres puertos, dichos pulsos están descritos en la función tft_reset.

Un ejemplo de cómo conectar la LCD:

/media/uploads/MarlonQ/im12.png

Teniendo en claro lo anterior el codigo para poder mostrar los diferentes colores en la pantalla LCD es el siguiente:

/media/uploads/MarlonQ/im13.png

/media/uploads/MarlonQ/im14.png

/media/uploads/MarlonQ/im15.png

/media/uploads/MarlonQ/im16.png

Ahora se explicara un poco mas a fondo cada funcion, Leer_color nos indica la puesta del pwm en cero, así como la asignación a las variables long de cada color, la lectura proveniente del código anterior, también definimos variables para almacenar la frecuencia de cada señal, que es calculada con la formula mostrada en el código. Imprimimos los valores de periodo y frecuencia almacenados.

Para la detección del color especificado se deben hacer varias lecturas para poder obtener un intervalo de frecuencia para cada lectura de color, el sensor lee azul, verde y rojo de un color en específico, así se pueden con intervalos y varias lecturas definir variables para un color en especial, en este caso los intervalos para los colores de lectura son para la detección del color rojo, mientras los valores de frecuencia se mantengan en esos intervalos el color tiene a ser rojo, si es correcto el buzzer sonara con el periodo que definimos DO a un ciclo útil del 50% y definimos una variable llamada sel_color=1, se realiza el mismo procedimiento con los colores definidos cambiando el peridodo y la variable sel_color.

/media/uploads/MarlonQ/im17.png

Finalizamos con un switch que funcionara acorde a la variable Selec_color que definimos para cada color detectado, todo esto para poder enviar al Coolterm respuestas Hexadecimales y no las respuestas comunes como el color leído.

FEx01 Rojo

FEx02 Verde

FEx03 Azul

FEx04 Amarillo

FEX00 Color no found

Luego de detectar un color en la pantalla LCD se reflejara la respectiva lectura.

/media/uploads/MarlonQ/e.png

Por ultimo para explicar la función funcionesrobot utilizaremos la función switch para identificar el tipo de comando y así lograr que el software realize la acción acorde a los telecomandos enviados la herramienta coolterm. El case 0 es el llamado a la función leer_color es decir que nuestra primer telecomando es la activación del sensor de color para realizar una lectura especifica. Después del case 1 al case 4 son los telecomandos siguientes para activar cuatro sonidos que están implementados en el vehículo, los cuatros sonidos están manejados con las frecuencias definidas en la cabecera del programa y tienen un ciclo útil definido en el programa, el parámetro a ingresar en la herramienta es el tiempo que dura activado cada sonido, y como se puede observar en el programa este parámetro esta ubicado en el wait que se encuentra entre la definición del ciclo útil el cual se observa que esta en 0.8 que es decir 80%, y la definición del ciclo útil en 0%.

Para el manejo de los motores se utiliza el driver DVR8825, que ayuda a simplificar el manejo de los motores paso a paso.este controlador permite manejar los altos voltajes e intensidades que requieren estos motores, limitar la corriente que circula por el motor, y proporcionan las protecciones para evitar que el sistema pueda resultar dañado.

Para evitar daños en las bobinas del motor, es necesario configurar el regulador de voltaje del driver, esto debido a que los motores nema requieren tensiones superiores a las que podrían soportar las bobinas por su corriente nominal. Es decir en este caso se tienen motores nema 17, segun su hoja de especificaciones estos poseen una intensidad nominal de 1.2A y 1.5 Ohm de resistencia por fase. Según la ley de Ohm deberíamos aplicar 1.8V a cada bobina para que circule la intensidad nominal de 1.2A. Sin embargo, con esa tensión el motor ni se movería.

Para el que el motor funcione correctamente necesitamos aplicar una tensión superior. en este caso, la tensión nominal podría ser 12V. Pero si aplicáramos 12V directamente, nuevamente por la ley de Ohm, pasarían 8A por la bobina, pero esto dañaria el motor,

Por este motivo, los controladores incorporan un limitador de intensidad, que permiten alimentar el motor a tensiones nominales superiores a las que es posible por su resistencia e intensidad máxima admisible.

Para regular la intensidad que proporcionara el limitador y ajustarlo al valor del motor que vayamos a emplear ambas placas disponen de un potenciómetro que regula la intensidad del limitador.

Una forma de estimar la intensidad del regulador es medir la tensión (Vref) entre el potenciómetro y GND y aplicar una fórmula que depende del modelo, que encontraréis en la siguiente tabla.

/media/uploads/MarlonQ/im3.png

En este caso se hace uso de la ultima formula, es por eso que se hace la medición y calibración para obtener el valor de tensión correspondiente, en este caso es de 0.6V para poder obtener 1.2A para que los motores funcionen correctamente, aunque el valor obtenido mediante esta medición es sólo una aproximación y puede ser inexacto, por lo que lo emplearemos sólo como una calibración inicial a 0.5V, y terminaremos el ajuste fino midiendo la corriente real que proporciona el controlador al motor mediante un amperímetro.

/media/uploads/MarlonQ/im18.png

Desde el case 5 al case 8 están definidas las acciones conectadas al movimiento del vehículo, es decir la activación de los motores paso a paso para realizar los movimientos hacia adelante, atrás, izquierda y derecha respectivamente, como se puede observar se utiliza una interrupcion para poder ejecutar los movimientos de los motores para no tener complicaciones en el movimiento de estos, es necesario definir una variable global, como en este caso es _Cont que se multiplica por 400 ya que la lectura de los flancos sera por cada subida y bajada de estos, es decir que para nuestro caso 200 es una vuelta pues con la interrupcion seria el doble, por lo que se multiplica por 400, finalizando con el tiempo de la interrupcion que esta dado por la variable Velocity.

Teniendo configurado el driver, para ejecutar los movimientos primarios hacia adelante y atrás, es necesario definir la dirección, para su control únicamente requieren dos salidas digitales, una para indicar el sentido de giro y otra para comunicar que queremos que el motor avance un paso, para esto se hace uso del DIR de cada motor, si el DIR esta en 1 y el DIR2 esta en 0 El movimiento es hacia adelante, ambos motores no pueden tener el DIR en 1 debido a que están en paralelo y esta ubicación hace necesario que cada motor vaya en sentido contrario uno del otro para que el vehículo tenga el movimiento exacto hacia adelante, de ser lo contrario, que el movimiento requerido para el vehículo sea hacia atrás el DIR debe estar en 0 y el DIR2 en 1, en este caso se hace uso de cuatro salidas digitales, dos para cada motor.

/media/uploads/MarlonQ/11111.png

Luego en el for manejado por la variable i es necesario hacer la ejecución de cada paso para cumplir la condición de que 200 pasos sean una vuelta para esto de acuerdo a la imagen anterior, que es tomada del datasheet del controlador DVR8825 que es el utilizado para el control de los motores paso a paso, se debe poner el Step de cada motor en 1, luego se pone un tiempo de espera que en realidad es la frecuencia que separa un paso del otro, esta frecuencia esta controlada por la variable VELOCITY luego se pone los step de nuevo en 0, todo este procedimiento conforma un paso.

En el case 7 y case 8 que son los movimientos de izquierda y derecha respectivamente, se hace solo uso de un motor, es decir que solo se utiliza un DIR y solo se hace uso de un step, el uso de step y step2 varia dependiendo de la ubicación de los motores el procedimiento de giro sera de un giro de 90° por cada vuelta, para esto se caracteriza el motor y se identifica que para un giro de 90° se debe utilizar 50 pasos para el motor correspondiente para cada dirección.

/media/uploads/MarlonQ/i.png

Para el case 9 el telecomando relacionado hace la función de tener la posibilidad de cambiar la velocidad del vehículo, para esto se hace uso de tres opciones, baja, media y alta velocidad, el software tiene por defecto media velocidad, y por medio de un pequeño switch que esta controlado por el comando correspondiente para ese telecomando, y por medio de varios estudios y ensayos se definen los valores para cada velocidad, para modificar esa velocidad se modifica la variable VELOCITY, que es la encargada de controlar la frecuencia entre pasos.

/media/uploads/MarlonQ/c10.png

/media/uploads/MarlonQ/c11.png

/media/uploads/MarlonQ/c12.png

Por ultimo se encuentra el case 10, controlado por el ultimo comando encargado de activar o desactivar el joystick, para esto dentro de este case se encuentra un switch conformado por dos case, el case 1 esta conformado por los movimientos implementados en el vehículo, para realizar estos movimientos, es necesario implementar un conversor análogo digital (ADC), para esto se implementa la instrucción analog_value0.read() y se almacena en las variable Ln[0] y Ln[1] que almacena los valores en el eje Y y X respectivamente. Para los movimientos en el eje Y cuando el ADC marque menos de 0.5 el vehículo se dirige hacia la izquierda, de lo contrario si el dato que entrega el ADC es mayor 0.5 se dirige hacia la derecha. En el eje X si el ADC marca mas de 0.5 el movimiento del vehículo es hacia adelante, si marca menos de este valor el movimiento es hacia atrás. Para ejecutar los movimientos mencionados anterior mente se utiliza la programación utilizada en los case 5 al 8, agregando la instrucción In[0] = analog_value1.read() en cada case, para que se realize la lectura del joystick repetitivamente.

Para desactivar el joystick es necesario mantener en un ciclo infinito para mantener una lectura continua y así no perder conexión con el joystick, desde el momento de que se cumpla la condición del parámetro que en este caso debe ser 01, ingresa a un ciclo infinito manejado por la variable "exit" mientras este dentro de este ciclo, el joystick funcionara continuamente. Si se quiere cambiar el método de manejo del vehículo y volver al sistema de comandos, es necesario salir de este ciclo infinito, para ello, mediante una Instrucción If y con la instrucción command.readable () la cual nos entrega un 1 si en el periférico USART del microcontrolador se encuentra un dato para leer, dicho dato es aquel que se envía por medio de la herramienta Coolterm, dentro de este ciclo if se hace la lectura del dato que esta esta para leer, verificando que cumpla con la primera condición del telecomando FF, hasta que se cumpla esta condición, se hace la lectura del comando y el parámetro, si el comando es 10 y el parámetro es 02, los cuales son los programados para desactivar el joystick, se le asigna 1 a la variable exit para lograr que salga de este ciclo infinito y poder manejar de nuevo el vehículo con los demás telecomandos. Es obligatorio que el comando sea 10 y el parámetro 02 para desactivar el joystick, de ingresar otro valor seguirá funcionando el joystick.

Por ultimo se anexa la tabla de telecomandos para hacer uso de cada instrucción mencionada anteriormente.

/media/uploads/MarlonQ/telecomandos.png

Descripción de las instrucciones:

1) FF0000: Está instrucción ayuda a la activación del sensor de color, después de la activación el sistema procede a realizar la lectura y se espera que los telecomandos que se reciba con la herramienta coolterm sean:

FEx01 Rojo

FEx02 Verde

FEx03 Azul

FEx04 Amarillo

FEX00 Color no found

2) FF01xx a FF04xx: Estas instrucciones activan el buzzer, dependiendo el telecomando selecciona entre cuatro sonidos seleccionados por el programador donde cada tono tiene una frecuencia especificada y la variable xx que sería el parámetro que puede variar entre 00 a c8 (0 - 200) el cual nos indica el tiempo en segundos que debe estar activo el buzzer con el sonido seleccionado

3) FF05xx: Se utiliza en el momento que se quiera manejar los motores integrados al vehículo, está instrucción indica el movimiento hacia adelante, el parámetro xx indican el número de vueltas que debe dar cada motor, este parámetro puede variar entre 00 - c8, (00 - 200)

4) FF06xx: Se utiliza en el momento que se quiera manejar los motores integrados al vehículo, está instrucción indica el movimiento de reversa, el parámetro xx indican el número de vueltas que debe dar cada motor, este parámetro puede variar entre 00 - c8, (00 - 200)

5) FF0700: Se utiliza en el momento que se quiera manejar los motores integrados al vehículo, está instrucción indica el movimiento hacia la izquierda en un giro de 90° (grados). Este telecomando no requiere un parámetro específico por lo cual se agrega por defecto 00.

6) FF0800: Se utiliza en el momento que se quiera manejar los motores integrados al vehículo, está instrucción indica el movimiento hacia la derecha en un giro de 90° (grados). Este telecomando no requiere un parámetro específico por lo cual se agrega por defecto 00.

7 ) FF09xx: En este punto se puede modificar la velocidad a la cual se quiere que trabajen los motores, estos parámetros pueden variar en tres categorias, baja, media o alta velocidad y se puede modificar en la variable xx entre 01 a 03 respectivamente , estas velocidades están programadas por defecto y el valor de cada nivel de velocidad es modificable solo en la programación del sistema.

8) FF0Axx: Esta ultima instrucción ayuda a la selección para el manejo del vehículo de forma manual por medio del joystick la variable xx puede ser modificada por dos parámetros 01 o 02, los cuales activan y desactivan el joystick respectivamente, si no se ingresa este telecomando en la herramienta coolterm en ningún momento funcionara el manejo del vehículo de forma manual.

/media/uploads/MarlonQ/manual_tecnico.pdf


Please log in to post comments.