Sie sind auf Seite 1von 338

Sensores inteligentes y sus aplicaciones

Gua del Estudiante

VERSION 1.0

GARANTA
Parallax garantiza sus productos contra defectos en sus materiales o debidos a la fabricacin por un perodo de 90 das a partir de la recepcin de los mismos. Si usted descubre un defecto, Parallax segn corresponda, reparar, reemplazar o regresar el valor de la compra. Antes de regresar el producto a Parallax, simplemente pida un nmero de autorizacin de regreso de mercanca (Return Merchandise Authorization, RMA), escriba el nmero en el exterior de la caja y envela a Parallax. Por favor incluya su nombre, nmero telefnico, direccin y una descripcin del problema. Parallax le regresar su producto o el reemplazo, usando el mismo mtodo de correo que usted us para enviar el producto a Parallax.

GARANTA DE 14 DAS DE REGRESO DEL DINERO


Si dentro de los 14 das en que usted recibi su producto, encuentra que no es conveniente para sus necesidades, puede regresarlo, recibiendo un reembolso. Parallax regresar el precio de compra del producto, excluyendo los gastos de envo y manejo. Esto no se aplica si el producto ha sido alterado o daado. Consulte la seccin de Garanta arriba acerca de las instrucciones para regresar un producto a Parallax.

DERECHOS DE COPIA Y MARCAS REGISTRADAS


Este documento tiene derechos de copia Copyright 2006 por Parallax, Inc. Al descargar este documento o software por Internet o al obtener una copia dura usted acepta los derechos de copia y se compromete a usar este material solamente con productos comercializados por Parallax, Inc. Cualquier otro uso no est permitido y representa una violacin de los derechos de copia, propiedad intelectual y derechos de autor de Parallax, Inc. y dicha violacin es objeto de las penas que marcan las leyes Federal de derechos de autor y propiedad intelectual. Parallax Inc. expresamente no permite la reproduccin con fines comerciales. Se permite la reproduccin con fines educativos, reproduccin sujeta a las siguientes condiciones: el texto, ya sea en su totalidad o cualquier parte del mismo, no puede ser duplicado para uso comercial; puede ser duplicado solo para fines educativos cuando se use nicamente en conjunto con los productos Parallax y el estudiante abone solo el costo de la duplicacin. Este texto est disponible en formato impreso por Parallax Inc. Dado el tiraje de la impresin del mismo, el precio al consumidor es frecuentemente menor que los costos tpicos por duplicacin. BASIC Stamp, Stamps en Class, Board of Education, Boe-Bot SumoBot, SX-Key y Toddler son marcas registradas de Parallax, Inc. Si usted decide usar cualquiera o cualesquiera de las marcas registradas de Parallax Inc. en sus pginas de Internet o en cualquier material impreso, forzosamente deber agregar la aclaracin: (la marca en cuestin) es una marca registrada de Parallax, Inc. Otros nombres de productos y marcas son marcas registradas de sus respectivos dueos.

ISBN 1-928982-39-5

DESVINCULACIN DE RESPONSABILIDAD
Parallax, Inc. no es responsable de daos por consecuencias, incidentes o daos especiales que resulten de cualquier violacin de la garanta, bajo cualquier teora legal, incluyendo prdida de beneficios, tiempos muertos, buena fe, dao o reemplazo de equipo o propiedad y cualesquiera costos de recuperacin, reprogramacin o de reproduccin de datos guardados o usados dentro de los productos Parallax. Parallax tampoco es responsable de cualquier dao personal, incluyendo vida o muerte, resultado del uso de cualquiera de nuestros productos. Usted tiene absoluta responsabilidad por la aplicacin que desarrolle con el BASIC Stamp, sin importar la naturaleza del riesgo de la misma.

SEGUNDA IMPRESION SITIOS WEB Y LISTAS DE DISCUSIN


Mantenemos foros de discusin activa basados en la red mundial dirigidos a personas interesadas en los productos Parallax. Estos foros o listas de discusin son accesibles desde www.parallax.com: Propeller chip Esta lista es especficamente para clientes que usan los circuitos y productos Propeller. BASIC Stamp esta lista es extensamente utilizada por Ingenieros, aficionados y estudiantes, quienes comparten sus proyectos y preguntas acerca del BASIC Stamp. Stamps en Class Creada para educadores y estudiantes, los suscriptores de esta lista discuten el uso del material de Stamps en Class en sus cursos. La lista prove la oportunidad tanto a estudiantes como a educadores de hacer preguntas y obtener respuestas. Parallax Educators Es un foro exclusivo para educadores y aquellos que contribuyen al desarrollo de Stamps en Class. Parallax creo este grupo con el fin de obtener retroalimentacin en el desarrollo de nuestro currculum y proveer un sitio para que los educadores desarrollen y obtengan Guas para Profesores. Robotics Diseado para los robots Parallax, este foro fue creado para ser un dilogo abierto entre entusiastas de la robtica. Los temas incluyen el ensamble, cdigo fuente, expansiones y actualizaciones de manuales. Los robots Boe-Bot, Toddler, SumoBot, HexCrawler y QuadCrawler son ampliamente discutidos aqu. SX Microcontrollers y SX-Key Discusin de la programacin del microcontrolador SX con herramientas del lenguaje ensamblador Parallax SX Key y compiladores de terceros en lenguajes BASIC y C. Javelin Stamp Discusin de aplicaciones y diseos usando Javelin Stamp, un modulo Parallax que es programado utilizando un subconjunto de comandos del lenguaje de programacin Java de Sun Microsystems.

ERRATA
Si bien se realiza un gran esfuerzo para asegurar la precisin de nuestros textos, an puede haber errores. Continuamente nos esforzamos para mejorar todos nuestros materiales educativos y documentos y frecuentemente revisamos nuestros textos. Ocasionalmente se publica en nuestro sitio www.parallax.com una hoja de fe de errata con una lista de los errores y correcciones conocidos para un texto determinado. Por favor, revise las pginas individuales de los productos para obtener una descarga gratuita de este archivo de fe de errata.

Tabla de Contenido Pgina i

Tabla de Contenido
Prefacio.......................................................................................................................iii
Introduccin y notas del autor........................................................................................ iii Idea general.................................................................................................................... v Antes de comenzar......................................................................................................... v La serie educativa Stamps en class .............................................................................. vi Traducciones ................................................................................................................ vii Colaboradores especiales ............................................................................................ vii

Captulo 1: La Pantalla LCD Serial Parallax.............................................................1


LCDs en Productos.........................................................................................................2 El LCD serial Parallax - Su terminal porttil de depuracin............................................2 Actividad #1: Conexin y prueba de la pantalla LCD .....................................................4 Actividad #2: Despliege de mensajes simples................................................................8 Actividad #3: Aplicacion en un timer.............................................................................17 Actividad #4: Caracteres personalizados y animacin en LCD ....................................19 Actividad #5: Avance de texto traves de la pentalla .....................................................25 Resumen ......................................................................................................................34

Captulo 2: El Sensor Ultrasnico de Distancia Ping)))........................................41


Cmo trabaja el Sensor Ping)))? ................................................................................41 Actividad #1: Medicin del tiempo de eco ....................................................................42 Actividad #2: Mediciones de CentmetroS....................................................................46 Actividad #3: Medicin de pulgadas .............................................................................49 Actividad #4: Mediciones en movimiento......................................................................51 Actividad #5: El efecto de la temperatura en la velocidad del sonido...........................58 Resumen ......................................................................................................................61

Captulo 3: El Acelermetro MEMS de dos ejes....................................................65


EL Acelermetro MX2125 como funciona .................................................................67 Actividad #1: Conexin y prueba de pendiente con el MX2125 ...................................68 Actividad #2: Mediciones en movimiento......................................................................71 Actividad #3: Divisin proporcional y compensacin de los valores de entrada ..........76 Actividad #4: Dividiendo en 1/100 g .............................................................................83 Actividad #5: Medicin de Rotacin Vertical de 360 ...................................................85 Actividad #6: Medicin de la inclinacin respecto a la Horizontal ................................98 Resumen ....................................................................................................................112

Captulo 4: El Mdulo de brjula Hitachi HM55B ................................................119


Interpretacin de las mediciones de la brjula ...........................................................119 Actividad #1: Conexion y prueba del mdulo de brjula.............................................120 Actividad #2: Calibracin del mdulo de brjula.........................................................128

Pgina ii Sensores inteligentes y sus aplicaciones

Actividad #3: Probando la Calibracin........................................................................ 138 Actividad #4: Mejora de las mediciones de la brjula a travs del promedio ............. 143 Actividad #5: Mediciones en movimiento ................................................................... 148 Resumen .................................................................................................................... 159

Captulo 5: Fundamentos de juegos con el Acelermetro ................................ 167


Actividad #1: Desplegado de caracters grficos PBASIC .......................................... 168 Actividad #2: Guardado y refrescado de fondo con la EEPROM ............................... 179 Actividad #3: Inclinando la grfica de burbuja ............................................................ 188 Actividad #4: Control de juego.................................................................................... 196 Resumen .................................................................................................................... 205

Captulo 6: Ms Proyectos con el Acelermetro ................................................ 211


Actividad #1: Medicin de altura de eficios, rboles, Etc. .......................................... 211 Actividad #2: Grabacin y reproduccin..................................................................... 213 Actividad #3: Uso de la EEPROM para cambio de modos......................................... 219 Actividad #4: Registro Remoto de la Aceleracin ...................................................... 223 Actividad #5: Estudio de la aceleracin en un auto de radio control .......................... 230 Actividad #6: Estudio de la aceleracin en un truco con patineta .............................. 240 Actividad #7: Distancia de recorrido de una bicicleta ................................................. 247 Resumen .................................................................................................................... 255

Captulo 7: Graficos de Barra en LCD para Distancias e inclinaciones........... 261


Actividad #1: Intercambio de caracteres personalizados ........................................... 261 Actividad #2: Graficos de Barras Horizontales para Distancia con Ping))) ................ 271 Actividad #3: Grafica de Barra de dos ejes para inclinacin del Acelermetro .......... 281 Resumen .................................................................................................................... 294

Apndice A: Tabla de caracteres ASCII............................................................... 303 Apndice B: Documentacin de la pantalla LCD Serial Parallax ...................... 305 Apndice C: Definiciones de Caracteres Hexadecimales.................................. 317 Apndice D: Listado de Partes ............................................................................. 321 ndice ....................................................................................................................... 323

Prefacio Pgina iii

Prefacio
INTRODUCCIN Y NOTAS DEL AUTOR
La primera vez que v el trmino sensor inteligente fue en el texto Sensores Aplicados de Tracy Allen (entonces conocido como Mediciones Ambientales). De manera adecuada, Tracy aplic este trmino al termmetro digital DS1620, el cual tiene elementos electrnicos interconstrudos que simplifican las mediciones de temperatura del microcontrolador. Adicionalmente, poda recordar la configuracin1 que reciba del microcontrolador y, ms an, funcionar independientemente como un controlador de termostato. En contraste con los sensores inteligentes, los sensores primitivos son dispositivos o materiales que tienen alguna propiedad elctrica que cambia con algn fenmeno fsico. Un ejemplo de un sensor primitivo en Qu es un Microcontrolador? es la fotorresistencia de sulfato de cadmio. Su resistencia cambia con la intensidad de la luz. Con el programa y el circuito adecuados, es posible realizar mediciones de luz con un microcontrolador. Otros ejemplos de sensores primitivos comunes son los sensores de temperatura con salida de corriente/tensin, transductores de micrfonos y an el potencimetro, que es un sensor de posicin rotacional. Dentro de cada sensor inteligente radica uno o ms sensores primitivos y la circuitera de soporte. Lo que hace a un sensor inteligente inteligente es la electrnica interconstruda adicional. Esta electrnica hace que estos sensores sean capaces de hacer una o ms de las siguientes funciones: Pre-procesar los valores medidos en cantidades que posean algn significado. Comunicar las medidas con seales digitales y protocolos de comunicacin. Orquestar las acciones de los sensores primitivos y sus circuitos para tomar mediciones. Tomar decisiones e iniciar alguna accin en base a las condiciones sensadas, de manera independiente al microcontrolador. Recordar la calibracin o la configuracin de sus parmetros.

Durante mi primer encuentro con un sensor inteligente pens: Vaya! Un kit completo de estos sensores con un libro podra ser REALMENTE interesante! En verdad espero
1

En ingles, setting (N. del T)

Pgina iv Sensores inteligentes y sus aplicaciones

que alguien haga un kit y un libro as pronto No tena idea que pronto terminara siendo casi seis aos despus, y que alguien terminara siendo yo. Y si alguno de mis jefes me hubiera dicho entonces que ese kit contendra un acelermetro, un medidor de distancias ultrasnico, una brjula digital y una pantalla o visor LCD2 serial para mediciones en movimiento, quiz la impresin me hubiera deshecho por completo. Puesto que solo recientemente fue posible para nosotros conjuntar un grupo de componentes tan sorprendente en un solo kit, debera decir que la espera vali la pena. En concordancia con el resto de los tutoriales Stamps en Class, este libro es una coleccin de actividades, algunas de las cuales cubren aspectos bsicos, algunas otras cubren otros aspectos ms avanzados, y otras demuestran aplicaciones o arman bloques para varios productos e inventos. La primera mitad del libro presenta al sensor junto con algunas mediciones en movimiento desplegadas en una pantalla LCD. Luego, la segunda mitad del libro tiene una cantidad considerable de aplicaciones para que usted las intente, tales como juegos de video por inclinacin, herramientas de medicin personalizadas y dispositivos de diagnstico para entusiastas del deporte y del bricolaje. El lmite de pginas para este libro delimitado por nuestro empaque es 350 y fue difcil detenerme all. Se pueden encontrar actividades adicionales de sensores inteligentes para el robot Boe-Bot en el foro de Stamps en Class en www.parallax.com. Si bien este libro cubre los fundamentos y demuestra algunas aplicaciones como ejemplos, solamente rasga la superficie de lo que usted puede hacer con estos dispositivos. El propsito principal de este libro es proveer algunos bloques de construccin e ideas para proyectos e inventos futuros. Por ejemplo, despus de completar el captulo 3, nuestro revisor del libro Kris Magri puso su tarjeta de entrenamiento Board of Education con el acelermetro y la LCD sobre el tablero de su auto, y ahora su auto tiene un medidor de aceleracin en planos a un lado de su velocmetro. Con algunas modificaciones al cdigo, se pudo haber cambiado por un sistema de alerta de volcadura en autos de doble traccin. Despus de revisar el dispositivo mecnico de vigilancia para predecir condiciones de avalancha en reas montaosas basado en la inclinacin de la ladera, Ken Gracey desarroll en una noche la versin digital con las mismas partes que tena Kris en su auto. El acelermetro en el tablero del auto y el medidor de riesgo de avalancha son dos ejemplos nicos de las muchas aplicaciones, proyectos e inventos que pueden ser inspirados por el kit de sensores inteligentes y su texto. Nos gustara ver lo que usted
2

Visor o pantalla de cristal lquido; de sus siglas en ingls, Liquid Cristal Display (N. del T.)

Prefacio Pgina v

puede hacer con su kit en el foro de Stamps en Class. No importa si piensa que su proyecto esta en onda, es nico, poco original o lo que sea. Solo tome unos minutos para publicar las cosas que ha hecho con estos sensores inteligentes en http://forums.parallax.com/forums/ Stamps en Class. Asegrese de incluir algunas fotos, una descripcin breve y preferentemente un esquema y el programa PBASIC. Entonces, divirtase con este kit y este libro y nosotros veremos sus inventos en el foro de Stamps en Class.

IDEA GENERAL
El kit de sensores inteligentes contiene cuatro dispositivos que, cuando se usan con BASIC Stamp y la Tarjeta Board of Education o la tarjeta HomeWork Board, pueden ser bloques de construccin para una variedad de inventos y proyectos de estudiantes. He aqu una lista de los dispositivos: Pantalla LCD Serial Parallax 2x16 Buscador de rangos ultrasnico Ping))) Acelermetro de 2 ejes 2125 Mdulo de Brjula Hitachi HM55B

Adems de proveer tanto el equipo como la informacin de cmo se usa este para proyectos estudiantiles, este texto hace 2 nfasis mayores que proveen teora, ejemplos y los clculos requeridos, lo cual puede ser usado para reforzar una variedad de conceptos de medicin, de fsica/ingeniera y de trigonometra. Estos nfasis son: Tcnicas matemticas para escalar los valores de sensores primarios hasta mediciones con significado propio dado que son expresadas en sistemas de unidades comunes. Interpretacin de la proyeccin de los vectores de campos magnticos y de gravedad sobre ejes cartesianos.

ANTES DE COMENZAR
Para ejecutar los experimentos en este texto, necesitar tener su tarjeta Board of Education o bien HomeWork Board conectada a su computadora, el software Editor de BASIC Stamp instalado en su computadora y haber verificado que hay comunicacin enre su computadora y su BASIC Stamp. Para instrucciones detalladas a este respecto, consulte Qu es un Microcontrolador?, disponible como descarga gratuita en

Pgina vi Sensores inteligentes y sus aplicaciones

www.parallax.com. Tambin necesitar las partes contenidas en el kit de partes de Sensores Inteligentes. Consulte el apndice D para una lista completa del sistema, software y requerimientos de hardware.

LA SERIE EDUCATIVA STAMPS EN CLASS


La serie Stamps en Class de textos y kits provee recursos econmicamente alcanzables para la educacin en electrnica e ingeniera. Todos los libros listados estn disponibles para descarga gratuita en www.parallax.com. Las versiones citadas a continuacin se encontraban disponibles en el momento de este tiraje. Por favor, revise nuestros sitios web www.parallax.com o www.stampinclass.com para las ltimas revisiones; continuamente nos esforzamos para mejorar nuestro programa educativo.
Guas del Estudiante Stamps en Class:

Qu es un Microcrontolador? es el nivel recomendado de entrada a la serie educativa Stamps en Class. En vez de ello, algunos estudiantes empiezan con Robtica con el BoeBot, tambin diseado para principiantes. Qu es un Microcontrolador?, Gua del Estudiante, Version 2.2, Parallax Inc., 2004 Robotica con el Boe-Bot, Gua del Estudiante, Version 2.2, Parallax Inc., 2004 Podr entonces continuar con otros tpicos de proyectos educativos, o quiz prefiera explorer nuestros kits Robticos.
Kits de Proyectos Educativos:

Los siguientes textos y kits proven una variedad de actividades que son tiles para aficionados al bricolaje, inventores y diseadores de productos interesados en intentar un amplio espectro de proyectos: Sensores inteligentes y sus aplicaciones, Gua del Estudiante, Version 1.0, Parallax Inc., 2006 Control de Procesos, Gua del Estudiante, Version 1.0, Parallax Inc., 2006 Sensores Aplicados, Gua del Estudiante, Version 1.3, Parallax Inc., 2003 Basicos Analgicos y Digitales, Gua del Estudiante, Version 1.3, Parallax Inc., 2004 Entendiendo las seales, Gua del Estudiante, Version 1.0, Parallax Inc., 2003

Prefacio Pgina vii

Kits Robticos:

Para adquirir experiencia con robtica, considere continuar con las siguientes Guas Del Estudiante Stamps en Class, cada una tiene un kit robot correspondiente: Control remoto IR para el Boe-Bot, Gua del Estudiante, Version 1.1, Parallax Inc., 2004 Robotica Aplicada con el SumoBot, Gua del Estudiante, Version 1.0, Parallax Inc., 2005 Robtica avanzada con el Toddler, Gua del Estudiante, Version 1.2, Parallax Inc., 2003
Referencias

Este libro es una referencia esencial para todas las Guas del Estudiante Stamps en Class. Se presenta con informacin de la serie de modulos microcontroladores BASIC Stamp, nuestro Editor BASIC Stamp y nuestro lenguaje de programacin PBASIC. Manual BASIC Stamp, Version 2.2, Parallax Inc., 2005

TRADUCCIONES
Los textos educativos Parallax pueden ser traducidos a otros idiomas con nuestro permiso (correo electrnico: translations@parallax.com). Si usted planea hacer alguna traduccin por favor contctenos y as podremos proveerle con los documentos MS Word en el formato adecuado, imgenes, etc. Tambin mantenemos un grupo privado de discusin para traductores al cual quiz quiera unirse. Esto asegurar que se le mantiene al corriente con nuestras frecuentes revisiones de texto.

COLABORADORES ESPECIALES
Parallax Inc. quiere dar reconocimiento a sus miembros del equipo de Educacin: al administrador del Proyecto Aristides Alvarez, el Ilustrador Tcnico Rich Allred, Diseadora Grfica Larissa Crittenden, Revisor Tcnico Kris Magri y la Editora Tecnica Stephanie Lindsay. Adicionalmente, gracias a nuestro cliente Steve Nicholson por poner a prueba de usuario la mayoria de nuestras actividades. Como siempre, un agradecimiento especial a Ken Gracey, fundador del programa educativo Stamps en Class de Parallax Inc.

Pgina viii Sensores inteligentes y sus aplicaciones

Cap 1: La pantalla LCD Serial Parallax Pgina 1

Captulo 1: La Pantalla LCD Serial Parallax


El desplegado de informacin que un sensor enva en un formato comprensible tiene muchos usos y, en algunas aplicaciones, es todo lo que importa. El termmetro digital es un ejemplo comn que puede ser encontrado en muchos hogares. Dentro de cada termmetro digital, hay una sonda de temperatura, un microcontrolador y una pantalla de cristal lquido (LCD) para mostrar las mediciones. El microcontrolador BASIC Stamp y la pantalla LCD Serial Parallax mostrados en la Figura 1 1 son 2 de los elementos del termmetro digital. Ese arreglo es excelente para mostrar mediciones en movimiento, haciendo posible desconectar su tarjeta de la PC, depurar esta terminal y probar en campo sus sensores inteligentes.
Figura 1-1: BASIC Stamp, Board of Education, y Pantalla LCD Serial Parallax

Las actividades en este captulo presentan algunos fundamentos de la pantalla LCD Parallax, como conectarla al BASIC Stamp, encenderla y apagarla, colocar su cursor y desplegar texto y dgitos. Los captulos posteriores mostrarn cmo crear y animar caracteres personalizados y mostrar mensajes con movimiento.

Pgina 2 Sensores Inteligentes y sus Aplicaciones

LCDS EN PRODUCTOS
Todos los productos mostrados en la Figura 1-2 tienen pantallas de cristal lquido. Son fciles de leer y los ms pequeos consumo poca energa. Piense cuntos productos que usted posee tienen pantallas de cristal lquido. Al avanzar en las actividades de este texto, piense acerca los proyectos de BASIC Stamp, los prototipos y los inventos que tiene en progreso y cmo una pantalla LCD serial puede mejorarlos o ayudarle a completarlos.
Figura 1-2: Ejemplos de Productos con pantallas LCD De arriba a abajo y de izquierda a derecha: telfono celular, GPS porttil, calculadora, multmetro digital, reloj de oficina, computadora lap-top, osciloscopio, telfono de oficina.

EL LCD SERIAL PARALLAX - SU TERMINAL PORTTIL DE DEPURACIN


Si ha trabajado con otros textos de la serie Stamps en Class, probablemente le es familiar lo valiosa que puede ser la herramienta de Terminal de Depuracin. La Terminal de Depuracin es una ventana que puede usar para que su computadora muestre mensajes

Cap 1: La pantalla LCD Serial Parallax Pgina 3

que recibe del BASIC Stamp. Es especialmente til para mostrar mensajes de diagnstico y valores de variables, haciendo ms fcil aislar los problemas en un programa. Tambin es til para probar circuitos, sensores y ms. La Terminal de Depuracin tiene una desventaja y es la conexin por cable serial. Considere cuantas veces fue inconveniente tener su tarjeta conectada a la computadora para probar un sensor, o para descubrir qu estaba viendo su robot Boe-Bot con sus detectores infrarrojos en la otra habitacin. Estas son situaciones que pueden ser remediadas con la pantalla LCD Serial Parallax mostrada en la Figura 1-3. Una vez que construya un circuito sensor en su tarjeta Board of Education, puede usar una batera y su pantalla LCD Serial parallax para llevar el arreglo tan lejos de su terminal de programacin como usted quiera, mientras que despliega las mediciones de su sensor y otra informacin de diagnstico.

Figura 1-3 LCD Serial Parallax (216)

La pantalla LCD Serial Parallax 216 tiene dos renglones de 16 caracteres cada uno para desplegar mensajes. La pantalla es controlada por mensajes seriales desde el BASIC Stamp. El BASIC Stamp enva estos mensajes desde un solo pin de entrada/salida que est conectado a la entrada serial de la LCD. Hay dos versiones, estndar y con luz de fondo: Version Estndar Con Luz Parte Parallax # 27976 27977

Pantallas LCDs Seriales vs Paralelas La pantalla LCD paralela es probablemente el tipo ms comn de pantallas LCD. Requiere un mnimo de 6 pines de entrada/salida para ser controlada por el BASIC Stamp. Tambin, si no est usando un BASIC Stamp 2p, 2pe o 2px, el cdigo para controlar la pantalla tiende a ser ms complejo que el cdigo para una pantalla LCD serial. La pantalla LCD serial en realidad es una pantalla LCD con un microcontrolador extra. Este microcontrolador extra convierte los mensajes seriales del BASIC Stamp en mensajes paralelos que controlan la pantalla LCD paralela.

Pgina 4 Sensores Inteligentes y sus Aplicaciones

ACTIVIDAD #1: CONEXIN Y PRUEBA DE LA PANTALLA LCD


Adems de las conexiones elctricas y algunos programas PBASIC muy simples para probar la pantalla LCD Serial Parallax, esta actividad presenta el comando SEROUT. Tambin demuestra cmo el comando DEBUG es un caso especial de SEROUT. Esto es especialmente til al trabajar con su pantalla LCD serial porque puede tomar muchos de los argumentos de comando DEBUG y usarlos con el comando SEROUT para controlar y dar formato a la informacin que muestre su pantalla LCD.
Partes Requeridas

(1) Pantalla LCD Serial Parallax 216 (3) Segmentos de cable Adems de la pantalla LCD Serial Parallax y los 3 cables, es especialmente importante que tenga la documentacin de la pantalla (incluida en el Apndice B de este texto). An cuando son unas cuantas pginas, tienen una larga lista de valores que puede enviar a su LCD para hacer que ejecute funciones similares a las que ha usado en la Terminal de Depuracin. Funciones como control de cursor, retorno de carro, retorno, limpiar pantalla, etc., todas tienen sus propios cdigos especiales. Algunos de estos cdigos son idnticos a los de la Terminal de Depuracin; otros son bastante diferentes.
Armando el circuito de la pantalla LCD Serial

La conexin de la pantalla LCD Serial Parallax al BASIC Stamp es sorprendentemente simple, como se muestra en la Figura 1-4. Solo tiene que hacer tres conexiones: una para la alimentacin, otra para tierra y una mas para la seal. El pin RX de la LCD es para la seal y debe ser conectada al pin de entrada/salida del BASIC Stamp. En esta actividad, usaremos el pin P14. El pin de tierra GND de la pantalla debe ser conectado a VSS en la tarjeta Board of Education, y el pin 5 V de la pantalla debe ser conectado a Vdd.
PRECAUCIN: Una conexin errnea puede daar esta pantalla LCD. La Revisin D y los modelos anteriores de esta pantalla LCD tienen 5 pines. Si Ud. tiene un modelo de 5 pines, por favor vea la Figura B-1 en la pgina 306 para verificar cules son los pines correctos a usar en los circuitos de este libro. La versin de 5 pines no es compatible con los modelos Scott Edwards o Matrix Orbital. Si usted ha usado otras marcas de pantallas LCD seriales antes, note que este diagrama de pines es diferente. No cometa el error de usar el mismo alambrado que us para otros modelos.

Cap 1: La pantalla LCD Serial Parallax Pgina 5

Desconecte la alimentacin de energa de su tarjeta Board of Education. Conecte la terminal Vss de la tarjeta Board of Education al pin GND de la LCD. Conecte la terminal P14 de la tarjeta Board of Education al pin RX de la LCD, como se muestra en la Figura 1-4. Conecte la terminal Vdd de la tarjeta Board of Education al pin 5V de la LCD. No conecte la fuente de energa an.

Figura 1-4: Diagramas esquemtico y de conexiones

Pgina 6 Sensores Inteligentes y sus Aplicaciones

Probando la pantalla LCD Serial

La LCD Serial Parallax tiene un modo de auto-prueba que puede usar para asegurarse que esta en condiciones de operar y que el contraste est ajustado adecuadamente. La Figura 1-5 muestra la parte posterior del modulo de la LCD. Los interruptores SW1 y SW2 son para entrar en modo de auto-prueba y para ajustar la velocidad de transmisin baud, el contraste se ajusta con un potencimetro INCREASE CONTRAST.

Figura 1-5 Vista posterior del Mdulo de la pantalla LCD

Su tarjeta Board of Education an debe estar desenergizada. Encuentre los interruptores SW1 y SW2 en la parte baja del mdulo de la pantalla LCD como se muestran en la Figura 1-6 . Coloque SW1 en posicin off. Coloque SW2 en posicin off. Re-energice su tarjeta nuevamente ahora.
Figura 1-6 Configurando los interruptores de velocidad Baud en el modo de auto- prueba

Cuando re-energice, la LCD debe mostrar el texto "Parallax, Inc." en la lnea superior (Lnea 0) y "www.parallax.com" en la lnea inferior (Lnea 1), como se muestra en la Figura 1-3. Si deja la pantalla en este modo por un rato, un carcter personalizado bien conocido por los jugadores de video juegos de los 80s aparecer comindose el texto.

Cap 1: La pantalla LCD Serial Parallax Pgina 7

Si la pantalla parece atenuada o en blanco, puede girar el potencimetro de ajuste de contraste mostrado en la Figura 1-7con un desarmador. Si los caracteres en la pantalla se ven bien, quiz no necesite ajustarlo. Si los caracteres estn muy oscuros o como cuadros grises, el ajuste al potencimetro podra ser de ayuda. Ajuste el potencimetro de contraste si se requiere.

Figura 1-7 Potencimetro de Ajuste de Contraste

Ajustando la pantalla LCD para recibir Mensajes del BASIC Stamp

La comunicacin de datos en serie involucra una velocidad de transmisin baud . Esto es el nmero de bits por segundo (bps) que el emisor transmite y a los que el receptor tiene que estar listo para recibir los datos a la misma velocidad baud. En las actividades de este captulo, el BASIC Stamp ser programado para enviar mensajes a la LCD a 9600 bps. Puede ajustar los mismos interruptores que us para el modo auto-prueba ahora para fijar la velocidad baud. Desenergice la tarjeta Board of Education. Deje el interruptor SW1 en la posicin OFF. Coloque el interruptor SW2 en la posicin ON como se indica en la Figura 1-8. Energice la tarjeta nuevamente ahora.

La pantalla se mantendr en blanco hasta que programe el BASIC Stamp 2 para controlar la pantalla.
Figura 1-8 Velocidad Baud. Interruptores a 9600 bps

Pgina 8 Sensores Inteligentes y sus Aplicaciones

La Figura 1-9 muestra la tabla impresa en la parte posterior de la LCD Serial Parallax. Si quiere enviar mensajes a otras velocidad baud (2400 o 19,200 bps), use esta tabla y ajuste los interruptores SW1 y SW2 segn sea el caso.

Figura 1-9 Configuracin de los interruptores de Velocidad Baud

ACTIVIDAD #2: DESPLIEGE DE MENSAJES SIMPLES


Como se mencion antes, los comandos que envan texto, nmeros y elementos que dan formato y cdigos de control (caracteres de control) a la LCD serial estn relacionados con el comando DEBUG. De hecho, el comando DEBUG es solo una versin especial de un comando ms general llamado SEROUT. El comando SEROUT tiene muchos usos, algunos son enviar mensajes a la LCD serial, a otros mdulos BASIC Stamp y a computadoras. En esta actividad, usted programar el BASIC Stamp para hacer que la LCD despliegue mensajes de texto y valores numricos. Como un primer paso en la animacin, tambin modificar los programas para que el texto y los nmeros parpadeen. El comando SEROUT ser su herramienta para cumplir estas tareas. Usar el comando SEROUT para enviar texto, nmeros, cdigos de control y elementos de formato a la pantalla LCD Serial Parallax. Como pronto ver, el texto, los nmeros y los formateadotes son idnticos a los que usa con el comando DEBUG. Los cdigos de control sern un poco diferentes, pero con un poco de prctica sern tan fciles de usar como CR, CLS, HOME, y CRSRXY. (Si no est familiarizado con CRSRXY, podr aprender ms de l en el captulo 6, Actividad # 1). La versin minima de la sintaxis del comando SEROUT es como sigue:
SEROUT Pin, BaudMode, [ DataItem, {DataItem, ...} ]

En nuestros programas, el argumento Pin tiene que ser 14 puesto que el pin RX (de recepcin de datos) de la pantalla LCD's est conectada a pin de entrada/salida P14 del BASIC Stamp.

Cap 1: La pantalla LCD Serial Parallax Pgina 9

El argumento BaudMode es un valor que le dice al BASIC Stamp qu tan rpido deber enviar los datos en serie y tambin determina algunas de las caractersticas de la seal serial. El programa de ayuda del Editor del BASIC Stamp tiene tablas que dan los valores de BaudMode para velocidades baud y seales comunes. Al consultarlas, resulta que 84 es el valor del argumento de BaudMode para 9600 bits por segundo (bps), palabras de 8 bits, sin paridad, seal verdadera. Esto es exactamente para lo que la LCD Serial Parallax fue diseada para recibir. Los argumentos DataItem pueden ser escritos entre comillas como Hola. Tambin pueden ser caracteres de control como CR, CLS, o valores, con o sin formateadotes como DEC, BIN, y ?. Si se enva con formateadores, ellos son enviados como los caracteres que representan el valor. Si se envan sin formateadores, ellos sern enviados como valores, como 22, 12 y 13. Podemos enviar valores sin formato como estos a la LCD, los cuales sern interpretados como cdigos de control.
Ms acerca SEROUT Si usted desea intentar usar la terminal de Depuracin con SEROUT en vez de DEBUG, primero brala desde la barra de herramientas con Run Debug New. Luego, seleccione Run Identify para ver qu puerto est usando su BASIC Stamp. Entonces, en la Terminal de Depuracin, haga coincidir la designacin del puerto de comunicacin. Note que tambin puede cambiar la velocidad Baud de la Terminal de Depuracin as como otros parmetros de comunicacin. Hay mucho ms que aprender acerca de SEROUT. Tanto el Manual del BASIC Stamp como la Gua de Sintaxis del Editor PBASIC dan explicacin amplia acerca el comando SEROUT. El Manual del BASIC Stamp est disponible como descarga gratis en www.parallax.com Downloads Documentation. Si su Editor de BASIC Stamp soporta PBASIC 2.5, probablemente ya tenga la Gua de Sintaxis de PBASIC. Para accesar, simplemente seleccione el ndice desde el men de ayuda del Editor de BASIC Stamp.

Mensajes de Texto Simples y Cdigos de Control

A diferencia de la Terminal de Depuracin, la LCD serial necesita ser encendida con un comando desde el BASIC Stamp. La pantalla debe recibir el valor 22 desde el BASIC Stamp para activarse. Este es el comando PBASIC para enviarlo a la LCD serial:
SEROUT 14, 84, [22]

Usado as, 22 es un ejemplo de un cdigo de control de la pantalla LCD. Otros cdigos de control bsicos son:

Pgina 10 Sensores Inteligentes y sus Aplicaciones

12 limpia la pantalla. Nota: siempre debe seguir PAUSE 5 para dar tiempo a la

LCD de limpiarse.
13 es un retorno de carro; manda al cursor a la siguiente lnea. 21 apaga la pantalla LCD. 22 enciende la pantalla LCD.
Para encender y apagar la luz de fondo (solo pantallas LCD con Luz de fondo): Algunas pantallas de LCD tienen luz de fondo para poder leerlas cuando est oscuro. Si usted tiene esta versin de LCD Serial Parallax (parte # 27977), puede controlar la luz de fondo con estos valores:

17 para encender la luz de fondo. 18 para apagar la luz de fondo.

En PBASIC, CR es una constante predefinida para el valor 13. Siempre que en el comando DEBUG use la constante CR, enva el valor 13 a la Terminal de Depuracin. La Terminal de Depuracin mueve el cursor al principio de la siguiente lnea siempre que recibe el valor 13. En este caso, los dos comandos a continuacin son equivalentes: SEROUT 14, 84, ["Ve esto?", CR, "La LCD funciona!"] SEROUT 14, 84, ["Ve esto?", 13, "La LCD funciona!"] Si bien funciona para CR, no funciona para otras constantes PBASIC predefinidas. Por ejemplo, CLS, que es una constante predefinida para el nmero 0, no limpia la LCD. El equivalente de CLS de la LCD Serial Parallax es 12. HOME, que es una constante predefinida para el valor 1, no manda el cursor al carcter en casa en la esquina superior izquierda de la LCD. El cdigo de control que lo hace para la LCD Serial Parallax es 128.

Programa Ejemplo - LcdTestMessage.bs2

Introduzca, salve y corra LcdTestMessage.bs2. Verifique que muestre el mensaje "See this?" en la lnea 0 y "The LCD works!" en la lnea 1 (ver Figura 1-10).

' Sensores inteligentes y sus Aplicaciones - LcdTestMessage.bs2 ' Muestra un mensaje de prueba en la LCD Serial Parallax. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Dispositivo Objeto ' Lenguaje = BASIC Stamp 2 = PBASIC 2.5

Cap 1: La pantalla LCD Serial Parallax Pgina 11

SEROUT 14, 84, [22, 12] PAUSE 5 SEROUT 14, 84, ["See this?", 13, "The LCD works!"] END

' Inicializa la LCD

' Mensaje de texto, retorno de carro ' mas texto en la linea 1. ' Fin del Programa

Figura 1-10 Desplegado de texto.

Si la LCD no despliega adecuadamente: Revise su cableado, su programa y los interruptores en la parte posterior de la LCD. Desconecte y reconecte la batera de su tarjeta Board of Education. Vaya a las instrucciones que anteceden al programa y verifique que cada una haya sido completada correctamente.

Su Turno - Cdigos de Control para que el desplegado encienda y apague

Recuerda que 22 enciende la pantalla y que 21 la apaga? Puede usar estos cdigos de control para hacer que el texto parpadee. Reemplace el comando END en LcdTestMessage.bs2 con este bloque de cdigo.
DO PAUSE 600 SEROUT 14, 84, [22] PAUSE 400 SEROUT 14, 84, [21] LOOP ' ' ' ' ' ' Inicia el bloque DO...LOOP Retraso de 6/10 de segundo Enciende la pantalla Retraso de 4/10 de segundo Apaga la pantalla Repite el bloque DO...LOOP

Corra el programa modificado y note el efecto.

Pgina 12 Sensores Inteligentes y sus Aplicaciones

Desplegando Nmeros con Formateadores

Muchos de los formateadores usados para mostrar nmeros con la terminal de Depuracin funcionan con la LCD Serial Parallax. El formateador DEC es probablemente el ms til, pero tambin puede usar DIG, REP, ASC, BIN, HEX, SDEC, y muchos de los otros. Por ejemplo, si quiere desplegar el valor decimal de una variable llamada counter, puede usar comandos como este:
SEROUT 14, 84, [DEC counter]

Programa Ejemplo - LcdTestNumbers.bs2

Adems de demostrar que puede desplegar valores de variables en la LCD serial, este programa tambin muestra qu pasa si el programa manda ms de 16 caracteres a la lnea 0. Los ajusta hacia la lnea 1. Tambin, despus de llenar la lnea 1 con otros 16 caracteres, el texto se vuelve a ajustar hacia la lnea 0. Introduzca, salve y corra LcdTestNumbers.bs2

' Sensores inteligentes y sus Aplicaciones - LcdTestNumbers.bs2 ' Muestra valores numericos con la LCD Serial Parallax. ' {$STAMP BS2} ' {$PBASIC 2.5} counter VAR Byte ' Dispositivo Objeto ' Lenguaje = BASIC Stamp 2 = PBASIC 2.5

' Variable del ciclo FOR...NEXT ' Inicializa la LCD ' Retraso 5 ms para limpiar la pantalla ' Cuenta hasta 12; incrementa cada 1/2 s

SEROUT 14, 84, [22, 12] PAUSE 5 FOR counter = 0 TO 12 SEROUT 14, 84, [DEC counter, " "] PAUSE 500 NEXT END

' Programa end

Verifique que la pantalla se asemeje a la Figura 1-11.

Cap 1: La pantalla LCD Serial Parallax Pgina 13

Figura 1-11 Despliegue de nmeros

Su Turno - Otros Formateadores

Intente reemplazar DEC con DEC2 y observe qu pasa. Repita con el formateador ?. Si es necesario, busque estos comandos en el Manual BASIC Stamp o en la ayuda del Editor BASIC Stamp. Ensyelos tambin en la Terminal de Depuracin. Cules son las similitudes y diferencias entre usar estos formateadores en la Terminal de Depuracin y usarlos en la LCD Serial Parallax?

Cdigos de Control para Posicionar el Cursor

Los cdigos de control de la LCD son diferentes de los caracteres de control del comando DEBUG. Por ejemplo, HOME y CRSRXY simplemente no tienen el mismo efecto que tienen en la Terminal de Depuracin. Sin embargo, hay comandos de cursor para la LCD Serial Parallax que puede usar para controlar las coordenadas X y Y del cursor. Tambin puede enviar el cursor a la posicin superior izquierda o posicin de casa. Revise el conjunto de comandos en la seccin de la documentacin de la LCD al principio de la pgina 312. Enlista todos los comandos de control vlidos para la LCD; a continuacin se indican algunos ejemplos de la lista que controlan la posicin del cursor.

8 9 10 128 to 143 148 to 163

Cursor a la izquierda Cursor a la derecha Cursor abajo (la linea inferior ajustara en la linea superior) Posiciona el cursor en la linea 0, caracteres 0 al 15 Posiciona el cursor en la linea 1, caracteres 0 al 15

Pgina 14 Sensores Inteligentes y sus Aplicaciones

Los valores 128 to 143 y 148 to 163 son particularmente tiles. La Figura 1-12 muestra donde cada valor posiciona al cursor. Puede usar valores de 128 to 143 para colocar al cursor en los caracteres 0 al 15 en la lnea superior de la LCD (lnea 0). De manera semejante, puede usar valores de 148 to 163 para colocar el cursor en los caracteres 0 al 15 de la lnea inferior (lnea 1).

Figura 1-12 Desplegado de Texto

Luego de colocar el cursor, el siguiente caracter que enve a la LCD ser desplegado en esa posicin. Por ejemplo, he aqu un comando SEROUT con un argumento Pace opcional configurado a 200 ms. Este comando mostrar los caracteres "L", "I", "N", "E", "-", y "0", igualmente espaciados a lo ancho de la lnea superior, un caracter cada 200 ms.
SEROUT 14, 84, 200, [128, 131, 134, 137, 140, 143, "L", "I", "N", "E", "-", "0"]

Si se despliegan caracteres mltiples despus de dar una posicin inicial, la LCD an cambiar el cursor a la derecha despus de cada caracter. Por ejemplo, tambin puede colocar el cursor en el caracter 7 de la lnea superior y entonces desplegar "ALL", luego mover el cursor al carcter 6 de la lnea inferior y desplegar "DONE!", as:
SEROUT 14, 84, [135, "ALL", 154, "DONE!"]

Cap 1: La pantalla LCD Serial Parallax Pgina 15

He aqu un bloque de cdigo que har que el texto "Line 1" resbale abajo a la linea inferior, de derecha a izquierda.
FOR index = 9 TO 0 ' IMPORTANTE: Deje un espacio luego del 1 en "Line 1 " SEROUT 14, 84, [148 + index, "Line 1 "] PAUSE 100 NEXT

Borrando Caracteres Siempre puede barrar un caracter colocando el cursor donde lo desee y enviando el caracter de espacio " " para sobreescribir lo que sea que all haya. Es por esto que el texto "Line 1 " tiene un espacio despus del caracter "1", para borrar los caracteres a su derecha conforme se mueve el texto a la izquierda.

Programa Ejemplo - CursorPositions.bs2

Este programa introduce unos trucos bsicos para colocar el cursor. Revise CursorPositions.bs2 y trate de predecir lo que el programa har que haga la LCD. Tambin trate de predecir la secuencia y el tiempo. Introduzca, salve y corra CursorPositions.bs2. Compare el comportamiento de la LCD con sus predicciones.

' Sensores inteligentes y sus Aplicaciones - CursorPositions.bs2 ' Muestra valores numericos con la LCD Serial Parallax. ' {$STAMP BS2} ' {$PBASIC 2.5} index character offset VAR VAR VAR Nib Byte Byte ' Dispositivo Objeto ' Lenguaje = BASIC Stamp 2 = PBASIC 2.5

' Variable del ciclo FOR...NEXT ' Guardado del caracter ' Valor de compensacion ' Inicializa la LCD ' Retraso de 1/2 segundo

SEROUT 14, 84, [22, 12] PAUSE 500

' Muestra caracteres equidistantes en la linea 0 cada 200 ms. SEROUT 14, 84, 200, [128, "L", 131, "I", 134, "N", 137, "E", 140, "-", 143, "1"] PAUSE 1000

Pgina 16 Sensores Inteligentes y sus Aplicaciones

' Cambia "Line 1" sobre la linea 1 de derecha a izq, luego izq a derecha. FOR index = 9 TO 0 ' IMPORTANTE: Asegurese de que haya un espacio luego del 1 en "Line 1 ". SEROUT 14, 84, [148 + index, "Line 1 "] PAUSE 100 NEXT FOR index = 0 TO 9 ' IMPORTANTE: Asegurese de que haya un espacio entre " y la letra L. SEROUT 14, 84, [148 + index, " Line 1"] PAUSE 250 NEXT PAUSE 1000 ' 1 segundo de retraso

' Limpia LCD, luego muestra "ALL DONE" al centro y flashea 5 veces SEROUT 14, 84, [12]: PAUSE 5 ' Limpia la LCD SEROUT 14, 84, [135, "ALL", 13, 154, "DONE!"]' "ALL" y "DONE" centrados FOR index = 1 TO 4 SEROUT 14, 84, 500, [21, 22] NEXT END ' Flashea 5 veces

' Fin del programa

Su Turno - Mas sobre el Posicionado

Desplegados ms elaborados se pueden beneficiar con ciclos y las tablas de valores. He aqu un ejemplo del mensaje "T E S T" en un ciclo y con la ayuda de un par de comandos LOOKUP. Note que usted puede controlar la posicin de cada caracter ajustando los valores de offset en la segunda lista de valores del comando LOOKUP.
PAUSE 1000 SEROUT 14, 84, [12]: PAUSE 5 SEROUT 14, 84, ["This is a", 13] ' Limpia la pantalla ' Texto y CR

FOR index = 0 TO 3 ' secuencia de Caracteres PAUSE 600 LOOKUP index, ["T", "E", "S", "T"], character LOOKUP index, [ 1, 5, 9, 13], offset SEROUT 14, 84, [(148 + offset), character] NEXT

Intntelo!

Cap 1: La pantalla LCD Serial Parallax Pgina 17

ACTIVIDAD #3: APLICACION EN UN TIMER


Esta actividad aplica las tcnicas de la actividad # 2 a un timer de hora-minuto-segundo.
Mostrando el Tiempo Transcurrido

He aqu un bloque de cdigo que enciende la LCD, la limpia y coloca algunos caracteres que no cambiarn. El resto del programa puede entonces desplegar los valores numricos cambiantes de hora, minuto y segundo junto a los caracteres fijos "h", "m" y "s".
SEROUT 14, 84, [22, 12] PAUSE 5 SEROUT 14, 84, ["Time Elapsed...", 13] SEROUT 14, 84, [" h m s"] ' Enciende LCD y limpia ' Pausa 5 ms para limpiar ' Texto + retorno de carro ' Texto en la segunda linea

Para esta aplicacin, los cdigos de control para colocacin del cursor son particularmente tiles. Por ejemplo, el cursor puede ser colocado en la lnea 1, caracter 0 antes de enviar el valor decimal de 2 dgitos de las horas. El cursor puede ser movido a la lnea 1, caracter 5 para desplegar los minutos y luego movido a la lnea 1, caracter 10 para desplegar los segundos. Un comando SEROUT que mustra los valores de las 3 variables, en posiciones correctas:
SEROUT 14, 84, [ 148, DEC2 hours, 153, DEC2 minutes, 158, DEC2 seconds ]

El siguiente programa ejemplo aplica este concepto con tan solo las habilidades de tiempo del modulo BASIC Stamp. La precisin no es por mucho la de un reloj de mueca digital; sin embargo es lo suficientemente Buena para mostrar como el desplegar la hora puede trabajar con el posicionado de caracteres. Para mayor precisin, intente incorporar el circuito integrado de tiempo DS1302. Est disponible en www.parallax.com, solo teclee DS1302 en el campo de bsqueda.
Programa Ejemplo - LcdTimer.bs2

Este programa ejemplo despliega las horas, los minutos y los segundos transcurridos con la LCD Serial Parallax. Apretando el botn de RESET en la tarjeta Board of Education, usted puede reiniciar el timer. Introduza, salvey corra LcdTimer.bs2. Verifique que la pantalla trabaja adecuadamente.

Pgina 18 Sensores Inteligentes y sus Aplicaciones

' Sensores inteligentes y sus Aplicaciones - LcdTimer.bs2 ' Muestra el tiempo transcurrido con BS2 y Parallax Serial LCD. ' {$STAMP BS2} ' {$PBASIC 2.5} hours minutes seconds VAR VAR VAR Byte Byte Byte ' Directiva de Stamp ' Directiva de PBASIC ' Guarda horas ' Guarda minutos ' Guarda segundos ' Inicia LCD y limpia pantalla ' Pausa 5 ms para limpiar ' Texto + retorno de carro ' Texto en segunda linea

SEROUT 14, 84, [22, 12] PAUSE 5 SEROUT 14, 84, ["Time Elapsed...", 13] SEROUT 14, 84, [" h m s"] DO

' Rutina Principal ' Calcula horas, minutos, segundos IF seconds = 60 THEN seconds = 0: minutes = minutes + 1 IF minutes = 60 THEN minutes = 0: hours = hours + 1 IF hours = 24 THEN hours = 0 ' Muestra digitos en LCD en Linea 1. Los valores 148, 153, 158 colocan ' el cursor en los caracteres 0, 5, y 10 para los valores de tiempo. SEROUT 14, 84, [148, DEC2 hours, 153, DEC2 minutes, 158, DEC2 seconds ]

PAUSE 991 seconds = seconds + 1 LOOP

' Pausa + consumo ~ 1 segundo ' Incrementa segundo contador ' Repite Rutina Principal

Su Turno - Definiendo Cdigos de Control con Constantes

Hasta este punto, los cdigos de control de la LCD han tenido valores decimales. Sin embargo, cuando est escribiendo o leyendo un programa largo, memorizar todos estos valores de cdigos de control puede ser tedioso. Es mejor declarar una constante para cada cdigo de control al principio del programa. Luego, usar nombres de constantes en vez de nmeros. Tambin puede hacer lo mismo con el valor de BaudMode y luego tambin agregar una directiva PIN para el pin P14 de entrada/salida. He aqu un ejemplo:
LcdPin T9600 LcdCls LcdCr LcdOff PIN CON CON CON CON 14 84 12 13 21 ' pin de E/S de la LCD ' True, 8-bits, no parity, 9600 ' Form feed -> clear screen ' Retorno de Carro ' Apaga la pantalla

Cap 1: La pantalla LCD Serial Parallax Pgina 19

LcdOn Line0 Line1

CON CON CON

22 128 148

' Enciende la pantalla ' Linea 0, caracter 0 ' Linea 1, caracter 0

Estas declaraciones harn a su cdigo ms fcil de entender, lo cual es especialmente importante si decide hacer cambios a su programa despus de no haberlo visto por varios meses. Por ejemplo, el primer comando SEROUT puede ser re-escrito as:
SEROUT LcdPin, T9600, [LcdOn, LcdCls]

El comando SEROUT en LcdTimer.bs2 que muestra los nmeros en la lnea 1 de la LCD puede ser re-escrito como sigue:
SEROUT LcdPin, T9600, [(Line1 + 0), DEC2 hours, (Line1 + 5), DEC2 minutes, (Line1 + 10), DEC2 seconds]

Salve LcdTimer.bs2 bajo un nuevo nombre. Agregue constantes descriptivas a su programa. Reemplace tantos nmeros como pueda con nombres de constantes significativos. Corra su programa y corrija segn lo requiera.

ACTIVIDAD #4: CARACTERES PERSONALIZADOS Y ANIMACIN EN LCD


Si Bien no toda imagen ahorra mil palabras, an las que ahorra una frase o dos son tiles cuando solo cuenta con 32 espacios de caracteres para trabajar. Un ejemplo de una imagen til es el cursor de reloj de arena que su computadora muestra para hacerle saber que el programa est ocupado. Este simple cono animado trabaja mucho mayor que un mensaje en algn lugar de la pantalla diciendo por favor espere, el programa est ocupado. Esta actividad usa un reloj de arena para introducir tcnicas para definir, guardar, desplegar y animar caracteres personalizados.
Caracteres Personalizados en la LCD Parallax

La LCD Serial Parallax tiene espacio asignado para ocho caracteres mostrados en la Figura 1-13. Para desplegar el carcter personalizado 0, solo mande a la LCD el valor 0 con el comando SEROUT. De igual manera, para mostrar el caracter Personalizado 1, solo mande un 1, para mostrar el caracter Personalizado 2, mande un 2, etc. Note que los Caracteres 0 y 1 estn pre-configurados como la contradiagonal y el tilde. He aqu un ejemplo de comando SEROUT que muestra ambos - SEROUT 14, 84, [0, 1].

Pgina 20 Sensores Inteligentes y sus Aplicaciones

Figura 1-13: Caracteres personalizados predefinidos O (contradiagonal) y 1 (Tilde)

Programa Ejemplo: PredfinedCustomCharacters.bs2

Este ejemplo enva a la LCD serial los dos comandos para desplegar los caracteres personalizados 0 y 1, la contradiagonal "\"y el tilde"~". Introduzca y corra el programa y verifique que muestra la contradiagonal y el tilde.

' Sensores inteligentes y sus Aplicaciones - PredefinedCustomCharacters.bs2 ' {$STAMP BS2} ' {$PBASIC 2.5} SEROUT 14, 84, [22, 12] PAUSE 5 ' Inicializa la LCD ' 5 ms retardo para limpiar

' Muestra caracteres personalizados pre-definidos:"\" (caracter predefinido 0) ' y "~" (caracter predefinido 1). SEROUT 14, 84, [0, 1]

Definiendo (and Redefiniendo) Caracteres Personalizados

Los caracteres personalizados de la LCD Serial Parallax estn guardados en su RAM. Para definir uno de sus ocho caracteres personalizados, su commando SEROUT tiene que decirle a la LCD cul de los 8 caracteres personalizados est definiciendo y entonces describer los estados de encendido/apagado de cada pixel en el caracter. Cada carcter tiene 40 pixeles, 8 pixeles de alto por 5 de ancho. La Figura 6-14 muestra los comandos de Definicin que puede enviar a la LCD para decirle cul es el caracter que est a punto de definir. Tambin lo puede ver as: para decirle a la LCD cul caracter est definiendo, envele el valor del caracter personalizado, ms 248. Por ejemplo, si usted quiere definir el caracter personalizado 0, mande 248, si quiere definir el caracter personalizado 1, mande 249, y as sucesivamente hasta 255 para el caracter personalizado 7.

Cap 1: La pantalla LCD Serial Parallax Pgina 21

Figura 1-14: Comandos de Definicin de Caracteres personalizados

Luego de enviar el cdigo que le dice a la LCD cul caracter personalizado va a definir, debe enviar 8 bytes que describan al caracter. La LCD usa los 5 bits ms bajos de cada byte que recibe para describir cada una de las 8 lneas de 5 pixeles de ancho que hay en el caracter. La Figura 1-15 muestra un ejemplo de la definicin del caracter personalizado 0 para un reloj de arena que acaba de ser volteado.
SEROUT 14, 84, [248, %00000, %11111, %11111, %01110, %00100, %01010, %10001, %11111]

Figura 1-15 Redefiniendo el caracter personalizado 0

Note como cada valor sucesivo en el comando SEROUT corresponde a una lnea de pixeles en el caracter personalizado. Note tambin como los unos corresponde a pixeles negros y los ceros corresponden a blancos.
Las definiciones de caracteres personalizados SEROUT no son permanentes. Cada vez que la LCD es encendida y apagada los caracteres personalizados son borrados. Puesto que BASIC Stamp y la LCD comparten la misma batera, el programa BASIC Stamp tambin reinicia cuando la energa es restituida. Es buena prctica definir los caracteres personalizados que planea usar al principio del programa, de tal forma que BASIC Stamp pueda definir los caracteres personalizados cada vez que la energa se conecte.

Pgina 22 Sensores Inteligentes y sus Aplicaciones

Esta definicin de caracter personalizado de un reloj de arena con sus 4 pixeles de arena abajo usa 255 para decirle al LCD que lo haga para el Caracter personalizado 7. Tambin usa una tcnica para dibujar los caracteres con asteriscos en los comentarios a la derecha del comando SEROUT. Empieza SEROUT con todos los valores binarios colocados en %00000 y entonces dibuja el caracter con asteriscos en el comentario a la derecha. Despus de que se ve bien, usa los asteriscos para indicar cules ceros deben ser cambiados a unos.
SEROUT 14, 84, [255, %00000, %11111, %10001, %01010, %00100, %01110, %11111, %11111] ' ' ' ' ' ' ' ' ' Define Caracter Personalizado 7 * * * * * * * * * * * * * * * * * * * * *

* *

Figura 1-16 muestra como los dos comandos SEROUT recin discutidos redefinen los caracteres personalizados de la LCD.
Figura 1-16: After Defining Caracteres personalizados 0 y 7

Algunas veces los caracteres personalizados se definen con valores hexadecimales. Incluso ver esto en programas ejemplos disponibles como descargas en la pgina del producto LCD Serial Parallax en www.parallax.com. Para informacin de cmo trabaja la definicin hexadecimal de caracteres, intente la actividad en el apndice B.

Con estas nuevas definiciones puede escribir un ciclo para hacer que el reloj de arena cambie de vaco a lleno, indicando que el usuario debe esperar. El siguiente bloque DO...LOOP hace esto primero colocando el cursor en la lnea 0, caracter 5 en la LCD. Luego muestra el caracter personalizado 0, el reloj de arena recin volteado. Despus de una breve PAUSE, el programa enva el comando de espacio atrs (8) para que el cursor regrese al caracter 5. Luego, manda el caracter personalizado 7, el reloj de arena con la arena ya en su base. Repitiendo esta secuencia parece como si el reloj de arena ha sido volteado, drenado, volteado otra vez, drenado nuevamente, etc.

Cap 1: La pantalla LCD Serial Parallax Pgina 23

DO SEROUT 14, 84, SEROUT 14, 84, PAUSE 1250 SEROUT 14, 84, SEROUT 14, 84, PAUSE 1500 LOOP [133] [0] [8] [7] ' ' ' ' ' ' Cursor -> Linea 0, char Muestra Caracter Personalizado 0 Retraso de 1.25 segundos Espacio atras Muestra Caracter Personalizado 7 Retraso de 1.50 segundos

Programa Ejemplo: Hourglass.bs2

Este programa define y muestra los caracteres personalizados del reloj recin discutidos. Introduzca, salve y corra el programa. Verifique que despliega alternadamente los dos caracteres de reloj de arena en el sexto caracter de la lnea superior de la LCD.

' -----[ Titulo ]------------------------------------------------------------' Sensores inteligentes y sus Aplicaciones - Hourglass.bs2 ' Define y muestra caracteres personalizados. ' {$STAMP BS2} ' Dispositivo objeto = BASIC Stamp 2 ' {$PBASIC 2.5} ' Lenguaje = PBASIC 2.5 ' -----[ Inicializacion ]----------------------------------------------------PAUSE 250 SEROUT 14, 84, [248, %00000, %11111, %11111, %01110, %00100, %01010, %10001, %11111] SEROUT 14, 84, [255, %00000, %11111, %10001, %01010, %00100, %01110, %11111, %11111] ' Estabiliza fuente de energia ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' Define Caracter Personalizado 0 * * * * * * * * * * * * * * * * * * * * * * *

Define Caracter Personalizado 7 * * * * * * * * * * * * * * * * * * * * *

* *

Pgina 24 Sensores Inteligentes y sus Aplicaciones

SEROUT 14, 84, [22, 12] PAUSE 5

' Enciende pantalla y limpia ' 5 ms retraso para limpiar

' -----[ Main Rutina ]------------------------------------------------------DO SEROUT 14, 84, SEROUT 14, 84, PAUSE 1250 SEROUT 14, 84, SEROUT 14, 84, PAUSE 1500 LOOP [133] [0] [8] [7] ' ' ' ' ' ' Cursor -> Linea 0, char Muestra Caracter Pers. 0 Retraso de 1.25 seconds Espacio atras Muestra Caracter Pers. 7 Retraso de 1.50 seconds

Su Turno

La Figura 1-17 muestra a los caracteres personalizados describiendo a los granos de arena en el reloj movindose de arriba hacia abajo.
Figura 1-17: Caracteres personalizados para reloj de arena animado

Salve Hourglass.bs2 como HourGlassYourTurn.bs2. Expanda la rutina de Inicializacin de tal forma que defina los ocho caracteres personalizados que se muestran en la Figura 1-17. Modifique la Rutina Principal de tal forma que de un efecto animado de los granos de arena cayendo de arriba a abajo.

He aqu una Rutina principal que puede tambin intentar para animar los ocho caracteres personalizados una vez que los haya dado de alta en la seccin de Inicializacin:
DO ' Coloca el cursor en el caracter 5, y muestra el Caracter personalizado 0. SEROUT 14, 84, 100, [133, 0] PAUSE 750 ' Retraso de 0.750 segundos

Cap 1: La pantalla LCD Serial Parallax Pgina 25

' Espacio atras, Caracter Pers. 1, espacio atrs, Caracter Pers. 2, etc. ' Ritmo opional en el argumento de 100 manda cada valor cada 1/10 segundo. SEROUT 14, 84, 100, [8, 1, 8, 2, 8, 3, 8, 4, 8, 5, 8, 6, 8, 7, 8] PAUSE 750 LOOP

Intntelo!
An cuando la LCD solo guarda 8 caracteres personalizados a la vez, su programa puede guarder tantos como necesite. Recuerde, su programa puede redefinir los caracteres personalizados en cualquier momento. Si su aplicacin necesita 20 caracteres personalizados, su programa PBASIC puede guardarlos y redefinirlos en la LCD segn se requiera. Usted puede desplegar el reloj de arena con un solo caracter personalizado. La animacin del reloj de arena completa puede hacerse con un solo caracter personalizado. El truco est en redefinirlo cada vez que la pantalla es actualizada.

ACTIVIDAD #5: AVANCE DE TEXTO TRAVES DE LA PENTALLA


Si su mensaje es muy ancho para desplegarse en los 16 caracteres de la pantalla, puede ser que funcione hacerlo avanzar a lo largo de la misma. La Figura 1-18 muestra un ejemplo. Con el avance, el texto empieza en la parte de la derecha de la pantalla. Luego, el texto cambia a lo largo de la pantalla una letra a la vez.

Figura 1-18 Text Avanzando

El cdigo para el avance que se presenta en esta actividad es bastante diferente del programa ejemplo en la Actividad #2, el cual hizo que la lnea 1 se moviera a lo ancho de

Pgina 26 Sensores Inteligentes y sus Aplicaciones

la pantalla. La principal diferencia estriba en que en la Actividad # 2 el mensaje se detena en la parte izquierda. Cuando el mensaje es mas largo que la pantalla, el detenerse en la parte izquierda de la pantalla impide hacer visible el resto del mensaje. Para hacer que un texto avance sobre solo una lnea, el programa tiene que empezar con la primera letra en el mensaje y desplegarla en la posicin extrema derecha. Despus de un corto retraso, el programa debe mover el cursor a la segunda posicin (de derecha a izquierda) de caracteres de la pantalla, y all imprimir tanto la primera como la segunda letra. Debe continuar este proceso hasta que el cursor llegue hasta la parte izquierda de la pantalla. Entonces, el cursor debe ser reposicionado repetidamente a la misma posicin en la que porciones de texto de 16 caracteres puedan ser desplegadas, haciendo que el mensaje aparezca con corrimiento de derecha a izquierda, una letra a la vez. La tcnica de programacin para este proceso es llamada de ventana corrediza. Adems de ser de utilidad para la LCD Parallax, esta tcnica es lo que ve cuando sube y baja texto en programas como el Editor de BASIC Stamp o su explorador de Internet. Tambin se usa en programas para transmitir y recibir paquetes TCP/IP. Cada vez que abre su explorador de red, hay ms de una instancia de cdigo de ventana corrediza trabajando.
Una Subrutina de Desplazamiento Configurable

El siguiente programa ejemplo presenta una subrutina que es conveniente para desplegar una variedad de mensajes con desplazamiento con una cantidad mnima de esfuerzo. Todo lo que involucra es poner los mensajes en directivas DATA precedidas por nombres Smbolos, establecer algunas variables y luego llamar la subrutina de desplazamiento. He aqu algunos ejemplos de directivas DATA.
Message1 Message2 Message3 Message4 DATA @ 2, "Message " DATA "again" DATA "Larger message, going faster" DATA

El primer mensaje de texto empieza en una direccin EEPROM igual al valor del smbolo del Message1, el cual ha sido establecido en 2 a travs del argumento opcional @Address de la directiva DATA. La direccin despus del final del Message1 es la direccin EEPROM 11. Esto es denotado por la etiqueta Message2, lo cual es tambin el inicio del Segundo mensaje. Puesto que usted puede establecer variables iguales a los valores de Message1 a Message4, es un sistema especialmente flexible para una variedad de mensajes.

Cap 1: La pantalla LCD Serial Parallax Pgina 27

El siguiente programa ejemplo tambin tiene variables que usted puede establecer para configurar diferentes posiciones de ventana, anchos e incrementos. Despus de establecer estos valores de variables, usted puede entonces hacer una llamada a la subrutina Scroll_Message, y ella har el resto del trabajo. He aqu un ejemplo de un bloque de cdigo que hace que la subrutina despliegue todos los caracteres entre las etiquetas Message1 y Message2 en los cuatro caracteres centrales de la lnea superior de la LCD.
messageStart = Message1: windowLeft = 134: increment = 1 GOSUB Scroll_Message messageEnd = message2 windowRight = 137

Las direcciones EEPROM inicial y final son guardadas en las variables messageStart y messageEnd. Las direcciones de los caracteres de la LCD inicial y final que definen la ventana son guardadas en windowLeft y windowRight. Finalmente pero no por ltimo, la variable increment se establece al nmero de caracteres que el texto mueve cada vez que cambia. Con todos esos valores establecidos, la subrutina Scroll_Message tiene todo lo que necesita para hacer su trabajo. Hay tres ejemplos ms en la rutina principal del siguiente programa. No todos los ejemplos asignan valores a todas las variables. Algunos de los ejemplos solo establecen algunos valores porque son valores que se reciclan y que fueron asignados antes de la previa llamada de subrutina. Por ejemplo, el valor de la variable increment fue establecido en 1 antes de la primera llamada de subrutina. Puesto que la subrutina Scroll_Message no hace cambios a esa variable, el valor 1 no necesita ser reasignado antes de llamar a la subrutina Scroll_Message nuevamente.
' Cambia los valores de varias variables de configuracion ' y demuestra el efecto sobre la pantalla con cada cambio. windowLeft = 131: windowRight = 140 GOSUB Scroll_Message

He aqu el ultimo ejemplo en la Rutina Principal. Note que re is the last ejemplo en the Main Routine. Note que se encarga de buena parte de la segunda linea y avanza dos caracteres a la vez:
messageStart = Message3: windowLeft = 150: increment = 2 GOSUB Scroll_Message messageEnd = message4 windowRight = 161

Pgina 28 Sensores Inteligentes y sus Aplicaciones

Programa Ejemplo - TestScrollingSubroutine.bs2

Revise los bloques de cdigo en la Rutina Principal del programa y prediga qu tan ancha sera la ventana de avance, qu texto sera desplegado y cuntos caracteres cambiar el mensaje a la vez. Introduzca, salve y corra TestScrollingSubroutine.bs2. Compare sus predicciones a lo que realmente ocurrio y reconcilie las diferencias.

' -----[ Titulo ]------------------------------------------------------------' Sensores inteligentes y sus Aplicaciones - TestScrollingSubroutine.bs2 ' Avanza un mensaje de texto a traves de una ventana de 4 caracteres en la LCD ' {$STAMP BS2} ' {$PBASIC 2.5} ' -----[ directivas ' Directiva BASIC Stamp ' Directiva PBASIC DATA]----------------------------------------------------

Message1 DATA @ 2, "Message " Message2 DATA "again" Message3 DATA "Larger message, going faster..." Message4 DATA ' -----[ Definiciones E/S]---------------------------------------------------LcdPin PIN 14 ' Pin de E/S de la LCD

' -----[ Constantes ]--------------------------------------------------------T9600 LcdCls LcdCr LcdOff LcdOn Line0 Line1 TimeOn TimeOff CON CON CON CON CON CON CON CON CON 84 12 13 21 22 128 148 250 0 ' ' ' ' ' ' ' True, 8-bits, no parity, 9600 Form feed -> limpia pantalla Retorno de carro Apaga la pantalla Enciende la pantalla Linea 0, caracter 0 Linea 1, caracter 0

' Caracter de tiempo de encendido ' Caracter de tiempo de atenuac.

' -----[ Variables ]---------------------------------------------------------' Variables funcionales para la subrutina Scroll_Message. cursorStart head tail pointer character VAR VAR VAR VAR VAR Byte Byte Byte Byte Byte ' ' ' ' ' Posicion del primer caracter Inicio del texto desplegado Fin del texto desplegado apuntador de direccion EEPROM Guarda un caracter

Cap 1: La pantalla LCD Serial Parallax Pgina 29

' Variables de configuracion para la subrutina Scroll_Message. increment windowRight windowLeft messageStart messageEnd VAR VAR VAR VAR VAR Nib Byte Byte Byte Byte ' ' ' ' ' ' ' Caracteres por cambiar Direccion del caracter de extrema derecha Direccion del caracter de extrema izquierda Direccion EEPROM para inicio Direccion EEPROM para fin

' -----[ Inicializacion ]----------------------------------------------------SEROUT LcdPin, T9600, [LcdOn, LcdCls] ' Enciende y limpia pantalla PAUSE 5 ' Retraso 5 ms ' -----[ Rutina Principal]---------------------------------------------------' Establece valores de variables de configuracion, luego llama Scroll_Message. messageStart = Message1: windowLeft = 134: increment = 1 GOSUB Scroll_Message messageEnd = message2 windowRight = 137

' Cambia los valores de varias variables de configuracion y demuestra el ' efecto en la pantalla con cada cambio. windowLeft = 131: GOSUB Scroll_Message messageStart = Message1: GOSUB Scroll_Message messageStart = Message3: windowLeft = 150: increment = 2 GOSUB Scroll_Message END ' -----[ Subrutina - Scroll_Message ]---------------------------------------Scroll_Message: cursorStart = windowRight - increment + 1 head = 0 tail = increment - 1 ' ciclo de avance ' Caracter ExtremaDer en ventan ' Inicializa head y tail ' del mensaje windowRight = 140

messageEnd

= message3

messageEnd = message4 windowRight = 161

Pgina 30 Sensores Inteligentes y sus Aplicaciones

DO WHILE tail<(MessageEnd-MessageStart)+(windowRight-windowLeft+increment) SEROUT LcdPin, T9600, [cursorStart] FOR pointer = head TO tail SEROUT LcdPin, T9600, [" "] NEXT PAUSE timeOff SEROUT LcdPin, T9600, [cursorStart] ' Caracter ExtramaDer en ventana ' Limpia caracteres anteriores.

' Permite atenuacion caracteres ' Caracter ExtramaDer en ventana

' Este ciclo FOR...NEXT refresca el mensaje, cambia incrementa caracteres ' a la izquierda todas las veces hasta el fin del mensaje EEPROM. ' Luego, llena la pantalla con caracteres espacios mientras que lo que ' sobra del mensaje sale de la ventana. FOR pointer = head TO tail IF (pointer <= (MessageEnd - MessageStart - 1)) THEN READ pointer + MessageStart, character ELSE character = " " ENDIF SEROUT LcdPin, T9600, [character] NEXT PAUSE timeOn ' Da a caracteres algo de tiempo

' Increment until at window-left cursorStart = cursorStart - increment MIN windowLeft tail = tail + increment ' Incrementa apuntador tail ' Increment head pointer if tail pointer > window width. IF tail > (windowRight - windowLeft) THEN head = head + increment ELSE head = 0 ENDIF ciclo ' Repite ciclo de avance RETURN

La ventana corrediza de la subrutina Scroll_Message

Digamos que la ventana de texto en movimiento es de 4 caracteres de ancho en la lnea superior porque hay otros mensajes que deben ser desplegados todo el tiempo en la LCD. El asunto ahora es recorrer el texto en la ventana pequea sin sobreescribir cualquiera de los caracteres desplegados fuera de ella.

Cap 1: La pantalla LCD Serial Parallax Pgina 31

La Figura 1-19 muestra el arreglo y Paso 0 de una ventana de 4 caracteres. En el paso de configuracin, nada se despliega en la ventana. Luego, el paso 0 coloca el cursor en la posicin 137 y despliega el carcter 0, esto es, la letra "M".
Figura 1-19: Cambiando Texto a travs de la ventana, paso de Configuracin y Paso 0

La Figura 1-20 muestra los pasos 1 y 2. Despus de esperar un momento para que la "M" sea visible, el cursor tiene que ser colocado en la posicin 136 y luego los caracteres 0 y 1, "Me", podrn ser desplegados. Luego, el cursor se mueve a la posicin 135 y desplegar los caracteres 0 al 2, "Mes".

Figura 1-20: Cambiando Texto a travs de la ventana, Pasos 1 y 2

Pgina 32 Sensores Inteligentes y sus Aplicaciones

La Figura 1-21 muestra los Pasos 3 y 4. El cursor movindose a la posicin 134 y desplegando los caracteres 0 al 3, "Mess", describe an la misma secuencia, pero cuando la "M" abandona la ventana, la secuencia tiene que cambiar. El punto de inicio del cursor, o apuntador de inicio, no puede avanzar a la izquierda; debe permanecer en la posicin 134. Tambin, en vez de desplegar los caracteres 0 al 3, los caracteres 1 al 4, "essa", deben ser desplegados.

Figura 1-21: Cambiando Texto a travs de la ventana, Pasos 3 y 4

La posicin de inicio del cursor tiene que mantenerse en 134 mientras que los caracteres de head (punta) y tail (cola) continan avanzado: 2 al 5 - "ssag", 3 al 6 - "sage". La ventana se mantiene corriendo y la Figura 1-22 muestra del penltimo paso de los caracteres 6 al 9 - "e" seguida por tres espacios, y finalmen te el ltimo paso, 7 al 10 cuatro caracteres de espacio.

Figura 1-22: Cambiando Texto a travs de la ventana, Pasos 9 y 10

Cap 1: La pantalla LCD Serial Parallax Pgina 33

TestScrollingSubroutine.bs2 usa las variables mostradas en la Figura 1-23 para la ventana corrediza. La variable cursorStart guarda la posicin en la que el cursor es colocado cada momento antes de que empiece a escribir las letras en el mensaje. En la figura, cursorStart guarda el valor 135. La siguiente vez que el texto cambia a la izquierda, guardar 134. Dos variables, head y tail, guardan las direcciones de principio y fin del texto que entrarn en la ventana de mensaje. En la figura, head guarda 0, y tail guarda 2. La variable pointer se usar por el comando READ para obtener la letra adecuada, y la variable character guardar la letra que el comando READ recupere de la EEPROM.
Figura 1-23: Variables de TestScrollingRoutine.bs2.

En la Figura 1-23, pointer est apuntando a la letra 1 en la secuencia, que es "e". Un ciclo FOR...NEXT usa la variable pointer para leer cada caracter en la EEPROM, desde head hasta tail y entonces despliega cada uno con el comando SEROUT. Cada vez que el texto cambie a la derecha, el nuevo texto debe sobreescribir el texto anterior con el mismo ciclo head hasta tail.

Pgina 34 Sensores Inteligentes y sus Aplicaciones

RESUMEN
La pantalla de cristal lquido (LCD) es usada en una tremenda variedad de productos. Una pantalla de caracteres simple como la LCD serial Parallax 2X16 puede substituir las caractersticas de la Terminal de Depuracin, lo cual es especialmente util cuando la prueba en campo de su proyecto no est dentro del alcance de un cable serial y una PC. La LCD Serial Parallax tiene un potencimetro de ajuste de contraste atrs, junto con dos interruptores que puede usar para seleccionar de entre 3 diferentes velocidades baud y un modo de auto-prueba. Hay 3 pins en la parte posterior de la LCD Serial Parallax, ya que se requieren solo 3 conexiones para operarla: Vdd, RX, y Vss. La LCD Serial Parallax tiene un conjunto extensor de commandos y una lista completa de estos commandos se incluye en la Documentacin del Producto LCD Serial Parallax (Apndice B). Este captulo presenta comandos para encender y apagar la pantalla, limpiarla, colocar el cursor, controlar el encendido de la luz de fondo para el modelo con luz de fondo y para desplegar caracteres. La LCD Serial Parallax depende de mensajes seriales emitidos desde BASIC Stamp y que son programados dentro de ella a travs del comando SEROUT de PBASIC. Muchas de las caractersticas del comando DEBUG pueden ser usadas con el commando SEROUT, incluyendo texto entre comillas y formateadotes como DEC, BIN, DIG, etc. Todos estos tienen resultados en la LCD que son similares a los de la Terminal de Depuracin. Los cdigos de control de la LCD son diferentes y ms numerosos que los que se usan con la Terminal de Depuracin. En vez de intentar usar CR, CLS, CRSRXY, etc, use los valores de cdigos de control listados en el conjunto de commandos de la LCD. Tambin es buena idea hacer constanes para estos valores, tales como LcdCls CON 12, LcdClr CON 13, LcdOn CON 22, LcdOff CON 21, y as sucesivamente. La LCD Serial Parallax tiene 8 caracteres personalizados, del 0 al 7. Usted puede desplegar cualquiera de ellos al enviar su valor a la LCD. Por ejemplo, SEROUT 14, 84, [3] hace que la LCD escriba el Caracter personalizado 3. Los comandos para definir los caracteres personalizados van del 248 al 255. Enviar un 248 instruye a la LCD para definir el carcter personalizado 0, 249 define el Caracter Personalizado 1, etc., hasta el 255, lo cual define el Caracter personalizado 7. Despus de enviar un comando para definir un caracter personalizado, los siguientes 8 bytes son valores binarios, cuyos 5 bits

Cap 1: La pantalla LCD Serial Parallax Pgina 35

mas bajos definen los pixeles en una determinada lnea de pixeles. Un 1 hace al pxel negro, un 0 lo hace blanco. Este captulo tambin presenta una subrutina para que avance texto de derecha a izquierda dentro de una ventana. Esta subrutina busca direcciones de inicio y paro que corresponden a etiquetas de direcciones Smbolo que preceden a directivas DATA que contienen el texto a ser desplegado. La manera en que se despliega el texto de la subrutina esta definido por 5 variables: messageStart, messageEnd, windowLeft, windowRight, e increment. Las variables messageStart y messageEnd guardan las direcciones EEPROM de inicio y fin del texto a ser desplegado. Las variables windowLeft y windowRight guardan las direcciones de caracteres en la LCD de inicio y fin que definen la ventana, la variable increment guarda cuntos caracteres a la vez se cambian de derecha a izquierda.
Preguntas

1. Mencione 3 dispositivos que usa todos los das que despliegan informacin con la LCD. 2. Qu significan el 2 y el 16 en el trmino 2x16 LCD? 3. Qu comando usa para enviar informacin a la LCD Serial Parallax? 4. De qu manera son diferentes los comandos DEBUG y SEROUT? 5. En qu posicin deben estar los interruptores SW1 y SW2 si necesita escribir un programa que enve un mensaje a la LCD Serial Parallax a una velocidad de 19,200 bps? 6. Qu componente ajusta para cambiar el contraste de la pantalla LCD? 7. Qu comando SEROUT limpia la pantalla? 8. Qu consideraciones especiales hay que tomar en cuenta al usar los cdigos de control CR, CLS, y HOME del comando DEBUG con la LCD Serial Parallax? 9. Cules son los 3 argumentos que necesita para un comando SEROUT mnimo? 10. Cmo puede hacer que un texto desplegado en la LCD se encienda y apague intermitentemente? 11. Qu rangos de valores puede enviar a la LCD para colocar el cursor? 12. Qu carcter reside en el carcter personalizado 1 por definicin? 13. Cmo despliega un caracter personalizado despus de que ha sido definido? 14. Cules son algunas aplicaciones de la ventana corrediza?

Pgina 36 Sensores Inteligentes y sus Aplicaciones

Ejercicios

1. Haga que el mensaje "Hola" aparezca en la terminal de Depuracin sin usar el comando DEBUG. 2. Despliegue el mensaje "Hola" centrado en la lnea superior de la LCD. 3. Haga que el mensaje "Hola" encienda y apague alternadamente cada segundo. 4. Escriba un comando para hacer que el mensaje "Inicio" aparezca al principio de la lnea 0 y el mensaje "Final" aparezca en el lado derecho de la lnea 1. 5. Escriba un comando SEROUT para enviar mensajes a la LCD cuando SW1 y SW2 estn ambos encendidos. 6. Escriba un comando SEROUT para enviar un mensaje a la LCD cuando SW1 est encendido y SW2 est apagado.
Proyectos

1. Escriba un programa que despliegue un mensaje de 6 lneas. Empieza desplegando las lneas 0 y 1 con una pausa. Luego avanza a las lneas 2 y 3, nuevamente con una pausa. Finalmente, despliega las lneas 4 y 5. 2. Escriba un programa que imprima 3 copias de un carcter personalizado. Luego, redefina el caracter personalizado. Qu pasa con las 3 copias de este caracter?

Cap 1: La pantalla LCD Serial Parallax Pgina 37

Soluciones

Q1. Q2. Q3. Q4.

Reloj de pulsera, calculadora, telfono (las respuestas pueden variar). Dos lneas de texto, cada una con 16 caracteres de ancho. El comando SEROUT. Cuando use el comando SEROUT debe especificar el nmero de pin y la velocidad baud. Q5. Ambos SW1 y SW2 deben estar en la posicin de encendido para 19,200 bps. Q6. Un potencimetro. Q7. El comando SEROUT 14, 84, [12] limpiar la pantalla. Q8. Las constantes PBASIC pre-definidas como CR, CLS, y HOME no estn necesariamente definidas correctamente para trabajar con la LCD serial. Q9. SEROUT requiere los argumentos Pin, Baudmode, y DataItem. Q10. Escriba el texto, luego apague y encienda la pantalla usando los caracteres de control 21 y 22. Q11. De 128 a 143 para la lnea 0 y 148-163 para la lnea 1. Q12. La contradiagonal. Q13. Enve a la LCD el valor del caracter personalizado con el comando SEROUT. Por ejemplo, SEROUT 14, 84, [4] desplegar el caracter personalizado 4. Q14. Las pantallas LCD, an las grandes que hay en estaciones de tren, terminales de aeropuertos o en eventos deportivos, asi como texto desplazndose en aplicaciones de Windows y paquetes TCP/IP.

E1. Del archivo de ayuda del Editor de BASIC Stamp: Para el Puerto serial interconstruido establezca el argumento Tpin a 16 en el comando SEROUT.
' Sensores Inteligentes y sus Aplicaciones - Ch1_Ex01.bs2 ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Hola, esto es DEBUG", CR SEROUT 16, 84, ["Hola Esto es SEROUT", CR]

E2. Ejemplo de solucin:


' Sensores Inteligentes y sus Aplicaciones - Ch1_Ex02.bs2 ' {$STAMP BS2} ' {$PBASIC 2.5} SEROUT 14, 84, [22, 12] ' 1234567890123456 SEROUT 14, 84, [" Hello ", CR] ' Enciende y limpia pantalla ' Centra texto en linea sup.

Pgina 38 Sensores Inteligentes y sus Aplicaciones

E3. Ejemplo de solucin:


' ' ' ' Sensores Inteligentes y sus Aplicaciones - Ch1_Ex03.bs2 Hcer que un mensaje encienda y apague una vez por segundo {$STAMP BS2} {$PBASIC 2.5} ' Enciende y limpia pantalla ' Centra texto en linea sup.

SEROUT 14, 84, [22, 12] ' 1234567890123456 SEROUT 14, 84, [" Hello ", CR] DO SEROUT 14, 84, [21] PAUSE 500 SEROUT 14, 84, [22] PAUSE 500 LOOP

' Apaga pantalla ' Enciende pantalla

E4. Ejemplo de solucin:


' ' ' ' Sensores Inteligentes y sus Aplicaciones - Ch1_Ex04.bs2 Escribe Inicio empezando la Linea1, Final al final de la Linea2 {$STAMP BS2} {$PBASIC 2.5} 14, 14, 14, 14, 84, 84, 84, 84, [22, 12] ["Inicio"] [158] ["Final"] ' ' ' ' Enciende y Escribe en Linea2, 6o Escribe en limpia pantalla Linea 0 caracter de der. a izq. extremo der de la Linea 1

SEROUT SEROUT SEROUT SEROUT

E5. Ejemplo de solucin:


' ' ' ' Sensores Inteligentes y sus Aplicaciones - Ch1_Ex05.bs2 Escribe a 19200 baud {$STAMP BS2} {$PBASIC 2.5} ' Enciende y limpia pantalla ' Escribe en Linea 0

SEROUT 14, 32, [22, 12] SEROUT 14, 32, ["Using 19200 bps"]

E6. Ejemplo de solucin:


' ' ' ' Sensores Inteligentes y sus Aplicaciones - Ch1_Ex06.bs2 Escribe a 2400 baud {$STAMP BS2} {$PBASIC 2.5} ' Enciende y limpia pantalla ' Escribe en Linea 0

SEROUT 14, 396, [22, 12] SEROUT 14, 396, ["Using 2400 bps"]

Cap 1: La pantalla LCD Serial Parallax Pgina 39

P1. Ejemplo de solucin:


' ' ' ' Sensores Inteligentes y sus Aplicaciones - Ch1_Project1.bs2 Despliega un mensaje de 6 lineas {$STAMP BS2} {$PBASIC 2.5} PIN CON 14 84

LcdPin T9600

PAUSE 250 SEROUT 14, 84, [22, 12] PAUSE 5 SEROUT LcdPin, SEROUT LcdPin, PAUSE 1500 SEROUT LcdPin, SEROUT LcdPin, PAUSE 1500 SEROUT LcdPin, SEROUT LcdPin, END T9600, ["Nunca deje que T9600, ["mi escuela T9600, ["obstruyera T9600, ["mi educacion. T9600, [" T9600, ["

' Enciende y limpia pantalla ' 5 ms retraso para limpiar "] "] "] "]

-Mark Twain"] 1835-1910 "]

P2. Las 3 copias cambiarn al nuevo caracter definido! continuacin, un programa muestra.
' ' ' '

Es como magia. A

Sensores Inteligentes y sus Aplicaciones - Ch1_Project2.bs2 Escribe 3 copias de carcter predefinido, luego redefine caracter. {$STAMP BS2} ' Dispositivo objeto = BASIC Stamp 2 {$PBASIC 2.5} ' Lenguaje = PBASIC 2.5 CON CON VAR 128 148 Nib

Line0 Line1 copies

PAUSE 250 SEROUT 14, 84, [22, 12] PAUSE 5

' Enciende y limpia pantalla ' 5 ms retraso para limpiar

SEROUT 14, 84, [248, %00110, %00101, %00100, %11111, %00100, %01110, %10101, %00100]

' Define Caracter Pers. 0 ' * * ' * * ' * ' * * * * * ' * ' * * * ' * * * ' *

Pgina 40 Sensores Inteligentes y sus Aplicaciones

FOR copies = 1 TO 3 SEROUT 14, 84, [0] NEXT

' Despliega Caracter Pers. 0

PAUSE 1000 ' Permite tiempo para verlo SEROUT 14, 84, [Line1, "now re-defining"]' Despliega mensaje en Linea 1 PAUSE 1000 SEROUT 14, 84, [Line1, " "]' Limpia mensaje SEROUT 14, 84, [248, %00100, %10011, %01001, %00101, %00001, %00010, %00100, %11000] END ' Re-define Caracter Pers. 0 ' * ' * * * ' * * ' * * ' * ' * ' * ' * *

Captulo 2: Inclinacin con el Acelermetro Memsic Page 41

Captulo 2: El Sensor Ultrasnico de Distancia Ping)))


El sensor Ping))) interactuando con un BASIC Stamp puede medir qu tan lejos estn los objetos. Con un rango de 3 centmetros a 3.3 metros, es una atraccin para cualquier cantidad de elementos robticos y proyectos de automatizacin. Es notablemente preciso y fcilmente detecta la distancia de un objeto al centmetro.

Figura 2-1 The Sensor Ultrasonico de Distancia Ping)))

CMO TRABAJA EL SENSOR PING)))?


El sensor Ping))) enva un breve silbido con su altavoz ultrasnico y mide el tiempo de regreso del eco a su micrfono ultrasnico (Figura 2-2). El BASIC Stamp empieza enviandole un pulso para iniciar la medicin. Luego, el sensor Ping))) espera lo suficiente para que el programa del BASIC Stamp inicie un comando PULSIN. Entonces, al mismo tiempo que silba un tono de 40 kHz, le enva una seal alta al BASIC Stamp. Cuando detecta el eco con su micrfono ultrasnico, cambia la seal alta de regreso a seal baja.
Figura 2-2: Como trabaja el sensor the Ping)))

Pgina 42 Sensores Inteligentes y sus Aplicaciones

El comando PULSIN del BASIC Stamp usa una variable para guardar cuanto dur la seal alta del sensor Ping))). El tiempo de esta medicin es lo que le tom al sonido viajar al objeto de ida y vuelta. Usando esta medicin y el dato de la velocidad del sonido en el aire, usted puede hacer que su programa calcule la distancia al objeto en centmetrosa, pulgadas, pies, etc.
El silbido del sensor Ping))) no es audible porque 40 kHz es una frecuencia ultrasnica. Lo que consideramos sonido es la habilidad de nuestro odo interno para detectar las variaciones de la presin del aire causada por una vibracin. El nivel de estas variaciones determina el timbre del tono. Tonos de alta frecuencia resultan en sonidos de mayor timbre y tonos de baja frecuencia resultan en tonos de menor timbre. La mayora de las personas pueden or tonos que van desde los 20 Hz, el cual es un timbre muy bajo, a 20 kHz, el cual es un timbre muy agudo. Un sonido subsnico es aquel con frecuencias menores a 20 Hz, y un sonido ultrasnico es aquel con frecuencias por arriba de 20 kHz. Puesto que los silbidos del sensor Ping))) son a 40 kHz, definitivamente son ultrasnicos y no audibles.

ACTIVIDAD #1: MEDICIN DEL TIEMPO DE ECO


En esta actividad, probar el sensor Ping))) y verificar que le entrega mediciones del tiempo de eco que corresponden a la distancia de un objeto.
Partes Requeridas

(1) Sensor Ultrasonico de Distancia Ping))) (3) Cables conectores Todo lo que necesita es un sensor Ping))) y 3 cables para hacerlo trabajar. El sensor Ping))) tiene protection interconstruida contra errores de programacin (y errors de cableado), por lo que no necesita usar ninguna resistencia de 220 entre P15 y la terminal SIG del sensor Ping))).

El Circuito Sensor Ping)))

La Figura 2-3 muestra un diagrama esquemtico y de conexiones para probar el sensor Ping))). Construya el circuito.

Captulo 2: Inclinacin con el Acelermetro Memsic Page 43

Figura 2-3: Diagrama esquemtico y de conexiones del Sensor Ping)))

Probando el Sensor Ping)))

Como se mencion antes, el sensor Ping))) necesita un pulso de inicio del BASIC Stamp para iniciar sus mediciones. Un pulso en P15 de 10 s (PULSOUT 15, 5) es fcilmente detectado por el sensor Ping))), y toma solo una pequea cantidad de tiempo para que el BASIC Stamp lo mande. Un comando PULSIN que guarda la duracin del pulso de eco del sensor Ping))) (PULSIN 15, 1, time) tiene que venir inmediatamente despus del comando PULSOUT. En este ejemplo, el comando PULSIN guarda en la variable tiempo el tiempo de viaje redondo para que el silbido del sensor Ping))) llegue al objeto, se refleje y regrese.
Programa Ejemplo - PingTest.bs2

Puede probar este programa midiendo distancias de algunos objetos cercanos. Para mediciones cercanas, el sensor Ping))) solo necesita estar de 3 a 4 pulgadas (aprox. de 8 a 10 cm) por encima de la superficie de trabajo. Sin embargo, si est midiendo objetos que estn a mas de medio metro de distancia, podra necesitar elevar su sensor Ping))) para prevenir ecos del suelo como si fueran objetos detectados. Coloque su tarjeta Board of Education con el circuito del sensor Ping))) sobre algo que la mantenga al menos 8 cm por encima de la superficie de la mesa. Coloque un objeto (como una botella de agua, una caja o una hoja de papel) a 15 cm del frente del sensor Ping))). Introduzca, salve y corra PingTest.bs2. La Terminal de Depuracin debe estar reportando un valor entre 400 y 500.

Pgina 44 Sensores Inteligentes y sus Aplicaciones

Mueva el objetivo a una distancia de 30 cm del sensor Ping))) y verifique que el valor de la variable de tiempo aproximadamente se duplic. Apunte su sensor Ping))) a una variedad de objetos cercanos y lejanos y observe las mediciones de tiempo.

' Sensores inteligentes y sus Aplicaciones - PingTest.bs2 ' Prueba el sensor ultrasonico de distance Ping))) ' {$STAMP BS2} ' {$PBASIC 2.5} time VAR Word DO PULSOUT 15, 5 PULSIN 15, 1, time DEBUG HOME, "time = ", DEC5 time PAUSE 100 LOOP

Su Turno Probando el rango, Angulo y tamao del objeto

En trminos de precisin y utilidad en general, la deteccin ultrasnica de distancia es grandiosa, especialmente comparada a otros sistemas de deteccin de distancia de bajo costo. Esto no significa que el sensor Ping))) es capaz de medir "todo". La Figura 2-4 muestra algunas situaciones para las que el Ping))) no est diseado para medir: (a) distancias mayores a 3 metros, (b) ngulos muy cerrados, y (c) objetos muy pequeos.
Figura 2-4: El Sensor Ping))) no esta diseado para estas situaciones: a. b. c.

Captulo 2: Inclinacin con el Acelermetro Memsic Page 45

Adicionalmente, como descubri Ken Gracey de Parallax Inc. durante una demostracin en la escuela de su hijo, algunos objetos con superficies suaves e irregulares (como animalitos de peluche) en vez de reflejar absorbern el sonido y por lo tanto puede ser difcil la deteccin para el sensor Ping))). Los objetos con superficies lisas que fcilmente reflejan el sonido facilitan la deteccin del sensor. Intente apuntar el sensor Ping))) a varios objetos a diferentes distancias. Cul es el valor ms grande que regresa el sensor Ping)))? Qu tanto debe acercar el objeto antes de que las mediciones empiecen a reducir su valor? Intente colocar el sensor Ping))) a un metro de distancia y apuntando a la pared y register la medicin. Luego, intente apuntar el sensor Ping))) a la pared con diferentes angulos, como se muestra en la Figura 2-5. Cambian los valores? A que ngulo deja de detector la pared el sensor Ping)))?

Figura 2-5 Determinando el Angulo Mnimo de Deteccin

Intente colgar varios objetos del techo a 1.5 metros de distancia del sensor Ping))). Qu tan pequeos pueden ser los objetos? Afecta la forma o el ngulo? Cambia la afectacin por el tamao del objeto a medio metro de distancia? Intente detectar objetos de tamao similar pero hechos de diferentes materiales, como una caja de zapatos de carton o una pantufla suave para ver si tiene un rango efectivo de deteccin ms corto con objetos que absorben el sonido. Puede encontrar algn objeto invisible para el sensor Ping))), como un cmulo de algodn?

Pgina 46 Sensores Inteligentes y sus Aplicaciones

ACTIVIDAD #2: MEDICIONES DE CENTMETROS


Esta actividad demuestra como usar la velocidad del sonido y el operador de alto nivel multiplicacin de PBASIC ( ** ) para calcular la distancia a un objeto basada en la medicin de tiempo de eco del sensor Ping))).
Calculando Distancias en centmetros con PBASIC

La ecuacin para la distancia que el sonido viaja es S = Cair t, where S es la distancia, Cair es la velocidad del sonido en el aire y t es el tiempo. Puesto que la medicin del tiempo del sensor Ping))) es el tiempo que le toma al sonido en alcanzar al objeto y regresar, la distancia real al objeto Sobject es la mitad de la distancia total que viaja el sonido.
S = Cair t Sobject = S Cair t = 2 2

La velocidad del sonido en el aire est comunmente documentada en metros por segundo (m/s). Sin embargo, ser ms conveniente calcular mediciones de centmetros (cm) con el BASIC Stamp. Puesto que hay 100 centmetros en un metro, usemos el trmino Sobjectcm lo cual es simplemente 100 veces Sobject. Las unidades de medicin para el valor Duration de PULSIN en el BASIC Stamp 2 son 2/1,000,000 de segundo (2 s). Entonces, en vez de t, el cual tiene que ser una medida en segundos, usaremos tPULSIN-BS2. Cuando se multiplica por 2/1,000,000 tPULSIN-BS2 nos da el nmero de segundos. Hay entonces un par de nmeros 2, uno en el numerador y otro en el denominador, que se cancelan, y el 100 en el numerador cancelan un par de ceros en el denominador 1,000,000. El resultado de estas sustituciones y cancelaciones es Sobject-cm = (Cair tPULSINBS2)/10,000.
Sobject-cm =
Sobject-cm =

100 Cair t 2
100 Cair tPULSIN-BS2 2 2 1,000,000 Cair tPULSIN-BS2 10,000

Sobject-cm =

Captulo 2: Inclinacin con el Acelermetro Memsic Page 47

La velocidad del sonido en el aire a temperatura ambiente de 72 F (22.2 C) es 344.8 m/s. Dividiendo esto entre 10,000 queda Sobject-cm = 0.03448 tPULSIN-BS2.
Sobject-cm = 344.8 tPULSIN-BS2 10,000

= 0.03448 tPULSIN-BS2

El BASIC Stamp puede usar el operador ** para multiplicar una variable que guarde la medicin Duration del comando PULSIN por un valor fraccional menor que 1. Por ejemplo, si el comando PULSIN guarda la medicin del tiempo de eco en la variable time, este comando guardar la distancia en centmetros resultante en la variable cmDistance as:
cmDistance = CmConstant ** time

Con el operador **, CmConstant tendr que ser 2260, el cual es el equivalente ** de 0.03448. En vez de un denominador decimal, como 10,000 (en el caso de 0.03448), el operador ** necesita un valor que vaya en el numerador de una fraccin con denominador 65536. Para obtener dicho numerador, multiplique su valor fraccional por 65536.
CmConstant = 0.03448 65536 = 2260

Ahora ya tenemos el valor que necesitamos para modificar PingTest.bs2 y as medir distancias en centmetros. Tambin agregaremos una variable para guardar la distancia (cmDistance) junto con la constante para guardar el valor 2260 (CmConstant).
CmConstant cmDistance CON VAR 2260 Word

Entonces, el clculo ** puede ser agregado al DO...LOOP de PingText.bs2 para calcular la medicin de centmetros. El comando DEBUG en el programa puede ser modificado para mostrar la medicin.
cmDistance = CmConstant ** time DEBUG HOME, DEC3 cmDistance, " cm"

Pgina 48 Sensores Inteligentes y sus Aplicaciones

Programa Ejemplo: PingMeasureCm.bs2

Introduzca, salve y corra PingMeasureCm.bs2. Mueva el objeto a medir hasta que la medicin indique 20 cm. Alinee su regla con esa medicin. La marca de 0 cm debe estar en algn punto del sensor Ping))), tpicamente en algn lugar entre el circuito impreso y la parte ms sobresaliente del juego altavoz/micrfono. Ahora, experimente con otras mediciones de distancia.

' Sensores Inteligentes y sus Aplicaciones - PingMeasureCm.bs2 ' Mide distancias con el sensor Ping))) y despliega en centimetros. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Constantes de conversion para mediciones a temperatura de cuarto. CmConstant CON 2260 cmDistance time DO PULSOUT 15, 5 PULSIN 15, 1, time cmDistance = CmConstant ** time DEBUG HOME, DEC3 cmDistance, " cm" PAUSE 100 LOOP VAR VAR Word Word

Su Turno - Verificando los Clculos

Verifiquemos que el programa esta correctamente calculando la distancia. Modifique PingMeasureCm.bs2 para que muestre los valores de las variables de tiempo y distancia. Use una calculadora to verify that you get the same result from the distance equation that you do from el programa.

Sobject-cm = 0.03448 tPULSIN-BS2

Captulo 2: Inclinacin con el Acelermetro Memsic Page 49

ACTIVIDAD #3: MEDICIN DE PULGADAS


La mayora de los dispositivos electrnicos de medicin de distancia ofrecen resultados en sistema mtrico o ingles. Por ejemplo, los calibradores como el de la Figura 2-6 tienen un botn para escoger entre milmetros y pulgadas. Otros dispositivos ofrecen yardas o metros, o pulgadas o centmetros, etc. Su programa puede desplegar centmetros y pulgadas, esta actividad presenta nuevamene el operador multiplica-alto ( ** ) para convertir de centmetros a pulgadas.
Figura 2-6: Calibrador con botn para cambio a mm/in

Una Constante ** para pulgadas

La constante CmConstant usada en cmDistance = tiempo ** CmConstant es una medicin de la velocidad del sonido en cm por unidad de tiempo de PULSOUT. Hay 2.54 cm en cada pulgada. Entonces, la formula de conversion de cm a pulgadas es: Sin = Scm 2.54 La forma ms facil de convertir a pulgadas es simplemente dividir el valor de CmConstant entre 2.54 y usar el resultado en otra constante, como InConstant. Recuerde que las constantes para el operador ** deben ser enteros, as es que redondee el resultado al entero ms cercano.
InConstant = 2260 2.54 = 889.76 890

Pgina 50 Sensores Inteligentes y sus Aplicaciones

Programa Ejemplo: PingMeasureCmAndIn.bs2

Inroduzca, salve y corra PingMeasureCmAndIn.bs2. Experimente con las mediciones de distancia y verifique que son correctas en ambos sistemas.

' Sensores Inteligentes y sus Aplicaciones - PingMeasureCmAndIn.bs2 ' Mide distancias con el sensor Ping))) y despliega en centmetros y pulgadas ' {$STAMP BS2} ' {$PBASIC 2.5} ' Constantes de conversion para mediciones a temperatura de cuarto. CmConstant CON 2260 InConstant CON 890 cmDistance inDistance time DO PULSOUT 15, 5 PULSIN 15, 1, time cmDistance = cmConstant ** time inDistance = inConstant ** time DEBUG HOME, DEC3 cmDistance, " cm" DEBUG CR, DEC3 inDistance, " in" PAUSE 100 LOOP VAR VAR VAR Word Word Word

Su Turno

Hay 12 pulgadas en 1 pie. Modifique el programa para que despliegue pies y pulgadas. Tip: despus de calcular inDistance, use / 12 para determinar el nmero de pies y // 12 para encontrar el sobrante en pulgadas. Hay 10 centmetros en un decmetro. Repita para decmetros y centmetros.

Captulo 2: Inclinacin con el Acelermetro Memsic Page 51

ACTIVIDAD #4: MEDICIONES EN MOVIMIENTO


Esta actividad demuestra el desplegado de mediciones en centmetros y pulgadas del sensor Ping))) en la sensor's LCD Serial Parallax. Dado que estar usando una batera, usted puede esconectarse de su computadora y tomar el arreglo a puntos remotos de su eleccin.
Conectando el Sensor Ping))) con un Cable Extensin

A fin de hacer espacio para la LCD Serial Parallax en su tarjeta Board of Education, conecaremos el sensor Ping))) a la tarjeta con un cable extensin. Entonces podr sostenerlo y apuntarlo a varios lugares, o usar hardware para montarlo cerca de su tarjeta Board of Education.
Partes Requeridas

(1) Sensor Ultrasnico Ping))) (1) LCD Serial Parallax (216) (1) Cable Extensin para la LCD de 14 pulgadas (3) Cables de conexin Si esta trabajando con una tarjeta BASIC Stamp HomeWork Board o una tarjeta Board of Education Rev A o B serial , tambin necesitar: (1) cabezal de 3-pines (3) cables de conexin adicionales
Conexiones del Sensor Ping))) y el Cable LCD

Los esquemticos mostrados en la Figura 2-7 son, hasta este momento, idnticos a los que us para el sensor Ping))) y la LCD Serial Parallax. Ahora cambiaremos la forma en que estas conexiones elctricas estn hechas agregando un cable, de tal forma que ambos dispositivos puedan estar convenientemente conectados a su tarjeta al mismo tiempo. An cuando los esquemticos son lo mismo, las conexiones reales variarn dependiendo de qu tarjeta educativa BASIC Stamp est usando.

Pgina 52 Sensores Inteligentes y sus Aplicaciones

Figura 2-7 Esquemticos del Sensor Ping))) y la LCD Serial Parallax

Conexiones de Cable para tarjetas Board of Education Rev C y USB

Esta seccin es para las tarjetas que tienen puertos con un conector jumper Vdd/Vss enmedio, como las tarjetas Board of Education Rev C y Board of Education USB. Para todas las dems tarjetas, vaya a Para todas las dems tarjetas educativas BASIC Stamp en la pgina 54. Desconecte la energa de su tarjeta. Coloque el jumper entre las terminales servo X4 y X5 a Vdd (+5 V) (Figura 2-8). El jumper debe cubrir los 2 pines mas cercanos a Vdd, el tercer pin cercano a Vin debe ser visible.
Figura 2-8 El jumper del Puerto Servo colocado en Vdd (+5 V)

Captulo 2: Inclinacin con el Acelermetro Memsic Page 53

La configuracin del jumper Vdd vs. Vin determina qu fuente est conectada a los puertos X4 y X5. Cuando el Jumper se coloca a Vdd, estos puertos reciben 5 V regulados desde el regulador de tensin de la tarjeta Board of Education. Si el jumper se coloca a Vin, el Puerto recibe energa directamente de la betera o de la fuente de poder.

Conecte la LCD Serial Parallax como se indica (igual que el captulo anterior). Conecte una punta del cable extension en el Puerto 15 del cabezal X4, asegurndose que las etiquetas "Red" y "Black" que estn en el lado derecho del puerto X5 coincidan con los cables rojo y negro. Verifique que su cable est bien conectado asegurndo que el cable blanco es el ms cercano a la etiqueta 15 y que el negro es el ms cercano a la etiqueta X4.

Figura 2-9 Puerto Servo y Conexin del Jumper de energa para el Sensor Ping)))

Pgina 54 Sensores Inteligentes y sus Aplicaciones

Conecte la otra punta del cable de tal forma que el cable negro est conectado al pin GND del modulo Ping))), el cable rojo este conectado al pin 5 V y en cable blanco est conectado al pin RX. Vuelva a verificar todas las conexiones, incluyendo la posicin del jumper y asegrese que son correctas.
ATENCION! No conecte la energa a su tarjeta hasta que no est seguro que todas las conexiones son correctas. Si comete un error con las conexiones de la LCD Serial Parallax, esta podra ser permanentemente daada.

Conecte la energa de regreso a la tarjeta. Coloque el interruptor de 3 posiciones de la tarjeta Board of Education en 2. Si tiene una tarjeta Board of Education Rev C, continue en Despliegue de Distancia en la LCD en la pgina 57.
Tambin puede conectar la LCD Serial Parallax al puerto 14 con un cable. Las instrucciones son aproximadamente las mismas que las de conexin del Ping))). Empiece por desconectar la energa de su tarjeta. El Jumper para Vdd y Vin entre los puertos servo debe estar colocado en Vdd. El cable tiene que ser conectado en el cabezal X4 de tal forma que el cable negro sea el mas cercano a la etiqueta X4 y el cable blanco sea el mas cercano a la etiqueta 14. Cuando conecte la otra punta del cable a la LCD Serial Parallax, asegrese que el cable negro se conecte a GND, el cable rojo a 5V, y el cable blanco a RX.

Para todas las dems tarjetas educativas BASIC Stamp

Esta seccin es para conectar el sensor Ping))) y la LCD Serial Parallax a alguna de las siguientes tarjetas educativas BASIC Stamp:

BASIC Stamp HomeWork Board Board of Education Rev A (versin Serial) Board of Education Rev B (versin Serial) Desconecte la energa de su tarjeta. Construya las conexiones en la tableta como se muestran en la Figura 2-10.

Captulo 2: Inclinacin con el Acelermetro Memsic Page 55

Figura 2-10 Cableado en tableta para la conexin del cable del Sensor Ping)))

Conecte la LCD Serial Parallax en la tableta como se indica en la Figura 2-11 de la pgina 56. Conecte una punta del cable extension en el cabezal de 3 pines, asegurndose que los cables blanco, rojo y negro se orienten como se indica. El cable negro debe ser conectado a Vss, el rojo a Vdd, y el blanco a P15. Conecte la otra punta del cable de tal forma que el cable negro est conectado al pin GND del Ping))), el cable rojo est conecado al pin 5 V y el cable blanco est conecado al pin RX. Vuelva a verificar todas sus conexiones, incluyendo la posicin del jumper y asegurndose de que todas sean correctas.
ATENCION! No conecte la energa a su tarjeta hasta que no est seguro que todas las conexiones son correctas. Si comete un error con las conexiones de la LCD Serial Parallax, esta podra ser permanentemente daada.

Reconecte la energa a su tarjeta.

Pgina 56 Sensores Inteligentes y sus Aplicaciones

Figura 2-11: Conexiones en la tableta para el Sensor Ping))) y la LCD Serial Parallax

Captulo 2: Inclinacin con el Acelermetro Memsic Page 57

Despliegue de Distancia en la LCD

No es necesario realizar muchos cambios en PingMeasureCmAndIn.bs2 para hacer que despliegue sus mediciones en la LCD. Primero, una seccin de Inicializacin tiene que ser agregada de tal forma que el programa espere a que la fuente de energa se estabilice y luego encienda y limpie la LCD.
PAUSE 200 SEROUT 14, 84, [22, 12] PAUSE 5

Despus, los comandos DEBUG tienen que sen cambiados por commandos SEROUT. He aqu los commandos DEBUG para PingMeasureCmAndIn.bs2.
DEBUG HOME, DEC3 cmDistance, " cm" DEBUG CR, DEC3 inDistance, " in"

Los caracteres de control de la Terminal de Depuracin (HOME y CR) tienen que ser cambiados por cdigos de control que coloquen el cursor en la LCD.
SEROUT 14, 84, [128, DEC3 cmDistance, " cm"] SEROUT 14, 84, [148, DEC3 inDistance, " in"]

Programa Ejemplo: PingLcdCmAndIn.bs2

Este programa es una version modificada de PingMeasureCmAndIn.bs2 de la actividad anterior. En vez de desplegar las mediciones en la Terminal de Depuracin, las muestra en la LCD Serial Parallax. Conecte una batera a su tarjeta. Introduzca, salve y corra PingLcdCmAndIn.bs2. Desconecte el cable serial y lleve su tarjeta con usted a donde desee probar las mediciones del sensor Ping))).

' Sensores Inteligentes y sus Aplicaciones - PingLcdCmAndIn.bs2 ' Mide la Distancia con el sensor Ping))) y las muestra en la LCD ' {$STAMP BS2} ' {$PBASIC 2.5} ' Constantes de conversion para mediciones a temperatura de cuarto. CmConstant CON 2260 InConstant CON 890 cmDistance VAR Word

Pgina 58 Sensores Inteligentes y sus Aplicaciones

inDistance time

VAR VAR

Word Word

PAUSE 200 SEROUT 14, 84, [22, 12] PAUSE 5 DEBUG CLS, "Program running..." DO PULSOUT 15, 5 PULSIN 15, 1, time cmDistance = cmConstant ** time inDistance = inConstant ** time SEROUT 14, 84, [128, DEC3 cmDistance, " cm"] SEROUT 14, 84, [148, DEC3 inDistance, " in"] PAUSE 100 LOOP

Su Turno - Personalizando la Pantalla

Las mediciones estn alineadas a la izquierda. Trate centrarlas. Trate de alinear las mediciones a la derecha y desplegar "Distancia: " antes de la medicin en cm en la lnea superior de la LCD. Modifique el programa para que muestre ambas mediciones de distancia en la linea superior. Luego, muestre el tiempo real de eco en la linea inferior. Lo puede mostrar en millonsimas de segundo (s) multiplicando la variable de tiempo por 2 antes de desplegarla. Antes de que su programa multiplique por 2, asegre que espera hasta despus de haber hecho sus conversiones de distancia.

ACTIVIDAD #5: EL EFECTO DE LA TEMPERATURA EN LA VELOCIDAD DEL SONIDO


Esta actividad investiga cambios en la velocidad del sonido causados por cambios en la temperature del aire. Estos cambios en la velocidad del sonido pueden resultar en cambios visibles en sus mediciones de distancia.

Captulo 2: Inclinacin con el Acelermetro Memsic Page 59

Velocidad del sonido Vs Temperatura y Porcentaje de Error en las mediciones

La velocidad del sonido cambia con la temperatura del aire, humedad y an con la calidad del aire. Ni la humedad ni la calidad del aire hacen suficiente diferencia para que figure en los clculos de distancia del sensor Ping))). Pero por otro lado, la temperatura del aire, puede causa errores medibles en la distancia. La velocidad del sonido se incrementa 0.6 metros por segundo (m/s) por cada grado Celsius (C) que se incrementa la temperatura. Puesto que la veloicidad del sonido es aproximadamente 331.5 m/s a 0 C, podemos usar la siguiente ecuacin para calcular la velocidad del sonido a una temperatura dada.
Cair = 331.5 + (0.6 TC ) m/s

Convirtiendo de F a C y Viceversa Para converter un grado Fahrenheit a Celsius, reste 32 deTF (la medicin Fahrenheit), luego divida entre 1.8. El resultado sera TC, el equivalente Celsius. Para convertir de Celsius a Fahrenheit, multiplique TC por 1.8, luego agregue 32. El resultado ser TF.
TC = (TF - 32) 1.8 TF = 1.8 TC + 32

A continuacin hay unos ejemplos de velocidad del sonido a temperaturas de cuarto que, an cuando ambas son confortables, son ligeramente diferentes. Ejemplo 1: Calcule la velocidad del sonido a 22.2 C, que es aproximadamente 72 grados Fahrenheit (F).
Cair (22.2C ) = 331.5 + (0.6 22.2 m/s ) = 344.8 m/s

Ejemplo 2: Calcule la velocidad del sonido a 25 C, que es 77 grados Fahrenheit (F).


C air (25C ) = 331.5 + (0.6 25 ) m/s = 346.5 m/s

Qu tanta diferencia hace esto en sus mediciones de distancia? Podemos calcular el porcentaje de error que esto propagar con la ecuacin de porcentaje de error.

Pgina 60 Sensores Inteligentes y sus Aplicaciones

% error =

real - predicha 100% predicha

Si la temperatura predicha en el cuarto es 72 F (22.2 C) y la temperature real es 77 F (25 C), el error es 0.49 porciento. Medio porciento de error causara que usted tuviera que mover el objeto medio centmetro ms all de 100 cm antes de que hubiera cambiado de 99 a 100 cm.
% error = 346.5 - 344.8 100% 344.8

= 0.49%

Su Turno - Temperatura de cuarto vs. congelacin

Calcule el porcentaje de error en la medicin que resultara de asumir que la temperature ambiente es de congelacin (32 F, 0 C), pero en realidad es temperatura de cuarto (72 F, 22.2 C). Qu tan alejada habra estado la medicin si el objeto estuviera a 1 m de distancia? Use el procedimiento presentado en la Actividad #2 para calcular la velocidad del sonido y CmConstant para mediciones a 0 C. Salve PingMeasureCm.bs2 como PingMeasureCmYourTurn.bs2 Corra el programa antes de modificarlo y pruebe la medicin de distancia de un objeto a 1 m. Modifique la directiva cmConstant CON con el valor para 0 C. Vuelva a probar el programa con un objeto a 1 m. Qu tan cerca estuvo su error predicho con respecto al error real?

Captulo 2: Inclinacin con el Acelermetro Memsic Page 61

RESUMEN
El BASIC Stamp solicita una medicin al sensor Ping))) enviando un breve pulso, lo que causa que este emita un silbido a 40 kHz. Luego, el Ping))) escucha un eco de ese silbido. Reporta el eco enviando un pulso de regreso al BASIC Stamp que equivale al tiempo que el toma al sensor Ping))) recibir el eco. Para calcular la distancia basada en la medicin del tiempo de eco, la velocidad del sonido debe ser convertida en unidades que son convenientes al BASIC Stamp. Esto involucra convertir metros por segundo a centmegros por unidades de medicin PULSIN. El valor resultado tambin debe ser convertido a un valor que pueda ser usado con el operador multiplica-alto ( ** ) multiplicandolo por 65536. La velocidad del sonido en el aire es cair = 331.5 + (0.6 TC) m/s. Si bien la velocidad del sonido cambia con la temperatura, el error en la medicin resultante es pequeo, especialmente a temperatura de cuarto.
Preguntas

1. Cual es el rango de medicin del sensor Ping)))? 2. Qu significa ultrasnico? 3. Qu seal manda el sensor Ping))) al BASIC Stamp y cmo corresponde esta a la medicin de distancia? 4. Cules son las tres condiciones entre el sensor y el objeto que pueden causar que el sensor Ping))) regrese una medicin de distancia incorrecta? 5. Cules son los incrementos de tiempo que regresa el commando PULSIN cuando se usa un BS2? 6. Cul es la velocidad del sonido a temperatura de cuarto? 7. Cmo se relaciona CmConstant con lka velocidad del sonido en el aire? 8. Qu tiene que hacer usted al jumper entre los cabezales servo X4 y X5 en la tarjeta Board of Education para suministra la tensin correcta a dispositivos como el sensor Ping))) sensor y la LCD Serial Parallax? Qu podra pasar si el jumper no es colocado correctamente? 9. Qu commandos tienen que ser modificados si quiere hacer que la pantalla LCD Parallax muestre lo que la Terminal de Depuracin esta desplegando? 10. Qu papel juega la temperature del aire en la velocidad del sonido en el aire?

Pgina 62 Sensores Inteligentes y sus Aplicaciones

Ejercicios

1. Calcule a cuantos metros de distancia se encuentra un objeto si el tiempo de eco es 15 ms, y la temperatura es 22.5 C. 2. Calcule el equivalente en C de 100 F. 3. Calcule el equivalente en pies de 30.48 cm. 4. Calcule the porcentaje de error si CmConstant est calculada para 37.8 C pero la temperature es 0 C. Prediga cul sera la distancia si el objeto fuera colocado a medio metro de distancia.
Proyectos

1. Agrege un circuit LED a su tarjeta y programe en BASIC Stamp para hacer que el LED prenda y apague cuando no hay ningn objeto dentro del rango de medicin. 2. Use un piezo altavoz para hacer una alarma que indique cuando una persona pasa por una puerta. El sensor Ping))) debe ser montado cerca de la puerta de salida, apuntando a travs del camino que la gente usa para entrar o salir.
Soluciones

Q1. De 3 centmetros a 3.3 metros. Q2. Sonido con frecuencias mayores que 20 kHz. Q3. Un pulso alto, cuya duracin corresponde al tiempo que le toma al silbido de sonido viajar hasta el objeto y regresar. Q4. a) Distancia mayor a 3 m, b) ngulos superficiales, c) objetos muy pequeos. Q5. Incrementos de 2s. Q6. 344.8 m/s. Q7. CmConstant es el equivalente ** de la velocidad del sonido en el aire dividido entre 10000, o 0.03448. Q8. El jumper debe estar colocado en la posicin Vdd, o la LCD pudiera daarse. Q9. Todos los comandos DEBUG tienen que ser modificados, tambin los caracteres de control para que se usen los cdigos de control de la LCD. Q10. Juega un rol muy importante, ya que la velocidad se incrementa 0.6 m/s por cada grado C que se incrementa la temperatura del aire.

Captulo 2: Inclinacin con el Acelermetro Memsic Page 63

E1. E2. E3. E4.

El objeto esta a 2.59 m de distancia. 100 F = 37.7 C 30.48 cm = 1.0 ft. % error = +/- 6.84%; measured distance = 0.466 m.
' ' ' ' ' Sensores Inteligentes y sus Aplicaciones - Ch2_Project1.bs2 Indica fuera-de- rango con LED destellante. Ajusta MaxDistance de medicion. {$STAMP BS2} {$PBASIC 2.5} PIN PIN PIN CON CON CON VAR VAR 13 14 15 2260 890 361 Word Word ' LED rojo activo en alto ' LCD Serial Parallax ' sensor Ping))) Parallax ' Calc tiempo de sonido viaje redondo ' Maximo posible para medir (empirico) ' Distancia en centimetros ' Tiempo de eco en viaje redondo ' Inicializa LCD

P1. Este ejemplo de solucin coloca un LED activo alto en P13.

LED LCD Ping CmConstant InConstant MaxDistance cmDistance time

PAUSE 200 SEROUT LCD, 84, [22, 12] PAUSE 5 DO

LOW LED ' LED off antes de cada medicion PULSOUT 15, 5 ' Inicia Ping))) PULSIN 15, 1, tiempo ' Lee tiempo de eco cmDistance = cmConstant ** tiempo ' Calcula distancia con el tiempo SEROUT LCD, 84, [128, DEC3 cmDistance, " cm"] ' Muestra distancia en ' la pantalla LCD IF cmDistance >= MaxDistance THEN HIGH LED ' Cambia LED si esta ' fuera de rango PAUSE 100 LOOP

P2. Ejemplo de solucin:


' Sensores Inteligentes y sus Aplicaciones - Ch2_Project2.bs2 ' Hace un sonido cuando alguien pasa por la puerta. ' {$STAMP BS2} ' {$PBASIC 2.5} ' -----[ Definiciones E/S]--------------------------------------------Ping PIN 15 ' sensor Ping))) Parallax Speaker PIN 9 ' Altavoz Opcional

Pgina 64 Sensores Inteligentes y sus Aplicaciones

' -----[ Constantes ]-------------------------------------------------InConstant CON 890 Doorjamb CON 35 ' Ancho de puerta es 35 pulgadas ' -----[ Variables ]--------------------------------------------------inDistance VAR Word time VAR Word ' Tiempo de eco de viaje redondo counter VAR Nib ' -----[ Rutina Principal]--------------------------------------------DO GOSUB Read_Ping GOSUB Calc_Distance IF (inDistance < Doorjamb) THEN GOSUB Sound_Alarm ENDIF LOOP ' -----[ Subrutinas ] -----------------------------------------------Read_Ping: PULSOUT 15, 5 ' Inicia Ping))) PULSIN 15, 1, tiempo ' Lee tiempo de eco RETURN Sound_Alarm: FREQOUT Speaker, 300, 3300 PAUSE 50 FREQOUT Speaker, 450, 2200 RETURN Calc_Distance: inDistance = inConstant ** tiempo RETURN

' Bing ' Bong

' Estas son todas las mediciones

Captulo 3: Inclinacin con el Acelermetro Memsic Page 65

Captulo 3: El Acelermetro MEMS de dos ejes


La aceleracin es la medicin de qu tan rpido cambia la velocidad. De igual manera que un velocmero es un medidor de velocidad, un acelermetro es un medidor de aceleracin. Puede usar la habilidad de ste para sensar la aceleracin y tomar una variedad de mediciones que pueden ser muy tiles para proyectos y diseos de electrnica y robtica. He aqu algunos ejemplos:

Aceleracin Pendiente y ngulo de pendiente Inclinacin Rotacin Vibracin Colisin Gravedad

Los acelermetros se usan ya en muchos dispositivos diferentes, incluyendo equipos personales electrnicos, equipo especializado y mquinas. Algunos ejemplos son:

robots auto-equilibrantes Mandos de juego con sensado de inclinacin Pilotos automticos para aeromodelismo Sistemas de alarmas de autos Deteccin de colisin / sistemas para despliegue de bolsas de aire Sistemas para monitoreo de movimiento humano Herramientas para nivelacin

Hace mucho tiempo, los acelermeros eran instrumentos grandes, estorbozos y caros que no se prestaban para proyectos de robtica y electrnica. Todo esto cambi gracias a la llegada de los sistemas-micro-electrnicos-mecnicos (MEMS por sus siglas en ingls). La tecnologa MEMS es responsable de un nmero siempre creciente de dispositivos otrora mecnicos y que ahora estn siendo diseados en circuitos integrados de silicn.

Pgina 66 Sensores Inteligentes y sus Aplicaciones

El acelermetro con el que estar trabajando en este texto es el mdulo de acelermetro de dos ejes MEMS 2125 Parallax mostrado en la Figura 3-1. Este mdulo mide menos de 1 /2 1/2 1/2, y el circuito integrado del accelermetro es menor a 1/4 1/4 1/8.
Figura 3-1: Mdulo de Accelermetro y Chip MX2125

Modulo de acelermetro

Chip MX2125

Las personas naturalmente perciben la aceleracin en 3 ejes: adelante/atrs, derecha/izquierda y arriba/abajo. Piense acerca la ltima vez que estuvo en el asiento del pasajero en un auto a travs de un camino con curvas y colinas. La aceleracin adelante/atrs es la sensacin de incrementar la velocidad o de reducirla. La aceleracin izquierda/derecha le permite percibir cuando da vuelta, y la aceleracin arriba/abajo es lo que siente al pasar a traves de las colinas. En vez de los 3 ejes que la gente percibe, el acelermetro MX2125 percibe la aceleracin en dos ejes. La aceleracin que sensa depende de cmo est posicionado. Al sostenerlo de una manera, puede percibir adelante/atrs e izquierda/derecha. Si lo sostiene de manera diferente, puede sensar arriba/abajo y adelante/atrs. Dos ejes de aceleracin son suficientes para muhcas de las aplicaciones listadas anteriormente. Si bien puede montar y monitorear un segundo acelermetro para capturar el tercer eje, tambin son comunes los acelermetros de 3 ejes.
Para un acelermetro de 3 ejes , pruebe nuestro mdulo de aclermetro Hitachi H48C Tri-Axial, parte #28026 de Parallax.

Captulo 3: Inclinacin con el Acelermetro Memsic Page 67

EL ACELERMETRO MX2125 COMO FUNCIONA


El diseo del MX2125 es sorprendentemente simple. Tiene una cmara de gas con un elemento calefactor en el centro y 4 sensores de temperatura alrededor de sus bordes. As como el aire caliente se eleva y el fro se precipita, el mismo principio aplica a gases fros y calientes. Si fija firmemente el acelermetro, todo lo que sensa es la gravidad e inclinarlo nos da un ejemplo de como sensa la aceleracin esttica. Cuando mantiene el acelermetero nivelado, el gas caliente se eleva hacia el centro-superior en la cmara del accelermetro y todos los sensores medirn la misma temperatura. Dependiendo de cmo incline el acelermetro, el gas caliente se concentrar ms cerca de uno o dos de los sensores de temperatura.
Figura 3-2: La bolsa de gas caliente del Acelermetro

A travs de la comparacin de los sensores de temperatura, ambas aceleraciones esttica (gravedad e inclinacin) y dinmica (como un viaje en auto) pueden ser detectadas. Si fuese a llevar al acelermetro en un paseo en auto, los gases fros y calientes se correran alrededor de la cmara de manera similar a un contenedor medio lleno de agua, y los sensores detectaran esto. En muchas situaciones, hacer que estas mediciones tengan sentido es simple gracias a la electrnica dentro del MX2125. El MX2125 convierte las mediciones de temperatura en seales (duraciones de pulsos) que son fciles para el microcontroller BASIC Stamp de medir y descifrar.

Pgina 68 Sensores Inteligentes y sus Aplicaciones

ACTIVIDAD #1: CONEXIN Y PRUEBA DE PENDIENTE CON EL MX2125


En esta actividad conectar el mdulo de acelermetro al BASIC Stamp, correr un programa de prueba y verificar que puede ser usado para sensar inclinaciones.
Partes Requeridas

(2) Cables conectores de 3 pulgadas (2) Resistencias 220 (1) Acelermetro Bi-Axial Mems MX2125
Conexiones Elctricas y de Seal del Acelermetro

La Figura 3-3 muestra cmo conectar el mdulo acelermetro a la fuente de energa de la tarjeta Board of Education, junto con las conexiones de pines de E/S del BASIC Stamp que necesita hacer para correr el programa ejemplo. Conecte el modulo acelerometro usando como gua la Figura 3-3.

Figura 3-3: Diagrama de conexiones y esquemtico del acelermetro

Escuchando las seales del Acelermetro con el BASIC Stamp

Los dos ejes que usa el MX2125 para sensar gravedad y aceleracin estn marcados x y y en la Figura 3-4. Le ser de ayuda colocar su tarjeta en una superficie plana y enfrente de usted como lo indica la figura. De esa manera, los ejes x y y apuntarn a las mismas direcciones que apuntan en muchos de las grficas xy.

Captulo 3: Inclinacin con el Acelermetro Memsic Page 69

Figura 3-4: Medicin de pulso de eje del acelermetro

Para una prueba a temperatura de cuarto, obtendr una muy buena indicacin de inclinacin con tan solo medir el tiempo de nivel alto de los pulsos enviados por los pines Xout y Yout del MX2125 usando el comando PULSIN. Dependiendo qu tanto inclina la tarjeta y en qu direccin, las mediciones de tiempo de PULSIN deben ser entre 1875 a 3125. Cuando la tarjeta esta nivelada, el comando PULSIN debe guardar valores cercanos a 2500.

Pgina 70 Sensores Inteligentes y sus Aplicaciones

Asegrese que su tarjeta est sin inclinacin en su mesa, orientada con los ejes x y y como se muestra en la Figura 3-4. Introduzca y corra SimpleTilt.bs2.

' Sensores Inteligentes y sus Aplicaciones - SimpleTilt.bs2 ' Mide inclinacin a temperatura de cuarto. '{$STAMP BS2} '{$PBASIC 2.5} x y DEBUG CLS DO PULSIN 6, 1, x PULSIN 7, 1, y DEBUG HOME, DEC4 ? X, DEC4 ? Y PAUSE 100 LOOP VAR VAR Word Word

Asegrese de que la Terminal de Depuracin reporta que las variables x y y estn ambas guardando valores cercanos a 2500 como se muestra en la Figura 35.

Figura 3-5 Salida de la Terminal de Depuracin

Captulo 3: Inclinacin con el Acelermetro Memsic Page 71

Tome el borde de la tarjeta etiquetado como eje Y y gradualmente levantelo hacia usted. El valor de y debe incrementar conforme incrementa la inclinacin. Contine inclinando la tarjeta hacia usted hasta que est en vertical. La terminal de Depuracin debe reportar que la variable y guarda un valor cercano a 3125. Vuelva a poner la tarjeta en plano. Ahora, en vez de inclinar la tarjeta hacia usted, inclnela gradualmente lejos de usted. El valor de y debe caer por debajo de 2500 y gradualmente decaer hasta 1875 conforme inclina la tarjeta hasta que alcance la vertical. Lay la tarjeta flat again. Repita esta prueba con el eje x. Conforme levante la tarjeta con su mano derecha, el valor x deber incrementarse y alcanzar un valor cercano a 3125 cuando la tarjeta est en vertical. Conforme levane la tarjeta con su mano izquierda, el valor de x deber aproximarse a 1875. Finalmente, sostenga su tarjeta frente a usted y enderzela y volteela como si fuera el volante de su auto. Conforme rota su tarjeta lentamente, los valores de x y y debern cambiar. Estos valores sern usados en otra actividad para determinar el ngulo de rotacin en ngulos.

ACTIVIDAD #2: MEDICIONES EN MOVIMIENTO


Esta actividad desplegar las mediciones del acelermetro Mems en la LCD Serial Parallax. Dado que est usando una batera, despus de programar podr desconectarse de su computadora y llevar el arreglo a lugares de su eleccin.
Conectando ambos Mdulos al BASIC Stamp

Ambos, el acelermetro Mems y la LCD Serial caben en su tarjeta al mismo tiempo, asi que no hay necesidad de cables de extensin a no ser que haya escogido montar LCD Serial Parallax cerca de la tarjeta Board of Education o en una caja de proyecto.
Partes Requeridas

(1) Acelerometro Mems 2125 (1) LCD Serial Parallax (216) (5) Cables de conexiones (2) Resistencias 220

Pgina 72 Sensores Inteligentes y sus Aplicaciones

Construyendo los circuitos del Acelermetro y la LCD

Los esquemticos mostrados en la Figura 3-6 son identicos a los que ha usado para el acelermetro Mems y la LCD Serial Parallax en actividades anteriores.

Figura 3-6 Esquemticos para el acelermetro MX2125 y la LCD Serial Parallax

Los diagramas de alambrado para el acelermetro Mems y la LCD Serial Parallax se muestran en la Figura 3-7 y la Figura 3-8 es una combinacin de los dos diagramas de cableado anteriores para los mdulos individuales. Construya el diagrama de alambrado mostrado en la figura 3-7 primero.

Captulo 3: Inclinacin con el Acelermetro Memsic Page 73

Figura 3-7 Alambrado para el acelermetro Mems y la LCD Serial Parallax

Luego inserte la LCD Serial Parallax como se muestra en la Figura 3-8.

Figura 3-8: Alambrado para el acelermetro Mems y la LCD Serial Parallax

Desplegado de la inclinacin en la LCD

La modificacin de cualquiera de los programas ejemplo del acelermetro en este captulo para hacerlos desplegar mediciones en la LCD es tpicamente un proceso de 2 pasos. Primero hay que agregar la rutina de inicializacin de la LCD, y luego reemplazar los comandos DEBUG con comandos SEROUT que desplegaran la informacin en la LCD.

Pgina 74 Sensores Inteligentes y sus Aplicaciones

Siempre recuerde agregar esta inicializacin, ya sea antes de la rutina principal o en programas pequeos, antes de la primera palabra DO. Esto evitar que la inicializacin sea repetida una y otra vez en el ciclo DO...LOOP con el resto del programa. Mantngala fuera del ciclo DO...LOOP principal porque esto podra causar que la pantalla parpadee.
' Inicializa LCD PAUSE 200 SEROUT 14, 84, [22, 12] PAUSE 5

Luego, los comandos DEBUG deben ser cambiados por comandos SEROUT. He aqu el comando DEBUG de SimpleTilt.bs2.
DEBUG HOME, DEC4 ? X, DEC4 ? Y

HOME debe ser reemplazado por 128, que es el caracer de casa para la LCD. La directiva ? despliega el nombre de la variable con un carcter de retorno de carro despus. Recuerda del Captlo 1 que CR es el nico caracter de control que es igual tanto para la

Terminal de Depuracin como para la LCD Serial Parallax? Debido a esto, podemos dejar la directiva ? en los comandos SEROUT para la LCD. He aqu un comando SEROUT que ejecuta el desplegado equivalente en la LCD Serial Parallax.
SEROUT 14, 84, [128, DEC4 ? X, DEC4 ? Y]

Programa Ejemplo: SimpleTiltLcd.bs2

Este programa es una version modificada de SimpleTilt.bs2 de la actividad anterior. En vez de desplegar sus mediciones en la Terminal de Depuracin, las despliega en la LCD Serial Parallax. Conecte una batera a su tarjeta. Introduzca, salve y corra SimpleTiltLcd.bs2. Desconecte el cable serial y lleve su tarjeta a donde quiera probar las mediciones del acelermetro Mems.

' Sensores Inteligentes y sus Aplicaciones - SimpleTiltLcd.bs2 ' Mide pendiente a temperatura de cuarto, la muestra en la LCD Serial Parallax '{$STAMP BS2} '{$PBASIC 2.5} x y VAR VAR Word Word

Captulo 3: Inclinacin con el Acelermetro Memsic Page 75

' DEBUG CLS ' Inicializa LCD PAUSE 200 SEROUT 14, 84, [22, 12] PAUSE 5 DO PULSIN 6, 1, x PULSIN 7, 1, y ' DEBUG HOME, DEC4 ? X, DEC4 ? Y SEROUT 14, 84, [128, DEC4 ? X, DEC4 ? Y] PAUSE 100 LOOP

Su Turno - Personalizando el Desplegado

El retorno de carro (CR) que est construdo dentro del operador ? hace ms difcil desplegar la informacin despus de los valores de las variables x o y. Puede reescribir los comandos DEBUG y SEROUT para ejecutar las mismas operaciones como sigue.
DEBUG HOME, "x = ", DEC4 x, CR, "y = ", DEC4 y

Este comando SEROUT despliega la misma informacin en la LCD Serial Parallax. Note como el the cdigo de control 128 coloca el cursor en la Linea 0, caracter 0. En vez de un caracter de control CR, 148 coloca al cursor de la LCD en la Linea 1, caracter 0.
SEROUT 14, 84, [128, "x = ", DEC4 x, 148, "y = ", DEC4 y]

Con este comando SEROUT modificado, es ms fcil desplegar caracteres despus de cada valor. Por ejemplo, he aqu un comando SEROUT que multiplica cada medicin por 2 y despliega "us" despus.
SEROUT 14, 84, [128, "x = ", DEC4 (2 * x), " us", 148, "y = ", DEC4 (2 I y), " us"]

Si bien "us" no es realmente lo mismo que "s" porque estamos usando una u en vez de la letra griega mu, la mayora de las personas comprendera el significado. Usted tambin puede hacer un caracter personalizado para mu. Esto involucrar agregar un comando SEROUT al principio del programa que defina un caracter personalizado. Luego, tendr que desplegar ese caracter personalizado donde la "u" est siendo desplegada.

Pgina 76 Sensores Inteligentes y sus Aplicaciones

ACTIVIDAD #3: DIVISIN PROPORCIONAL Y COMPENSACIN DE LOS VALORES DE ENTRADA


Al trabajar con el MX2125 y el BASIC Stamp 2, el rango mediciones de inclinacin est entre 1875 y 3125. Este rango puede tener que ser escalado y compensado por algn mtodo posible. Por ejemplo, la actividad #4 escala esto a un rango de 100 to 100. La actividad #5 lo escala a 127 y 127. Introducir una compensacin en un rango de valores es fcil y tpicamente implica una operacin de suma o resta. El escalado puede implicar usar trucos, especialmente con un procesador como el BASIC Stamp que hace todos sus clculos con nmeros enteros. Esta actividad presenta el modo ms simple y ms preciso para escalar un mayor rango de valores en un rango ms pequeo con un programa PBASIC. La tcnica de divisin proporcional aqu presentada ayuda a prevenir errores que se arrastren en las mediciones de su sensor con cada clculo PBASIC sucesivo y ser re-utilizada en muchas de las actividades de este libro.
Ejemplo de escalamiento y compensacin

En este primer ejemplo, tomaremos un valor de entrada cualquiera entre 1875 y 3125 y lo escalaremos y compensaremos a un valor de salida correspondiente que caiga entre 127 y 127 (Figura 3-9). La posicin del valor en la escala de salida debe ser proporcional a la posicin del valor en la escala de entrada. Por ejemplo, si el valor de entrada es 2500 (a la mitad entre 1875 y 3125) el valor de salida es 0 (a la mitad entre 127 y 127).
Figura 3-9: Ejemplo de escalamiento de entrada y salida

Para aplicar escalamiento y compensacin en PBASIC, recuerde estos 3 pasos: 1) Aplique compensacin para alinear la escala de entrada a cero. 2) Aplique el escalamiento the scale.

Captulo 3: Inclinacin con el Acelermetro Memsic Page 77

3) Aplique compensacin adicional si es necesario en la escala de salida. La Figura 3-10 muestra cmo aplicar estos pasos con un solo commando PBASIC que ejecuta escalamiento y compensacin. Recuerde que los clculos en PBASIC trabajan de izquierda a derecho a no ser que se re-jerarquize con parntesis. Entonces la primer cosa que este clculo hace es restar 1875 al valor de entrada. El nuevo rango ahora es de 0 a 1200 en vez de 1875 to 3215. Luego, ** 13369 divisiona proprcionalmente a 0 - 254. Despus de que el rango ha sido escalado, se le resta 127 y resulta en 127 a 127.
(1875 to 3125)(0 to 1200) | | (0 to 1200)(0 to 254) | | | | (0 to 254)(-127 to 127) | | | value = value - 1875 ** 13369 - 127
Figura 3-10: Escalando el valor de la Variable

Escogiendo la constante ** adecuada para escalar

El valor 13369 usado usado para escalar (0 a 1250) a (0 to 254) fue determinada al sustituir el nmero de elementos en las escalas de entrada y salida en la siguiente ecuacin. El nmero de elementos en la escala de salida es 255, incluyendo al 0, y el nmero de elementos en la escala de entrada es 1251, tambin incluyendo el 0. Use esta ecuacin siempre que necesite ajustar una escala ms grande en una ms pequea con el operador **.

elementos en escala de salida Cons tan te de escalamiento = Int 65536 elementos en escala de entrada 1
255 ScaleCons tan t = Int 65536 1251 1

ScaleCons tan t = Int [13,369.344 ]

Pgina 78 Sensores Inteligentes y sus Aplicaciones

ScaleCons tan t = 13369


Siempre redondee hacia abajo su ScaleConstant resultante, an cuando el resultado ya sea un entero! De lo contrario, el valor mas grande en su escala de entra puede ser un valor fuera del rango de la escla de salida.

Asegurando el rango de entrada

La mejor forma de asegurar que los valores de salida no exceden el rango de salida es verificar que los valores de entrada no salen del rango de entrada. Por ejemplo, si no quiere que la salida de este commando salga fuera de 127 a 127, el mtodo ms conveniente es aseguarse que los valores de entraga no sean menores que 1875 o mayores que 3125. He aqu una version modificada de value = value - 1875 ** 13369 127 que previene este problema.
value = (value MIN 1875 MAX 3125) - 1875 ** 13369 - 127

Antes de restar 1875 a la variable value, este commando usa dos operadores, MIN 1875 y MAX 3125, para asegurarse que value guarda algo en este rango. Si la variable value est guardando un nmero en este rango, los operadores MIN y MAX no la alteran. Sin embargo, si est guardando algo menor que 1875, MIN 1875 cambiar el valor a 1875. Igualmente, si est guardando algo mayor que 3125, MAX 3125 lo cambiar a 3125.
Programa Ejemplo: TestScaleOffset.bs2

La Figura 3-11 muestra cmo se ve la Terminal de Depuracin al probar el siguiente programa. Cuando introduce valores de entrada (separados por comas) en la ventana de Transmisin de la Terminal de Depuracin, el programa muestra el equivalente escalado y compensado en la ventana de recepcin de la Terminal de Depuracin. Introduzca, salve y corra TestScaleOffset.bs2.

' Sensores Inteligentes y sus Aplicaciones - TestScaleOffset.bs2 ' Prueba de escalamiento de un rango de entrada de 1875 a 3125 a un rango ' de salida de -127 to + 127. '{$STAMP BS2} '{$PBASIC 2.5} value VAR Word

DEBUG CLS, "Enter valores (1875 to 3125)...", CR

Captulo 3: Inclinacin con el Acelermetro Memsic Page 79

DO DEBUG ">" DEBUGIN DEC value value = (value MIN 1875 MAX 3125) - 1875 ** 13369 - 127 DEBUG "scaled to ", SDEC value, CR LOOP

Figura 3-11: Prueba de escalamiento

Transmit Windowpane

Receive Windowpane

Pgina 80 Sensores Inteligentes y sus Aplicaciones

Posicinese en la ventana de transmisin de la Terminal de Depuracin e introduzca (incluyendo comas): 1875, 1876, 1879, 1880, 1881, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 3119, 3120, 3121, 3124, 3125. Pruebe otros valores en el rango de 1875 a 3125 y verifique con una calculadora que la posicin del valor de salida en el rango de salida es proporcional a la posicin del valor de entrada en el rango de entrada..

Su Turno - PBASIC y los nmeros negativos

El ultimo programa ejemplo us el modificador DEBUG SDEC para mostrar la variable value como un nmero con signo. Recuerde que en PBASIC una variable del tamao de una palabra puede retener un valor sin signo en el rango de 0 a 65535 o un valor con signo de 32768 a +32767. Esto es por el uso del mtodo de complemento a dos para nmeros con signo. En este sistema, todos los nmeros positvos en binario empiezan con un 0 y los negativos con un 1. Usando complementos a dos, los valores de 0 a 32767 estan representados por sus equivalentes binarios de 16 bits normales, pero del 1 al 32768 no lo estn. En vez de ello, esos nmeros negativos estn representados por los equivalentes binarios de 32768 a 65535.
Tabla 3-1: Nmeros decimales y binarios
Decimal sin signo 1 32767 32768 65535 con Complemento a dos Binario de 16-Bit Bit 15 Bit 0 Decimal con signed 1 32767 -32768 -1

0000000000000001 0111111111111111 1000000000000000 1111111111111111

Visualize una recta numrica (Figura 3-12). Del 0 en adelante, los valores 0 al 32767 estn representados por sus equivalents binarios normales de 16 bits: el valor 1 esta representado por el binario 1, etc., hasta el 32767. Pero el 1 est representado por el equivalente binario de 65535, que es el valor con mayor tamao de palabra, que es todo en 1s. Yendo hacia atrs con estos valores negativos, sus correspondientes nmeros binarios que los representan se hacen ms pequeos hasta llegar al 32768 representado por el binario 32768.

Captulo 3: Inclinacin con el Acelermetro Memsic Page 81

Figura 3-12: Recta numrica de decimales con signo y sus complementos a dos

(DEC 32767)0111111111111111 | (DEC 1)0000000000000001 | | | -32768...............-1...0...1...............32767 | | | 1111111111111111(DEC 65535) | 1000000000000000 (DEC 32768)

El patron es claro si compara un decimal sin signo con sus equivalentes decimal y binario con signo. Intente correr SignedNumbers.bs2 con algunos valores de x hasta que el patron le sea claro. Intente: 0, 1, 2, -1, -2. Luego intente 65535, 65534, 32767, 32768, y 32769. Puede ver cmo opera?

' Sensores Inteligentes y sus Aplicaciones - SignedNumbers.bs2 ' {$STAMP BS2} ' {$PBASIC 2.5} x VAR Word x = 32768

'<<< Introduzca nuevos valores de x, y vuelva a correr

DEBUG "you entered decimal: ", DEC x, CR DEBUG "signed decimal: ", SDEC x, CR DEBUG "16-bit binary: ", BIN16 x, CR

Como en PBASIC solo las variables de palabra completa pueden retener nmeros con signo, todos los nmeros con signo tienen 16 bits. Viendo el bit ms hacia la izquierda, el Bit 15, podemos saber si un nmero es positivo o negativo. Puede usar value.BIT15 como una variable que le diga si value es un nmero positivo o negativo. Si value.BIT15 es igual a 0, el nmero es positivo. Si es igual a 1, es negativo. Este es un tip importante, porque algunos operadores PBASIC solo trabajan con enteros positivos, como division "/" y mdulo "//". Cuando se usan estos operadores, es til

Pgina 82 Sensores Inteligentes y sus Aplicaciones

salvar el signo de un nmero, ejecutar la operacin con su valor absoluto y reaplicar el signo despus. De hecho haremos esto ms tarde en el Captulo 4.
Su Turno Una Mirada ms cercana a la constante de escalamiento y al operador **

Para pequeas entradas y rangos de salida, podemos revisarlos con una calculadora, lpiz y papel. Tomemos del 0 al 10 como nuestra escala de entrada y del 0 al 2 como nuestra escala de salida. El primer paso es visualizar cual sera la constante para la operacon ** usando la ecuacin de la constante de escalamiento (ScaleConstant).

elementos en escala de salida Cons tante de escalamiento = Int 65536 elementos en escala de entrada 1
Hay 3 elementos en la escala de salida, 0, 1 y 2. Hay 11 elementos en la escala de entrada, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 y 10. Recordando redondear hacia abajo al entero ms prximo, el resultado es 19660 que es la constante a usar con el operador **.
3 ScaleCons tan t = Int 65536 11 1

ScaleCons tan t = Int[19,660.8 ] ScaleCons tan t = 19660

El trmino value = value ** 19660 multiplica el valor variable:


19660 65536 0.29999 value = value 0.29999

La Table 3-2 muestra algunos ejemplos de clculos del BASIC Stamp para cada valor en el rango de entrada para value = value ** 19660. Considere que es aproximadamente igual a multiplicar value por 0.29999 con una calculadora. Puesto que el BASIC Stamp es un procesador matemtico de enteros, trunca cualquier resultado al valor entero, redondendolo entonces hacia abajo. Note como los primeros 4 valores de entrada resultan en salida cero. Luego, cuando el valor de entrada es 4 el resultado es 1.19996, que se redondea a 1. Al ejecutar el resto de las operaciones en la tabla, note

Captulo 3: Inclinacin con el Acelermetro Memsic Page 83

como el valor de escala de salida 2 le corresponden 4 elementos de entrada. Si -1 no se usara en el denominador le correspondera un elemento de entrada. Complete los calculos en la Table 3-2 para valores de entrada del 5 al 10.
Table 3-2: Tensiones Medidas durante el ciclo de cargae
Valor 0 1 2 3 4 5 6 7 8 9 10 Constante de escalamiento ** x 0.2999 = x 0.2999 = x 0.2999 = x 0.2999 = x 0.2999 = x 0.2999 = x 0.2999 = x 0.2999 = x 0.2999 = x 0.2999 = x 0.2999 = Valor Calculado 0 0.2999 0.5998 0.8997 1.1996 Resultado entero BASIC Stamp 0 0 0 0 1

Salve TestScaleOffset.bs2 como TestScaleOffsetYourTurn.bs2. Modifique el programa para que pueda probar la Table 3-2 con el BASIC Stamp y la Terminal de Depuracin. Compare los resultados de la Terminal de Depuracin con su tabla.

ACTIVIDAD #4: DIVIDIENDO EN 1/100 G


La medicin estandar de gravedad en la superficie de la tierra es abreviada "g". Esta actividad demuestra como usar las tcnicas presentadas en la actividad anterior para desplegar el nmero de centsimas de una g actuando en los ejes x y y del acelermetro.
De PULSIN a 1/100 g

La meta aqu es modificar modificar el programa ejemplo de la Actividad #1 para que despliegue mediciones de los ejes x y y en terminos de 1/100 g en vez de 2 s units. Es otro problema de escalamiento y compensacin, pero esta vez, queremos ajustar la escala de entrada de 1875 a 3125 en una escala de salida de 100 a 100 (Figura 3-13).

Pgina 84 Sensores Inteligentes y sus Aplicaciones

Figura 3-13: Escalamiento y compensacin para 1/100 g.

Su Turno - Desarrollando el Programa

Usaremos las tcnicas de escalamiento de la Actividad #3 para modificar el programa de la Actividad #1 y mostrar las mediciones de los ejes x y y en trminos de 1/100 g. La Figura 3-14 muestra las lecturas aproximadas que debe esperar luego de sus modificaciones.
Figura 3-14: Lecturas muestra en varias orientaciones (en sentido horario) a. x = 100 100

y = 0 100

b. x = 0 100

y = 10 0 100

d. x = 0 100

y = 100 100

c. x = 100 100

y = 0 100

Captulo 3: Inclinacin con el Acelermetro Memsic Page 85

Abra SimpleTilt.bs2 de la Actividad #1 y salvelo como CentigravityTilt.bs2 Siga los pasos para escalar de la actividad Actividad #3 y determine las constantes de escalamiento para la operacin **. Agregue lineas de cdigo al programa que divisionen los valores de x y y a g/100. Modifique el desplegado para que aparezca en la Terminal de Depuracin. Pruebe de acuerdo a la Figura 3-14 y corrija si es necesario.

ACTIVIDAD #5: MEDICIN DE ROTACIN VERTICAL DE 360


El MX2125 tiene una caracterstica interconstruda que le permite usar la medicin de pendiente en ambos ejes para calcular el ngulo de rotation del acelermetro en el plano vertical, como se muestra en la Figura 3-15. Hay muchas aplicaciones donde conocer la inclinacin vertical es til, incluyendo volantes virtuales para controles de mando de video juegos y contar revoluciones de una rueda de bicicleta. Esta actividad demuestra como calcular la inclinacin del plano vertical con el operador plane con ATN de PBASIC .

Figura 3-15 Inclinacin en el Plano Vertical

Calculando el Arcotangente con PBASIC

En un tringulo rectngulo, la tangente de un ngulo teta () es la divisin del lado opuesto del ngulo (y) entre el lado adyacente (x). Si conoce los valores de x y y, puede usar la inversa tangente o arcotangente para conocer el ngulo . Las notaciones ms comunes para el arcotangente son tan1 y arctan.

Pgina 86 Sensores Inteligentes y sus Aplicaciones

y tan = x y = tan 1 x

Figura 3-16 Tangente y Arcotangente

La funcin arcotangente puede usarse para determinar the ngulo de rotacin del acelermetro con sus mediciones x y y. PBASIC tiene un operador llamado ATN que puede usar para calcular tan1(y/x). Para calcular el arcotangente of y/x y guardarlo en una variable llamada angle, use el comando angle = x ATN y.
y = tan 1 angle = x atn y x

La Figura 3-17 esta tomada del archivo de ayuda del Editor de BASIC Stamp y muestra como trabaja el operador ATN. Ambas variables x y y deben ser escaladas a valores entre 127 y 127. El resultado del operador ATN es el ngulo en radianes binarios, los cuales se abrevian brads. Con los brads, un crculo es dividido en 256 segmentos de la misma manera que los ngulos lo dividen en 360 segmentos.

Figura 3-17 Crculo Unitario en grados y Radianes Binarios

Captulo 3: Inclinacin con el Acelermetro Memsic Page 87

Convirtiendo de Brads a Grados con */

En la actividad anterior usamos el operador ** para dividir proporcionalmente de un rango ms grande a uno ms pequeo. Convertir de brads a grados implica escalar una escala menor (de 0-255) a una mayor (de 0-359). El operator */ de PBASIC est diseado para esto. Cuando usa un commando como value = ScaleConstant */ value, el trmino ScaleConstant es la cantidad de 256avos por los cuales desea multiplicar la variable value. Por ejemplo, digamos que desea multiplicar value por 2.5. Multiplique 2.5 por 256y el resultado es 640. Ahora, si value empieza en 10, el resultado de value = 640 */ value ser 25. Si queremos que value equivalga a 2.5 veces value:
ScaleCons tan t = 2.5 256 = 640
value = 640 */value 'multiplica por 2.5

Recuerde: El operador ** multiplica por un nmero de 65536avos. The operador */ multiplies por un nmero de 256avos.

Las reglas matemticas de enteros para escalar de una escala a otra an aplican, an si convertimos de una escala ms pequea a una ms grande. Lo nico que cambiaremos es la constante de la escala, el cual es un numerador de 256 por */, en vez de 65536 por **.

elementos en la escala de salida Cons tan te de escalamiento * / = Int 256 elementos en la escla de entrada 1
La escala de entrada es de 0-255, la cual tiene 256 elementos y la salida es de 0-359, la cual tiene 360 elementos. El resultado despus de sustituir estos valores en la ecuacin de la constante de escalamiento es 361.
360 * / ScaleCons tan t = Int 256 256 1 * / ScaleCons tan t = Int [361.412 ]

Pgina 88 Sensores Inteligentes y sus Aplicaciones

*/ ScaleCons tan t = 361 Esto demuestra que si la variable del ngulo guarda una medida de brads y quiere guardar una medida en grados, use el commando:
angle = 361 */ angle Muchos documentos recomiendan angle = 360 */ angle. Sin embargo, usar una constante */ de 361 es ligeramente mas preciso en los rangos de entrada/salida. Trate comparar los resultados de esta operacin hecha con BASIC Stamp a los hechos con una hoja de clculo. angledegrees = (360/256) anglebrads Redondee el resultado de angledegrees al entero ms cercano. Si el resultado tiene un componente fraccional 0.5 o mayor, redondee hacia arriba. De lo contrario, redondee hacia abajo. Luego comparelo con las 256 posibles salidas de la Terminal de Depuracin con 360 */ angle, luego repita con 361 */ angle. Una hoja de clculo es til para esta comparacin. Si lo intenta, ver que el nivel de enteros que empatan es mucho mayor con 361 */ angle.

Programa Ejemplo: TestAtn.bs2

Este programa ejemplo calcula angulos basado en los valores y y x que introduce en la ventana de Transmisin de la Terminal de Depuracin.

Figura 3-18 Tangente y Arcotangente

Captulo 3: Inclinacin con el Acelermetro Memsic Page 89

Para calcular los valores de x y y a introducer en la Terminal de Depuracin, use estas ecuaciones:

y = h sin x = h cos

Figura 3-19 Tangente y Arcotangente

Por ejemplo, si h = 127 y = 45, los valores de x y y a teclear en la Terminal de Depuracin son 90 ambos. Si h = 100 y = 315, el valor y a teclear sera 71, y el valor de x ser 71. Si h = 100 y = 180, y sera 0 y x sera 127.
For h = 127 and = 45 y = 127 sin 45 = 89.9 90 x = 127 cos 45 = 89.9 90 For h = 100 and = 315 y = 100 sin 315 = 71 x = 100 cos 315 = 71 For h = 127 and = 180 y = 127 sin 180 =0 x = 127 cos 180 = 127

Introduzca, salve y corra TestAtn.bs2 Haga click en la ventana de transmisin de la Terminal de Depuracin. Cuando se le pida el valor de x, tecle 90 y luego [Enter]. Repita igual para el valor de y. Verifique que el resultado es 32 brads = 45. Repita para los otros valores de x y y recin discutidos. Use su calculadora para determinar los valores de x y y que correspondan con algunos valores de h y . Compare sus resultados calculados con los de la Terminal de Depuracin.

Pgina 90 Sensores Inteligentes y sus Aplicaciones

Algunos valores sern mas bajos que lo que esperaba. Por ejemplo, cuando h = 100 y = 30, y = 50 y x = 87. La Terminal de Depuracin mostrar 21 para el ngulo brad, que es correcto, pero 29 para el ngulo en grados que no es correcto. Debera ser 30. Esto pasa ocasionalmente al escalar de un rango menor a uno mayor. La medicin de 21 brads corresponde a 29 y 22 brads corresponden a 31.

' Sensores Inteligentes y sus Aplicaciones - TestAtn.bs2 ' Test BASIC Stamp arctangent calculations. '{$STAMP BS2} '{$PBASIC 2.5} angle x y DO DEBUG "Enter DEBUGIN SDEC DEBUG "Enter DEBUGIN SDEC y: " y x: " x VAR VAR VAR Word Word Word

angle = x ATN y DEBUG "brad ", SDEC ? angle angle = angle */ 361 DEBUG "degree ", SDEC ? angle, CR LOOP

Su Turno Probando la Conversion Brad a Grados

Como se mencion antes, El resultado entero ideal viene de calcular angledegrees = (360/256) x anglebrands y luego redondear hacia arriba si el valor a la derecha del punto decimal es de 5 a 9 o hacia abajo si es de 1 a 4. Puede generar una lista de todas las 256 conversiones de brad a grados con el siguiente programa.
' Sensores Inteligentes y sus Aplicaciones - BradsToDegrees.bs2 ' Despliega conversiones de brad a grados para */ 360 y */ 361. '{$STAMP BS2} '{$PBASIC 2.5}

Captulo 3: Inclinacin con el Acelermetro Memsic Page 91

angle brads

VAR VAR

Word Word */ 360 */ 361", CR

DEBUG CLS, "brads

FOR brads = 0 TO 255 DEBUG DEC3 brads angle = brads */ 360 DEBUG " ", DEC3 angle angle = brads */ 361 DEBUG " ", DEC3 angle, CR NEXT END

Introduzca, salve y corra BradsToDegrees.bs2. Use una hoja de clculo o calculadora para generar una lista con esta frmula.
angledegrees = (360 256) anglebrads

Recuerde redondear hacia arriba si el valor a la derecha del punto decimal es de 5 a 9 o hacia abajo si es de 1 a 4. Compare sus resultados a los desplegados en la Terminal de Depuracin. Cuntos empates exactos ocurrieron para */ 360? Cuntos para */ 361?

Pgina 92 Sensores Inteligentes y sus Aplicaciones

Midiendo el ngulo de inclinacin en el plano Vertical

El ngulo de la rotacin de su tarjeta en sentido horario en el plano vertical () es el arcotangente del efecto de la gravedad en el eje y del MX2125 (Ay) dividido entre su efecto en el eje x (Ax), como se muestra en la Figura 3-20.

Figura 3-20 Rotacin vertical en sentido antihorario

= tan

AY A X

A continuacin se presentan algunos ejemplos de lo que el acelermetro detecta y como lo relaciona al arcotangent de la relacin de Ay entre Ax. La Figura 3-21 muestra lo que el acelermetro sensa en la marca de 0. Si es 0, entonces Ay sensa 0-gravedad (g), y Ax sensa 1 g, el arcotangente de 0/1 is 0.
Figura 3-21: Acelermetro Rotated 0

0 tan 1 = 0 1

Cuando el acelermetro es rotatdo 30 en el sentido horario, como se muestra en la Figura 3-22, la componente de gravedad actuando en el eje x del acelermetro es

Captulo 3: Inclinacin con el Acelermetro Memsic Page 93

aproximadamente 3/2 g. La componente de gravedad actuando en el eje y es 1/2 g, y el arcotangente de 3/2 1/2 is 30.
Figura 3-22: Acelermetro rotado 30 en sentido horario

1 tan

1 2 3 2

= 30

Cuando el acelermetro es rotado a 135 en sentido horario (Figura 3-23), la componente de gravedad actuando en el eje x del acelermetro es Ax = -1/2, y la componente actuando en su eje y es 1/2. El arcotangente de 1/2 (1/2) es 135.
Figura 3-23: Acelermetro Rotado 135 en sentido horario

tan 1

1 2 = 135 1 2

Pgina 94 Sensores Inteligentes y sus Aplicaciones

El caso general El ngulo de rotacin () es la inversa-tangente o arcotangente de la componente de gravedad que acta sobre el eje de sensado Y del Mems 2125 (AY) dividida entre la componente de gravedad que acta sobre el eje de sensado X (AX). La figura abajo muestra al MX2125 inclinado a un ngulo , lo cual rota a ambos ejes de sensado en el mismo angulo . Aplicando un par de identidades geomtricas, tambin est dentro de los dos tringulos que muestran las componentes de gravedad actuando en cada uno de los ejes de sensado del acelermetro (xm y ym). La componente de gravedad actuando sobre xm is AX = g cos y la componente actuando sobre ym es AY = g sin. Despus de aplicar las identidades trigonomtricas mostradas, se demuestra que el ngulo de rotacin es de hecho el arcotangente of AY/AX.

AY g sin = = tan AX g cos tan = AY AX

A tan 1 (tan ) = tan 1 Y A X A = tan 1 Y A X

Programa Ejemplo: VertWheelRotation.bs2

Este programa muestra el ngulo de rotacin de su tarjeta como se muestra en la Figura 3-20 al principio de esta actividad, pgina 92.

Captulo 3: Inclinacin con el Acelermetro Memsic Page 95

Introduzca, salve y corra VertWheelRotation.bs2. Sostenga la board verticalmente frente a usted como si fuera un volante. Rote la tarjeta en sentido horario, y observe crecer el ngulo de medicin. Verifique que el ngulo desplegado vaya de 0 a 359.

' Sensores Inteligentes y sus Aplicaciones - VertWheelRotation.bs2 ' Monte el acelerometro en un volante vertical y mida ' el angulo de rotacion. '{$STAMP BS2} '{$PBASIC 2.5} angle x y DO PULSIN 6, 1, x PULSIN 7, 1, y x = (x MIN 1875 MAX 3125) - 1875 ** 13369 - 127 y = (y MIN 1875 MAX 3125) - 1875 ** 13369 - 127 angle = x ATN y angle = angle */ 361 DEBUG HOME, CLREOL, SDEC ? x, CLREOL, SDEC ? y, "angle = ", CLREOL, DEC angle, 176 PAUSE 100 LOOP VAR VAR VAR Word Word Word

' ASCII 176 es el simbolo de grados

Su Turno Comportamiento de la Terminal de Depuracin

El siguiente comando DEBUG muestra valores con signo de las variables x y y seguidos por angle y el smbolo de grados (cdigo ASCII 176). La razn por la cual CLREOL viene antes de cada nmero es para prevenir que los caracteres no desparezcan a la derecha de algunas mediciones. Por ejemplo, si una medicin es 105 y la siguiente medicin es 076, se desplegara como 0755 si CLREOL no limpiara el valor anterior antes de desplegar

Pgina 96 Sensores Inteligentes y sus Aplicaciones

el nuevo. An cuando CLS puede arreglar este problema tambin, el parapdeo resultante en la Terminal de Depuracin no es agadable para la vista. CLREOL borra a la derecha del cursor en una linea dada. Si bien an causa un poco de parpadeo con cada valor, es mucho ms facil de ver que con la versin CLS.
DEBUG HOME, CLREOL, SDEC ? x, CLREOL, SDEC ? y, "angle = ", DEC3 angle, 176 ' ASCII 176 es el simbolo de grados

Salve VertWheelRotation.bs2 como VertWheelDisplayTest.bs2. Reemplace HOME con CLS en el comando DEBUG y corra el programa. Regrese CLS por HOME y corra el programa. V alguna mejora en la pantalla? Retire los caracteres de control de CLREOL y note el efecto en la pantalla mientras que gira la tarjeta. Aparecern dgitos extra al final de los valores no negativos. Regrese los caracteres de control de CLREOL y corra el programa otra vez. Los dgitos extra que no desaparecan antes deben estar eliminados.

Su Turno La Pantalla LCD

El comando DEBUG tiene 3 lineas de desplegado y el smbolo de grado necesitar un caracter personalizado. He aqu un commando de inicializacin para la LCD que hace 3 cosas: (1) prende la LCD, (2) muestra un texto que no cambia y (3) define al caracter personalizado 7 como el smbolo de grados .
' Inicializa LCD PAUSE 200 SEROUT 14, 84, [22, 12] PAUSE 5 SEROUT 14, 84, [ 130, "angle = ", DEC angle, 7, 150, "x=", SDEC x, 157, "y=", SDEC y ] SEROUT 14, 84, [255, %01000, %10100, %01000, %00000, %00000, %00000, %00000, %00000] ' Define caracter personalizado 7 ' * ' * * ' * ' ' ' ' '

Captulo 3: Inclinacin con el Acelermetro Memsic Page 97

Definicin de Caracteres Personalizados. Recuerde, 248 define el caracter personalizado 0. 249 define el caracter personalizado 1, etc., hasta 255, que define el caracter personalizado 7.

El comando DEBUG reemplazado por el comando SEROUT usa 3 lineas en la Terminal de Depuracin. El comando SEROUT aqui abajo usa solo 2. Para minimizar el parpadeo de pantalla en la LCD, solo los dgitos son borrados antes de que se escriban nuevos. El SEROUT coloca el cursor en 138 (lnea 0, caracter 10), luego sobreescribe la medicin previa con 5 espacios. Despus, coloca el cursor en 138 nuevamente y despliega la nueva medicin de ngulo con ngulo DEC. Finalmente, escribe el signo de grado con el caracter personalizado 7. Esto se repite para las mediciones de x y y, pero solo necesitan ser 4 espacios enre comillas despus de que el cursor se posiciona en 152 y 159.
' Rutina de desplegaado en LCD SEROUT 14, 84, [ 138, " ", 138, DEC angle, 7, 152, " ", 152, SDEC x, 159, " ", 159, SDEC y ]

Salve VertWheelRotation.bs2 como VertWheelRotationLcd.bs2. Inserte la rutina de inicializacin de la LCD entre las declaraciones de variable y la palabra DO. Reemplace el comando DEBUG en el DO...LOOP con la Rutina de desplegado en LCD. Chambie PAUSE 100 a PAUSE 350. Corra el programa y pruebe su desplegado en LCD.

Su Turno - Rotacin en la Direccin Opuesta

Los diagramas que muestran al ngulo de rotacin incrementando conforme el objeto rota en sentido anti-horario, como la Figura 3-24, son bastante ms comunes que el diagrama en sentido horario que usamos previamente.

Figura 3-24 Medicin de ngulo con rotacin en sentido anti-horario

Pgina 98 Sensores Inteligentes y sus Aplicaciones

Para invertir el ngulo de rotacin que muestra el programa, solo hay que usar Ay en vez de Ay (Figura 3-25). Si gira el acelermetro en sentido anti-horario, Ay es 1/2 y el arcotangente resulta ser 330. Al tomar el arcotangente de Ay/Ax, el resultado es 30.
Figura 3-25: Invirtiendo la direccin de rotacin con -Ay

AY tan 1 A X

1 1 2 = tan 3 = 330 2

1 1 Ay = tan 1 2 = 30 tan 3 Ax 2

En el programa, solo inserte un signo negativo antes de y en angle = x ATN y. Salve VertWheelRotation.bs2 como VertWheelRotationCounterclockwise.bs2 Cambie angle = x ATN y por angle = x ATN y. Corra el programa y verifique el ngulo de rotacin ahora incrementa conforme gira la tarjeta en sentido anti-horario.

ACTIVIDAD #6: MEDICIN DE LA INCLINACIN RESPECTO A LA HORIZONTAL


Esta actividad mide qu tanto la tarjeta Board of Education est inclinada respecto a la horizontal. La Figura 3-26 muestra la tarjeta Board of Education con el acelermetro Mems en la tableta. Los ejes de sensado de aceleracin del acelermetro (xm y ym) apuntan hacia la parte superior y la parte izquierda de su tarjeta. Esta actividad desarrolla un programa que despliega el ngulo de inclinacin para cada eje. Cuando la tarjeta est nivelada, el ngulo de inclinacin es 0 para ambos ejes xm y ym. Si inclina la tarjeta para que ym apunte hacia arriba, el programa reportar un ngulo de inclinacin positivo para el eje y. Si la inclina para que ym apunte hacia abajo, reportar un ngulo de inclinacin negativo. Lo mismo aplica para xm; apuntela hacia arriba para un ngulo de inclinacin positivo o hacia abajo para un ngulo de inclinacin negativo. Si inclina la tarjeta hacia una de sus esquinas, el programa reportar inclinacin en ambos ejes xm y ym.

Captulo 3: Inclinacin con el Acelermetro Memsic Page 99

Figura 3-26: Ejes de inclinacin en la tarjeta Board of Education

Seno y Coseno

La Figura 3-27 muestra la relacin entre los lados de un tringulo rectngulo y las funciones seno y coseno. El seno de un ngulo es el lado opuesto del tringulo (y) dividido entre la hipotenusa (h). Si conoce h y y, y quiere conocer el ngulo (), use arcoseno (sin1). El coseno de un ngulo es el lado adyacente (x) divido entre h. Si quiere conocer el ngulo conociendo x y h, use arcocoseno (cos1).

sin =

y h x cos = h

Figura 3-27 Seno y Coseno

Pgina 100 Sensores Inteligentes y sus Aplicaciones

Note en las ecuaciones de la Figura 3-27 que el valor x puede ser, a lo mucho, igual a h cuando = 0. Igualmente, el valor y puede ser, a lo mucho, h cuando = 90. Para ngulos entre 0 y 90, la relacin de x/h y y/h son ambas menores que 1. No importa que tan grande es el tringulo, la relacin siempre estar entre 1 y 0. El crculo unitario es un elemento comun para describir las funciones seno y coseno. La hipotenusa del triangulo se convierte en el radio del crculo. El crculo unitario es tambin llamado as porque la longitude de la hipotenusa es 1 (una unidad). Conforme gira la hipotenusa en sentido anti-horario, el ngulo se hace ms grande, o ms pequeo si rota en sentido horario. El coseno es determinado dibujando una lnea vertical desde el punto donde la hipotenusa se cruza con el crculo hasta el eje de las x. Cualquiera que sea el valor de x all, ese es el coseno. El seno del ngulo es determinado dibujando una linea horizontal desde el final del radio hasta el eje de las y.
Figura 3-28: Ejemplos de Seno y Coseno en el crculo unitario

a.

b.

c.

El rango de 0 a 90 es el cuadrante 1 del crculo unitario. Cuando est en el cuadrante 1, ambos el seno y el coseno del ngulo sern nmeros positivos. Cuando est entre 90 y 180 (cuadrante 2), the coseno se hace negativo pero el seno an es positivo. En el cuadrante 3, seno y coseno son negativos, y en el cuadrante 4, el seno an es negative pero el coseno es positivo otra vez. Note en la Figura 3-28 (c) que un valor negativo de (entre 0 y 90) puede estar en el cuadrante 4 igual que un valor entre 270 y 360. Otra cosa que tener presente es que el valor mnimo para seno y coseno es 1 y que el valor mximo es 1. Por ejemplo, cuando = 0, cos = 1 y sin = 0. Si = 90, sin = 1 y cos = 0. A = 180, cos = 1 y sin = 0. La Figura 3-29 muestra la version de BASIC Stamp de un crculo unitario para sus operadores SIN y COS. En vez de resultados que van de 1 a 1, los resultados para SIN y

Captulo 3: Inclinacin con el Acelermetro Memsic Page 101

COS van de 127 a 127. Los ngulos para los operadores SIN y COS estn en terminos de brads. Entonces, en vez de 45 use 32 brads. En vez de 90 use 64 brads, etc. Para convertir de brads a grados con una calculadora, multiplique el nmero de brads por 360/256. Para convertir de grados a brads, use 256/360.

Figura 3-29 Operadores Seno y Coseno en el crculo unitario de BASIC Stamp

Programa Ejemplo: SineCosine.bs2

Este programa ejemplo despliega los clculos enteros de BASIC Stamp para seno y coseno. Usted puede dividir estos valores entre 127 para obtener una aproximacin de los valores reales de seno o coseno. Convierte grados a brads con ** 46733, obtenido con la ecuacin ScaleConstant de la actividad #3. Introduzca, salve y corra SineCosine.bs2 Compare los resultados contra los valores calculados (divididos entre 127) de seno y coseno.

' Sensores Inteligentes y sus Aplicaciones - SineCosine.bs2 ' Despliega valores de seno y coseno de BASIC Stamp. ' {$STAMP BS2} ' {$PBASIC 2.5} degrees VAR Word brads VAR Word sine VAR Word

Pgina 102 Sensores Inteligentes y sus Aplicaciones

cosine VAR Word DEBUG "Degrees Brads Cosine Sine", CR

FOR degrees = 0 TO 359 STEP 15 brads = degrees ** 46733 sine = SIN brads cosine = COS brads DEBUG " ", SDEC3 degrees, " ", SDEC3 brads, " ", SDEC3 cosine, " ", SDEC3 sine, CR NEXT END

Su Turno - modificaciones al programa

Intente modificar el argumento STEP del ciclo FOR...NEXT para obtener valores diferentes. Intente modificar el programa para que it prompts you for a degree value con the DEBUGIN comando y then displays the result.

Subrutinas Arcsine y Arccosine

Mientras que el seno es una razn de y/h para un ngulo dado, arcoseno (sin1) es la funcin inversa (Figura 3-30). Dada la razn y/h, arcoseno le dice el ngulo. Similarmente, el coseno es la razn x/h para un ngulo dado y arcocoseno (cos1) es el ngulo para una razn x/h dada.

sin = cos =

y h x h

= sin 1

y h x h

Figura 3-30 Seno, Arcoseno, Cosenoy Arcocoseno

= cos 1

Si bien BASIC Stamp no tiene operadores ASIN y ACOS, Tracy Allen, autor del texto Sensores Aplicados de la serie Stamps en Class, public algunas buenas subrutinas que

Captulo 3: Inclinacin con el Acelermetro Memsic Page 103

ejecutan estas funciones en su sitio Web www.emesystems.com. El siguiente programa ejemplo usa versiones modificadas de estas subrutinas. Recuerde que los operadores SIN y COS regresan valores entre 127 y 127. Si divide el resultado entre 127, obtendr un valor entre 1 y 1 que es una aproximacin de las razones reales seno (y/h) o coseno (x/h). Con las subrutinas Arcsine y Arccosine, puede asignar una variable llamada side a un valor entre 127 y 127 y la subrutina guardar los resultados de la medicin en grados en la variable angle.
Si quiere que las subrutinas Arcsine y Arccosine devuelvan brads en vez de grados, solo haga 3 cambios: En la subrutina Arccosine, comente la lnea de cdigo que convierte de brads ta grados: ' angle = angle */ 361 ' Convierte brads a degrees

Luego, en IF...THEN cambie 180 a 128 porque ahora usamos un circulo de 256 divisiones: IF sign = Negative THEN angle = 128 - angle Igualmente, en la subrutina Arccosine cambie 90 to 64: angle = 64 - angle

Programa Ejemplo: TestArcsine.bs2

El siguiente programa barre valores de seno desde 127 a 127 y su subrutina Arcsine convierte estos valores de seno en ngulos en grados. Tenga presente que este es el inverso de los clculos del programa ejemplo anterior. El programa ejemplo anterior desplegaba valores de seno para los ngulos dados. Este despliega angulos para valores de seno dados. Introduzca, salve y corra TestArcsine.bs2 Compare los resultados con los valores de seno calculados en el programa ejemplo anterior.

' -----[ Title ]-------------------------------------------------------------' Sensores Inteligentes y sus Aplicaciones - TestArcsine.bs2 ' Prueba arcoseno para valaores de seno de -127 a 127. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Directiva BASIC Stamp ' Directiva PBASIC

Pgina 104 Sensores Inteligentes y sus Aplicaciones

' -----[ Constantes ]--------------------------------------------------------Negative Positive CON CON 1 0 ' Signo - .bit15 de variables de palabra

' -----[ Variables ]---------------------------------------------------------sine side angle sign VAR VAR VAR VAR Word Word Word Bit ' ' ' ' seno en circulo r = 127 variable de subrutina resultado angle - degrees bit de Signo

' -----[ Inicializacion ]----------------------------------------------------DEBUG CLS sine = -128 ' Limpia la Terminal de Depuracion ' Inicia y en -128

' -----[ Rutina principal ]--------------------------------------------------DO UNTIL sine = 127 sine = sine + 1 side = sine DEBUG "sine = ", SDEC sine, " GOSUB Arcsine DEBUG SDEC ? angle LOOP END ' ' ' ' ' ' ' Barre desde y = -127 a y = 127 Incremento en 1 Coloca side en y Muestra el valor de seno Calcula arcoseno Muestra el resultado angle Repite DO...LOOP

"

' Fin de programa

' -----[ Subrutina - Arcsine ]----------------------------------------------' Esta subrutina calcula arcoseno basado en la coordenada y en un circulo ' de radio 127. Establezca la variable side igual a su coordenada y antes ' de llamar a esta subrutina. Arcsine: GOSUB Arccosine angle = 90 - angle RETURN ' Subrutina Inverso seno ' Obtiene inverso coseno ' seno(angle) = cos(90 - angle)

' -----[ Subrutina - Arccosine ]--------------------------------------------' Esta subrutina calcula arcocoseno basado en la coordenada x en un circulo ' de radio 127. Establezca la variable side igual a su coordenada x antes ' de llamar a esta subrutina. Arccosine: sign = side.BIT15 side = ABS(side) angle = 63 - (side / 2) DO ' ' ' ' ' Subrutina Inverso coseno Guarda el signo de side Evalua side positivo aproximacion inicial al angulo Ciclo de approximation sucesiva

Captulo 3: Inclinacin con el Acelermetro Memsic Page 105

IF (COS angle <= side) THEN EXIT ' angle = angle + 1 ' LOOP angle = angle */ 361 ' IF sign = Negative THEN angle = 180 - angle' RETURN

Hecho cuando COS angle <= side Incrementa el angulo Convierte brads a grados Ajusta si el signo es negativo.

Su Turno Probando la Subrutina Arccosine

He aqu algunas modificaciones que puede hacer a TestArcsine.bs2 para hacer que pruebe la subrutina Arccosine. Salve TestArcsine.bs2 como TestArccosine.bs2. Actualize los comentarios en la seccin de ttulo. Los valores de coseno sern barridos de 127 a 127. Cambie sine VAR Word por cosine VAR Word en la seccin de variables. Cambie sine = 128 por cosine = 128 en la seccin de Inicializacin. Modifique la Rutina principal para que se vea as:
DO UNTIL cosine = -127 cosine = cosine - 1 side = cosine DEBUG "cosine = ", SDEC cosine, " GOSUB Arccosine DEBUG SDEC ? angle LOOP END

"

Corra el programa de prueba modificado. Conforme cosine barra de 127 a 127, el ngulo debe ser barrido de 0 to 180.

Desplegando el ngulo de inclinacin del acelermetro

La Figura 3-31 muestra la tarjeta Board of Education con el acelermetro Mems. La figura tambin muestra un acercamiento del mdulo del acelermetro y sus ejes de sensado de aceleracin xm y ym. Estos ejes de sensado detectan componentes de la aceleracin de la tierra debidas a la gravedad. Mientras que inclina un eje hacia la vertical, mayores son las componentes de 1 g de la tierra actuando sobre ese eje.

Pgina 106 Sensores Inteligentes y sus Aplicaciones

Figura 3-31: Inlclinando la tarjeta Board of Education, inclinando el acelermetro Mems

La Figura 3-32 muestra como el arcoseno puede ser usado para determinar el ngulo. Viendo de lado el Mdulo acelermetro, la componente de gravedad actuando en su eje xm es la aceleracin en el eje de las x (Ax), que es g sin . Puesto que sin equivale a Ax / g, x puede ser determinado tomando el arcoseno de Ax / g. En forma de ecuacin :
A X = sin 1 X g A X = sin 1 Y g

El mismo principio aplica en el eje ym del acelermetro y el resultado es:

Captulo 3: Inclinacin con el Acelermetro Memsic Page 107

Figura 3-32: Determinando el ngulo de inclinacin con Arcoseno

AX = g sin AX = sin g sin = AX g

A sin 1 (sin ) = sin 1 X g A = sin 1 X g

Con el MX2125, una medicin de 1875 es 1 g, y una medicin de 3125 es 1 g. En la actividad #3, escalamos esto al rango de 127 to 127. Recuerde que 127 es el equivalente de 1 para la subrutina Arcsine y 127 es el equivalente de 1. Cualquier valor entre 127 y 127 es el equivalente de una fraccin y, en el MX2125, es el seno . Entonces, una vez que la medicin del MX2125 ha sido escalada a 127 a 127, todo lo que tiene que hacer es usar la subrutina Arcsine para determinar el ngulo de inclinacin (el valor de ). La forma ms simple de escribir un programa de inclinacin es empezar con el programa ejemplo previo, TestArcsine.bs2. Luego, incorporar la medicin del acelermetro y escalar y compensar tanto los comandos de TestScaleOffset.bs2 como las mediciones del acelermetro de VertWheelRotation.bs2. La Rutina Principal de este programa se condensa en 2 comandos para medir los eje x y y, 2 comandos para escalar y 2 pequeas rutinas que llaman a la subrutina Arcsine y despliegan el resultado.
DO PULSIN 6, 1, x PULSIN 7, 1, y x = (x MIN 1875 MAX 3125) - 1875 ** 13369 - 127

Pgina 108 Sensores Inteligentes y sus Aplicaciones

y = (y MIN 1875 MAX 3125) - 1875 ** 13369 - 127 side = x GOSUB Arcsine DEBUG HOME, "x tilt angle = ", CLREOL, SDEC3 angle, CR side = y GOSUB Arcsine DEBUG "y tilt angle = ", CLREOL, SDEC3 angle PAUSE 100 LOOP

Programa Ejemplo: HorizontalTilt.bs2

Este ejemplo muestra la inclinacin de su tarjeta en grados a partir de la horizontal. Introduzca, salve y corra HorizontalTilt.bs2. Compare varios angulos de inclinacin al eje desplegado en la terminal de Depuracin.

' -----[ Titulo ]------------------------------------------------------------' Sensores Inteligentes y sus Aplicaciones - HorizontalTilt.bs2 ' Prueba arcsine para valores de sine de -127 a 127. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Directiva BASIC Stamp ' Directiva PBASIC

' -----[ Constantes ]--------------------------------------------------------Negative Positive CON CON 1 0 ' Signo - .bit15 de variables de una palabra

' -----[ Variables ]---------------------------------------------------------x y side angle sign VAR VAR VAR VAR VAR Word Word Word Word Bit ' Medicion del eje x mems ' Medicion del eje y mems ' dispara variable de subrutina ' resultado angulo - grados ' bit de Signo

' -----[ Inicializacion ]----------------------------------------------------DEBUG CLS ' Limpia Terminal de Depuracion

' -----[ Rutina Principal]---------------------------------------------------DO

Captulo 3: Inclinacin con el Acelermetro Memsic Page 109

PULSIN 6, 1, x PULSIN 7, 1, y

' medicion del eje x ' medicion del eje y

' Escala y compensa los valores de los ejes x y y de -127 a 127. x = (x MIN 1875 MAX 3125) - 1875 ** 13369 - 127 y = (y MIN 1875 MAX 3125) - 1875 ** 13369 - 127 ' Calcula y muestra el Arcoseno de la medicin del eje x. side = x GOSUB Arcsine DEBUG HOME, "x tilt angle = ", CLREOL, SDEC3 angle, CR ' Calcula y muestra el Arcoseno de la medicin del eje y. side = y GOSUB Arcsine DEBUG "y tilt angle = ", CLREOL, SDEC3 angle PAUSE 100 LOOP ' Pausa 1/10 segundo ' Repite DO...LOOP

' -----[ Subrutina - Arcsine ]----------------------------------------------' Esta subrutina calcula arcoseno en base a la coordenada y en un circulo ' de radio 127. Establezca la variable side igual a su coordenada y antes ' de llamar a esta subrutina. Arcsine: GOSUB Arccosine angle = 90 - angle RETURN ' Subrutina seno inverso ' Obtiene coseno inverse ' seno(angle) = cos(90 - angle)

' -----[ Subrutina - Arccosine ]--------------------------------------------' Esta subrutina calcula arcocoseno en base a la coordenada x en un circulo ' de radio 127. Establezca la variable side igual a su coordenada x antes ' de llamar a esta subrutina. Arccosine: ' sign = side.BIT15 ' side = ABS(side) ' angle = 63 - (side / 2) ' DO ' IF (COS angle <= side) THEN EXIT ' angle = angle + 1 ' ciclo angle = angle */ 361 ' IF sign = Negative THEN angle = 180 - angle' RETURN Subrutina coseno inverso Salva el signo de side Evalua side positivo Aproximacion inicial de angulo Ciclo de aproximacion sucesiva Hecho cuando COS angle <= side Incrementa angulo Convierte brads a grados Ajusta si el signo es negativo.

Pgina 110 Sensores Inteligentes y sus Aplicaciones

Su Turno Pantalla LCD

Modificar el programa ejemplo para que muestre las mediciones de inclinacin en la LCD Serial Parallax implica an agregar una rutina de inicializacin y cambiar los comandos DEBUG a comandos SEROUT. Igual que el programa de la actividad #5, este programa muestra caracteres que no cambian en la rutina de inicializacin para prevenir parpadeo en la pantalla. Salve HorizontalTilt.bs2 como HorizontalTiltLcd.bs2 Reemplace el comando DEBUG en la rutina de inicializacin con esto:
' Initialize LCD PAUSE 200 SEROUT 14, 84, [22, 12] PAUSE 5 SEROUT 14, 84, [128, "x-tilt=", 148, "y-tilt="] SEROUT 14, 84, [255, %01000, %10100, %01000, %00000, %00000, %00000, %00000, %00000] ' Define caracter personalizado 7 ' * ' * * ' * ' ' ' ' '

Reemplace el primer comando DEBUG en el ciclo DO...LOOP de la rutina principal con el comando SEROUT siguiente. Asegrese de que hay 4 espacios entre las comillas. Los 4 espacios se necesitan para borrar un mximo de 4 caracteres que el comando pudiera enviar a la LCD: un signo negativo, 2 dgitos y el smbolo de grados en el caracter personalizado 7.
SEROUT 14, 84, [135, " ", 135, SDEC angle, 7]

Reemplace el Segundo comando DEBUG en el ciclo DO...LOOP de la rutina principal con lo siguiente. Nuevamente, asegrese de poner 4 espacios entre comillas para borrar el valor previo.
SEROUT 14, 84, [155, " ", 155, SDEC angle, 7]

Cambie PAUSE 100 a PAUSE 350.

Captulo 3: Inclinacin con el Acelermetro Memsic Page 111

Corra el programa y pruebe la pantalla.

Su Turno - Ajustes

Si su pantalla no recorri 90 cuando mantuvo su tarjeta en un eje vertical en particular, puede personalizar s escalamiento y compensacin para que ajuste. Esto implica determinar la escala de salida real de su acelermetro. Si es en realidad 1865 a 3100, repita los pasos de la actividad #3 para hacer las correcciones de escala y compensacin.

Pgina 112 Sensores Inteligentes y sus Aplicaciones

RESUMEN
Este captulo se enfoca en sensar la aceleracin debida a la gravedad con el acelermetro biaxial Mems 2125. Esto hace posible medir tanto inclinacin como rotacin. El acelermetro Mems transmite pulsos que indican la aceleracin actuando en sus ejes x y y. A temperatura ambiente, los pulsos varan ente 3750 a 6250 s, lo cual puede ser usado para medir un rango entre 1 a 1 g con cualquiera de los dos ejes de sensado del acelermetro. El comando PULSIN se usa para medir estos pulsos y, puesto que mide el tiempo en unidades de 2 s, el rango que los programas tienen que examinar es 1875 a 3125. Las mediciones del acelermetro pueden ser desplegadas con la LCD Serial Parallax. Si el programa ha sido ya probado con la Terminal de Depuracin, desplegar mediciones con la LCD serial es typicamente un asunto de agregar una rutina de inicializacin de la LCD al principio del programa y usar comandos SEROUT en lugar de commands DEBUG. Los caracteres personalizados on tiles para desplegar el smbolo de grados () y la letra griega mu (). El acelermetro puede ser usado para medir la rotacin en un plano vertical. Para hacer esto, BASIC Stamp debe calcular el arcotangente de la medicin del eje y del acelermetro dividido entre su medicin del eje x. Las mediciones de los ejes x y y deben ser escaladas y compensadas para ajustarse en un rango de 127 a 127, que es lo que el operador ATN de PBASIC necesita para regresar un ngulo, medido en radianes binarios. Mientras qeu los ngulos dividen al crculo en 360 segmentos, los radianes binarios lo hacen en 256 segmentos. El operator */ de PBASIC puede ser usado para convertir una medicin dada en radianes binarios a grados. El acelermetro puede tambin ser usado para medir ngulos de inclinacin. Puesto que la componente de gravedad que acta en caja eje de sensado del acelermetro es el seno del ngulo de inclinacin, el seno inverso o arcoseno puede ser usado en un eje de medicin para determinar el ngulo de inclinacin. Una An subrutina Arcoseno puede ser usada para calcular el ngulo (en grados) dado un valor que flucta entre 127 a 127. Este rango corresponde a los valores de seno de 1 a + 1. Puesto que tanto el operador ATN como la subrutina Arcsine esperan un valor entre 127 y 127, se presentaron tcnicas para escalamiento y compensacin de las mediciones del acelermetro. El rango de mediciones que obtiene BASIC Stamp del acelermetro est en una escala de 1875 a 3125. La manera ms eficiente de escalar estos valores a un

Captulo 3: Inclinacin con el Acelermetro Memsic Page 113

rango de 127 a 127 implica restar 1875 para alinear a cero el rango, luego usar el operator ** para reducir la escala, despus restar 127. La lnea de cdigo resultante es: value = (value MIN 1875 MAX 3125) - 1875 ** 13369 - 127. El valor 13369 es determinado por la ecuacion de constante de escala ** en la actividad #2.
Preguntas

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.

Cules son las 7 cantidades que puede medir con un acelermetro? Qu significan las siglas MEMS? Qu es lo que se mueve dentro del MX2125 cuando lo inclina? Puede la gravedad ser considerada una forma de aceleracin? Que tiene que hacer a un programa que muestra mediciones en la Terminal de Depuracin para que las muestre en una LCD serial? Cmo puede restringir a una variable a un rango de valores? Cmo puede orientar su tarjeta para aplicar 1 g al eje x del acelermetro? Cmo puede orientar su tarjeta para aplicar 0 g a ambos ejes? Cual es la diferencia entre un radian binario y un grado? Qu rango de valores aceptan los operadores SIN y COS? Qu representan estos valores? Cmo puede convertir de brads a grados? Qu rango of valores acepta el operador ATN? Qu represent esos valores? Porqu puede usar ATN para calcular el ngulo de rotacin de su tarjeta? Qu rango de valores est la subrutina Arccosine diseada para aceptar? Qu representan esos valores? Qu rango de valores est la subrutina Arcsine diseada para aceptar? Qu representan esos valores? Porqu es necesario usar la subrutina Arcsine para determinar el ngulo de inclinacin?

Ejercicios

1. Escriba un comando that receives the aceleracin medicin from the acelermetro's eje y output pin connected to P10. 2. Escriba un comando that receives the aceleracin medicin from the acelermetro's eje x output pin connected to P9. 3. Escriba un comando que convierta el eje de medicin x a microsegundos. 4. Escriba un comando que convierta el eje de medicin x a millisegundos. 5. Escriba una linea de cdigo PBASIC que escale un rango de 0 a 100 a un rango de 20 a 32.

Pgina 114 Sensores Inteligentes y sus Aplicaciones

Proyects

1. Disee un dispositivo que cuente el nmero de veces que gira su tarjeta en un plano vertical. Asuma que empieza en 0. 2. Disee un dispositivo que muestre un mensaje de alarma cada vez que ha sido inclinado ms all de 10 a partir de la horizontal.

Captulo 3: Inclinacin con el Acelermetro Memsic Page 115

Soluciones

Q1. Aceleracin, inclinacin y ngulo de inclinacin, pendiente, rotacin, vibracin, colisin, gravedad. Q2. Sistemas micro electromecnicos, de sus siglas en ingls Micro electromechanical systems. Q3. Una burbuja de gas caliente. Q4. Si, ya sea esttica o dinmica. Q5. Agregar una rutina de inicializacin para la LCD y convertir los comandos DEBUG a comandos SEROUT. Q6. Usando los operadores MAX y MIN. Q7. Inclinarlo hacia arriba sobre su borde ms largo, con los puertos servo hacia arriba. (Como en la Figura 3-14a). Q8. Colocarla plana sobre una mesa. Q9. El ngulo divide un crculo en 360 unidades, mientras que un radian binario divide un crculo en 256 unidades. Q10. 0 a 255. Representa el ngulo, en brads (radianes binarios). Q11. Grados = brads * 360 / 256. Q12. -127 a +127, lo que representa los lados opuesto y adyacente de un tringulo. Q13. Puesto que el acelermetro medir la aceleracin actuando en el eje ym Mems, asi como esa misma sobre su eje xm, ATN de Ay/Ax puede usarse para encontrar el ngulo de rotacin a partir del plano vertical, sobre el que g est actuando. Q14. De -127 a 127, que representa la longitud del lado x del tringulo. Q15. De -127 a 127, que representa la longitud del lado y del tringulo. Q16. Sabemos por geometra que la componente de gravedad que acta en el acelermetro es g sin , entonces para obtener el ngulo debemos tomar arcoseno. E1. E2. E3. E4. E5.
y VAR Word PULSIN 10, 1, y x VAR Word PULSIN 9, 1, x x = x * 2 x = x * 2 / 1000

-Ox = x /500 value = (value MIN 0 MAX 100) ** 8519 + 20

Pgina 116 Sensores Inteligentes y sus Aplicaciones

P1. Ejemplo de solucin:


' Sensores Inteligentes y sus Aplicaciones - Ch3Proj1.bs2 ' Basado en VertWheelRotation.bs2, este dispositivo cuenta el numero ' de veces que la tarjeta ha sido girada en el plano vertical. '{$STAMP BS2} '{$PBASIC 2.5} angle angleOld x y turnCount VAR VAR VAR VAR VAR Word Word Word Word Word ' Inicializa LCD

PAUSE 250 SEROUT 14, 84, [22, 12] PAUSE 5 SEROUT 14, 84, [128, DEC5 turnCount] DO PULSIN 6, 1, x PULSIN 7, 1, y

x = (x MIN 1875 MAX 3125) - 1875 ** 13369 - 127 y = (y MIN 1875 MAX 3125) - 1875 ** 13369 - 127 angle = x ATN y angle = angle */ 361 IF (angle >= 90 y angle < 180) y (angleOld < 90 OR angleOld >= 270) THEN turnCount = turnCount + 1 angleOld = angle ENDIF IF angle >= 270 y (angleOld >= 90 y angleOld < 180) THEN turnCount = turnCount + 1 angleOld = angle ENDIF SEROUT 14, 84, [128, DEC5 (turnCount / 2)] LOOP

P2. Ejemplo de solucin: rutina principal de HorizontalTilt.bs2, modificada


' -----[ Rutina Principal ]--------------------------------------------------DO

Captulo 3: Inclinacin con el Acelermetro Memsic Page 117

PULSIN 6, 1, x PULSIN 7, 1, y

' medicion del eje x ' medicion del eje y

' Escala y compensa valores de los ejes x y y a -127 a 127. x = (x MIN 1875 MAX 3125) - 1875 ** 13369 - 127 y = (y MIN 1875 MAX 3125) - 1875 ** 13369 - 127 ' Calcula y muestra Arcoseno de la medicion del eje x. side = x GOSUB Arcsine DEBUG HOME, "x tilt angle = ", CLREOL, SDEC3 angle, CR IF ABS(angle) > 10 THEN DEBUG CRSRXY, 0, 2, "Warning! Check x-axis!" ELSE DEBUG CRSRXY, 0, 2, CLREOL ENDIF ' Calcula y muestra Arcoseno de la medicion del eje y. side = y GOSUB Arcsine DEBUG CRSRXY, 0, 1, "y tilt angle = ", CLREOL, SDEC3 angle IF ABS(angle) > 10 THEN DEBUG CRSRXY, 0, 3, "Warning! Check y-axis!" ELSE DEBUG CRSRXY, 0, 3, CLREOL ENDIF PAUSE 100 LOOP ' Pause 1/10 second ' Repeat DO...LOOP

Pgina 118 Sensores Inteligentes y sus Aplicaciones

Chapter 4: El mdulo de brjula Hitachi HM55B Page 119

Captulo 4: El Mdulo de brjula Hitachi HM55B


El mdulo de brjula Hitachi HM55B mide direccin. Puede usarlo junto con su BASIC Stamp Board of Education y la LCD Serial Parallax para hacer una brjula digital que trabaje como se muestra en la Figura 4-1. El integrado en el mdulo Hitachi HM55B es una caracterstica ms y ms comn en la electrnica de los automviles la cual provee una direccin de brjula al conductor. El mdulo de brjula tambin es una gran herramienta para robts mviles, dndoles un sentido de direccin que puede hacer una diferencia enorme en justas deportivas robticas as como tambin en laberintos.

Figura 4-1 mdulo de brjula Hitachi en la tarjeta Board of Education con una pantalla LCD

Este captulo usa versiones modificadas de los programas en la documentacin del producto del mdulo de brjula Hitachi HM55B para prueba y calibracin. Tambin presenta el promedio como una manera de filtrar el ruido en la medicin y demostrar como modificar los programas ejemplo existentes para mostrar la direccin de la brjula en la LCD Serial Parallax.

INTERPRETACIN DE LAS MEDICIONES DE LA BRJULA


La documentacin de producto del mdulo de brjula Hitachi HM55B tiene programas ejemplo que usan todos una subrutina llamada Compass_Get_Axes que regresa mediciones de intensidad de campo magntico en x y y. El valor de x es la componente del campo magntico de la tierra actuando en el eje xm del sensor (Figura 4-2). El valor de y es el negativo del campo magntico de la tierra actuando en el eje ym. Si N es el valor reportado por x o y cuando est alineado con el campo magntico de la tierra,

Pgina 120 Sensores Inteligentes y sus Aplicaciones

entonces la medicin x en cierto ngulo ser N cos y la medicin y ser N sin . Con esto y un par de identidades trigonomtricas se ver que es el arcotangente de y/x. Luego, adems de la rotacion del acelermetro, el ngulo del mdulo de la brujula a partir de norte es otro valor que puede ser determinado usando ATN de PBASIC.

Figura 4-2 Ejes de sensado del mdulo de brjula

tan =

N sin y = N cos x

y tan 1 (tan ) = tan 1 x y = tan 1 x

ACTIVIDAD #1: CONEXION Y PRUEBA DEL MDULO DE BRJULA


Conectar el mdulo de brjula al BASIC Stamp y correr un programa de prueba. Verificar que las conexiones elctricas del mdulo estn correctas y listas para operar.
Conectando el Mdulo de brjula

El mdulo de brjula Hitachi HM55B necesita conexiones a Vdd y Vss (tensin y tierra) y 3 conexiones de linea de comunicacin hacia el BASIC Stamp.
Partes Requeridas

(1) Mdulo de brjula Hitachi HM55B (6) Cables para conexiones No se requieren resistencias o capacitores externos; estn interconstrudos en el mdulo.

Chapter 4: El mdulo de brjula Hitachi HM55B Page 121

Diagramas de cableado y esquemtico

El HM55B puede ser conectado con sus pines Dout y Din pins unidos para transmitir y recibir seales de y al mismo pin de E/S de BASIC Stamp. Otro pin de E/S de BASIC Stamp es conectado al pin de reloj del dispositivo. El BASIC Stamp enviar pulsos a este pin mientras que hace que el chip enve su estado o sus mediciones o reciba comandos. BASIC tambin enva seales de nivel bajo al pin Enable del mdulo de brjula antes de intercambiar cualquier dato y para inicializar cada medicin de campo magntico. Construya el circuito mostrado en la Figura 4-3.

Figura 4-3: Diagramas de cableado y esquemtico del mdulo de brjula

Probando el Mdulo de brjula

Este programa ejemplo hace una prueba para asegurarse que el mdulo de brjula est bien conectado y trabaja bien. Pueden haber diferencias notables entre el norte magntico reportado por una brjula mecnica y el reportado por el mdulo brjula. Despus de los programas de calibracin en las siguientes actividades, todos los errores de medicin aparentes deben desaparecer. La Figura 4-4 muestra lo que la brjula debe mostrar cuando detecta que apunta a 35 en sentido horario respecto al norte. No se preocupe ahora de una direccin exacta, el programa solo est probando que el modulo trabaja. Hasta ahora y si lo usa para una idea general de ubicacin del norte, sur, este y oeste, debe estar funcionando.

Pgina 122 Sensores Inteligentes y sus Aplicaciones

Figura 4-4: Salida de la Terminal de Depuracin con la brjula apuntando a 35 en sentido horario respecto al norte.

Programa Ejemplo: TestCompass.bs2


Descarga grtis! Este programa est disponible como el archivo gratuito de en la pgina de Producto de Sensores Inteligentes y sus Aplicaciones, en www.parallax.com.

Baje y descomprima el cdigo fuente seleccionado desde la pgina de producto de Sensores Inteligentes y sus Aplicaciones en www.parallax.com. Abra TestCompass.bs2 con el Editor BASIC Stamp y corra el programa. La Terminal de Depuracin debe mostrar las mediciones de los ejes x y y de la brjula y el ngulo al que apunta, en sentido horario a partir del norte. Si reporta mediciones con menos de 40 de error, est trabajando y est lista para el programa de calibracin presentado en la actividad #2.

' -----[ Titulo ]------------------------------------------------------------' Sensores Inteligentes y sus Aplicaciones - TestCompass.bs2 ' Prueba para asegurar que el mdulo de brjula Hitachi HM55B esta trabajando. ' {$STAMP BS2} ' {$PBASIC 2.5} ' -----[ Definiciones E/S]----------------------------------------------------

Chapter 4: El mdulo de brjula Hitachi HM55B Page 123

DinDout Clk En

PIN PIN PIN

2 0 1

' P2 transmite-recibe a/de Din/Dout ' P0 manda pulsos al reloj de HM55B ' P2 controla pin EN(ABLE) de HM55B

' -----[ Constantes ]--------------------------------------------------------Reset Measure Report Ready NegMask CON CON CON CON CON %0000 ' comando Reset de HM55B %1000 ' comando de inicio de medicion %1100 ' comando para recibir status/valores de ejes %1100 ' 11 -> Hecho, 00 -> no errores %1111100000000000 ' Para negativos 11-bit a 16-bits

' -----[ Variables ]---------------------------------------------------------x y status angle VAR VAR VAR VAR Word Word Nib Word ' ' ' ' datos del eje x datos del eje y banderas de Status Guarda medicion de angulo

' -----[ Rutina Principal]---------------------------------------------------DO GOSUB Compass_Get_Axes angle = x ATN -y angle = angle */ 361 DEBUG HOME, "x-axis N(-S) = ",SDEC x, CLREOL, CR, "y-axis W(-E) = ", SDEC y, CLREOL, CR, CR, "angle = ", DEC angle, " degrees", CLREOL PAUSE 150 LOOP ' Ciclo principal ' Obtiene valores de x y y ' Convierte x y y a brads ' Convierte brads a grados ' Muestra ejes y grados

' Retraso Debug para alentar PC ' Repite ciclo principal

' -----[ Subrutina - Compass_Get_Axes ]-------------------------------------Compass_Get_Axes: HIGH En: LOW En SHIFTOUT DinDout,clk,MSBFIRST,[Reset\4] ' subrutina modulo de brujula ' Manda comando reset a HM55B

HIGH En: LOW En ' HM55B comando inicio medicion SHIFTOUT DinDout,clk,MSBFIRST,[Measure\4] status = 0 ' Borra status anterior de banderas DO HIGH En: LOW En ' Ciclo de chequeo de Status de banderas ' comando de status medicion

Pgina 124 Sensores Inteligentes y sus Aplicaciones

SHIFTOUT DinDout,clk,MSBFIRST,[Report\4] SHIFTIN DinDout,clk,MSBPOST,[Status\4] ' Obtiene Status ciclo UNTIL status = Ready ' Deja ciclo cuando status esta listo SHIFTIN HIGH En DinDout,clk,MSBPOST,[x\11,y\11] ' Obtiene valores de ejes x & y ' Deshabilita Modulo

IF (y.BIT10 = 1) THEN y = y | NegMask 'Guarda 11-bits como palabra con signo IF (x.BIT10 = 1) THEN x = x | NegMask ' Repite para el otro eje RETURN

Su Turno - Experimentos con campos magnticos

No hay muchos lugares donde el campo magntico de la tierra sea paralelo al suelo. Esto mas bien ocurre apuntando ya sea hacia arriba o abajo a partir del suelo. El ngulo al cual el campo magntico de la tierra apunta hacia o desde el suelo es llamado inclinacin. Mantenga su tarjeta a nivel y alinee el eje x de su mdulo brjula con el norte magntico. Cuando el eje x esta alineado con el norte, la Terminal de Depuracin debe mostrar el mayor valor de x y en el ngulo debe leer 0 grados. Mantenga apuntando su brjula al norte, pero ahora inclinela arriba y abajo. Es muy probable que encuentre una medicin an mayor en cierta inclinacin que cuando la sostuvo nivelada. Esto es porque el campo magntico est apuntando hacia o desde el suelo en su posicin. Anote la medicin ms grande del eje x que pudo conseguir.

La declinacin es la cantidad de grados entre el norte magntico y el norte verdadero. Para los Estados Unidos, puede encontrar informacin de esta diferencia en http://nationalatlas.gov. En el momento de escribir este texto se poda encontrar un artculo con informacin acerca la inclinacin y un mapa de declinaciones en: http://nationalatlas.gov/articles/geology/a_geomag.html Uno de los mapas en esta pgina tambin muestra la intensidad total del campo magntico en nanoteslas. La tesla (T) es una medicin de la intensidad del campo magntico, y nanoteslas (nT) son billonsimas de tesla. Las lecturas que regresan los ejes x y y del mdulo brjula estn aproximadamente en millonsimas de teslas (T). De acuerdo con la hoja de datos del HM55B, las unidades de su modulo brjula podran estar entre 1 a 1.6 T.

Chapter 4: El mdulo de brjula Hitachi HM55B Page 125

Encuentre un mapa de intensidad total del campo magntico que muestre su localidad y luego selo para calcular las unidades de intensidad del campo magntico del eje x para su mdulo brjula. Si la intensidad total del campo magntico est listada en nanoteslas, entonces su resultado estar en nanoteslas por unidad del eje x. Para convertir a microteslas, divida su resultado entre 1000.
x axis units = total magnetic field intensity x axis reading

El mdulo de brjula puede tambin sensar campos magnticos de imanes, pero estos pueden daar el sensor! TENGA GUIDADO!
No coloque imanes muy poderosos cerca del mdulo brjula! Mantenga imanes en barra, herradura y electroimanes bastante alejados de su mdulo de brjula hasta que haya determinado una distancia segura usando el procedimiento siguiente. Asegrese de nunca acercarlos de tal forma que se produzcan lecturas en los ejes x y y mayores a 300, porque podra daar el mdulo.

Comience por poner su tarjeta en una mesa y alinear hacia arriba su eje x con el norte magntico. Sostenga una barra magntica sobre el mdulo de brjula con su polo S apuntando al norte y su polo No apuntando al sur como se muestra en la Figura 4-5. Comience por 1 m por encima y bjela hasta que la Terminal de Depuracin reporte una lectura de 120 en el eje x.

Pgina 126 Sensores Inteligentes y sus Aplicaciones

Figura 4-5: Campo magntico de una barra magntica sobre el mdulo brjula

Mantenga la barra magntica horizontal a la misma altura y rtela para que sus polos N y S no estn alineados con el norte y sur terrestre. Conforme gira, la rotacin de la barra magntica debe ser fcil de rastrear con la Terminal de Depuracin.

Note como el campo magntico actuando sobre el mdulo de brjula fu opuesto a lo que mostraban los poles en la barra magntica. Esto es debido a la forma en que el campo magntico da la vuelta del polo norte al sur de la barra magntica. La Figura 4-5 ilustra esto con lineas de campo magntico que muestran el patrn del campo magntico alrededor de la barra magntica.

Chapter 4: El mdulo de brjula Hitachi HM55B Page 127

Tambin puede sostener la barra magntica al mismo nivel con el module brjula, directamente enfrente, como se muestra en la Figura 4-6a. Esta vez los polos del imn estn alineados con el norte y el sur en vez de estar opuestos. Con la barra magntica orientada en la Posicin 1 como se muestra en la Figura 4-6b y su tarjeta orientada al norte, encuentre una distancia que cause una medicin x de 120. Empiece a 1 m de distancia nuevamente. Luego, intente colocar la barra magntica en las posiciones 2 a la 6. Puede usar la Terminal de Depuracin para determinar dnde est la barra magntica?

Figura 4-6: Encontrando los lmites de la distancia segura a. b.

Mediciones entre 127 y 300 Recuerde que las entradas del comando ATN pueden variar de 127 a 127. Si sostiene la barra magntica lo suficientemente cercana al mdulo de brjula como para causar mediciones por encima de 127, necesitar divisonar proporcionalmente las mediciones antes de usar el comando ATN. El procedimiento de escalado presentado en el captulo 3, actividad #3 trabajar bien para estos fines.

La barra magntica de una brjula mecnica tendr un efecto similar. No se trata de un imn muy poderoso, asi es que probablemente no habr problema si se le acerca mucho al

Pgina 128 Sensores Inteligentes y sus Aplicaciones

mdulo brjula. Con una brjula mecnica, su barra magntica automticamente se alinea con el norte, asi es que tendr que mover el mdulo de brjula alrededor de la brjula mecnica y no al revs. Intntelo y note cunta distorsin causa una brjula mecnica cercana sobre las mediciones del mdulo brjula.

Teniendo esta leccin presente, asegrese de mantener brjulas mecnicas muy lejos del mdulo de brjula al ejecutar y probar las calibraciones en las siguientes 2 actividades.

ACTIVIDAD #2: CALIBRACIN DEL MDULO DE BRJULA


El proceso de calibracin involucra apuntar el mdulo de brjula a direcciones conocidas y correctas mientras que corre el programa de calibracin. El programa de calibracin grabar los valores reportados por el mdulo de brjula en una parte no utilizada de la memoria de programacin EEPROM del BASIC Stamp. Cuando corra el programa en la siguiente actividad, leer estos valores de la EEPROM y los usar para determinar la direccin real del mdulo brjula. Esto es llamado calibracin en software porque el procedimiento no hace ajustes fsicos al mdulo brjula.
Procedimiento y Configuracin de la Calibracin

La configuracin involucra alinear una impresion de la brjula y pegarla a una superficie plana. El procedimiento involucra correr el programa ejemplo de esta actividad y seguir los mensajes mientras que alinea la tarjeta Board of Education a los puntos varios en la rueda de la brjula.
Configuracin

Imprima o haga una fotocopia de la Figura 4-7. Si est trabajando con una copia impresa del libro y no tiene una fotocopiadora a su disposicin, solo baje la version .pdf de este texto de la pgina del producto Sensores Inteligentes y sus Aplicaciones en www.parallax.com. Luego, haga una impresin.

Chapter 4: El mdulo de brjula Hitachi HM55B Page 129

Figura 4-7: Brjula de calibracin

Coloque su copia de la Figura 4-7 sobre una superficie plana, nivelada y no metlica. Asegrese que est tan lejos de su monitor como lo permita su cable de programacin. La posicin debe ser tan lejos como sea posible de contenedores metlicos, equipos y cualquier otra fuente potencial de interferencia de campo magntico. Revise que su mesa no tenga herrajes metlicos por debajo. Antes de completar su posicin, coloque su brjula mecnica muy lejos de cualquier fuente de interferencia magntica y note la direccion. Luego, coloque

Pgina 130 Sensores Inteligentes y sus Aplicaciones

la brjula mecnica en su superficie de trabajo. La direccin del norte al que apunta no debe cambiar. Si cambia, encuentre una posicin diferente sin interferencia magntica. Use la brjula mecnica para alinear la linea de 0 con el norte magntico como se muestra en la Figura 4-8. Pegue la impresin a al mesa asegurando que no doble la hoja al hacerlo. Coloque la brjula mecnica muy lejos de su impresin.

Figura 4-8 Alineando al Norte Magntico

Procedimiento

Cuando corra CalibrateCompass.bs2, le pedir alinear su tarjeta a varios ngulos en la impresin de la brjula y presionar la tecla enter despus de cada uno. Los primeros dos ngulos (0 y 90) se muestran en la Figura 4-9.
Figura 4-9: Brjula a 0 y 90

a.

b.

Chapter 4: El mdulo de brjula Hitachi HM55B Page 131

Cuando corra CalibrateCompass.bs2, primero se le pedira hacer click en la ventana de transmission de la Terminal de Depuracin (mostrada en la Figura 4-10), y luego dar Enter. Despus se le pedir teclear C para calibrar o R para revisar la configuracin de la calibracin. Teclear la letra C comenzar la calibracin, durante la cual se le pedir apuntar la brjula a 0 y 90 como se muestra en la Figura 4-9, y luego a: 180, 270, 0, 22.5, 45, 67.5, 90, 112.5, 135, 157.5, 180, 202.5, 225, 247.5, 250, 292.5, 315, y finalmente, 337.5. Necesitar presionar Enter antes de que mueva su tarjeta a cada ngulo. Abra y corra CalibrateCompass.bs2. Siga las instrucciones hasta que obtenga el mensaje "CALIBRATION COMPLETED". Si comete un error reinicie el programa desde el principio. El proceso de calibracin solo toma un minuto o dos vale la pena tener la configuracin correcta en la memoria EEPROM de su BASIC Stamp 2.

Figura 4-10: Ventana de transmisin Transmit Windowpane

Pgina 132 Sensores Inteligentes y sus Aplicaciones

Programa Ejemplo - CalibrateCompass.bs2


Descarga grtis! Este programa esta disponible como descarga grtis .bs2 en la pgina del producto de Sensores Inteligentes y sus Aplicaciones en www.parallax.com. Si desea saber cmo trabaja este programa, lea los comentarios aqu.

' ' ' ' ' ' ' ' ' ' ' ' '

-----[ Titulo ]------------------------------------------------------------Sensores Inteligentes y sus Aplicaciones - CalibrateCompass.bs2 Este programa colecta y guarda mediciones del mdulo Hitachi HM55B en la EEPROM para correcciones de interpolation lineal y compensacion en eje que ser ejecutada por TestCalibratedCompass.bs2. {$STAMP BS2} {$PBASIC 2.5} IMPORTANTE: Siga las instrucciones en el captulo #4, actividad #2 de Sensores Inteligentes y sus Aplicaciones. Disponible como descarga en la pagina de Sensores Inteligentes y sus Aplicaciones en www.parallax.com.

' -----[ Datos EEPROM]-------------------------------------------------------CompassOffsets DATA @ 0, (4) CompassLowVal DATA (1) CompassCal DATA (16) ' Guardan compensaciones de ejes x y y ' Guarda indice del mas bajo angulo ' 16 angulos de referencia para brjula

' -----[ Definiciones de Pin]------------------------------------------------DinDout PIN 2 ' P2 transmite-recibe de/a Din/Dout Clk PIN 0 ' P0 manda pulsos al Reloj de HM55B En PIN 1 ' P1 controla /EN(ABLE) de HM55B ' -----[ Constantes ]--------------------------------------------------------Reset CON %0000 ' Comando Reset para HM55B Measure CON %1000 ' Comando de inicio de medicion Report CON %1100 ' Comando obtener status/valores de eje Ready CON %1100 ' 11 -> Hecho, 00 -> no errores NegMask CON %1111100000000000 ' De negativo 11-bit a 16-bits Current Previous CON CON 0 1 ' Indice para arreglo tabular ' Indice para arreglo tabular

' -----[ Variables ]---------------------------------------------------------x VAR Word ' Datos del eje x y VAR Word ' Datos del eje y status VAR Nib ' Banderas de status angle VAR Word ' Medicion de Angulo counter VAR Byte ' Contador de ciclo index VAR Nib ' Indice EEPROM character VAR Byte ' Guarda un caracter DEBUGIN

Chapter 4: El mdulo de brjula Hitachi HM55B Page 133

integer fraction brads table temp axisOffset

VAR VAR VAR VAR VAR VAR

Word Nib Byte Byte(2) Word(2) Word

' Valores enteros para pantalla ' Valores fraccionales para pantalla ' Mediciones de radianes binarios ' Guarda valores en tabla ' Guarda mediciones de ejes ' Guarda valor de compensacion de eje

' -----[ Rutina Principal ]--------------------------------------------------DEBUG "Click the Transmit Windowpane, ", CR, ' Espera al usuario. "then press Enter... ", CR, CR DEBUGIN character DO ' Ciclo principal DEBUG "Type a character: ", CR, ' Menu "C - calibrate ", CR, "R - review calibracinsettings", CR, "> " DEBUGIN Character ' Obtener seleccion del usuario DEBUG CR IF character = "c" OR character = "C" THEN ' "c" -> calibrate GOSUB Compass_Calibrate ' "r" -> review settings ELSEIF character = "r" OR character = "R" THEN GOSUB Calibration_Review ENDIF DEBUG CR, "Press any key to", CR, "continue" DEBUGIN character DEBUG CR, CR LOOP ' espera por el usuario

' Repite ciclo principal

' -----[ Subrutina - Compass_Calibrate ]------------------------------------Compass_Calibrate: GOSUB GOSUB GOSUB DEBUG Get_And_Store_Axis_Offsets Get_And_Store_Interpolation Get_And_Store_Low_Value_Address CR, "CALIBRATION COMPLETED...", CR, "You are now ready to run ", CR, "TestCalibratedCompass.bs2.", CR

RETURN ' -----[ Subrutina - Get_And_Store_Axis_Offsets ]---------------------------' Esta subrutina pide al usuario apuntar la brjula a norte, luego este, luego

Pgina 134 Sensores Inteligentes y sus Aplicaciones

' sur, luego oeste. Luego promedia los valores maximo y minimo para cada ' eje y guarda ese promedio en el area EEPROM reservada por la directiva ' CompassOffsets DATA . Get_And_Store_Axis_Offsets: ' El ciclo FOR...NEXT repite para 4 mediciones de eje. FOR counter = 0 TO 3 ' Instruye al usuario apuntar brjula a una direccion particular y espera ' por el caracter ENTER. DEBUG CR, "Point compass to " LOOKUP counter, [ 0, 90, 180, 270 ], integer DEBUG DEC integer DEBUG " degrees", CR, "then press Enter..." DEBUGIN character GOSUB Compass_Get_Axes ' Calcula compensacion en base a valores ' en la EEPROM. SELECT counter CASE 0 temp(0) = x CASE 1 temp(1) = y CASE 2 x = x + temp(0) IF x.BIT15 = 1 THEN x = ABS(x)/2 x = -x ELSE x = x / 2 ENDIF WRITE CompassOffsets, Word x CASE 3 y = y + temp(1) IF Y.BIT15 = 1 THEN y = ABS(y)/2 y = - y ELSE y = x / 2 ENDIF WRITE CompassOffsets + 2, Word y ENDSELECT NEXT RETURN ' -----[ Subrutinea - Get_And_Store_Interpolation ]---------------------' Obtiene mediciones de eje max y min de cada eje y guarda

' Norte ' Este ' Sur

' Oeste

Chapter 4: El mdulo de brjula Hitachi HM55B Page 135

' Esta subrutina pide al usuario apuntar la brjula a direcciones separadas ' cada 22.5 grados y guarda el angulo para cada medicion en el area EEPROM ' reservada por la directiva CompassCal DATA. Get_And_Store_Interpolation: FOR counter = 0 TO 15 DEBUG CR, "Point brjula to " LOOKUP counter, [0, 22, 45, 67, 90, 112, 135, 157, 180, 202, 225, 247, 270, 292, 315, 337], integer LOOKUP counter, [ 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5 ], fraction DEBUG DEC integer IF fraccin = 5 THEN DEBUG ".", DEC fraction DEBUG " degrees", CR, "then press Enter..." DEBUGIN character ' Espera al usuario GOSUB Compass_Get_Axes ' Obtiene valores x y y GOSUB Compass_Correct_Offsets ' Compensacion de eje correcta angle = x ATN - y ' Convirte x y y a brads WRITE CompassCal + counter, angle ' Guarda como valor brad NEXT RETURN ' -----[ Subrutina - Get_And_Store_Low_Value_Address ]----------------------' ' ' ' Esta subrutina encuentra y guarda la direccin del mas bajo valor en el area EEPROM reservada por la directiva CompassCal DATA y la guarda en un byte reservado por la directiva CompassLowVal DATA. Esto reduce el cdigo en TestCalibratedCompass.bs2.

Get_And_Store_Low_Value_Address: index = 8 table(current) = 0: table(previous) = 0 DO index = index + 1 READ CompassCal + index, table(current) READ CompassCal + (index - 1 & $F), table(previous) ciclo UNTIL table(current) < table(previous) WRITE CompassLowVal, index RETURN ' -----[ Subrutina - Calibration_Review ]-----------------------------------' Muestra valores EEPROM. Calibration_Review:

Pgina 136 Sensores Inteligentes y sus Aplicaciones

DEBUG CR, "Axis Offsets:", CR READ CompassOffsets, Word x DEBUG CR, "x-Offset = ", SDEC x READ CompassOffsets + 2, Word y DEBUG CR, "y-Offset = ", SDEC y, CR DEBUG CR, "Index of low value en CompassCal:", CR READ CompassLowVal, index DEBUG CR, "Low value ", ? index DEBUG CR, "TestCalibratedCompass.bs2", CR, "uses these values to ", CR, "correct errors:", CR DEBUG CR, "Brad Angle CR, "Ideal Actual CR, "----------Degree Angle", Ideal Actual", -----------", CR

FOR counter = 0 TO 15 brads = counter * 16 DEBUG CRSRX, 1, DEC3 brads READ CompassCal + counter, angle DEBUG CRSRX, 10, DEC3 angle LOOKUP counter, [0, 22, 45, 67, 90, 112, 135, 157, 180, 202, 225, 247, 270, 292, 315, 337], integer LOOKUP counter, [ 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5 ], fraction DEBUG CRSRX, 19, DEC3 integer, ".", DEC fraction angle = angle */ 361 ' Convierte brads a grados DEBUG CRSRX, 28, DEC3 angle, CR PAUSE 50 ' Retardo Debug para alentar PCs NEXT DEBUG CR RETURN ' -----[ Subrutina - Compass_Get_Axes ]-------------------------------------Compass_Get_Axes: HIGH En: LOW En SHIFTOUT DinDout,clk,MSBFIRST,[Reset\4] ' subrutina mdulo de brjula ' Comando envia reset al HM55B

HIGH En: LOW En ' Comando HM55B inicia medicin SHIFTOUT DinDout,clk,MSBFIRST,[Measure\4] status = 0 ' Limpia banderas status previas DO ' Ciclo de checar status banderas HIGH En: LOW En ' Comando de status de medicion SHIFTOUT DinDout,clk,MSBFIRST,[Report\4]

Chapter 4: El mdulo de brjula Hitachi HM55B Page 137

SHIFTIN DinDout,clk,MSBPOST,[Status\4] ' Obten Status ciclo UNTIL status = Ready ' Fin ciclo si status es listo SHIFTIN HIGH En DinDout,clk,MSBPOST,[x\11,y\11] ' Obten valores de ejess x & y ' Deshabilita modulo ' Guarda 11-bits,palabra con signo ' Repite para el otro eje

IF (y.BIT10 = 1) THEN y = y | NegMask IF (x.BIT10 = 1) THEN x = x | NegMask RETURN

' -----[ Subrutina - Compass_Correct_Offsets ]------------------------------' ' ' ' ' Esta subrutina corrige interferencia acumulativa del campo magntico que puede venir de fuentes como PCB, cables, baterias cercanas o una fuente de corriente cercana. Esta subrutina confia en los valores guardados en el espacio EEPROM antes reservado por la directiva CompassOffsets DATA. Estos valores EEPROM son escritos por este programa durante la calibracion.

Compass_Correct_Offsets: READ CompassOffsets, Word axisOffset x = x - axisOffset READ CompassOffsets + 2, Word axisOffset y = y - axisOffset RETURN ' ' ' ' Obtiene corrige Obtiene corrige compensacion eje x eje x compensacion eje y eje y

Su Turno Revisando la confirguracin de la calibracin

En la rutina principal, tecle la letra C para guardar valores de calibracin en la EEPROM de BASIC Stamp. Tambin puede revisar estos valores de calibracin corriendo el programa y tecleando R en vez de C. Esto mostrar una comparacin de las mediciones de ngulo reales vs. ideales en radianes binarios. Estos errores son causados en parte por la tarjeta o circuito impreso donde el sensor est montado. Algunos de los materiales en el circuito son magnticos y no estn necesariamente alineados con el campo magntico de la tierra. Otras fuentes de campo magntico que pueden causar errores de medicin provienen de corrientes elctricas cercanas, como electrones fluyendo por las lineas Vdd y Vss para energizar el LED de encendido de su tarjeta. Corra CalibrateCompass.bs2 nuevamente. Haga click en la ventana de Transmisin de la Terminal de Depuracin y Enter. Teclee R para revisar la configuracin de la calibracin. Examine los errores reportados, los cuales el programa ejemplo en la siguiente actividad usar para hacer correcciones.

Pgina 138 Sensores Inteligentes y sus Aplicaciones

ACTIVIDAD #3: PROBANDO LA CALIBRACIN


Despus de la actividad #2, el programa en esta actividad debera hacer que su brjula funcione muy bien, lo suficientemente para reconocer correctamente la mayora de las 64 direcciones en la Figura 4-11. En esta actividad, la Figura 4-11 se usar para probar el funcionamiento del mdulo brjula.
Figura 4-11: Escala de 64 direcciones

Chapter 4: El mdulo de brjula Hitachi HM55B Page 139

Direccionamiento

TestCalibratedCompass.bs2 va y encuentra los valores que CalibrateCompass.bs2 grab en la memoria EEPROM del BASIC Stamp. Luego, usa los valores a corregir para escalar el error, y refina las mediciones usando unaa tecnica llamada interpolacin lineal. Imprima o fotocopie la escala mostrada en la Figura 4-11 y siga la configuracin en la actividad #2 para alinearla al norte y fijarla a la mesa. Calcule los ngulos no marcados en la escala. Abra y corra TestCalibratedCompass.bs2. Alinee su tarjeta a los varios ngulos, y compare los ngulos medidos reportados por el mdulo de brjula contra los ngulos reales.

Si esto an no es suficiente precisin para usted, la siguiente actividad le mostrar cmo mejorar an ms.
Programa Ejemplo: TestCalibratedCompass.bs2
Descarga Gratis. Este programa est disponible como descarga grtis .bs2 en la pgina del producto Sensores Inteligentes y sus Aplicaciones en www.parallax.com. Lea los comentarios del cdigo para una explicacin de cmo funciona.

' ' ' ' ' ' '

-----[ Titulo ]------------------------------------------------------------Sensores Inteligentes y sus Aplicaciones - TestCalibratedCompass.bs2 Demuestra la precision del modulo brjula Hitachi HM55B despus de calibracin con CalibrateCompass.bs2. {$STAMP BS2} {$PBASIC 2.5}

' -----[ Descripcion del Programa]-------------------------------------------' ' Este programa despliega las siguientes mediciones del Sensor brjula ' Hitachi HM55B: ' ' - Mediciones de campo magntico de ejes x y y corregidas en compensacion ' - Angulo en radianes binarios en sentido horario a partir del norte, ' corregidos por tabla de interpolacion lineal ' - angulo en grados en sentido horario a partir del norte, ' corregidos por tabla de interpolacion lineal ' IMPORTANTE: Este programa confia en los valores EEPROM guardados por ' CalibrateCompass.bs2 durante el proceso de calibracin.

Pgina 140 Sensores Inteligentes y sus Aplicaciones

' ' ' ' ' ' ' '

Ese proceso de calibracin debe ser ejecutado antes de correr este programa prueba. Para instrucciones de como ejecutar el proceso de calibracin, consulte el Captitulo #4, actividad #2 de Sensores Inteligentes y sus Aplicaciones. Esta disponible para descargar en la pagina de Sensores Inteligentes y sus Aplicaciones en www.parallax.com.

' -----[ EEPROM Data ]-------------------------------------------------------CompassOffsets DATA @ 0, (4) CompassLowVal DATA (1) CompassCal DATA (16) ' Guarda compensaciones de ejes x y y ' Guarda indice del angulo mas bajo ' 16 angulos de referencia para brjula

' -----[ Definiciones de Pines ]---------------------------------------------DinDout Clk En PIN PIN PIN 2 0 1 ' P6 transmite-recibe de/a Din/Dout ' P5 envia pulsos al reloj de HM55B ' P4 controla EN(ABLE) de HM55B

' -----[ Constantes ]--------------------------------------------------------Reset Measure Report Ready NegMask current previous CON CON CON CON CON CON CON %0000 ' Comando Reset para el HM55B %1000 ' Comando de inicio de medicion %1100 ' Comando obtener status/valores de eje %1100 ' 11 -> Hecho, 00 -> no errores %1111100000000000 ' De negativo 11-bit a 16-bits 0 ' Indice para arreglo tabular 1 ' Indice para arreglo tabular

' -----[ Variables ]---------------------------------------------------------x VAR Word ' Datos del eje x y VAR Word ' Datos del eje y status VAR Nib ' Banderas de status angle VAR Word ' Medicion de Angulo axisOffset VAR angle ' Compensacion del eje index table span angleOffset VAR VAR VAR VAR Status Byte(2) x y ' ' ' ' Indice EEPROM Guarda tabla de valores EEPROM Span entre entradas de tabla Compensa entre medido y tabla

' -----[ Inicializacion ]----------------------------------------------------DEBUG CLS ' -----[ Rutina Principal ]--------------------------------------------------DO ' Ciclo principal

Chapter 4: El mdulo de brjula Hitachi HM55B Page 141

GOSUB GOSUB angle DEBUG

GOSUB DEBUG angle DEBUG PAUSE LOOP

Compass_Get_Axes Compass_Correct_Offsets = x ATN -y HOME, "x-axis N(-S) = ",SDEC x, CLREOL, CR, "y-axis W(-E) = ", SDEC y, CLREOL Compass_Interpolate CR, CR, "angle = ", DEC angle, " brads", CLREOL = angle */ 361 CR,"angle = ", DEC angle, " degrees", CLREOL 150

' ' ' '

Obtiene valores x y y corrige compensacs de ejes Convierte x y y a brads Despliega ejes corregidos

' Interpolacion Lineal ' Muestra angulo interpolado ' ... en brads ' Convierte brads a grados ' Muestra angulo interpolado ' ... en grados ' Retraso de Debug para alentar PCs ' Repite ciclo principal

' -----[ Subrutina - Compass_Get_Axes ]-------------------------------------' Esta subrutina maneja la communication BASIC Stamp - HM55B y guarda las ' mediciones de fuerza de campo magntico regresadas por el dispositivo en ' las variables de ejes x y y. Compass_Get_Axes: HIGH En: LOW En SHIFTOUT DinDout,clk,MSBFIRST,[Reset\4] HIGH En: LOW En SHIFTOUT DinDout,clk,MSBFIRST,[Measure\4] status = 0 DO ' subrutina mdulo de brjula ' Enva comando reset a HM55B

' Comando inicia medicin HM55B ' Limpia banderas status previas

' Ciclo de checar status banderas HIGH En: LOW En ' Comando de status de medicion SHIFTOUT DinDout,clk,MSBFIRST,[Report\4] SHIFTIN DinDout,clk,MSBPOST,[Status\4] ' Obten Status ciclo UNTIL status = Ready ' Fin ciclo si status es listo SHIFTIN HIGH En DinDout,clk,MSBPOST,[x\11,y\11] ' Obtiene valores de ejes x & y ' Deshabilita modulo ' Guarda 11-bits,palabra con signo ' Repite para el otro eje

IF (y.BIT10 = 1) THEN y = y | NegMask IF (x.BIT10 = 1) THEN x = x | NegMask RETURN

' -----[ Subroutine - Compass_Correct_Offsets ]------------------------------' ' ' ' Esta subrutina corrige interferencia acumulativa del campo magntico que puede venir de fuentes como PCB, cables, baterias cercanas o una fuente de corriente cercana. Esta subrutina confia en los valores guardados en el espacio EEPROM antes reservado por la directiva CompassOffsets DATA.

Pgina 142 Sensores Inteligentes y sus Aplicaciones

' Estos valores EEPROM son escritos por CalibrateCompass.bs2. Compass_Correct_Offsets: READ CompassOffsets, Word axisOffset x = x - axisOffset READ CompassOffsets + 2, Word axisOffset y = y - axisOffset RETURN ' -----[ Subrutina - Compass_Interpolate ]----------------------------------' ' ' ' ' ' ' ' ' ' ' ' ' Esta subrutina aplica interpolacion lineal para refinar la medicion de la brujula. Este segundo nivel de refinamiento puede ser ejecutado luego de la subrutina Compass_Correct_Offsets, y puede corregir flexion axal y otros factores inherentes al integrado HM55B. La subrutina confia en las 16 mediciones de brjula reales que fueron guardadas en las 16 localidades EEPROM reservadas por la directiva CompassCal DATA. Estas mediciones fueron guardadas por CalibrateCompass.bs2, y representan las mediciones de brjula reales para 0, 22.5, 45, 90,..., 337.5 grados. La subrutina encuentra las 2 mediciones EEPROM entre las que la medicin de angulo en curso cae. Entonces actualiza la medicion de angulo en base a donde cae la medicin de angulo entre los 2 valores conocidos de la tabla. ' ' ' ' Obtiene corrige Obtiene corrige compensacion eje x eje x compensacion eje y eje y

Compass_Interpolate: ' Empieza con el valor mas bajo en la tabla CompassCal. READ CompassLowVal, index ' Carga los valores de tabla corriente y previo. READ CompassCal + index, table(current) READ (CompassCal + (index - 1 & $F)), table(previous)

' ' ' ' ' ' '

El bloque de codigo IF...ELSEIF...ELSE...ENDIF encuentra los 2 valores de la tabla EEPROM CompassCal entre los que cae la medicion de angulo en curso y calcula la diferencia entre the angulo de medicion en curso y el mas bajo de los 2 valores de tabla. Los bloques IF y ELSEIF se encargan de valores que son mayores que el mas grande o menores que el mas bajo de los valores de la tabla. El bloque ELSE maneja todo entre el mayor y el menor de los valores de la tabla.

IF (angle >= table(previous)) THEN span = (255 - table(previous)) + table(current) angleOffset = angle - table(previous) ELSEIF (angle <= table(current)) THEN

Chapter 4: El mdulo de brjula Hitachi HM55B Page 143

span = table(current) + (255 - table(previous)) angleOffset = angle + (255 - table(previous)) ELSE index = index - 1 READ CompassCal + index, table(current) DO table(previous) = table(current) index = index + 1 READ CompassCal + index, table(current) IF (angle <= table(current)) y (angle > table(previous)) THEN span = table(current) - table(previous) angleOffset = angle - table(previous) EXIT ENDIF ciclo ENDIF ' ' ' ' ' ' Despues de que la compensacion entre la medicion de angulo en curso y la medicion de tabla mas proxima hacia abajo ha sido determinada, este bloque de codigo la usa junto con la distancia entre los datos de tabla arriba y abajo la medicion de angulo para resolver: angle(corrected)= angle(offset) * 16 / span. Este bloque tambien redondea arriba o abajo comparando el residuo de la division angleOffset / span contra el valor de (span / 2).

angleOffset = angleOffset * 16 angle = (angleOffset / span) + ((angleOffset // span) / (span / 2)) angle = ((index - 1 & $F) * 16) + angle angle = angle & $ff RETURN

Su Turno - Desplegando "Grados" como

El desplegado del smbolo de grados en la Terminal de Depuracin fue presentado en el Captulo #3, actividad #5. Cambie el programa para mostrar grados con el caracter ASCII 176, smbolo .

ACTIVIDAD #4: MEJORA DE LAS MEDICIONES DE LA BRJULA A TRAVS DEL PROMEDIO


Quiz haya notado que las mediciones x y y en la Terminal de Depuracin tendieron a alternar entre 2 or an 3 valores diferentes. Este es el resultado de varios tipos de interferencias de varios tipos diferentes que juntos se conocen como ruido. Algunas fuentes comunes estn en dispositivos de AC cercanos y lneas de energa, actividad digital en el BASIC Stamp y an actividad digital dentro del integrado HM55B.

Pgina 144 Sensores Inteligentes y sus Aplicaciones

Un modo efectivo para eliminar los efectos del ruido es tomando un promedio de las mediciones de los ejes x y y de la brjujla. As, si el ruido causa que una medicin sea un poco ms alta, la siguiente un poco ms baja, y la siguiente correcta, el promedio de todas las mediciones eliminar los altos y bajos y las establecer en el valor correcto. Una de las razones de porqu las actividades de calibracin y prueba de calibracin pueden no entregar los mejores resultados es debido al ruido. Esta actividad demuestra cmo puede modificar cualquiera de los programs ejemplo en este captulo para tomar mediciones promediadas y eliminar los efectos del ruido.
Incorporando el Promedio en los Programas de la Brjula

Hay 3 pasos mayores para incorporar el promediado en los programas ejemplo de este captulo. Primero, agregue un par de directivas CON a la seccin de Constantess:
Negative Positive CON CON 1 0 ' Word.bit15 = 1 -> negative ' Word.bit15 = 0 -> positive

Luego, agregue 4 variables a la seccin de Variables de los programas.


mCount xSum ySum sign VAR VAR VAR VAR Nib Word Word Bit ' ' ' ' Medicin count eje x medicin accumulator eje y medicin accumulator Sign bit

Finalmente, modifique la subrutina Compass_Get_Axes como se muestra abajo. El cdigo de la subrutina original Compass_Get_Axes est anidado en un ciclo FOR...NEXT que mantiene una suma en ejecucin de las mediciones de los ejes x y y con las variables xSum y ySum. Puesto que el promedio de un grupo de mediciones es la suma de las mediciones dividida entre el nmero de mediciones tomadas, hay cdigo despus del ciclo FOR...NEXT que hace que x equivalga a xSum 10 y y equivalga a ySum 10.
Compass_Get_Axes: xSum = 0 ySum = 0 FOR mCount = 1 TO 10 ' Subrutina modificada ' Acumuladores en cero

' Toma 10 mediciones

' *** El codigo Original de la subrutina Compass_Get_Axes va aqu *** xSum = xSum + x ySum = ySum + y NEXT ' Mantiene suma en ejecucion de x ' Mantiene suma en ejecucion de y

Chapter 4: El mdulo de brjula Hitachi HM55B Page 145

' Divide xSum sign = xSum.BIT15 xSum = ABS(xSum) x = xSum / 10 IF xSum // 10 >=5 THEN x = x + 1 IF sign = Negative THEN x = - x sign = ySum.BIT15 ySum = ABS(ySum) y = ySum / 10 IF ySum // 10 >=5 THEN y = y + 1 IF sign = Negative THEN y = - y RETURN Division en PBASIC con nmeros negativos

' ' ' ' ' ' ' ' ' '

Guarda el signo de xSum Toma el valor absoluto x = la medicion promedidada fraccion > .5? Redondea Si xSum es negativo, niega x Guarda el signo de ySum Toma el valor absoluto y = la medicion promedidada fraccion > .5? Redondea Si ySum es negativo, niega y

Los operadores PBASIC para divisin y mdulo (/ y //) son para usarse con numers positivos. Si el numerador pudiera ser negativo, la mejor estrategia es salvar el signo del numerador antes de tomar su valor absoluto (sign = numerator.BIT15). Luego, ejecute la divisin. Optionalmente, puede redondear hacia arriba o abajo dependiendo del residuo de la divisin. Antes de que termine, revise el signo y si es negativo, haga negativo al resultado (result = - result). numerator VAR Word denominator VAR Word result VAR Word sign VAR Bit Negative CON 1 Positive CON 0 ' Rutina de division con un numerador que pudiera ser negativo. sign = numerator.BIT15 numerator = ABS(numerator) result = numerator / denominator IF numerator // denominator >= (denominator / 2) THEN result = result + 1 ENDIF IF sign = Negative THEN result = - result

Programa Ejemplo: TestCompassAveraged.bs2


Descarga gratis Este programa est disponible como descarga grtis .bs2 en la pgina del producto de Sensores Inteligentes y sus Aplicaciones en www.parallax.com.

Pgina 146 Sensores Inteligentes y sus Aplicaciones

El procedimiento para convertir un programa a promediar sus its mediciones de ejes x y y fue aplicado a TestCompass.bs2, y luego salvado como TestCompassAveraged.bs2. Abra y corra TestCompass.bs2 de la actividad #1. Observe las mediciones de los eje x y y- a algunas direcciones diferentes. Se espera sean ruidosas, parpadeando entre 2 or 3 valores diferentes. Abra y corra TestCompassAveraged.bs2. Las mediciones deben ser mucho ms estables. Deberan parpadear solo cuando est muy cerca de la transicin entre 2 resultados diferentes.

' -----[ Titulo ]------------------------------------------------------------' Sensores Inteligentes y sus Aplicaciones - TestCompassAveraged.bs2 ' Prueba para asegurar que el mdulo de brjula Hitachi HM55B esta trabajando. ' {$STAMP BS2} ' {$PBASIC 2.5} ' -----[ Definiciones E/S ]--------------------------------------------------DinDout Clk En PIN PIN PIN 2 0 1 ' P2 transmite-recibe a/de Din/Dout ' P0 manda pulsos al reloj de HM55B ' P2 controla pin EN(ABLE) de HM55B

' -----[ Constantes ]--------------------------------------------------------Reset Measure Report Ready NegMask Negative Positive CON CON CON CON CON CON CON %0000 ' comando Reset de HM55B %1000 ' comando de inicio de medicion %1100 ' comando para recibir status/valores de ejes %1100 ' 11 -> Hecho, 00 -> no errores %1111100000000000 ' Para negativos 11-bit a 16-bits 1 0 ' Word.bit15 = 1 -> negativo ' Word.bit15 = 0 -> positivo

' -----[ Variables ]---------------------------------------------------------x y status angle mCount xSum ySum sign VAR VAR VAR VAR VAR VAR VAR VAR Word Word Nib Word Nib Word Word Bit ' ' ' ' ' ' ' ' datos del eje x datos del eje y banderas de Status Guarda medicion de angulo cuenta de medicion acumulador de medicion de eje x acumulador de medicion de eje y bit de signo

' -----[ Rutina Principal ]---------------------------------------------------

Chapter 4: El mdulo de brjula Hitachi HM55B Page 147

DO GOSUB Compass_Get_Axes angle = x ATN -y angle = angle */ 361 DEBUG HOME, "x-axis N(-S) = ",SDEC x, CLREOL, CR, "y-axis W(-E) = ", SDEC y, CLREOL, CR, CR, "angle = ", DEC angle, " degrees", CLREOL PAUSE 150 LOOP

' Ciclo principal ' Obtiene valores de x y y ' Convierte x y y a brads ' Convierte brads a grados ' Muestra ejes y grados

' Retraso Debug para alentar PC ' Repite ciclo principal

' -----[ Subrutina - Compass_Get_Axes ]-------------------------------------Compass_Get_Axes: xSum = 0 ySum = 0 FOR mCount = 1 TO 10 HIGH En: LOW En SHIFTOUT DinDout,clk,MSBFIRST,[Reset\4] ' subrutina modulo de brujula ' Acumuladores a cero

' Toma 10 mediciones ' Manda comando reset a HM55B

HIGH En: LOW En ' HM55B comando inicio medicion SHIFTOUT DinDout,clk,MSBFIRST,[Measure\4] status = 0 ' Borra status anterior de banderas ' Ciclo de HIGH En: LOW En ' SHIFTOUT DinDout,clk,MSBFIRST,[Report\4] SHIFTIN DinDout,clk,MSBPOST,[Status\4] ' ciclo UNTIL status = Ready ' Deja listo SHIFTIN HIGH En DinDout,clk,MSBPOST,[x\11,y\11] DO chequeo de Status de banderas comando de status medicion Obtiene Status ciclo cuando status esta

' Obtiene valores de ejes x & y ' Deshabilita Modulo

IF (y.BIT10 = 1) THEN y = y | NegMask ' Guarda 11bits como palabra signada IF (x.BIT10 = 1) THEN x = x | NegMask ' Repite para el otro eje xSum = xSum + x ySum = ySum + y NEXT ' Mantiene una suma en ejecucion de x ' Mantiene una suma en ejecucion de y

Pgina 148 Sensores Inteligentes y sus Aplicaciones

sign = xSum.BIT15 xSum = ABS(xSum) x = xSum / 10 IF xSum // 10 >=5 THEN x = x + 1 IF sign = Negative THEN x = - x sign = ySum.BIT15 ySum = ABS(ySum) y = ySum / 10 IF ySum // 10 >=5 THEN y = y + 1 IF sign = Negative THEN y = - y RETURN

' ' ' ' ' ' ' ' ' '

Guarda signo de xSum Toma valor absoluto x = la medicion promediada fraccion >.5? Redondea arriba Si xSum negativo, niega x Guarda signo de ySum Toma valor absoluto y = la medicion promediada fraccion >.5? Redondea arriba Si xSum negativo, niega x

Su Turno - Promediando los Programas de calibracin y Prueba de calibracin

Los programas de calibracin y prueba de calibracin significativamente mejoran la precisin de su brjula digital. Incorporando el promedio en ambos, la precisin de su brjula digital se ver mejorada. Siga los pasos en esta actividad para incorporar el promedio en una copia de CalibrateCompass.bs2. En vez de modificar la subrutina Compass_Get_Axes del programa solo copie la subrutina modificada de este programa (TestCompassAveraged.bs2) y pguela sobre la que est en su copia de CalibrateCompass.bs2. Corra su copia modificada de CalibrateCompass.bs2 y repita los pasos de la actividad #2. Haga una copia de TestCalibratedCompass.bs2, y modifiquela para que ejecute el promediado. Repita las pruebas de precisin de la actividad #3. Su brjula digital debe funcionar realmente bien ahora.

ACTIVIDAD #5: MEDICIONES EN MOVIMIENTO


Esta actividad demuestra cmo reemplazar la Terminal de Depuracin con la LCD Serial Parallax para hacer su brjula digital mvil.
Conectando la LCD Serial Parallax con un Cable Extensin

La LCD Serial Parallax es una fuente definitiva de disturbio del campo magntico y necesita ser operada bien alejada del mdulo brjula. Esto se logra fcilmente con un cable extensin.

Chapter 4: El mdulo de brjula Hitachi HM55B Page 149

Partes Requeridas

(1) Mdulo brjula Hitachi HM55B (1) LCD Serial Parallax (216) (1) Cable Extension de 14 pulgadas para la LCD (6) Cables conectores Si est trabajando con un BASIC Stamp HomeWork Board or una tarjeta serial Board of Education Rev A o B, tambin necesitar: (1) conector de 3 pines (3) cables conectores aditcionales
Conexiones del Cable para la LCD

Los esquemticos mostrados en la Figura 4-12 son idnticos a los que han sido usados para el mdulo de brjula y la LCD Serial Parallax hasta este punto. Lo nico que cambiar es la forma en que la LCD es conectada a su tarjeta, con un cable extensin. No deben hacerse cambios al cableado del mdulo brjula.

Figura 4-12 Schematics de la LCD Serial Parallax y el mdulo de brjula

Pgina 150 Sensores Inteligentes y sus Aplicaciones

Conexiones de Cable en Board of Education Rev C y Board of Education USB

Estas instrucciones son para las tarjetas que tienen puertos servo con un jumper Vdd/Vss enmedio, como los Board of Education Rev C y Board of Education USB. Todas las dems tarjetas, pasar a Todas las dems tarjetas educativas BASIC Stamp (pg. 151). Desconecte la energa de su tarjeta. Coloque el jumper entre los puertos servo X4 y X5 a Vdd (+5 V) (Figura 4-13). El jumper debe cubrir los 2 pines mas cercanos a Vdd, y el tercer pin cerca de Vin debe quedar visible.

Figura 4-13 Colocando el Jumper de los puertos Servo a Vdd

Configuracin de jumper Vdd vs. Vin Determine qu fuente de energa est conectada a los puertos X4 y X5. Si el jumper esta en Vdd, estos puertos reciben 5 V regulados del regulador de tensin del Board of Education. Si est en Vin, el puerto recibe energa directamente de la batera o de la fuente de energa. ASEGRESE DE QUE SU JUMPER EST PUESTO CORRECTAMENTE A Vdd O DAAR PERMANENTEMENTE SU LCD!

Conecte una punta del cable extensin en el Puerto 14 del cabezal X4, asegurndose que las etiquetas "Red" y "Black" en el lado derecho del puerto X5 se alineen con los cables rojo y nego del cable extensin. Asegrese de que el cable blanco sea el ms cercado a la etiqueta 14 y que el cable nego es el ms cercano a la etiqueta X4. Conecte la otra punta del cable para que el cable negro est conectado al pin GND de la LCD Serial Parallax, el cable rojo est conectado al pin 5 V, y el cable blanco est conectado al pin RX. Vuelva a verificar todas sus conexiones y asegrese de que son correctas.
ATENCIN! No reconecte la energa a su tarjeta hasta que est seguro de que las conexiones estn correctas. Si comete un error con las conexiones de la LCD, esta ser permanentemente daada.

Chapter 4: El mdulo de brjula Hitachi HM55B Page 151

Figura 4-14: Conexiones al Puerto Servo de la LCD Serial Parallax

Vuelva a conectar la energa en la tarjeta Board of Education. Ponga el switch de 3 posiciones de la Board of Education en la posicin 2. Pase a Herraje de montaje opcional para la LCD en la pgina 153.

Todas las dems tarjetas educativas BASIC Stamp

Esta seccin es para conectar el mdulo de brjula y la LCD Serial Parallax a una de las siguientes tarjetas educativas BASIC Stamp:

BASIC Stamp HomeWork Board Board of Education Rev A (versin Serial) Board of Education Rev B (versin Serial) Desconecte la energa de su tarjeta. Construya el puerto para cable extensin mostrado en la Figura 4-15.

Pgina 152 Sensores Inteligentes y sus Aplicaciones

Figura 4-15 Cableado en tableta para la conexin de cable de la LCD Serial Parallax Cable y el Mdulo brjula

Conecte una punta del cable extensin en el conector de 3 pines en la tarjeta como se muestra en la Figura 4-16. Asegrese de que los cables blanco, rojo y negro estn orientados como se muestra. El cable nego debe estar conectado a Vss, el cable rojo a Vdd y el cable blanco a P14. Conecte la otra punta del cablede tal forma que el cable negro est conectado al pin GND de la LCD Serial Parallax, el cable rojo est conectado al pin 5 V pin, y the cable blanco est conectado al pin RX.

Chapter 4: El mdulo de brjula Hitachi HM55B Page 153

Figura 4-16: Mdulo de brjula y LCD Serial Parallax Conectados con cable extensin

Vuelva a verificar todas sus conexiones y asegrese de que son correctas.


ATENCIN! No reconecte la energa a su tarjeta hasta que est seguro de que las conexiones estn correctas. Si comete un error con las conexiones de la LCD, esta ser permanentemente daada.

Reconecte la energa a su tarjeta.

Herraje de montaje Opcional para la LCD

Si lo desea, puede montar su LCD a su tarjeta Board of Education o HomeWork Board con el herraje suministrado en su kit. La lista de partes y las instrucciones se dan en la siguiente pgina con la Figura 4-17.

Pgina 154 Sensores Inteligentes y sus Aplicaciones

Figura 4-17: Ensamblando el herraje Opcional de la LCD

Partes Requeridas

(4) ngulos de montaje de 90 grados (2) espaciadores de nylon redondos de 1/4-pulgada #4 (2) tornillos con cabeza 4-40 (4) tornillos con cabeza 4-40 (6) tuercas zincadas 4-40 Ponga un tornillo de " a travs del barreno externo de un ngulo y el barreno superior izquierdo de su tarjeta, asegure con una tuerca. Repita con el barreno inferior izquierdode su tarjeta (imagen superior). Ponga un tornillo de " a travs del barreno inferior izquierdo de la tarjeta de la LCD, un espaciador de nylon, el barreno interno de un ngulo y asegre con una tuerca (2da imagen, lado izquierdo). Ponga un tornillo de " a travs del barreno inferior derecho de la tarejta de la LCD, un expaciador de nylon, el barreno externo de un ngulo y asegure con una tuerca (2da imagen, lado derecho). Use los restantes tornillos y tuercas de ", una los ngulos de la LCD a los ngulos en su tarjeta usando dos tornillos y tuercas de " (3ra imagen).

Chapter 4: El mdulo de brjula Hitachi HM55B Page 155

Programando la pantalla LCD

Esta rutina de inicializacin de la LCD se encarga de los fundamentos de inicializacin de la LCD, define el caracter personalizado 7 para el smbolo , luego muestra texto esttico (que no cambia mientras que el programa est corriendo).
' Rutina de inicializacion LCD PAUSE 200 SEROUT 14, 84, [22, 12] PAUSE 5 SEROUT 14, 84, [255, %01000, %10100, %01000, %00000, %00000, %00000, %00000, %00000] SEROUT 14, 84, [129, "Heading...", 149, "x=", 158, "y="] ' Estabiliza la fuente de energia ' Enciende y limpia la LCD ' retraso de 5 ms para limpiar ' Define caracter personalizado 7 ' * ' * * ' * ' ' ' ' ' ' Caracteres Estticos

El siguiente comando SEROUT coloca el cursor de la LCD, luego imprime espacios para sobreescribir el valor anterior. Entonces coloca el cursor en la misma localidad de inicio y escribe el nuevo valor. Esto previene la aparicin de caracteres fantasma cuando cambia el nmero de dgitos en el valor, pero sin los molectos efectos laterales de pantalla parpadeante que obtendra si de otra forma se limpiara la pantalla entre cada medicin.
' LCD muestra direccion en grados en la linea superior ' y mediciones x y y en la linea inferior. SEROUT 14, 84, [139, " ", 139, DEC angle, 7, 151, " ", 151, SDEC X, 160, " ", 160, SDEC y]

Programa Ejemplo: LcdTestCompass.bs2


Descarga gratis Este programa est disponible como descarga grtis .bs2 en la pgina del producto de Sensores Inteligentes y sus Aplicaciones en www.parallax.com.

Pgina 156 Sensores Inteligentes y sus Aplicaciones

Este programa ejemplo es una versin modificada de TestCompass.bs2 que usa comandos de la pantalla LCD en vez de comandos de la Terminal de Depuracin. Abra LcdTestCompass.bs2 y trate correrlo con el cable serial desconectado.

' -----[ Titulo ]------------------------------------------------------------' Sensores Inteligentes y sus Aplicaciones - LcdTestCompass.bs2 ' Prueba para asegurar que el mdulo de brjula Hitachi HM55B esta trabajando. ' {$STAMP BS2} ' {$PBASIC 2.5} ' -----[ Definiciones E/S ]--------------------------------------------------DinDout Clk En PIN PIN PIN 2 0 1 ' P2 transmite-recibe a/de Din/Dout ' P0 manda pulsos al reloj de HM55B ' P2 controla pin EN(ABLE) de HM55B

' -----[ Constantes ]--------------------------------------------------------Reset Measure Report Ready NegMask CON CON CON CON CON %0000 ' comando Reset de HM55B %1000 ' comando de inicio de medicion %1100 ' comando para recibir status/valores de ejes %1100 ' 11 -> Hecho, 00 -> no errores %1111100000000000 ' Para negativos 11-bit a 16-bits

' -----[ Variables ]---------------------------------------------------------x y status angle VAR VAR VAR VAR Word Word Nib Word ' ' ' ' datos del eje x datos del eje y banderas de Status Guarda medicion de angulo

' -----[ Inicializacion ]----------------------------------------------------' Inicializacion de la LCD PAUSE 200 SEROUT 14, 84, [22, 12] PAUSE 5 SEROUT 14, 84, [255, %01000, %10100, %01000, %00000, %00000, %00000, %00000, %00000]

' Estabiliza la fuente de energia ' Enciende y limpia la LCD ' retraso de 5 ms para limpiar ' Define caracter personalizado 7 ' * ' * * ' * ' ' ' ' '

Chapter 4: El mdulo de brjula Hitachi HM55B Page 157

SEROUT 14, 84, [129, "Heading...", 149, "x=", 158, "y="]

' Caracteres Estticos

' -----[ Rutina Principal ]--------------------------------------------------DO GOSUB Compass_Get_Axes angle = x ATN -y angle = angle */ 361 ' Ciclo principal ' Obtiene valores de x y y ' Convierte x y y a brads ' Convierte brads a grados

' LCD muestra direccion en grados en la linea superior ' y mediciones x y y en la linea inferior. SEROUT 14, 84, [139, " ", 139, DEC angle, 7, 151, " ", 151, SDEC X, 160, " ", 160, SDEC y] PAUSE 150 LOOP ' Retraso Debug para alentar PC ' Repite ciclo principal

' -----[ Subrutina - Compass_Get_Axes ]-------------------------------------Compass_Get_Axes: HIGH En: LOW En SHIFTOUT DinDout,clk,MSBFIRST,[Reset\4] ' subrutina modulo de brujula ' Manda comando reset a HM55B

HIGH En: LOW En ' HM55B comando inicio medicion SHIFTOUT DinDout,clk,MSBFIRST,[Measure\4] status = 0 ' Borra status anterior de banderas ' Ciclo de HIGH En: LOW En ' SHIFTOUT DinDout,clk,MSBFIRST,[Report\4] SHIFTIN DinDout,clk,MSBPOST,[Status\4] ' ciclo UNTIL status = Ready ' Deja listo SHIFTIN HIGH En DinDout,clk,MSBPOST,[x\11,y\11] DO chequeo de Status de banderas comando de status medicion Obtiene Status ciclo cuando status esta

' Obtiene valores de ejes x & y ' Deshabilita Modulo

IF (y.BIT10 = 1) THEN y = y | NegMask ' Guarda 11bits como palabra signada IF (x.BIT10 = 1) THEN x = x | NegMask ' Repite para el otro eje RETURN

Pgina 158 Sensores Inteligentes y sus Aplicaciones

Su Turno

Intente extender las actividades de la seccin Su Turno en la actividad #4 ahora con la LCD Serial Parallax. No se preocupe de agregar funcionalidad de la LCD al programa de calibracin, solo al programa modificado de prueba de calibracin de la actividad #3. Podra necesitar recalibrar para eliminar interferencia magntica causada por la proximidad de la LCD. Agregue un comando a la Rutina principal de CalibrateCompass.bs2 que enve unos cuantos caracteres a la LCD cada vez que haga un ciclo antes de que lo corra. Para liberar un poco de espacio de cdigo intente remover unos caracteres de uno de los comandos DEBUG en la subroutine Calibration_Review.

Chapter 4: El mdulo de brjula Hitachi HM55B Page 159

RESUMEN
El mdulo de brjula Hitachi HM55B es un sensor bi-axial de campo magntico capaz de detectar variaciones de microteslas en las componentes del campo magntico de la tierra actuando en sus ejes x y y. El angle del mdulo a partir del norte puede ser determinado dividiendo la medicin del eje x entre la medicin del eje y, y luego tomando el arcotangente del resultado. El mdulo de brjula tambin puede ser usado para detectar campos magnticos de barras magnticas y la inclinacin del campo magntico de la tierra en su localidad. El BASIC Stamp puede guardar direcciones medidas en la porcin no utilizada de su memoria EEPROM de programacin con un programa de calibracin. Luego, un programa de prueba puede accesar estos valores salvados, y usarlos para ejecutar correccin de escala e interpolacin lineal a las mediciones. Estas tcnicas de correccin pueden significativamente mejorar the medicin de la direccin. Promediando las mediciones de los ejes, la medicin de direccin puede ser refinada con ms profundidad. La direction puede ser desplegada en formato de texto en la LCD Serial Parallax agregando una pequea rutina de inicializacin a la seccin de Initializacin del programa y un comando SEROUT al ciclo principal DO...LOOP del programa.
Preguntas

1. Cul es la relacin entre el eje x de medicin del mdulo brjula a un ngulo dado y la medicin cuando el eje x est alineado con el norte magntico? 2. Cules son los nombres de cada uno de los pines del mdulo brjula que tienen que ser conecados a los pines E/S del BASIC Stamp? 3. Hacia dnde se incrementa el ngulo a partir del norte en las brjulas convencionales? 4. Qu es declinacin? 5. Si est midiendo un campo magntico cercano a una barra magntica, cmo se relaciona la direccin del campo magntico con sus marcas N y S? 6. Porqu puede una brjula mecnica cercana causar errores en las mediciones del mdulo brjula? 7. Cmo promediara 20 mediciones? 8. Qu variables tiene que poner a cero antes de promediar las mediciones de x y y? Porqu tienen que ser puestas a cero? 9. Cul es el comando SEROUT para definer el smbolo de grados? Cuntos bytes enva?

Pgina 160 Sensores Inteligentes y sus Aplicaciones

10. Si el nmero de dgitos en una medicin desplegada puede cambiar, cmo previene que aparezcan caracteres fantasmas a la derecha?
Ejercicios

1. Calcule el ngulo a partir del norte if the x axis lectura is 34 y the eje y lectura is 0. 2. Calcule el ngulo a partir del norte si la lectura del eje x es 16 y la lectura del eje y is 31. 3. Calcule el nmero de nanoteslas en 1.6 microteslas. 4. Escriba una rutina que convierta de microteslas a nanoteslas. 5. Escriba una rutina que examine una variable y despliegue si es o no negativa.
Proyectos

1. Despliegue la direccin presente en la LCD serial. Presione y libere un botn para recordad esa direccin deseada. Si la direccin presente est movida por ms de 5, emita un sonido de avertencia con un piezo parlante. 2. Disee un prototipo que le diga cuando si brjula digital Hitachi HM55B es sostenida a nivel con la ayuda del Acelermetro Mems 2125.

Chapter 4: El mdulo de brjula Hitachi HM55B Page 161

Soluciones

Q1. Si N es el valor reportado por x cuando est alineado con el norte magntico, entonces para un ngulo dado theta, x = Ncos. Q2. Din, Dout, /Enable, y CLK. Q3. En sentido horario a partir del norte. Q4. Es la diferencia, en grados, entre el norte magntico y el norte verdadero. Q5. La direccin del campo parecer ser opuesta a las marcas N y S, debido a la forma en que el campo magntico da vuelta. Q6. La brjula mecnica contiene un pequeo imn que puede afectar el mdulo brjula. Q7. Con una suma en ejecucin de las 20 mediciones y dividir la suma total entre 20. Q8. La suma en ejecucin de x y y debe empezar en cero. Una vez que un clculo termine, las sumas contendrn un valor ms alto. Para hacer un Segundo clculo, debe regresar la suma a cero. Q9. El comando es 255, segudio por 8 bytes de datos caracter.
SEROUT pinNumber, baudrate, [255, byte0byte7]

Q10. Primero escriba espacios para sobreescribir (borrar) el valor anterior, luego coloque el cursor de regreso al punto inicial y escriba el nuevo valor. E1. E2. E3. E4. = 0 grados a partir del Norte, o debido al Norte. = 297.3 a partir del Norte. 1.6 microtesla = 1.6 x 10-6 T = 1600 x 10-9 T = 1600 nanotesla Rutina ejemplo:
Convert: nanoT = 1000 * microT RETURN

E5. Rutina ejemplo:


value VAR Word IF (value.BIT15 = 1) THEN DEBUG "Negative", CR ELSE DEBUG "Positive", CR ENDIF

P1. Ejemplo de solucin: Asumiendo que un botn activo en nivel bajo est conectado a P10 y un piezo parlante est conectado a P11 (Vea Qu es un Microcontrolador?, Captulos 3 y 8), LcdTestCompass.bs2 puede ser modificado como sigue: Agregue estas directivas de pin a la seccin de definiciones de E/S:
pushbutton PIN 10

Pgina 162 Sensores Inteligentes y sus Aplicaciones

speaker

PIN

11

Agregue estas variables a la Seccin de Variables:


angleMem difference alarmArm VAR VAR VAR Word Word Bit

Modifique el ultimo comando SEROUT en la routine de inicializacin:


SEROUT 14, 84, [128, "Alarm Angle Set ", 148, "OFF "] ' Caracteres estaticos

Modifique la rutina principal como se muestra aqu:


' -----[ Rutina Principal ]-------------------------------------------DO GOSUB Compass_Get_Axes angle = x ATN -y angle = angle */ 361 ' Ciclo principal ' Obtiene valores x y y ' Convierte x y y a brads ' Convierte brads a grados

' LCD muestra direccion en grados en la linea superiory ' mediciones x y y en la linea inferior. SEROUT 14, 84, [154, " ", 154, DEC angle, 7] IF PushButton = 1 THEN angleMem = angle alarmArm = 1 FREQOUT speaker, 20, 3000 SEROUT 14, 84, [148,"ON " ] ENDIF difference = ABS(angle - angleMem) IF alarmArm = 1 THEN SEROUT 14, 84, [160, " ", 160, DEC angleMem, 7] IF difference > 5 y difference < 355 THEN FREQOUT speaker, 10, 4000 ENDIF ENDIF PAUSE 150 LOOP ' Retraso de Debug para alentar PCs ' Repite ciclo principal

Chapter 4: El mdulo de brjula Hitachi HM55B Page 163

P2. Solution Ejemplo: Ch4_Project2.bs2 Este programa es una combinacin de HorizontalTilt.bs2 y TestCompass.bs2.
' -----[ Titulo ]------------------------------------------------------------' Sensores Inteligentes y sus Aplicaciones - Ch4_Project2.bs2 ' Muestra la brjula digital y mediciones de inclinacion con un programa. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Directiva BASIC Stamp ' Directiva PBASIC

' -----[ Constantes ]--------------------------------------------------------Negative Positive CON CON 1 0 ' Signo - .bit15 de variables de una palabra

' -----[ I/O Definitions ]---------------------------------------------------DinDout Clk En Reset Measure Report Ready NegMask PIN PIN PIN CON CON CON CON CON 2 0 1 ' P2 transmite-recibe a/de Din/Dout ' P0 manda pulsos al reloj de HM55B ' P2 controla pin EN(ABLE) de HM55B

%0000 ' comando Reset de HM55B %1000 ' comando de inicio de medicion %1100 ' comando para recibir status/valores de ejes %1100 ' 11 -> Hecho, 00 -> no errores %1111100000000000 ' Para negativos 11-bit a 16-bits

' -----[ Variables ]---------------------------------------------------------xTilt yTilt side angleTilt sign xCompass yCompass status angleCompass VAR VAR VAR VAR VAR VAR VAR VAR VAR Word Word Word Word Bit Word Word Nib Word ' Medicion del eje x mems ' Medicion del eje y mems ' dispara variable de subrutina ' resultado angulo - grados ' bit de Signo ' ' ' ' datos del eje x datos del eje y banderas de Status Guarda medicion de angulo

' -----[ Inicializacion ]----------------------------------------------------DEBUG CLS ' Limpia Terminal de Depuracion

' -----[ Rutina Principal ]--------------------------------------------------DO

Pgina 164 Sensores Inteligentes y sus Aplicaciones

PULSIN 6, 1, xTilt PULSIN 7, 1, yTilt

' medicion del eje x ' medicion del eje y

' Escala y compensa los valores de los ejes x y y de -127 a 127. xTilt = (xTilt MIN 1875 MAX 3125) - 1875 ** 13369 - 127 yTilt = (yTilt MIN 1875 MAX 3125) - 1875 ** 13369 - 127 ' Calcula y muestra el Arcoseno de la medicin del eje x. side = xTilt GOSUB Arcsine DEBUG HOME, "x tilt angle = ", CLREOL, SDEC3 angleTilt, CR ' Calcula y muestra el Arcoseno de la medicin del eje y. side = yTilt GOSUB Arcsine DEBUG "y tilt angle = ", CLREOL, SDEC3 angleTilt GOSUB Compass_Get_Axes angleCompass = xCompass ATN -yCompass angleCompass = angleCompass */ 361 DEBUG CR, "Compass angle = ", DEC angleCompass, " degrees", CLREOL PAUSE 150 LOOP ' Retraso de Debug para alentar PCs ' Repite DO...LOOP ' Obtiene valores de x y y ' Convierte x y y a brads ' Convierte brads a grados

' -----[ Subroutine - Arcsine ]----------------------------------------------' Esta subrutina calcula arcoseno en base a la coordenada y en un circulo ' de radio 127. Establezca la variable side igual a su coordenada y antes ' de llamar a esta subrutina. Arcsine: GOSUB Arccosine angleTilt = 90 - angleTilt RETURN ' Subrutina seno inverso ' Obtiene coseno inverse ' sin(angle) = cos(90 - angle)

' -----[ Subrutina - Arccosine ]--------------------------------------------' Esta subrutina calcula arcocoseno en base a la coordenada x en un circulo ' de radio 127. Establezca la variable side igual a su coordenada x antes ' de llamar a esta subrutina. Arccosine: sign = side.BIT15 side = ABS(side) angleTilt = 63 - (side / 2) DO ' ' ' ' ' Subrutina coseno inverso Salva el signo de side Evalua side positivo Aproximacion inicial de angulo Ciclo de aproximacion sucesiva

Chapter 4: El mdulo de brjula Hitachi HM55B Page 165

IF (COS angleTilt <= side) THEN EXIT angleTilt = angleTilt + 1 ciclo angleTilt = angleTilt */ 361 IF sign = Negative THEN angleTilt = 180 - angleTilt ENDIF RETURN

' Hecho cuando COS angle <= side ' Incrementa angulo ' Convierte brads a grados ' Ajusta si el signo es negativo.

' -----[ Subroutine - Compass_Get_Axes ]-----------------------------------Compass_Get_Axes: HIGH En: LOW En SHIFTOUT DinDout,clk,MSBFIRST,[Reset\4] ' Subrutina mdulo de brjula ' Manda comando reset a HM55B

HIGH En: LOW En ' HM55B comando inicio medicion SHIFTOUT DinDout,clk,MSBFIRST,[Measure\4] status = 0 ' Borra status anterior de banderas DO ' Ciclo de chequeo de Status de banderas HIGH En: LOW En ' comando de status medicion SHIFTOUT DinDout,clk,MSBFIRST,[Report\4] SHIFTIN DinDout,clk,MSBPOST,[Status\4] ' Obtiene Status ciclo UNTIL status = Ready ' Deja ciclo cuando status esta listo

' Obtiene valores de ejes x & y SHIFTIN DinDout,clk,MSBPOST,[xCompass\11,yCompass\11] HIGH En ' Deshabilita Modulo ' Guarda 11-bits como palabra con signo para ambos ejes IF (yCompass.BIT10 = 1) THEN yCompass = yCompass | NegMask IF (xCompass.BIT10 = 1) THEN xCompass = xCompass | NegMask RETURN

Pgina 166 Sensores Inteligentes y sus Aplicaciones

Captulo 5: Fundamentos de juegos con el Acelermetro Page 167

Captulo 5: Fundamentos de juegos con el Acelermetro


El Captulo 3 le present el Acelermetro bi-axial Mems. Pueden encontrarse dispositivos similares en muchos HIDs (Dispositivos de Interface Humana), una categora que incluye ratones para computadora, teclados, y, en general, lo que posibilita que interactuemos con los microprocesadores. En una PDA (Asistente Personal Digital) con espacio limitado (Figura 5-1), el control por inclinacin elimina la necesidad de ms botones. En este ejemplo, la inclinacin permite le permite moverse en un mapa sin presionar ningn botn. Este control es tambin popular en ciertos mandos de juegos.
Figura 5-1:PDA controlada por inclinacin

Fotos de RotoView tilt-controlled PDA interface en accin cortesa de Innoventions, www.innoventions.com

Este captulo tiene 4 actividades que demuestran las varias facetas del uso de inclinacin para controlar una pantalla. He aqu un resumen de cada actividad: Actividad #1: Desplegado de Caracteres Graficos PBASIC Bsicos de los controles de cursor de la Terminal de Depuracin y de coordinacin de grfica. Actividad #2: Guardado y refrescado de fondo con la EEPROM Cada vez que se mueve su caracter de juego, aquello que estaba cubriendo en la pantalla tiene que ser re-dibujado. Esta actividad demuestra como puede mover su caracter y refrescar el fondo con la ayuda de la EEPROM del BASIC Stamp. Actividad #3: Inclinando la grfica de burbuja con un asterisco mvil en una grafica, esta primera aplicacin ilustra como se mueve la bolsa de aire caliente

Pgina 168 Sensores Inteligentes y sus Aplicaciones

dentro del MX2125 cuando lo inclina. Tambin establece los fundamentos del acelermetro para trabajar en conjunto con las tcnicas de la actividad #2. Actividad #4: Control de Juego Ahora est listo para usar la inclinacin para empezar a controlar su carcter de juego. Los caracteres de fondo pueden ser usados para definir si su caracter de juego est dentro o fuera de los lmites. Divirtase personalizando y expandiendo este video juego por inclinacin.

ACTIVIDAD #1: DESPLEGADO DE CARACTERS GRFICOS PBASIC


Esta actividad presenta algnas tcnicas de programacin que usar para grficamente mostrar coordenadas con la Terminal de Depuracin. Ciertos elementos de las tcnicas presentadas en esta actividad y la siguiente le sern familiares del acelermetro y la LCD en los captulos anteriores.
CRSRXY y Otros Caracteres de Control

El caracter de control CRSRXY del comando DEBUG puede ser usado para colocar el cursor en una posicin especfica en la ventana de Recepcin de la Terminal de Depuracin. Por ejemplo, DEBUG CRSRXY, 7, 3, "*" coloca el caracter asterisco 7 espacios a la derecha y 3 caracteres abajo. En vez de usar constantes como 7 y 3, puede usar variables para hacer la colocacin del cursor ajustable. Digamos que tiene 2 variables llamadas x y y. Los valores que estas variables guardan pueden controlar la colocacin del asterisco en el comando DEBUG CRSRXY, x, y, "*". El siguiente programa ejemplo tambin hace uso del caracter de control CLRDN. DEBUG CLRDN hace que todas las lineas por debajo de la posicin actual del cursor sean borradas.
Mas caracteres de control Puede averiguar mas acerca de caracteres de control viendo el comando DEBUG en la Gua de Sintxis de PBASIC o en el Manual BASIC Stamp. Puede conseguir la primera en su Editor de BASIC Stamp (v2.0 or ms reciente). Solo haga click en Help y seleccione el ndice. El Manual BASIC Stamp esta disponible como descarga en www.parallax.com.

Programa ejemplo CrsrxyPlot.bs2

Con este programa puede teclear pares de dgitos en la ventana de transmisin (Figura 52), para colocar asteriscos en la ventana de recepcin. Haga click en la ventana de Transmisin y empiece a escribir. El primer dgito que escribe es el nmero de espacios a

Captulo 5: Fundamentos de juegos con el Acelermetro Page 169

la derecha para colocar el cursor y el segundo es el nmero de retornos de carro hacia abajo. Antes de escribir un nuevo par de dgitos, presione la barra espaciadora una vez.
Figura 5-2: Ventanas de Recepcin y Transmisin de la Terminal de Depuracin

Transmit Windowpane

Receive Windowpane

Introduzca, salve y corra CrsrxyPlot.bs2. Redimensione la Terminal de Depuracin para que halla amplio espacio para desplegar el rea de graficado y los mensajes. Haga Click en la ventana de Transmisin de la Terminal de Depuracin y siga los mensajes para escribir dgitos para colocar asteriscos en el area de graficado. Intente la secuencia 11, 22, 33, 43, 53, 63, 73, 84, 95. Coinciden los asteriscos en su Terminal de Depuracin y los de la Figura 5-2? Trate predecir las secuencias para diversas formas (cuadrado, tringulo, crculo) Introduzca las secuencias para probar sus predicciones. Corrija las secuencias segn sea necesario.

' Sensores Inteligentes y sus Aplicaciones CrsrxyPlot.bs2 ' Escriba pares de digitos en Terminal de Depuracin para colocar asteriscos. '{$STAMP BS2} '{$PBASIC 2.5} x y temp VAR VAR VAR Word Word Byte

Pgina 170 Sensores Inteligentes y sus Aplicaciones

DEBUG CLS, "0123456789X", "1 ", "2 ", "3 ", "4 ", "5 ", "Y ", DO

CR, CR, CR, CR, CR, CR, CR, CR

DEBUG "Type X coordinate: " DEBUGIN DEC1 x DEBUG CR, "Type Y coordinate: " DEBUGIN DEC1 y DEBUG CRSRXY, x, y, "*" DEBUG CRSRXY, 0, 10, "Press any key..." DEBUGIN temp DEBUG CRSRXY, 0, 8, CLRDN LOOP

Su Turno Manteniendo los Caracteres en el Area de trazado

Si escribe 8 en respuesta al mensaje "Type Y coordinate: ", sobreescribir su texto. Ocurren problemas similares si escribe 0 para una coordenada X o Y. El asterisco es trazado sobre el texto que muestra en qu rengln y columna est trazando CRSRXY. Una forma de arreglar esto es con los operadores MAX y MIN. Solo agregue y = y MAX 5 MIN 1. El operator DEC1 del comando DEBUGIN resuelve el problema para la coordenada X maxima, puesto que est limitada a un valor de 0 a 9. As, solo necesitar asegurar el valor X a x = x MIN 1. Intente escribir valores fuera de los valores lmite de la coordenada Y (0 y 6 a 9) y 0 para la coordenada X. Observe los efectos en el fondo de la pantalla. Modifique CrsrxyPlot.bs2 como se muestra aqu y reintntelo.
DEBUG CR, "Type Y coordinate: " DEBUGIN DEC1 y Y = y MAX 5 MIN 1 X = x MIN 1 DEBUG CRSRXY, x, y, "*" ' <--- Add ' <--- Add

Captulo 5: Fundamentos de juegos con el Acelermetro Page 171

Escalado y Compensacin

Estos conceptos fueron presentados en el Captulo 3 para manejar valores de entrada del acelermetro. En el captulo 3, usamos el operador ** para escalar (multiplicar) por valores fraccionales. En este ejemplo, usaremos el operador * porque una variable en el siguiente programa ejemplo solo necesita ser multiplicada por el valor entero 2. En la Figura 5-3 se ha trazado en la Terminal de Depuracin una grfica con ejes positivo y negativo. La horizontal o eje x tiene un espacio entre cada numeral y la vertical eje y no. A fin de posicionar el cursor en un punto particular usando el comando CRSRXY, necesitaremos mapear entre los ejes trazados en la Terminal de Depuracin y los ejes usados por el comando CRSRXY.
Figura 5-3: Introduciendo y Desplegando Coordenadas

Pgina 172 Sensores Inteligentes y sus Aplicaciones

Por ejemplo, donde los ejes de la grfica intersectan en las coordenadas (0, 0) es de hecho la posicin CRSRXY 6,3 (compare esto con la Figura 5-2 hasta que perciba como es esto). Para este programa nos gustra poder escribir -3-3 en la Terminal de Depuracin y hacer que el asterisco aparezca en la coordenada (-3, -3) de la grfica, que sera la posicin CRSRXY 0,6. Otro ejemplo, cuando escribe 2,2, CRSRXY de hecho debe posicionar el asterisco en 10,1. Ahora es momento de entender como hacer esta traslacin de mapeo usando escalado y compensacin. Para valores entre -3 to 3, el valor X tiene que ser multiplicado por 2 y agregarle 6 para que CRSRXY coloque el asterisco con el nmero correcto de espacios. Esto es una escala de 2 y una compensacin de 6. Esta es la lnea de PBASIC para hacer la conversin de coordenada X a nmero de espacios.
x = (x * 2) + 6

El valor Y tiene que ser multiplicado por -1, luego agregarle 3. Esto es una escala de -1 y una compensacin de 3. Esta es la lnea de PBASIC para hacer la conversin de coordenada Y al nmero de retornos de carro.
y = 3 - y

Intente sustituir las coordenadas x y y en el lado correcto de cada una de estas ecuaciones, haga la matemtica y verifique que cada ecuacin entrega el nmero correcto de espacios y retornos de carro.

Programa ejemplo PlotXYGraph.bs2

Introduzca y corra PlotXYGraph.bs2. Intente introducir esta secuencia: -3-3, -2-2, -1-1, 00, 11, 22, 33, y verifique que compagina con el ejemplo de la Terminal de Depuracin en la Figura 5-3. Try some other sequences and/or drawing shapes by their coordinates.

' Sensores Inteligentes y sus Aplicaciones PlotXYGraph.bs2 ' Coloca el cursor en la grafica interactuando con la Terminal de Depuracion '{$STAMP BS2} '{$PBASIC 2.5} x y temp VAR VAR VAR Word Word Byte

Captulo 5: Fundamentos de juegos con el Acelermetro Page 173

DEBUG CLS, " 3| ", " 2| ", " 1| ", "------+------", "-3-2-1| 1 2 3", " -2| ", " -3| ", DO

CR, CR, CR, CR, CR, CR, CR, CR

DEBUG "Type X coordinate: " DEBUGIN SDEC1 x DEBUG CR, "Type Y coordinate: " DEBUGIN SDEC1 y x = (x * 2) + 6 y = 3 - y DEBUG CRSRXY, x, y, "*" DEBUG CRSRXY, 0, 10, "Press any Key..." DEBUGIN temp DEBUG CRSRXY, 0, 8, CLRDN LOOP

Su Turno Mas acerca mantener los Caracteres en el Area de trazado

Los operadores MAX y MIN fueron presentados anteriormente para prevenir que el asterisco apareciera fuera del area de trazado. Puede tambin usar lneas IFTHEN para manejar valores que estn fuera de los lmites. Un ejemplo de cmo puede modificar PlotXYGraph.bs2 con IFTHEN: en vez de recibir los valores y colocar el asterisco dentro de los lmites permitidos, este programa espera hasta que un valor correcto es tecleado. Modifique PlotXYGraph.bs2 reemplazando la instruccin DEBUG CRSRXY, x, y, "*" con el bloque IF...THEN...ELSE...ENDIF siguiente, y luego corralo.
x = (x * 2) + 6 y = 3 y IF (x > 12) OR (y > 6) THEN ' <--Agregue cdigo de aqu... DEBUG CRSRXY, 0, 8, CLRDN, ' "Enter valores from -3 to 3.", CR, ' "Try again" ' ' ELSE ' '

Pgina 174 Sensores Inteligentes y sus Aplicaciones

DEBUG CRSRXY, x, y, "*" ENDIF DEBUG CRSRXY, 0, 10, "Press any Key..." DEBUGIN temp ' ' <--- hasta aqu

Verifique que este programa no le permite introducir caracteres fueran del rango de -3 a 3.
Qu pasa con los nmeros negativos? Las condiciones para la lnea IF...THEN en su versin modificada de PlotXYGraph.bs2 son (x > 12) O (y > 6). Esto cubre numeros positivos mayores que 12 o 6, pero tambin todos los nmeros negativos. Esto es porque BASIC Stamp usa un sistema llamado complemento a dos para guardar nmeros negativos. En este, la version sin signo de cualquier valor negativo es mayor que cualquier valor positivo. Por ejemplo, -1 es 65535, -2 es 65534, etc., hasta -32768, que de hecho es 32768. Valores positivos con signo solo van de 1 a 32767.

Algebra para Determinar Escalamiento y Compensacin

La grfica XY mostrada en la Terminal de Depuracin es llamada el sistema coordenado Cartesiano. Llamado as por el matemtico del siglo 17 Ren Descartes, este sistema es la base de las tcnicas de graficacin usadas en muchos temas matemticos. El sistema Cartesiano de la Figura 5-4a es comunmente desplegado con (0, 0) en el centro de la grfica. Sus valores son mayores yendo hacia arriba (eje y) y a la derecha (eje x). Muchas grficas se presentan y comportan en forma de pantalla, con la coordenada 0, 0 en la esquina superior izquierda (Figura 5-4b). En esta, el eje x se incrementa hacia la derecha y el eje y se incrementa hacia abajo.
Figura 5-4: Coordenadas Cartesianas vs. Coordenadas de pantalla

a. Coordenadas Cartesianas

b. Coordenadas de pantalla

Captulo 5: Fundamentos de juegos con el Acelermetro Page 175

Puede usar una tcnica algebrica estandar, resolviendo 2 ecuaciones con 2 incgnitas, para definir las lneas que necesitar para transformar coordenadas Cartesianas en coordenadas de pantalla para la Terminal de Depuracin. El siguiente ejemplo muestra cmo se hizo para las lneas que convierten x y y de Cartesianas a coordenadas de pantalla en PlotXYGraph.bs2. Agregando un par de comandos DEBUG a PlotXYGraph.bs2, puede mostrar las versiones de antes y despus del valor X que haya introducido.
DEBUG "Type X coordinate: " DEBUGIN SDEC1 x DEBUG CR, "Type Y coordinate: " DEBUGIN SDEC1 y DEBUG CRSRXY, 0, 12, "x before: ", SDEC x x = (x * 2) + 6 y = 3 - y DEBUG CRSRXY, 0, 14, "x after: DEBUG CRSRXY, x, y, "*" ", SDEC x ' <--- Agregue ' <--- Agregue

Salve PlotXyGraph.bs2 bajo otro nombre, como PlotXyGraphBeforeAfter.bs2. Agregue los 2 comandos DEBUG que muestran a x "antes" y "despus". Agregue 2 comandos DEBUG para mostrar el "antes" y "despus" de y. Introduzca las coordenadas (3,1) y (-2,-2) en la ventana de Transmisin de la Terminal de depuracin. Vea la Figura 5-5. Registre los valores Despus en la Tabla 5-1.
Tabla 5-1: valores X Antes y Despus
Coordenada (3, 1) (-2, -2) Antes 3 -2 Despus

Pgina 176 Sensores Inteligentes y sus Aplicaciones

Figura 5-5 Coordenadas de prueba

Cuando se diesea una pantalla para mostrar coordenadas Cartesianas, ayuda tomar un par de valores antes y despus como los de la Tabla 5-1. Entonces puede usarlos para resolver la escala (K) y compensacin (C) usando 2 ecuaciones con 2 incgnitas.
Xafter = (K Xbefore ) + C

Los pasos usuales para 2 ecuaciones con 2 incgnitas son: (1) Substituya sus 2 datos de antes y despus en copias separadas de la ecuacin.
12 = (K 3) + C 2 = (K 2 ) + C

Captulo 5: Fundamentos de juegos con el Acelermetro Page 177

(2) De requerirse, multiplique una de las 2 ecuaciones por un trmino que iguale los nmeros de una de las incgnitas en ambas ecuaciones.

No es preciso, el coeficiente de C en ambas ecuaciones es 1.


(3) Reste una ecuacin de la otra para anular una de las incgnitas.
12 = (K 3) + C [ 2 = (K -2) + C ] 10 = K 5

(4) Resuelva para la incgnita que no se anul al restar.


10 = K 5 K= 10 5 K =2

(5) Sustituya el valor que resolvi en el paso 4 en una de las 2 ecuaciones originales.
12 = (2 3) + C

(6) Resuelva para la segunda incgnita.


12 = (2 3) + C 12 = 6 + C C = 12 - 6 C =6

(7) Incorpore las incgnitas resueltas en su ecuacin.


Xafter = (K Xbefore ) + C K = 2 and C = 6 Xafter = (2 Xbefore ) + 6

Pgina 178 Sensores Inteligentes y sus Aplicaciones

Su Turno Clculos para el eje y

Modifique su programa para que muestre los valores del eje y antes y despus. Llene la Table 5-2 para los valores del eje y:
Table 5-2: valores y Antes y Despus
Coordenada (3, 1) (-2, -2) Antes 1 -2 Despus

Figura 5-6 Coordenadas de prueba

Repita los pasos 1 al 7 para la ecuacin del eje y. La respuesta correcta es:
yafter = ( 1 ybefore ) + 3

Captulo 5: Fundamentos de juegos con el Acelermetro Page 179

ACTIVIDAD #2: GUARDADO Y REFRESCADO DE FONDO CON LA EEPROM


En un video juego, cuando su caracter de juego no est en la pantalla solo es visible el fondo. Tan pronto como su caracter entra en escena, tapa parte del fondo. Cuando el caracter se mueve, debe pasar: (1) el caracter de juego tiene que ser re-dibujado en una nueva posicin, y (2) el fondo que el caracter de juego estaba tapando tiene que ser redibujado. Si no pasa el paso 2 su pantalla se llenar con copias de su carcter de juego. Las televisiones y los monitores CRT de computadora refrescan cada pixel muchas veces por segundo. El nivel de refrescado en las televisiones es 30 Hz aproximadamente y algunos de los niveles de refrescado ms comunes en CRTs son 60, 70, y 72 Hz. Otros dispositivos como algunas pantallas LCD y LED sostienen la imagen automticamente, o bien con ayuda de otro microcontrolador. Todo lo que el programa o el microcontrolador que controla estos dispositivos tiene que hacer es decirles lo que hay que desplegar o cambiar. Es as tambin como trabaja la video compresin en su computadora. A fin de reducir el tamao del archivo, algunos archivos de video comprimidos guardan los cambios en vez de guardar todos los pixeles en un cuadro de imagen dado. Cuando se usa con pantallas que no necesitan ser refrescadas (como la Terminal de Depuracin o una LCD), el BASIC Stamp puede guardar una imagen de un juego o un fondo de grfica en su EEPROM. Cuando un caracter de juego se mueve y es redibujado en una posicin diferente, el BASIC Stamp puede leer su EEPROM y redibujar los caracteres de fondo en la antigua posicin del carcter de juego. Para ello, salve las viejas coordenadas del caracter de juego antes de moverse y use esas coordenadas para recuperar el caracter de fondo de la EEPROM. Dependiendo de qu tan grande es la pantalla, esta tcnica puede salvar una considerable cantidad de tiempo que el BASIC Stamp puede necesitar para ejecutar otras tareas. Esta actividad presenta 3 elementos para caracteres de juego y fondos: 1. Guardar y desplegar el fondo de la EEPROM 2. Rastrear las coordenadas nuevas y viejas de un caracter 3. Redibujar las coordenadas viejas de la EEPROM
Desplegar el fondo de la EEPROM

Esto no tiene que hacerse con un solo comando DEBUG, especialmente si necesita ser mantenido como fondo con caracteres pasndole por el frente. Es mejor guardar los

Pgina 180 Sensores Inteligentes y sus Aplicaciones

caracteres en la EEPROM y luego desplegarlos con un ciclo FORNEXT que use los comandos READ y DEBUG para desplegar los caracteres individualmente (Figura 5-7).

Figura 5-7 Fondo a partir de la directiva DATA

Puede usar la directiva DATA para guardar un fondo en la EEPROM. Note como estas directivas DATA guardan 100 caracteres (0 al 99). Note tambin que cada rengln es de 14 caracteres de ancho cuando agrega el caracter de control CR. La programacin es ms fcil si cada rengln es del mismo ancho. De otra forma, encontrar el carcter que desea se vuelve un problema ms complejo.
DATA CLS, " 3| ", " 2| ", " 1| ", "------+------", "-3-2-1| 1 2 3", " -2| ", " -3| ", CR, CR, CR, CR, CR, CR, CR, CR ' ' ' ' ' ' ' ' 0 14 28 42 56 70 84 98 + 1 = 99

Para desplegar el fondo completo una vez al principio del programa, puede usar un ciclo FORNEXT. Recupera y despliega cada caracter guardado en la EEPROM. Recuerde que, si bien el efecto neto es el mismo que un comando DEBUG largo, la EEPROM es ms

Captulo 5: Fundamentos de juegos con el Acelermetro Page 181

flexible porque tambin puede obtener y desplegar caracteres individuales segn se requiera para refrescar el fondo.
FOR index = 0 TO 99 READ index, character DEBUG character NEXT

Programa ejemplo EepromBackgroundDisplay.bs2

Introduzca, salve y corra el programa. Verifique que el desplegado es el mismo que en PlotXyGraph.bs2.

' Sensores Inteligentes y sus Aplicaciones - EepromBackgroundDisplay.bs2 ' '{$STAMP BS2} '{$PBASIC 2.5} index character VAR VAR Byte Byte ' ' ' ' ' ' ' ' 0 14 28 42 56 70 84 98 + 1 = 99 ' directivas Stamp & PBASIC

' Variables

DATA CLS, " 3| ", " 2| ", " 1| ", "------+------", "-3-2-1| 1 2 3", " -2| ", " -3| ",

' Guarda fondo en EEPROM

CR, CR, CR, CR, CR, CR, CR, CR

FOR index = 0 TO 99 READ index, character DEBUG character NEXT END

' Recupera y despliega fondo

Su Turno Viewing the EEPROM Caracteres

En el Editor BASIC Stamp, haga click en Run y seleccione Memory Map. Haga click en la caja Display ASCII en la esquina inferior izquierda de la ventana Memory Map. Los dgitos, guiones y barras verticales deben aparecer en el Mapa EEPROM exactamente como se muestra en la Figura 5-8.

Pgina 182 Sensores Inteligentes y sus Aplicaciones

Este mapa muestra 16 caracteres por rengln en vez de 14. Revise que tiene en total 100 caracteres (0 a 99) guardados para fines de pantalla en la EEPROM.

Figura 5-8: Desplegado de Caracteres guardados en la EEPROM

Rastreando Coordenadas nuevas y viejas de un caracter

Digamos que desea rastrear las coordenadas x y y en PlotXYGraph.bs2 original no modificado de la actividad #1. Esto toma 2 pasos: (1) Declare un par de variables para guardar los valores viejos, xOld y yOld por ejemplo.
x y xOld yOld temp VAR VAR VAR VAR VAR Word Word Nib Nib Byte ' <--- Agregue ' <--- Agregue

(2) Antes de cargar nuevos valores en las variables x y y, guarde el valor presente de x en xOld y el valor presente de y en yOld.

Captulo 5: Fundamentos de juegos con el Acelermetro Page 183

DO xOld = x yOld = y DEBUG "Type X coordinate: " Porqu x y y son palabras mientras que xOld y yOld son nibbles? Cuando se trabaja con valores con signo, las variables de palabra se guardan con valor y signo. En el punto particular en que xOld y yOld son usados en el programa, solo guardan valores que van de 0 a 12, por lo tanto todo lo que necesitamos son variables nibble. ' <--- Agregue ' <--- Agregue

Este es un tercer paso que puede usar para probar y verificar que trabaja: (3) Agregue oraciones DEBUG para desplegar los valores presentes y previos de x, y.
DEBUG CRSRXY, x, y, "*" DEBUG CRSRXY, 0, 10, "Current entry: (", DEC x, ",", DEC y, ")" DEBUG CRSRXY, 0, 11, "Previous entry: (", DEC xOld, ",", DEC yOld, ")" DEBUG CRSRXY, 0, 12, "Press any Key..." DEBUGIN temp ' <--- Agregue ' <--- Agregue ' <--- Modifique

Inicie con la version original no modificada de PlotXYGraph.bs2, salvela bajo el nombre de PlotXYGraphRecall.bs2, e intente las modificaciones recin discutidas en los pasos (1) a (3) arriba. Considere que ambos valores desplegados sern en trminos de las coordenadas de la Terminal de Depuracin. Tambin considere que en al inicio, las viejas coordenadas sern (0, 0) puesto que todas las variables se inicializan en cero en PBASIC.

Re-Dibujando el Fondo

Hasta este punto, todos nuestros trazados acumularon asteriscos mientras introducamos ms valores en la ventana de Transmisin. El efecto neto que queremos para control de juego es hacer desaparecer el asterisco de su vieja posicin y aparecer en su nueva posicin cuando la redefinamos para dar el aspecto de un asterisco movindose.

Pgina 184 Sensores Inteligentes y sus Aplicaciones

Observe la Figura 5-9. Note que 6 pares ordenados fueron introducidos en la Terminal de Depuracin, pero solo hay un asterisco y corresponde con el ltimo par introducido. Esto es porque el programa usado aqu hace desaparecer al viejo asterisco tomando las coordenadas viejas x, y , busca ese caracter de fondo en la EEPROM y luego lo despliega con DEBUG. Para hacer aparecer el asterisco en su nueva posicin, usa un comando DEBUG con las coordenadas presentes x, y como en los programas ejemplo previos.

Figura 5-9 Pantalla usando Refrescado de fondo EEPROM

El programa usado para crear la Figura 5-9 combina la the tcnica de fondo definida con DATA de EepromBackgroundDisplay.bs2 con la tcnica de graficado de asterisco y rastreo de posicin de PlotXYGraphRecall.bs2. Esta combinacin nos permite redibujar el caracter de fondo sobre el viejo asterisco con este cdigo:
IF (x <> xold) y (y <> yold) THEN index = (14 * yOld) + xOld + 1 READ index, character DEBUG CRSRXY, xOld, yOld, character ENDIF ' ' ' ' Ve si el asterisco se movio Direccion de caracter de fondo Obtiene caracter de fondo Muestra caracter de fondo

Captulo 5: Fundamentos de juegos con el Acelermetro Page 185

La variable index selecciona el caracter correcto de la EEPROM. El valor x es el nmero de espacios encima y el valor y es el nmero de returnos de carro hacia abajo. Para llegar a la direccin correcta de un caracter en el tercer rengln, su programa tiene que agregar todos los caracteres en los primeros 2 renglones. Puesto que cada rengln tiene 14 caracteres, yOld tiene que ser multiplicado por 14 antes de poder ser sumado a xOld. El 1 extra es agregado para brincar CLS que est en la direccin 0. Sin importar si es una pantalla de computadora, la pantalla de cristal lquido de su celular o la pantalla de su aplicacin de BASIC Stamp, se aplica la misma tcnica. El procesador recuerda 2 imagenes diferentes, la del fondo y la del frente. Segn se mueve un objeto del frente, este es desplegado en una posicin diferente y el area que deja vaca el objeto del frente es re-dibujada. Lo ms importante que hay que tener en cuenta en relacin de esta tcnica de programacin es que se ahorra al procesador mucho tiempo. Solo tiene que recuperar un caracter de la EEPROM y enviarlo a la Terminal de Depuracin. Comparado con 99 caracteres, es un ahorro de tiempo significativo y el BASIC Stamp puede hacer otras cosas con ese tiempo, como monitorear otros sensores, controlar servos, etc.
Programa ejemplo EepromBackgroundRefresh.bs2

Este programa toma PlotXYGraph.bs2 combinado con EepromBackgroundDisplay.bs2, usando las tcnicas de desplegado de fondo, coordinacin de guardado y re-dibujado de fondo recin discutidas. Introduzca, salve y corra EepromBackgroundRefresh.bs2. Pruebe y verifique que el asterisco desaparece de su posicin vieja y aparece en la nueva posicin que introduce.

' -----[ Titulo ]----------------------------------------------------------' Sensores Inteligentes y sus Aplicaciones - EepromBackgroundRefresh.bs2 '{$STAMP BS2} '{$PBASIC 2.5} ' directivas Stamp/PBASIC

' -----[ Variables ]------------------------------------------------------x y xOld yOld VAR VAR VAR VAR Word Word Nib Nib ' Guarda posicion presente

' Guarda posicion previa

Pgina 186 Sensores Inteligentes y sus Aplicaciones

temp index character

VAR VAR VAR

Byte Byte Byte

' Variable tonta para DEBUGIN ' READ index/caracter storage

' -----[ Datos de EEPROM]----------------------------------------------------DATA CLS, " 3| ", " 2| ", " 1| ", "------+------", "-3-2-1| 1 2 3", " -2| ", " -3| ", ' Datos de fondo CR, CR, CR, CR, CR, CR, CR, CR ' ' ' ' ' ' ' 14 28 42 56 70 84 98 + 1 = 99

' -----[ Inicializacion ]-------------------------------------------------FOR index = 0 TO 99 READ index, character DEBUG character NEXT ' Despliega fondo

' -----[ Rutina Principal ]--------------------------------------------------DO xOld = x yOld = y DEBUG "Type X coordinate: " DEBUGIN SDEC1 x DEBUG CR, "Type Y coordinate: " DEBUGIN SDEC1 y x = (x * 2) + 6 y = 3 - y DEBUG CRSRXY, x, y, "*" IF (x <> xold) y (y <> yold) THEN index = (14 * yOld) + xOld + 1 READ index, character DEBUG CRSRXY, xOld, yOld, character ENDIF DEBUG CRSRXY, 0, 10, "Press any Key..." DEBUGIN temp DEBUG CRSRXY, 0, 8, CLRDN LOOP ' ' ' ' ' Guarda coordenadas previas

' Obtiene nuevas coordenadas

' valores Cartesianos a DEBUG

' Despliega asterisco Checa si el asterisco se movio Direccion de caracter de fondo Obtiene caracter de fondo Muestra caracter de fondo

' Espera al usuario ' Limpia informacion vieja

Captulo 5: Fundamentos de juegos con el Acelermetro Page 187

Su Turno Redibujando el fondo sin Variables Extra

No siempre es necesario mantener rastreo de la vieja posicin de la vieja posicin del caracter de frente. Considere esto: en EepromBackgroundRefresh.bs2 las variables x y y guardan losvaloresviejos hsta que introduce nuevos valores. Rearreglando el orden en que se despliegan las variables x y y, puede eliminar la ncesidad de xOld y yOld. Puede intentar la siguiente Rutina principal de reemplazo en EepromBackgroundRefresh.bs2. En el momento en que presiona la barra espaciadora su viejo asterisco desaparece. El nuevo asterisco reaparece cuando escribe la segunda de las 2 coordenadas. Como ver en la siguiente actividad, esta tcnica trabaja muy bien cuando la frecuencia de refrescado es varias veces por segundo con control de inclinacin. Salve EepromBackgroundRefresh.bs2 como EepromBackgroundRefreshYourTurn.bs2. Retire las declaraciones de variables xOld y yOld. Reemplace la rutina principal en EepromBackgroundRefresh.bs2 con la siguiente. Pruebe y examine el cambio en el comportamiento del programa.
' -----[ Rutina Principal]--------------------------------------------DO index = (14 * y) + x + 1 READ index, character DEBUG CRSRXY, x, y, character DEBUG CRSRXY, 0, 8, "Type X coordinate: " DEBUGIN SDEC1 x DEBUG CR, "Type Y coordinate: " DEBUGIN SDEC1 y x = (x * 2) + 6 y = 3 - y DEBUG CRSRXY, x, y, "*" ' Re-despliega fondo

' Obtiene nuevas coordenadas

' Valores de cartesiano a DEBUG

' Despliega asterisco

DEBUG CRSRXY, 0, 10, "Press any Key..." ' Espera al usuario DEBUGIN temp DEBUG CRSRXY, 0, 8, CLRDN ' Limpia informacion vieja LOOP

Pgina 188 Sensores Inteligentes y sus Aplicaciones

Animacin y Redibujado de Fondo

He aqu un ejemplo de algo que puede hacer si usa caracteres individuales, pero no trabajar si intenta redibujar toda la pantalla con un comando DEBUG. Salve EepromBackgroundRefresh.bs2 como ExampleAnimation.bs2. Reemplace la rutina principal en el programa con la que se muestra aqu. Corralo y observe el efecto.
DO FOR y = 0 TO 6 FOR temp = 1 TO 2 FOR x = 0 TO 12 IF (temp.BIT0 = 1) THEN DEBUG CRSRXY, x, y, "*" ELSE index = (14 * yOld) + xOld + 1 READ index, character DEBUG CRSRXY, xOld, yOld, character xOld = x yOld = y ENDIF PAUSE 50 NEXT NEXT NEXT LOOP

ACTIVIDAD #3: INCLINANDO LA GRFICA DE BURBUJA


Esta actividad combina los conceptos de grficos presentados en las actividades 1 y 2 con las tcnicas de medicin de inclinacin del acelermetro (captulo 3). El resultado es un asterisco burbuja que ilustra el movimiento de la bolsa de gas dentro del MX2125. La Figura 5-11 en la siguiente pgina muestra lo que despliega la Terminal de Depuracin en esta actividad cuando el acelermetro es inclinado hacia arriba y hacia la izquierda.
Parts Required

(2) Cables conectores de 3 pulgadas (2) Resistencias 220 (1) Acelermetro Bi-axial Mems MX2125 Conecte the mdul de acelermetro usando la Figura 5-10 como gua.

Captulo 5: Fundamentos de juegos con el Acelermetro Page 189

Figura 5-10: Diagrama de cableado y Esquemtico del Acelermetro

Figura 5-11: Posicin del Gas caliente del Acelermetro

Asterisk Indicates Hot Gas Location

Pgina 190 Sensores Inteligentes y sus Aplicaciones

La Figura 5-12 muestra una leyenda para las diversas formas que puede inclinar la tarjeta en sus ejes junto con cada efecto de la inclinacin en la posicin de la bolsa de gas.

Tilt

Hot Gas Center

Level

(0, 0)

Tilt Right

(-3, 0)

Tilt Left

(3, 0)

Figura 5-12: Inclinacin del Acelermetro y Posicin del Cursor

Tilt Down

(0, -3)

Tilt Up

(0, 3)

Captulo 5: Fundamentos de juegos con el Acelermetro Page 191

Control de inclincacin para el Despliegue del asterisco

BubbleGraph.bs2 actualiza la posicin del punto ms caliente dentro de la cmara del acelermetro 8 veces por segundo aproximadamente (8 Hz). Despus de desplegar el fondo (ejes X y Y) en la Terminal de Depuracin, repite los mismos pasos una y otra vez. Reemplaza el asterisco con el caracter de fondo y hace pausa por el parpadeo. Obtiene la inclinacin del eje x del acelermetro. Obtiene la inclinacin del eje y del acelermetro. Ajusta el valor para que encaje en el eje X de graficacin. Ajusta el valor para que encaje en el eje X de graficacin. Despliega el asterisco y hace pausa nuevamente por el parpadeo.

Cada uno de estos pasos es discutido con ms detalle en la seccin que sigue al programa ejemplo.
Programa ejemplo BubbleGraph.bs2

Introduzca y corra BubbleGraph.bs2.

' -----[ Titulo ]------------------------------------------------------------' Sensores Inteligentes y sus Aplicaciones - BubbleGraph.bs2 ' La posicion de la burbuja en el sensor se grafica en Terminal de Depuracion '{$STAMP BS2} '{$PBASIC 2.5} ' Stamp/PBASIC directives

' -----[ Datos EEPROM]-------------------------------------------------------' Guarda fondo en EEPROM DATA CLS, " 5^Y ", " 4| ", " 3| ", " 2| ", " 1| X", "----------+--------->", "-5-4-3-2-1| 1 2 3 4 5", " -2| ", " -3| ", " -4| ", " -5| ", ' Direccion del ultimo caracter en el renglon ' ' ' ' ' ' ' ' ' ' ' ' 0 22 44 66 88 110 132 154 176 198 220 242

CR, CR, CR, CR, CR, CR, CR, CR, CR, CR, CR

Pgina 192 Sensores Inteligentes y sus Aplicaciones

' -----[ Variables ]---------------------------------------------------------x y index char VAR VAR VAR VAR Word Word Word Byte ' Guarda posicin presente

' READ index/caracter storage

' -----[ Inicializacion ]----------------------------------------------------FOR index = 0 TO 242 READ index, char DEBUG char NEXT ' Lee y despliega fondo

' -----[ Rutina Principal ]--------------------------------------------------DO ' Inicia rutina principal ' Reemplaza asterisco con caracter de fondo. index = (22 * y) + x + 1 ' Coordenadas -> Direcc. EEPROM READ index, char ' Obtiene caracter de fondo DEBUG CRSRXY, x, y, char ' Muestra caracter de fondo PAUSE 50 ' Pause por parpadeo ' Mide inclinacion. PULSIN 6, 1, x PULSIN 7, 1, y ' x y y Calcula posicion del cursor. = (x MIN 1875 MAX 3125) - 1875 ** 1101 = (y MIN 1875 MAX 3125) - 1875 ** 576 = 10 - y

' Obtiene Ax y Ay

' Calcula posicion x ' Calcula posicion y

' Despliega asterisco en la nueva posicion del cursor. DEBUG CRSRXY, x, y, "*" ' Despliega asterisco PAUSE 50 ' Pausa nuevamente por parpadeo LOOP ' Repite rutina principal

Sostenga su tarjeta como se muestra en la imagen superior de la Figura 5-12. Practique controlar el asterisco inclinando la tarjeta. Adicionalmente, intente sostenerla verticalmente y rotarla en un crculo. El asterisco debe viajar en un arco circular alrededor de la grfica conforme usted lo hace.

Captulo 5: Fundamentos de juegos con el Acelermetro Page 193

Como trabaja BubbleGraph.bs2

Primero, la rutina principal despliega el caracter de fondo en la posicin presente del cursor. Con una pausa de 50 ms, completa la porcin off de un asterisco que parpadea.
' Reemplaza asterisco con caracter de fondo. index = (22 * y) + x + 1 ' Coordenadas -> direccion EEPROM READ index, char ' Obtiene caracter de fondo DEBUG CRSRXY, x, y, char ' Despliega caracter de fondo PAUSE 50 ' Pausa por parpadeo

Enseguida, el programa obtiene la inclinacin x y y.


' Mide tilt. PULSIN 6, 1, x PULSIN 7, 1, y ' Obtiene Ax y Ay

El programa necesita escalar y compensar las mediciones de inclinacin de los ejes x y y para que el asterisco sea correctamente colocado en la Terminal de Depuracin. Para esto se aplica el mismo escalamiento y compensacin presentado en el Captulo 3, actividad #3. Para el eje x, los valores de pulso del acelermetro (de 1875 a 3125) tienen que ser escalados a posiciones de asterisco de 0 a 20. Restando 1875 a la medicin del acelermetro antes de escalar, tenemos una escala de entrada de 0 a 1250 (1251 elementos) y una escala de salida de 0 a 20 (21 elementos). La constante de escala ** es: ScaleConstant = Int[65536(elementos escala salida)/(elementos escala entrada - 1)] Substituyendo el nmero de elementos en las escalas de entrada y salida nos da una constante de escala ** de 1101. ScaleConstant = Int[65536(21/(1251-1))] ScaleConstant = Int[65536(21/1250)] ScaleConstant = Int[1101.0048] ScaleConstant = 1101 Un proceso similar resulta en una constante de escala ** de 576 para el eje y, y el cdigo resultante para escalar y compensar ambos ejes es:
' x y y Calcula posicion del cursor. = (x MIN 1875 MAX 3125) - 1875 ** 1101 = (y MIN 1875 MAX 3125) - 1875 ** 576 = 10 - y ' Calcula posicion x ' Calcula posicion y

Pgina 194 Sensores Inteligentes y sus Aplicaciones

Si las mediciones del acelermetro estn ligeramente fuera de la escala de 1875 a 3125, puede causar sntomas extraos. Los operadores MIN y MAX previenen esto. Tambin se resta 1875 a cada eje antes de que sea escalado con el operador **. El resultado para el eje x es que 0 a 1250 es escalado a 0 a 20. Para el eje y, 0 a 1250 es escalado a 0 a 10. Al disminuir las mediciones de eje e inclinacin, la posicin hacia abajo del cursor tiene que incrementar. Entonces en vez de ajustar de 1875 a 3125 en 0 a 10, el programa tiene que ajustar en 10 a 0. La oracin y = 10 - y resuelve esto. Si y es 0, despus de escalar se vuelve 10. Igualmente, si y es 10 despus de escalar se vuelve 0. Si es 9 despus de escalar se vuelve 1, si es 8 despus de escalar se vuelve 2, etc. Los ltimos pasos antes de repetir el ciclo en la rutina principal son desplegar el nuevo asterisco en sus nuevas coordenadas x y y, luego pausar por otros 50 ms para completar la porcin on del asterisco parpadeante.
' Despliega el asterisco en la nueva posicion del cursor. DEBUG CRSRXY, x, y, "*" PAUSE 50

Su Turno Una burbuja ms grande

Pueden desplegarse y borrarse un grupo de asteriscos como se muestra en la Figura 5-13, pero comparado con un solo caracter, requiere un poco mas de trucos. El programa tiene que asegurar que ninguno de los asteriscos ser desplegado fuera del area de trazado. Tambin tiene que asegurar que todos los asterisks sern sobrescritos con los caracteres correctos de la EEPROM. He aqu un ejemplo de cmo modicar BubbleGraph.bs2 para desplegar un indicador de coordenada de 5 asteriscos: Salve BubbleGraph.bs2 como BubbleGraphYourTurn.bs2. Agregue esta declaration de variable a la seccin de variables del programa:
temp VAR Byte

Reemplace la rutina Reemplaza asterisco con caracter de fondo con esta:


' Reemplaza asterisco con caracter de fondo (modificado). FOR temp = (x MIN 1 1) TO (x MAX 19 + 1) index = (22 * y) + temp + 1 READ index, char DEBUG CRSRXY, temp, y, char NEXT FOR temp = (y MIN 1 1) TO (y MAX 9 + 1)

Captulo 5: Fundamentos de juegos con el Acelermetro Page 195

index = (22 * temp) + x + 1 READ index, char DEBUG CRSRXY, x, temp, char NEXT PAUSE 50

Reemplace la rutina Despliega asterisco en la nueva posicion del cursor con esta:
' Despliega asterisco en la DEBUG CRSRXY, x, CRSRXY, x MAX 19 + 1, CRSRXY, x, CRSRXY, x MIN 1 - 1, CRSRXY, x, PAUSE 50 nueva posicion del cursor (modificado). y, "*", y, "*", y MAX 9 + 1, "*", y, "*", y MIN 1 - 1, "*"

Corra el programa y prubelo. Pruebe para asegurarse que no ocurren problemas al forzar a salir del area de trazado a uno de los asteriscos ms hacia fuera.

Figura 5-13 Grupo de Asteriscos con Refrecado de Fondo

Pgina 196 Sensores Inteligentes y sus Aplicaciones

MIN y Nmeros Negativos Un error tpico que hay que evitar del complemento a dos es restar 1 de 0 y luego colocar el valor MIN. Recuerde del Captulo 3 que el sistema de complemento a dos guarda el valor con signo -1 como 65535. Por eso el valor MIN fue colocado a 1 antes de restar 1. El resultado es entonces un mnimo correcto de 0. La misma tcnica fue usada para establecer los valores MAX an cuando no hay ningn problema con y + 1 MAX 10.

ACTIVIDAD #4: CONTROL DE JUEGO


Estas son las reglas del juego-ejemplo controlado por inclinacin de esta actividad (Figura 5-14). Incline su tarjeta para controlar el asterisco. Si sale del laberinto y coloca el asterisco en cualquiera de los caracteres "WIN", se desplegar la pantalla "YOU WIN". Si choca con cualquier signo "#" antes del final del laberinto, se desplegar la pantalla "YOU LOSE". Al navegar por el laberinto, intente mover su caracter de juego asterisco sobre los signos de dlares "$" para obtener ms puntos.

Convirtiendo BubbleGraph.bs2 en TiltObstacleGame.bs2

TiltObstacleGame.bs2 es irrefutablemente una version de BubbleGraph.bs2 con ms aspiraciones. He aqu una lista de los cambios y adiciones ms importantes: Cambia la grfica por un laberinto. Agrega 2 fondos para ganador y perdedor a los datos EEPROM. Le da a cada fondo un nombre smbolo. Escribe un bloque de cdigo del jugador que detecta qu caracter de fondo est en frente del caracter de juego y usa esa informacin para seguir las reglas del juego.

Captulo 5: Fundamentos de juegos con el Acelermetro Page 197

Figura 5-14: Juego de Curso de obstculos fondo de laberinto del juego (izquierda) Pantalla You Win (izquierda abajo) Pantalla You Lose (derecha abajo)

Pgina 198 Sensores Inteligentes y sus Aplicaciones

Intente primero el juego y luego veremos con ms detalle como funciona.


Programa ejemplo TiltObstacleGame.bs2
Descarga gratis Este programa est disponible como descarga grtis .bs2 en la pgina del producto de Sensores Inteligentes y sus Aplicaciones en www.parallax.com.

Abra (o introduzca) y salve TiltObstacleGame.bs2. Antes de que corra el programa, asegrese de que su tarjeta est nivelada. Asegrese de sostenerla igual que en la actividad 3, con la tableta cercana a usted, y el cable serial lejos. Si quiere refrescar los caracteres $, haga click en el botn Run del Editor de BASIC Stamp. Si solo quiere practicar navegar y no preocuparse de los puntos, presione y libere el botn Reset en su tarjeta.

' ' ' '

-----[ Titulo ]------------------------------------------------------------Sensores Inteligentes y sus Aplicaciones - TiltObstacleGame.bs2 Guie el cursor por el laberinto con el acelermetro,reuna $ en la Terminal de Depuracion ' directivas Stamp/PBASIC

'{$STAMP BS2} '{$PBASIC 2.5}

' -----[ Datos EEPROM ]------------------------------------------------------' Guarda fondo en EEPROM ' 3 fondos usados en el juego Maze DATA @0, HOME, "#####################", "###### $ ########", "## ### ###", "# ########### ###", "#$ # ####", "##### # $ #####WIN", "# ## ## $ #", "# $ ########### # #", "# ##$## # #", "# ######## #", "#####################", YouLose DATA @243, HOME, "#####################", "#####################", "### ####### ####", "### ####### ####", "#####################", ' Fondo de laberinto CR, CR, CR, CR, CR, CR, CR, CR, CR, CR, CR ' Fondo YouLose CR, CR, CR, CR, CR,

Captulo 5: Fundamentos de juegos con el Acelermetro Page 199

"########## ##########", "#####################", "### ####", "### YOU LOSE ####", "### ####", "#####################", YouWin DATA @486, HOME, " ########### ", " ################# ", "##### ##### #####", "#### ### ####", "# ### ##### ### #", "# ############### #", "## ########### ##", "## ##", " #### YOU WIN #### ", " #### #### ", " ######### ",

CR, CR, CR, CR, CR, CR ' Fondo YouWin CR, CR, CR, CR, CR, CR, CR, CR, CR, CR, CR

' -----[ Variables ]---------------------------------------------------------x VAR Word ' coordenadas de grafica e inclinacs. x & y y VAR Word index char symbol points VAR VAR VAR VAR Word Byte Word Byte ' Direccion EEPROM y caracter

' Direccion simbolo para EEPROM DATA ' Puntaje durante el juego

' -----[ Inicializacion ]----------------------------------------------------x = 10 ' Inicia caracter de juego en medio y = 5 DEBUG CLS ' Despliega laberinto. symbol = Maze FOR index = 0 TO 242 READ index + symbol, char DEBUG char NEXT ' Limpia pantalla

' Establece Symbol en laberinto de EEPROM DATA ' Despliega laberinto

' -----[ Rutina Principal ]--------------------------------------------------DO ' Despliega fondo en la posicin del cursor. index = (22 * y) + x + 1 ' Coordenadas -> Direccion EEPROM READ index + symbol, char ' Obtiene caracter de fondo DEBUG CRSRXY, x, y, char ' Muestra caracter de fondo

Pgina 200 Sensores Inteligentes y sus Aplicaciones

PAUSE 50

' Pausa por parpadeo

' Mide inclinacin y calcula posicion del cursor. PULSIN 6, 1, x ' Obtiene Ax y Ay PULSIN 7, 1, y x = (x MIN 1875 MAX 3125) - 1875 ** 1101 y = (y MIN 1875 MAX 3125) - 1875 ** 576 y = 10 - y ' Calcula posicion x ' Calcula posicion y

' Despliega asterisco en la nueva posicion. DEBUG CRSRXY, x, y, "*" ' Despliega asterisco PAUSE 50 ' Pausa nuevamente por parpadeo ' Despliega puntaje DEBUG CRSRXY, 0, 11, "Score: ", DEC3 points

' Despliega puntaje

' Movi el asterisco sobre un$, W, I, N, o #? SELECT char ' Checa caracter de fondo CASE "$" ' Si es "$" points = points + 10 ' Agrega puntos WRITE index, "%" ' Escribe "%" sobre "$" CASE "#" ' Si es "#",hace Symbol a YouLose symbol = YouLose CASE "W", "I", "N" ' Si W,I,o N, Symbol -> YouWin symbol = YouWin ENDSELECT ' Esta rutina es ignorada mientras que symbol se mantenga = Maze. Si symbol ' fue cambiada a YouWin o YouLose, despliega el nuevo fondo y fin de juego. IF (symbol = YouWin) OR (symbol = YouLose) THEN FOR index = 0 TO 242 ' 242 caracteres READ index + symbol, char ' Obtiene caracter DEBUG char ' Muestra caracter NEXT ' Siguiente iteracion del ciclo END ' Fin de juego ENDIF ' Fin de bloque symbol-if LOOP ' Repite ciclo principal

Como trabaja From BubbleGraph.bs2 to TiltObstacleGame.bs2

Dos de las caractersticas opcionales de la directiva DATA fueron usadas aqu. A cada uno de los 3 fondos le fue dado un nombre Smbolo, Maze, YouWin, y YouLose. Estos nombres Smbolo le hacel fcil al programa seleccionar qu fondo desplegar. El operador opcional @Address tambin fue usado para establecer la direccin EEPROM inicial de cada directiva. En el fondo de BubbleGraph.bs2, el primer caracter es CLS para limpiar la pantalla. El problema con CLS en estas directivas DATA es que borra toda la Terminal de

Captulo 5: Fundamentos de juegos con el Acelermetro Page 201

Depuracin, incluyendo el marcador, que es desplegado abajo del fondo. Sustituyendo HOME por CLS, los fondos completos pueden ser dibujados y redibujados sin borrar el marcador.
Maze DATA @0, HOME, "#####################", "###### $ ########", YouLose DATA @243, HOME, "#####################", "#####################", YouWin DATA @486, HOME, " ########### ", " ################# ", Verificando Valores Smbolo Intente comandos como DEBUG DEC YouWin para verificar que YouWin guarda 486. CR, CR,

CR, CR,

CR, CR,

Dos variables fueron agregadas, symbol para dar seguimiento de qu fondo se recuperan caracteres y points para dar seguimiento al marcador del jugador.
symbol points VAR VAR Word Byte

Los valores iniciales de x y y tienen que empezar enmedio del curso de obstculos. Puesto que todas las variables inicializan en cero en PBASIC, una falla en su inicializacin causara que el caracter de juego empezara en la esquina superior izquierda en vez de a la mitad.
x = 10 y = 5

La variable symbol se establece en Maze antes de ejecutar el ciclo FORNEXT que despliega el fondo. Puesto que todas las variables son inicializadas en cero en PBASIC, esto pasa de cualquier manera. Sin embargo, si fuse a insertar una directiva DATA antes del fondo Maze, sera crucial tener esta lnea.
' Display maze.

Pgina 202 Sensores Inteligentes y sus Aplicaciones

symbol = Maze

El bloque de cdigo que sigue a la inicializacin de variables es el desplegado del fondo. Observe el comando READ. Ha sido cambiado de READ index, char a READ index + symbol, char. Puesto que la variable symbol fue establecida para guardar Maze, todos los caracteres en el primer fondo sern desplegados. Si symbol guardado es YouLose, todos los caracteres en el segundo fondo sern desplegados. Si guard YouWin, todos los caracteres en el tercer fondo sern desplegados. Puesto que "You Lose" o "You Win" sern desplegados, esta rutina ser usada de nuevo mas tarde en el programa.
FOR index = 0 TO 242 READ index + symbol, char DEBUG char NEXT

Tienen que ser agregadas 3 rutinas al DO...LOOP en la Rutina Principal. La primera simplemente despliega el marcador del jugador:
' Despliega puntaje DEBUG CRSRXY, 0, 11, "Score: ", DEC3 points ' Despliega puntaje

La segunda rutina es crucial; es una linea SELECTCASE que sigue las reglas del juego. La lnea SELECTCASE ve el caracter de fondo en la posicin presente del asterisco. Si el asterisco esta sobre un espacio " ", la lnea SELECTCASE no necesita cambiar nada y el DOLOOP de la Rutina Principal solo se mantiene repitindose, revisndo las mediciones del acelermetro y actualizando la posicin del asterisco. Si el asterisco se mueve sobre un "$", el programa tiene que agregar 10 a la variable points, y escribir un caracter "%" sobre el "$" en la EEPROM. Esto previene que el programa sume 10 points varias veces por segundo mientras que el asterisco is sostenido sobre "$". Si el asterisco es movido sobre un "#", el smbolo YouLose es guardado en la variable symbol. Si el asterisco se mueve sobre cualquiera de las letras "W" "I" o "N", YouWin se guarda en symbol.
' Movi el asterisco sobre un$, W, I, N, o #? SELECT char ' Checa caracter de fondo CASE "$" ' Si es "$" points = points + 10 ' Agrega puntos WRITE index, "%" ' Escribe "%" sobre "$" CASE "#" ' Si es "#",hace Symbol a YouLose symbol = YouLose CASE "W", "I", "N" ' Si W,I,oN, Symbol -> YouWin symbol = YouWin ENDSELECT

Captulo 5: Fundamentos de juegos con el Acelermetro Page 203

Al navegar su asterisco sobre " ", "$", or "%", la siguiente rutina es ignorada porque symbol an guarda Maze. La lnea SELECTCASE solo cambia esto cuando el asterisco es movido sobre "#", "W", "I", o "N". Siempre que la lnea SELECTCASE cambie symbol a YouWin o YouLose, esta rutina despliega el fondo correspondiente, luego termina el juego.
' Esta rutina es ignorada mientras que symbol se mantenga = Maze. Si symbol ' fue cambiada a YouWin o YouLose, despliega el nuevo fondo y fin de juego. IF (symbol = YouWin) OR (symbol = YouLose) THEN FOR index = 0 TO 242 ' 242 caracteres READ index + symbol, char ' Obtiene caracter DEBUG char ' Muestra caracter NEXT ' Siguiente iteracion del ciclo END ' Fin de juego ENDIF ' Fin de bloque symbol-if

Su Turno Modificaciones y Depuraciones

El juego no refresca los smbolos "$" cuando se vuelve a correr con el botn de Reset de la tarjeta Board of Education. Solo trabaja cuando hace click en el botn Run del Editor BASIC Stamp. Esto es porque la directiva DATA solo escribe a la EEPROM cuando el programa es bajado. Si el programa es reiniciado con the botn Reset, el Editor del BASIC Stamp no tiene oportunidad de guarder los espacios, signos de dolar, etc, y los signos de porciento que fueron escritos en la EEPROM an estn all. Para resolver el problema, todo lo que tiene que hacer es checar cada caracter que es ledo de la EEPROM durante la inicializacin. Si ese caracter resulta ser un "%", usa el comando WRITE para regresarlo a "$". Salve TiltObstacleGame.bs2 como TiltObstacleGameYourTurn.bs2 Modifique el ciclo FOR...NEXT en la inicializacin que despliega el laberinto:
FOR index = 0 TO 242 READ index + symbol, char IF(char = "%") THEN char = "$" WRITE index + symbol, char ENDIF DEBUG char NEXT ' Despliega laberinto ' ' ' ' <--<--<--<--Agregue Agregue Agregue Agregue

Verifique que tanto el botn Run del Editor BASIC Stamp y el botn Reset de la tarjeta Board of Education se comportan igual despus de esta modificacin.

Pgina 204 Sensores Inteligentes y sus Aplicaciones

Si el jugador cambia rapidamente la inclinacin de la tarjeta es posible brincarse las paredes de "#". Hay 2 formas de arreglarlo. Una sera agregar una animation de brinco y llamarla "caracterstica". Otra forma sera permitir al asterisco moverse solo 1 caracter en cualquier direccin X o Y. Para arreglarlo, el programa necesitar mantener el rastro de la posicin previa. Esto es un trabajo para las variables xOld y yOld presentadas en la actividad #2. Agregue estas declaraciones de variables en la seccin de Variables de TiltObstacleGameYourTurn.bs2:
x y xOld yOld VAR VAR VAR VAR Word Word Word Word ' coordenadas de grafica e inclinacs. x & y ' <--- Agregue ' <--- Agregue

Agregue lneas de inicializacin para xOld y yOld.


x xOld y yOld = = = = 10 10 5 5 ' Inicia caracter de juego en medio ' <--- Agregue ' <--- Agregue

Modifique la rutina principal para que x solo pueda ser mayor que o menor que xOld por un incremento o decremento de 1. Repita para y y yOld.
y = 10 - y ' Compensa Cartesiano -> Depuracion ' <--- Agregue ' <--- Agregue ' <--- Agregue ' <--- Agregue

IF (x > xOld) THEN x = xOld MAX 19 + 1 IF (x < xOld) THEN x = xOld MIN 1 - 1 IF (y > yOld) THEN y = yOld MAX 9 + 1 IF (y < yOld) THEN y = yOld MIN 1 - 1 ' Display asterisco at new posicin. DEBUG CRSRXY, x, y, "*" PAUSE 50 xOld = x yOld = y ' Despliega puntaje

' Despliega asterisco ' Pausa nuevamente por parpadeo ' <--- Agregue ' <--- Agregue

Corra y pruebe su programa modificado y verifique que el asterisco no pueda ms brincar las paredes de "#".

Captulo 5: Fundamentos de juegos con el Acelermetro Page 205

RESUMEN
La actividad #1 presenta los caracteres de control, tcnicas para mantener los caracteres dentro de los lmites del trazado y el lgebra para mapear coordenadas a trazado. Los ejemplos de caracteres de control incluyeron CRSRXY y CLRDN. Los ejemplos de lmites de trazado incluyeron los operadores MIN y MAX y una tcnica IFTHEN. Las tcnicas de mapeo incluyeron ecuaciones PBASIC simples para cambiar los valores de las coordenadas x y y de Cartesianas a sus equivalentes de Terminal de Depuracin. La actividad #2 present medios para guardar, desplegar y refrescar una imagen desplegada de un caracter de fondo de la EEPROM. Esto es un ingrediente til para muchas pantallas de productos, y tambin es de utilidad para pantallas y juegos con control de inclinacin. Se puede escribir un desplegado completo de un fondo con ciclo FORNEXT. Un comando READ en el ciclo depende de la variable index del ciclo FORNEXT para direccionar el siguiente caracter en la secuencia. Despus de que el comando READ carga el siguiente caracter en la variable, el comando DEBUG puede ser usado para enviar el caracter a la Terminal de Depuracin. Para borrar las huellas dejadas por un caracter en movimiento sobre el fondo, la posicin previa del caracter puede ser guardada en una o ms variables. La informacin de la posicin previa es entonces usada junto con el comando READ para buscar el caracter que debera reemplazar el caracter en movimiento despus de que se ha movido a su siguiente posicin. La actividad #3 demostr cmo las mediciones del acelermetro del Captulo 3 pueden ser combinadas con las tcnicas de posicionado de cursor y llamado de caracter de la actividad #2 para crear una pantalla controlada por inclincacin. Se usaron mediciones simples PULSIN para medir la inclinacin y los ejes x y y del acelermetro. Los valores de inclinacin fueron escalados y compensados usando las tcnicas presentadas en el Captulo 3, actividad #3. Los valores modificados x y y dictaron el posicionado del cursor para escribir el asterisco en la Terminal de Depuracin. La posicin del asterisco relativa al plano Cartesiano desplegado en el fondo represent el centro de la bolsa de aire caliente dentro de la cmara del MX2125. Al moverse el asterisco, el fondo de su posicin previa fue redibujado usando las tcnicas presentadas en la actividad #2. La actividad #4 present un control de juego por inclinacin. Las reglas de juegos simples pueden ser implementadas con lneas SELECT...CASE que usan el caracter en el fondo en la posicin del caracter de juego para decidir qu accin es la siguiente. Pueden

Pgina 206 Sensores Inteligentes y sus Aplicaciones

ser incorporados fondos mltiples en un juego haciendo uso de los operadores opcionales @Address y nombre Smbolo de las directivas DATA. Puesto que el nombre Smbolo es en realidad la direccin EEPROM al principio de una directiva DATA determinada, su programa puede accesar elementos en diferentes fondos agregando el valor de Symbol al argument de direccin del comando READ.
Preguntas

1. Qu significan las siglas HID? 2. Qu caracter de control causa que todas las lneas por debajo de la posicin presente del cursor sean borradas? 3. Qu comando y qu formateador puede usar para guardar en la variable X un solo dgito que teclee en la ventana de Transmisin Terminal de Depuracin? 4. Existen otras tcnicas de programacin que pueda usar con otros operadores para prevenir que el valor que guarda una variable exceda un valor mximo o mnimo? 5. Cules son los niveles de refrescado para los monitores CRT de computadora comunes? 6. Qu clase de rutina necesita para desplegar todos los caracteres de fondo guardados en una directiva DATA? 7. Porqu son necesarias las variables de una palabra para guardar valores con signo en PBASIC? 8. Cuando inclina el acelermetro a la izquierda, hacia dnde viaja el asterisco burbuja? 9. Si las coordenadas del asterisco empiezan en (-5, 0), y terminan en (5, 0), que piensa que le pas al acelermetro? 10. Qu eje fue el fulcrum si el acelermetro empez en (2, 2) y termin en (-2, 2)? 11. Si las lecturas del acelermetro viajan de (0, 5) a (0, -5), de nuevo y repetidamente, que secuencia de movimiento es la que probablemente ocurre? 12. Cul es el valor de YouWin? 13. Qu comando puede usar para checar el valor de un nombre Smbolo de una directiva DATA? 14. Si cambia el operador @Address de la directiva Maze DATA de 0 a 10, qu tendra que hacer a las otras directivas DATA en el programa? 15. En TiltObstacleGame.bs2, qu clase de bloque de cdigo hace mandatorias las reglas del juego? 16. Qu comando cambia los valores "%" de regreso a valores "$" en la EEPROM?

Captulo 5: Fundamentos de juegos con el Acelermetro Page 207

Exercises

1. Escriba un comando DEBUG que coloque el cursor 5 espacios arriba, 7 espacios abajo, y luego imprima el mensaje * esta es la coordenada (5, 7) en laTerminal de Depuracin. 2. Escriba un comando DEBUG que despliegue un sistema coordenado cartesiano de -2 a 2 en los ejes x y y. 3. Calcule el escalamiento y compensacin que necesitar para desplegar pares ordenados introducido en la ventana de Transmisin de la Terminal de Depuracin en un sistema coordenado cartesiano que vaya de -5 a 5 en ambos ejes x y y. 4. Escriba una rutina que dibuje un rectngulo con asteriscos. Esta rutina debiera ser de 15 asteriscos de ancho y 5 asteriscos de alto. 5. Si su fondo es de 5 caracteres de ancho por 3 caracteres de alto, prediga el tamao de variable mnimo que puede usar para establecer la direccin para su comando READ y explique su seleccin. Tendr espacio para caracteres adicionales como CLS?
Projects

1. Modifique CrsrXYPlot.bs2 para que redibuje el fondo antes de graficar el asterisco. 2. Modifique PlotXYGraph.bs2 para que despliegue las coordenadas del asterisco mas recientemente colocado a la derecha del area de trazado.

Pgina 208 Sensores Inteligentes y sus Aplicaciones

Soluciones

Q1. Q2. Q3. Q4.

Dispositivo de interface humana (en ingls Human interface device).


CLRDN. DEBUGIN DEC1 x.

Si, tambin puede usar las lneas IFTHEN para checar si los valores estn fuera de los lmites. Q5. 60, 70, y 72 Hz. Q6. Puede usar un ciclo FORNEXT, con lneas para recuperar y desplegar cada caracter guardado. Las variables de palabra guardan el valor y el signo. Q7. Las variables de palabra guardan el valor y el signo. Q8. La burbuja se mueve a la derecha. Q9. Fue de una posicin inclinada a la derecha a otra inclinada a la izquierda. Q10. El eje Y, o el ms largo eje de la tarjeta Board of Education. Q11. Inclinar la tarjeta arriba y abajo repetidamente. Q12. Direccin 486 de la EEPROM. Q13. Puede usar el comando DEBUG como lo hara para desplegar el valor de cualquier otra cantidad numrica, use el modificador DEC.
DEBUG DEC symbol READ index + symbol, char

Q14. Necesitara agregar 10 a cada valor smbolo, entonces su programa sera:


YouLose DATA @253 YouWin DATA @496

Q15. Una lnea SELECTCASE. Q16. El comando WRITE. E1. Solucin ejemplo:
DEBUG CRSRXY, 5, 7, "* esta es la coordenada (5,7) en la Terminal de Depuracin"

E2. Solucin ejemplo:


DEBUG CLS, " 2| ", " 1| ", "----+----", "-2-1| 1 2", " -2| ", CR, CR, CR, CR, CR, CR

E3. El escalamiento del eje X es 2 y su compensacin es 10; para el eje Y, el escalamiento es -1 y la compensacin es 5. E4. Solucin ejemplo:
x y VAR VAR Byte Byte

Captulo 5: Fundamentos de juegos con el Acelermetro Page 209

FOR x = 1 TO 15 FOR y = 1 TO 5 DEBUG CRSRXY, x, y, "*" NEXT NEXT

E5. El nmero de caracteres a guardar equivale a 5 x 3 = 15. El mnimo tamao de variable a usar sera un Nibble (4 bits), con lo cual las direcciones pueden ir de 0 a 15. Habra espacio solo para un (1) caracter adicional. P1. La clave para resolver este problema es mover la grfica dentro del DOLOOP y cambiar CLS a HOME. Puede haber otras formas de solucin. Solucin ejemplo:
DO DEBUG HOME, "0123456789X", CR, "1 ", CR, "2 ", CR, "3 ", CR, "4 ", CR, "5 ", CR, "Y ", CR, CR DEBUG "Type X coordinate: " DEBUGIN DEC1 x DEBUG CR, "Type Y coordinate: " DEBUGIN DEC1 y DEBUG CRSRXY, x, y, "*" DEBUG CRSRXY, 0, 10, "Press any key..." DEBUGIN temp DEBUG CRSRXY, 0, 8, CLRDN LOOP

P2. Modifique PlotXYGraph.bs2 para que despliegue las coordenadas del asterisco mas recientemente colocado a la derecha del area de trazado. Para desplegar adecuadamente las coordenadas negativas, use el modificador SDEC.
DO DEBUG "Type X coordinate: " DEBUGIN SDEC1 x DEBUG CR, "Type Y coordinate: " DEBUGIN SDEC1 y DEBUG CRSRXY, 15, 3, "(X,Y) = (", SDEC x, ",", SDEC y, ")", CLREOL x = (x * 2) + 6 y = 3 - y DEBUG CRSRXY, x, y, "*" DEBUG CRSRXY, 0, 10, "Press any Key..." DEBUGIN temp DEBUG CRSRXY, 0, 8, CLRDN LOOP

Pgina 210 Sensores Inteligentes y sus Aplicaciones

Captulo 6: Ms Proyectos con el Acelermetro Page 211

Captulo 6: Ms Proyectos con el Acelermetro


Hay 3 tipos de proyectos en este captulo. El primero es una aplicacin directa del hardware y los programas de los captulos previos. El segundo requiere registrar las mediciones de aceleracin, y por ello varias actividades estn dedicadas para un programa registrador. El tercero requiere registrar para ver qu clase de mediciones reportar el acelermetro. Luego, segn los resultados registrados, podr escribir un programa que haga que el dispositivo trabaje confiablemente.

ACTIVIDAD #1: MEDICIN DE ALTURA DE EFICIOS, RBOLES, ETC.


Subir a la punta de un objeto para medir su altura no siempre es conveniente, prctico o incluso seguro. Esta actividad presenta una nueva forma de usar algunas de las mediciones del acelermetro desarrolladas en el captulo 3 para hacer mediciones de altura desde un punto seguro en el suelo.
Mirando la Cima y Determinando la Altura

La Figura 6-1 muestra un esquema para medir la altura de un objeto, usando el acelermetro y la pantalla LCD como una lnea de visin con ngulo. Primero, mire la cima del objeto con el borde de su tarjeta y registre el ngulo medido. Luego, mida la distancia entre el punto donde tom su medicin y el objeto, que es el lado adyacente (Figura 6-1). La distancia adyacente, el ngulo y la altura del acelermetro sobe el suelo son las 3 piezas de informacin que necesita para calcular la altura del objeto.
Figura 6-1: Determinando la altura con la lnea de visin

Pgina 212 Sensores Inteligentes y sus Aplicaciones

Partes Requeridas

Use la lista de partes y circuito del Captulo 3, actividad #2 en la pgina 71 para su lnea de visin.
Programa Ejemplo

Use el programa ejemplo VertWheelRotation.bs2 from de la pgina 95 (Captulo 3, actividad #5) junto con las modificaciones de pantalla LCD en la seccin Su Turno Pantalla LCD en la pgina 96.
Procedimiento

Use su tarjeta lnea de visin a la cima del objeto y registre el ngulo. Mida la distancia entre su punto de observacin y el objeto (lado adyacente en la Figura 6-1). Mida la altura a la cual sostuvo el acelermetro. Use los siguienes calculos para determinar la altura del objeto.

Clculos

Sabemos de captulos previos que equivale al lado opuesto dividido entre el lado adyacente de un tringulo rectngulo. Multiplicar ambos lados por la distancia adyacente resulta en una expresin para resolver la altura opuesta. Es la distancia adyacente multiplicada por la tangente del ngulo.
tan = opposite adjacent

opposite = adjacent tan

Luego de determinar la altura opuesta (mostrada en la Figura 6-1), todo lo que tiene que hacer es agregarle la altura a la que sostuvo el acelermetro cuando tom la medicin.
object height = opposite + accelerome ter height object height = adjacent tan + accelerometer height

Captulo 6: Ms Proyectos con el Acelermetro Page 213

Ejemplo

Digamos que la distancia adyacente a un objeto es 10 m, y que a esa distancia el acelermetro fu sostenido a 1.5 m del piso para tener una linea de visin a la cima de un objeto. El ngulo reportado por el acelermetro fue 61. Con esto podemos estimar la altura del objeto en 19.54 m, como se indica a continuacin.
Adjacent distance = 10 m Accelerome ter measured = 61 Accelerome ter height = 1.5 m opposite = adjacent tan = 10 m tan = 18.04 object height = opposite + accelerome ter height = 18.04 m + 1.5 m = 19.54 m = (10 m )(1.804 )

ACTIVIDAD #2: GRABACIN Y REPRODUCCIN


Con proyectos del acelermetro es frecuentemente neceasario grabar y reproducir muchas mediciones del mismo. En algunos, grabar el valor es la funcin deseada, como registrar cmo resuelve una curva un auto. En otros casos, como detectar el caminado humano, ser necesario entender de qu orden son las mediciones antes de que pueda escribirse un programa que siga sus pasos. De cualquier modo, grabar y reproducir las mediciones de aceleracin es un ingrediente necesario. Esta actividad presenta un programa con subrutinas que demuestran cmo grabar, reproducir y borrar valores guardados en la porcin no usada de la Memoria de programacin EEPROM de BASIC Stamp.
Guardado en la EEPROM con DATA, WRITE y READ

Si bien no se requieren para mediciones de grabacin y reproduccin, las directivas DATA pueden ser usadas para apartar trozos de memoria de programacin no usada. El nombre

Pgina 214 Sensores Inteligentes y sus Aplicaciones

Smbolo opcional de la directiva DATA es especialmente til para mantener registros. La directiva Records DATA no guarda por s misma ningn valor en las direcciones 0 a 9 de

la EEPROM. Solo reserva estos bytes para su cdigo PBASIC y le da un nombre a la direccin del primer byte: Records. La directiva RecordsEnd DATA reserva un solo byte en la direccin 10 de la EEPROM.
Records RecordsEnd DATA DATA (10)

Los nombres Smbolo (Records y RecordsEnd) se convierten en constantes que guardan la direccin de inicio de las directivas DATA EEPROM a las que ellos preceden. La Table 6-1 muestra como trabaja para las dos directivas DATA. Puesto que Records es la primera directiva DATA, aparta los primeros 10 bytes (direcciones 0 a 9). Puesto que la direccin 0 es la direccin de inicio, Records se convierte e una constante para el valor 0 en el programa. De igual manera, puesto que la directiva RecordsEnd DATA aparta un byte en la direccin 10, RecordsEnd se convierte en el valor constante 10 en el programa.
Table 6-1: DATA directivas y EEPROM Addresses
Byte Contents Addresses 00 0 00 1 00 2 00 3 00 4 00 5 00 6 00 7 00 8 00 9 00 10 00 11

Records = 0

RecordsEnd = 10

Los bytes de la EEPROM no necesariamente contienen cero. Con el comando Records DATA (10), cualesquiera valores que ya estn all no sern cambiados. Si quiere inicializar los valores EEPROM en cero, use Records DATA 0 (10). Esto guardar 0 en las direcciones EEPROM 0 a 9. El Editor BASIC Stamp solo lo hace cuando descarga el programa. Si presiona y libera su botn Reset de su tarjeta o desconecta y reconecta la energa, no se escriben valores en esas direcciones EEPROM. Esta es una caracterstica til, como ver en la siguiente actividad.

La subrutina Clear_Data en el siguiente programa ejemplo tiene un ciclo FOR...NEXT que se repite de Records a RecordsEnd (0 to 10). Cada vez a travs del ciclo, la variable eeIndex se incrementa en 1, y as WRITE eeIndex, 100 guarda un 100 en cada byte de la EEPROM, de la direccin 0 a la direccin 10.

Captulo 6: Ms Proyectos con el Acelermetro Page 215

Clear_Data: FOR eeIndex = Records TO RecordsEnd WRITE eeIndex, 100 NEXT DEBUG CR, "Records cleared." PAUSE 1000 RETURN

La subrutina Record_Data en el siguiente programa ejemplo colecta los valores que introdujo en la Ventana de Transmisin de la Terminal de Depuracin. En la siguiente actividad, esta subrutina ser modificada para guardar lecturas del acelermetro. El ciclo FOR...NEXT inicia nuevamente en Records y se repite hasta que eeIndex excede RecordsEnd. Cada pasada en el ciclo, la variable value recibe un nmero decimal con signo de from la Ventana de Transmisin de la Terminal de Depuracin y lo guarda en la direccin EEPROM seleccionada por eeIndex con WRITE eeIndex, value.
Record_Data: DEBUG CR, "Enter valores from -100 to 100", CR FOR eeIndex = Records TO RecordsEnd DEBUG "Record ", DEC eeIndex, " >" DEBUGIN SDEC value value = value + 100 WRITE eeIndex, value NEXT DEBUG CR, "End of records.", CR, "Press Enter for menu..." DEBUGIN char RETURN

Salvando espacio con value = value + 100 Antes de que cada contenido de la variable value sea copiado a la EEPROM, se le agrega 100. Entonces en vez de un valor entre 100 y 100, se le guarda un valor entre 0 y 200. Esto es porque cada celda de memoria EEPROM puede guardar un valor entre 0 y 255 de un byte de largo. Guardar nmeros negativos requiere espacio de una palabra de largo. Los valores de una palabra tambin pueden ser guardados con directivas DATA si coloca el modificador Word antes que DataItem. Por ejemplo WRITE eeIndex, Word value. Considere que este comando usa 2 bytes EEPROM para guardar el valor de tamao de palabra, entonces eeIndex tendr que ser incrementado por 2 antes que el siguiente valor sea escrito. Agregando 100, salvamos una celda de tamao de byte por escritura.

Para recuperar y desplegar los valores que fueron guardados, la subrutina Display_Data tiene un ciclo FOR...NEXT con READ eeIndex, value. Puesto que 100 fu agregado a

Pgina 216 Sensores Inteligentes y sus Aplicaciones

cada valor antes de ser guardado con el comando WRITE, se resta 100 a la variable value despus del comando READ para regresar a value en la escala de 100 a 100.
Display_Data: DEBUG CR, "Index Record", CR, "----- ------", CR FOR eeIndex = Records TO RecordsEnd READ eeIndex, value value = value - 100 DEBUG DEC eeIndex, CRSRX, 7, SDEC value, CR NEXT DEBUG CR, "Press Enter for menu..." DEBUGIN char RETURN

Programa Ejemplo: EepromDataStorage.bs2

Este programa ejemplo despliega un menu de 3 opciones en la ventana de Recepcin de la Terminal de Depuracin (Figura 6-2). Tecleando C en la ventana de Transmisin, los valores apartados para almacenaje en la EEPROM se limpian. Si se teclea R, el programa graba valores en la EEPROM que introduce en la ventana de Recepcin. Si se teclea D, los valores que fueron guardados en la EEPROM son desplegados.

Transmit Windowpane

Receive Windowpane

Figura 6-2 Introduciendo valores para EepromDataStorage. bs2

Introduzca, salve y corra EepromDataStorage.bs2. Haga click en la ventana de Transmisin de la Terminal de Depuracin. Teclee R, y luego introduzca 11 valores entre 100 y 100. Presione Enter cuando se le pida luego del valor 11 para regresar al menu.

Captulo 6: Ms Proyectos con el Acelermetro Page 217

Teclee D y verifique que los valores que introdujo son desplegados correctamente. Presione Enter para regresar al menu. Teclee C para limpiar la memoria. Teclee D para verificar que los valores de memoria han sido limpiados (puestos en cero).

' -----[ Titulo ]------------------------------------------------------------' Sensores Inteligentes y sus Aplicaciones - EepromDataStorage.bs2 ' Demuestra guardar, recuperar y borrar valores en la memoria EEPROM. '{$STAMP BS2} '{$PBASIC 2.5} ' -----[ Directivas DATA]---------------------------------------------------Records RecordsEnd DATA DATA (10)

' -----[ Variables ]---------------------------------------------------------char eeIndex value VAR VAR VAR Byte Word Word

' -----[ Rutina Principal ]--------------------------------------------------DO DEBUG CLS, "Type C, R or D", CR, "C - Clear records", CR, "R - Record records", CR, "D - Display records", CR, ">" DEBUGIN char DEBUG CR SELECT char CASE "C", "c" GOSUB Clear_Data CASE "R", "r" GOSUB Record_Data CASE "D", "d" GOSUB Display_Data CASE ELSE DEBUG CR, "Not a valid entry.", CR, "Try again." PAUSE 1500

Pgina 218 Sensores Inteligentes y sus Aplicaciones

ENDSELECT LOOP ' -----[ Subrutina - Clear_Data ]-------------------------------------------Clear_Data: FOR eeIndex = Records TO RecordsEnd WRITE eeIndex, 100 NEXT DEBUG CR, "Records cleared." PAUSE 1000 RETURN ' -----[ Subrutina - Record_Data ]------------------------------------------Record_Data: DEBUG CR, "Enter valores from -100 to 100", CR FOR eeIndex = Records TO RecordsEnd DEBUG "Record ", DEC eeIndex, " >" DEBUGIN SDEC value value = value + 100 WRITE eeIndex, value NEXT DEBUG CR, "End of records.", CR, "Press Enter for menu..." DEBUGIN char RETURN ' -----[ Subrutina - Display_Data ]-----------------------------------------Display_Data: DEBUG CR, "Index Record", CR, "----- ------", CR FOR eeIndex = Records TO RecordsEnd READ eeIndex, value value = value - 100 DEBUG DEC eeIndex, CRSRX, 7, SDEC value, CR NEXT DEBUG CR, "Press Enter for menu..." DEBUGIN char RETURN

Su Turno - Cuntos Bytes desea guardar?

EepromDataStorage.bs2 usa Records y RecordsEnd para todos los ciclos que ejecutan operaciones READ y WRITE. Por ello, puede cambiar el nmero of valores que el

Captulo 6: Ms Proyectos con el Acelermetro Page 219

programa guarda simplemente cambiando el nmero de elementos en la directiva


Records DATA.

Intente cambiando el nmero de elementos que el programa guarda de 11 to 7. Todo lo que tiene que hacer es cambiar Records DATA (10) a Records DATA (6). Pruebe y verifique que funciona.

En la actividad #4, usaremos esta caracterstica para cambiar el nmero de registros que el programa guarda a 1000 con Records DATA (1000). 11

ACTIVIDAD #3: USO DE LA EEPROM PARA CAMBIO DE MODOS


Esta actividad presenta un truco con la EEPROM que puede usar para convertir el botn Reset de la Board of Education en un switch para elegir diversos modos de un programa.
Cdigo que Transforma el botn Reset en un Selector de Modo

Si aparta un byte de la EEPROM, le puede posibilitar seleccionar entre 256 modos de programa diferentes. En el siguiente programa ejemplo, solo usaremos 2: a modo menu y un modo que brinca a registrador de datos luego de un breve retraso. He aqu una directiva DATA que nombre a un byte EEPROM Reset e inicializa el valor guardado por este byte en cero.
Reset DATA 0

La forma ms simple de inicializacin es una configuracin de switch on/off. Es aqu donde se lee el valor del byte EEPROM Reset, se le agregua un 1 y luego el valor modificado es escrito en el byte Reset. El valor modificado tambin es examinado para ver si es par o impar con IF value // 2 = 0 THEN...
READ Reset, value value = value + 1 WRITE Reset, value IF value // 2 = 0 THEN END

En este ejemplo, si esa condicin es verdad, el programa termina aqu. La siguiente vez que presione y libere su botn Reset, value ser impar, la condicin ser falsa y el bloque de cdigo no detendr el programa antes de que alcance la Rutina Principal. Si el botn Reset es presionado y liberado nuevamente, el bloque de cdigo detender el

Pgina 220 Sensores Inteligentes y sus Aplicaciones

programa nuevamente. La siguiente vez no lo detendr, etc. Entonces el programa utiliza el botn de su tarjeta Board of Education como un botn de cambio on/off. A continuacin hay un ejemplo que usa el bloque de cdigo en un modo diferente. En vez de detener o permitir que continue el programa, el bloque de cdigo IF...THEN es brincado la primera vez que corre el programa, luego ejecuta la segunda vez que corre el programa (luego de presionar y liberar el botn Reset). Es brincado la siguiente vez y ejecutado nuevamente la vez despus de ello. El efecto neto es que el programa o cuenta y brinca a la subrutina Record_Data, o contina al menu principal del programa, dependiendo si su botn Reset has been presionado/liberado un nmero de veces par o impar.
' -----[ Inicializacin ]--------------------------------------READ Reset, value value = value + 1 WRITE Reset, value IF value // 2 = 0 THEN FOR char = 15 TO 0 DEBUG CLS, "Datalogging starts", CR, "in ", DEC2 char, " seconds", CR, CR, "Press/release Reset", CR, "for menu..." FREQOUT 4, 50, 3750 PAUSE 950 NEXT GOTO Record_Data ENDIF

Programa Ejemplo: EepromDataStorageWithReset.bs2

Este programa demuestra cmo usar una direccin en EEPROM para controlar el comportamiento del programa, dependiendo si el programa ha sido corrido o vuelto a correr un nmero de veces par o impar. El nmero de veces que el programa ha sido corrido ser controlado por el botn Reset despus de ser descargado. Si el botn Reset ha sido presionado/liberado un nmero par de veces, el programa empieza con the menu de la actividad previa. Si ha sido presionado/liberado un nmero impar de veces, ejecuta un conteo regresido y luego llama a la subrutina Record_Data.

Captulo 6: Ms Proyectos con el Acelermetro Page 221

Introduzca y corra EepromDataStorageWithReset.bs2. Verifique que puede cambiar el modo de inicio del programa pressionando y liberando el botn Reset. Pruebe las propiedades del programa y asegrese que todas trabajan.

' -----[ Titulo ]------------------------------------------------------------' Sensores Inteligentes y sus Aplicaciones - EepromDataStorageWithReset.bs2 ' Demuestra guardar, recuperar y borrar valores en la memoria EEPROM. '{$STAMP BS2} '{$PBASIC 2.5} ' -----[ Directivas DATA]---------------------------------------------------Reset Records RecordsEnd DATA DATA DATA 0 (10)

' -----[ Variables ]---------------------------------------------------------char eeIndex value VAR VAR VAR Byte Word Word

' -----[ Inicializacin ]--------------------------------------READ Reset, value value = value + 1 WRITE Reset, value IF value // 2 = 0 THEN FOR char = 15 TO 0 DEBUG CLS, "Datalogging starts", CR, "in ", DEC2 char, " seconds", CR, CR, "Press/release Reset", CR, "for menu..." FREQOUT 4, 50, 3750 PAUSE 950 NEXT GOTO Record_Data ENDIF ' -----[ Rutina Principal]---------------------------------------------------DO

Pgina 222 Sensores Inteligentes y sus Aplicaciones

DEBUG CLS, "Press/Release Reset", CR, "to arm datalogger ", CR, CR, " - or - ", CR, CR, "Type C, R or D", CR, "C - Clear records", CR, "R - Record records", CR, "D - Display records", CR, ">" DEBUGIN char DEBUG CR SELECT char CASE "C", "c" GOSUB Clear_Data CASE "R", "r" GOSUB Record_Data CASE "D", "d" GOSUB Display_Data CASE ELSE DEBUG CR, "Not a valid entry.", CR, "Try again." PAUSE 1500 ENDSELECT LOOP ' -----[ Subrutina - Clear_Data ]-------------------------------------------Clear_Data: FOR eeIndex = Records TO RecordsEnd WRITE eeIndex, 100 NEXT DEBUG CR, "Records cleared." PAUSE 1000 RETURN ' -----[ Subrutina - Record_Data ]------------------------------------------Record_Data: DEBUG CR, "Enter valores from -100 to 100", CR FOR eeIndex = Records TO RecordsEnd DEBUG "Record ", DEC eeIndex, " >" DEBUGIN SDEC value value = value + 100 WRITE eeIndex, value NEXT DEBUG CR, "End of records.", CR, "Press Enter for menu..."

Captulo 6: Ms Proyectos con el Acelermetro Page 223

DEBUGIN char RETURN ' -----[ Subrutina - Display_Data ]-----------------------------------------Display_Data: DEBUG CR, "Index Record", CR, "----- ------", CR FOR eeIndex = Records TO RecordsEnd READ eeIndex, value value = value - 100 DEBUG DEC eeIndex, CRSRX, 7, SDEC value, CR NEXT DEBUG CR, "Press Enter for menu..." DEBUGIN char RETURN

Su Turno Direccionado EEPROM Automtico de la Directiva DATA

Not que cambiaron los nmeros registrados en este programa? En vez de 0 a 10, fueron 1 al 11. Intente mover la directiva Reset DATA despus de las otras dos. Luego, corra el programa modificado y examine el resultado. Haga tablas similares a la Table 6-1 que ilustre los valores guardados por Reset, Records, y RecordsEnd. Haga la primera tabla para ilustrar el programa original, y la segunda para illustrar el programa modificado en el que cambi el orden de las directivas DATA.

ACTIVIDAD #4: REGISTRO REMOTO DE LA ACELERACIN


En esta actividad agregar un piezo parlante al circuito acelermetro existente. Luego, modificar el programa para que le provea con una herramienta de registrado remoto que sea fcil de operar. El piezo parlante ser til para indicar conteo regresivo, inicio y paro. El circuito de acelermetro ser al mismo usado en el captulo #3, y el piezo parlante ser agregado debajo al acelermetro en la tableta.
Parts Required

(1) Acelermetro Mems 2125 (2) resistencias 220 (1) piezo parlante (4) cables conectores

Pgina 224 Sensores Inteligentes y sus Aplicaciones

Circuito

Construya los circuitos de acelermetro y piezo parlante de la Figura 6-3.

Figura 6-3 Acelermetro y Piezo parlante, esquemtico (Izquierda) y Diagrama de conexiones (abajo)

Modificaciones al Programa

El siguiente programa ejemplo, DatalogAcceleration.bs2, es una expansin de EepromDataStorageWithReset.bs2. Ha sido modificado para que pueda iniciar, parar y reiniciar el registro con el botn Reset de su tarjeta. Puede desconectar la tarjeta de su computadora para ejecutar el registro de datos, y reconectarla para desplegar las mediciones en la Terminal de Depuracin. Esta es una caracterstica crucial para tomar mediciones de campo y luego desplegarlas ms tarde. DatalogAcceleration.bs2 tiene una seccin de inicializacin modificada que hace que el piezo parlante suene cada segundo por diez segundos antes de empezar a registrar datos.
' -----[ inicializacin ]---------------------------------------------Init: . .

Captulo 6: Ms Proyectos con el Acelermetro Page 225

. FOR char = 10 TO 0 . . . FREQOUT 4, 50, 3750 PAUSE 950 NEXT . . .

DatalogAcceleration.bs2 tiene una subrutina modificada Record_Data que otiene los valores de x y y del acelermetro, los escala a (-100 a 100) y los escribe en la EEPROM. Los incrementos del ciclo FOR...NEXT son en pasos de 2 con el argumento STEP 2 puesto que cada vez dentro del ciclo, la rutina salva 2 bytes. La subrutina Display_Data tiene modificaciones similares para que despliegue los valores de x y y en una tabla.
Record_Data: FREQOUT 4, 75, 4000 PAUSE 200 FREQOUT 4, 75, 4000 DEBUG CLS, "Recording..." FOR eeIndex = Records TO RecordsEnd STEP 2 PULSIN 6, 1, x PULSIN 7, 1, y x = (x MIN 1875 MAX 3125) - 1875 ** 10538 y = (y MIN 1875 MAX 3125) - 1875 ** 10538 WRITE eeIndex, x WRITE eeIndex + 1, y NEXT FREQOUT 4, 200, 4000 DEBUG CR, "End of records.", CR, "Press Enter for menu..." DEBUGIN char RETURN

The piezo parlante tambin suena dos veces con un sonido ms alto al principo del registrado de datos. Una caracterstica importante de este contador regresivo es que puede

Pgina 226 Sensores Inteligentes y sus Aplicaciones

detener el registro antes de que inicie solo con presionar y liberar el botn Reset de su tarjeta. Para reiniciar el conteo regresivo, solo presione y libere el botn Reset otra vez.
Programa Ejemplo: DatalogAcceleration.bs2
Descarga gratis Este programa est disponible como descarga grtis .bs2 en la pgina del producto de Sensores Inteligentes y sus Aplicaciones en www.parallax.com.

Este programa toma y guarda 500 mediciones de ejes x y y del acelermetro en alrededor de 15 segundos. Esto equivale a un nivel de muestreo de cerca de 33 mediciones por segundo. Esto es bueno para una variedad de mediciones. Para medir procesos ms largos y lentos, la subrutina Record_Data puede ser alentada con un comando PAUSE. Abra y corra DatalogAcceleration.bs2. Haga Click the la ventana de Transmisin de la Terminal de Depuracin's. Teclee R para empezar a grabar e incline su acelermetro por 15 segundos. Cuando se le pida, presione Enter para regresar al menu del programa. Teclee D para desplegar las mediciones. Reviselas y verifique que corresponden a la forma en que inclin el acelermetro. Desconecte su tarjeta del cable serial. Si empieza a sonar, presione y libere el botn reset para hacer que se detenga.

Cuando est listo para empezar a inclinar the acelermetro por 15 segundos, presione y libere el botn Reset. El registrador sonar durante la cuenta regresiva de 10 segundos, luego terminar con 2 pitidos ms altos indicando el inicio del registrador. Har un solo pitido ms alto cuando haya terminado. Presione y libere el botn reset. Espere los 10 segundos, luego incline su acelermetro en un patrn que pueda recordar, por 15 segundos. Conecte su acelermetro de regreso a su computadora. Si empieza a sonar, presione y libere el botn reset para parar la cuenta regresiva. Haga click en el botn Run del Editor del BASIC Stamp para bajar el programa al BASIC Stamp y refrescar la pantalla Menu de la Terminal de Depuracin. Teclee D para desplegar las mediciones registradas. Comparelas con las direcciones en que inclin la tarjeta y asegrese que correspondan.

Captulo 6: Ms Proyectos con el Acelermetro Page 227

' -----[ Titulo ]-----------------------------------------------------------' Sensores Inteligentes y sus Aplicaciones - DatalogAcceleration.bs2 ' Registra 500 mediciones de aceleracion en los ejes x y y. '{$STAMP BS2} '{$PBASIC 2.5} ' -----[ Directivas DATA]---------------------------------------------------Reset Records RecordsEnd DATA DATA DATA 0 (1000)

' -----[ Variables ]---------------------------------------------------------char eeIndex value x y VAR VAR VAR VAR VAR Byte Word Word value Word

' -----[ inicializacin ]----------------------------------------------------Init: READ Reset, value value = value + 1 WRITE Reset, value IF value // 2 = 0 THEN FOR char = 10 TO 0 DEBUG CLS, "Datalogging starts", CR, "in ", DEC2 char, " seconds", CR, CR, "Press/release Reset", CR, "for menu..." FREQOUT 4, 50, 3750 PAUSE 950 NEXT GOSUB Record_Data ENDIF ' -----[ Rutina Principal]---------------------------------------------------DO DEBUG CLS, "Press/Release Reset", CR,

Pgina 228 Sensores Inteligentes y sus Aplicaciones

"to arm datalogger ", CR, CR, " - or - ", CR, CR, "Type C, R or D", CR, "C - Clear records", CR, "R - Record records", CR, "D - Display records", CR, ">" DEBUGIN char DEBUG CR SELECT char CASE "C", "c" GOSUB Clear_Data CASE "R", "r" GOSUB Record_Data CASE "D", "d" GOSUB Display_Data CASE ELSE DEBUG CR, "Not a valid entry.", CR, "Try again." PAUSE 1500 ENDSELECT LOOP ' -----[ Subrutina - Clear_Data ]-------------------------------------------Clear_Data: DEBUG CR, "Clearing..." FOR eeIndex = Records TO RecordsEnd WRITE eeIndex, 0 NEXT DEBUG CR, "Records cleared." PAUSE 1000 RETURN ' -----[ Subrutina - Record_Data ]------------------------------------------Record_Data: FREQOUT 4, 75, 4000 PAUSE 200 FREQOUT 4, 75, 4000 DEBUG CLS, "Recording..." FOR eeIndex = Records TO RecordsEnd STEP 2 PULSIN 6, 1, x PULSIN 7, 1, y

Captulo 6: Ms Proyectos con el Acelermetro Page 229

x = (x MIN 1875 MAX 3125) - 1875 ** 10538 y = (y MIN 1875 MAX 3125) - 1875 ** 10538 WRITE eeIndex, x WRITE eeIndex + 1, y NEXT FREQOUT 4, 200, 4000 DEBUG CR, "End of records.", CR, "Press Enter for menu..." DEBUGIN char RETURN ' -----[ Subrutina - Display_Data ]-----------------------------------------Display_Data: DEBUG CR, "Index x-axis y-axis", CR, "----- ------ ------", CR FOR eeIndex = Records TO RecordsEnd STEP 2 READ eeIndex, x x = x - 100 READ eeIndex + 1, y y = y - 100 DEBUG DEC eeIndex, CRSRX, 7, SDEC x, CRSRX, 14, SDEC y, CR NEXT DEBUG CR, "Press Enter for menu..." DEBUGIN char RETURN

Su Turno Registrando el ngulo de Rotacin

El Captulo 3, actividad #5 present mediciones de rotacin verticales con el acelermetro. Puesto que los radianes binario son valores de 0 a 255, puede guardar una sola medicin de ngulo en un byte de EEPROM. Esto duplicar el nmero de mediciones que tomar la aplicacin. Solo requiere algunas modificaciones para que DatalogAcceleration.bs2 guarde el ngulo de rotacin: Salve DatalogAccleration.bs2 como DatalogAngle.bs2. Actualice los comentarios en la seccion de Ttulo.

Pgina 230 Sensores Inteligentes y sus Aplicaciones

Remueva el argumento STEP 2 de los ciclos FOR...NEXT en las subrutinas Record_Data y Display_Data. En la subrutina Record_Data, reemplace estos 2 comandos WRITE:
WRITE eeIndex, x WRITE eeIndex + 1, y

...con esta operation ATN y este comando WRITE:


value = x ATN y WRITE eeIndex, value

Modifique el encabezado de pantalla en la subrutina Display_Data as:


DEBUG CR, "Index CR, "----CR angle ", ------",

Reemplace estos 4 comandos:


READ eeIndex, x x = x - 100 READ eeIndex + 1, y y = y - 100

...con estos 2:
READ eeIndex, value value = value */ 361

Salve sus cambios y pruebe el programa modificado.

ACTIVIDAD #5: ESTUDIO DE LA ACELERACIN EN UN AUTO DE RADIO CONTROL


Esta actividad demuestra como usar el programa DatalogAcceleration.bs2 de la actividad previa para analizar las fuerzas de aceleracin en un carro de radio-control (RC) durante una variedad de maniobras. Esta actividad tambin demuestra cmo estas fuerzas de aceleracin registradas pueden ser usadas para seguir y trazar la posicin y velocidad del carro. An cuando el equipo real y los clculos son de alguna manera ms completos, la derivacin de la posicin a partir de mediciones de aceleracin succesivas es un componente de los sistemas de gua inercial empleados en los cohetes y las naves espaciales. Estos sistemas usan una combinacin de una version triaxial de las

Captulo 6: Ms Proyectos con el Acelermetro Page 231

mediciones de aceleracin cubiertas en esta actividad junto con giroscopios que miden la rotacin del vehculo.
Partes, Equipo y Diagramas de Circuito

Adems de las partes para la actividad #4, necesitar un carro RC y su controlador, no includos en el Kit de Partes de Sensores Inteligentes y sus Aplicaciones. Los diagramas del circuito a armar en su tableta estn al principio de la actividad #4 en este captulo.
Hardware y Configuracin

La Figura 6-4a muestra un carro RC econmico que puede ser obtenido en muchas tiendas de pasatiempos y tiendas de electrnica. La Figura 6-4b muestra cmo la tarjeta fue montada. Se fijaron patitas de goma por debajo de la tarjeta de tal forma que ninguna de sus conexiones elctricas estuviera en contacto con alguna de las partes metlicas del carro RC. Otra opcin hubiera sido usar cinta adhesiva de doble cara para fijar la tarjeta al techo plstico del carro. La tarjeta fue orientada con la tableta hacia el frente del carro.
Figura 6-4: Carro RC con el registrador de aceleracin

a.

b.

Evite corto circuitos accidentales. Asegrese que su tarjeta est montada en el carro de tal forma que el metal expuesto debajo de la tarjeta no tenga forma de entrar en contacto con cualquier parte de metal del carro RC o sus conexiones elctricas.

Como Trabaja

La Figura 6-5 muestra una grfica de las mediciones del eje y del acelermetro al acelerar el carro hacia enfrente, desacelerado para detenerlo y luego acelerado en reversa. Las

Pgina 232 Sensores Inteligentes y sus Aplicaciones

mediciones fueron adquiridas con DatalogAcceleration.bs2 de la actividad #4. Luego de desplegarlas en la Terminal de Depuracin, fueron sombreadas, copiadas y pegadas en Windows Notepad. Una vez all, fueron importadas en el programa de hoja de clculo Microsoft Excel y luego graficadas.

Decelerate
RC Car Forw ard and Backw ard 30 20 10 0 0 -10 -20 -30 -40 seconds/30 50 100 150

Accelerate Backward

200

250

300

Stop

Figura 6-5 Mediciones del eje y del Acelermetro en el Carro RC

gravity/100

Accelerate Forward

Decelerate

La razn de que la aceleracin al frente sea negativa es porque el eje de sensado ym esta apuntando a la parte posterior del carro RC como se muestra en la Figura 6-6. Entonces, al ir acelerando el carro al frente, la aceleracin es negativa. Cuando un carro reduce su velocidad, de hecho est acelerando hacia atrs. Esto se muestra en la Figura 6-5. Primero, el carro acelera al frente, luego aplic frenos y perdi velocidad (desaceler). La medicin y fue positiva, luego la aceleracin fu negativa. Despus de un breve paro, el carro aceler en reversa. Note que y es nuevamente positiva. Entonces, cuando pierde velocidad (desacelera) de su velocidad en reversa para detenerse nuevamente, el carro esta, en efecto, acelerando al frente, y la medicin y es negativa otra vez.

Captulo 6: Ms Proyectos con el Acelermetro Page 233

Figura 6-6 Aceleracin del Carro RC vs Ejes de Sensado del Acelermetro

a.

b.

Si est manejando un carro, cuando el carro acelera al frente puede sentir que el asiento le empuja al frente. Si da una vuelta sbita a la derecha el lado izquierdo del carro le empuja a la derecha. Eso es porque est acelerando a la derecha al ir dando la vuelta. Esto se muestra en la Figura 6-7, que ilustra cmo un objeto puede viajar al frente a una velocidad constante, y para hacer que d vuelta, siempre tiene que ser acelerado hacia el centro del crculo en el que est viajando.

Figura 6-7 Viajando en un Crculo Esto causa aceleracin continua hacia el centro.

La Figura 6-8 muestra una grfica de las mediciones del eje x del acelermetro al manejar el carro RC en crculos dando vueltas a la izquierda, luego en crculos dando vueltas a la derecha. Note como la medicin del eje x muestra aceleracin positiva cuando el carro RC da vuelta a la izquierda, y aceleracin negativa cuando el carro RC da vuelta a la derecha.

Pgina 234 Sensores Inteligentes y sus Aplicaciones

Left Turn Circles


RC Car Left then Right 60 40 20 gravity/100 0 0 -20 -40 -60 -80 -100 seconds/30 100 200 300

Straighten Out

400

500

600

Figura 6-8 Mediciones del Acelermetro en el Carro RC mientras se maneja en crculos

Right Turn Circles

La Figura 6-9 muestra cmo est orientado el eje x del acelermetro y la aceleracin que mide. Para una vuelta a la izquierda, el carro est acelerando a la izquierda, lo que para el acelermetro es una medicin de aceleracin en el eje x positiva. Cuando da vuelta a la derecha, la aceleracin es en la direccin opuesta del eje x positivo, entonces la medicin en el eje x es negativa.
Figura 6-9: Sensando la aceleracin durante las vueltas

a.

b.

Captulo 6: Ms Proyectos con el Acelermetro Page 235

Procedimiento

El procedimiento para medir y luego graficar la aceleracin del carro RC es como sigue. Adhiera su tarjeta al carro RC. Descarge DatalogAcceleration.bs2 en el BASIC Stamp. Coloque el carro en una area abierta y presione/libere botn Reset de la tarjeta. Espere a que el conteo regresivo indique que el registrado de datos ha empezado. Maneje el carro con las siguientes maniobras, en aproximadamente 15 segundos: o Acelere el carro hacia al frente, luego detngalo. o Acelere el carro hacia atrs, luego detngalo. o Manejelo en una figura de ocho. Cuando la tarjeta suene nuevamente (despus de unos 15 segundos) querra decir que termino el registradote datos. Conecte la tarjeta de regreso a su PC. Corra DatalogAcceleration.bs2 nuevamente. Haga Click en la Ventana de Transmisin de la Terminal de Depuracin. Escriba D para desplegar los datos. Use su mouse para sombrear el encabezado de tabla y todas las mediciones en la ventana azul de Recepcin de la Terminal de Depuracin. (excepto el menu.) Presione CTRL + C para copiar los registros. Abra Notepad. Haga Click en Edit y seleccione Paste. Salve el archivo.

Las siguientes instrucciones explican como importar el archivo .txt en Microsoft Excel 2002 y graficarlo. Si est usando un programa de hoja de clculo diferente, las palabras clave como espacio delimitado, trazado disperso XY pueden darle pistas de cmo hacerlo en su software de hoja de clculo particular. En Excel, haga click en File y seleccione Open. En el campo de tipo de archivo, seleccione All files (*.*). Encuentre el archivo .txt de notepad, seleccionelo y haga click en el botn Open. En Text Import Wizard paso 1, haga click en Delimited radio y luego en Next. De Click en el recuadro a un lado de Space ya que el archivo est delimitado en espacio. Marque el recuadro "Treat consecutive delimiters as one", luego click en Next. Asegrese que el est seleccionado el botn ratio en General column data format, luego haga click en Finish.

Pgina 236 Sensores Inteligentes y sus Aplicaciones

Su hoja de clculo debe ser de 3 columnas (ancho) y como 503 renglones (largo)

El siguiente paso, que tambin se ha documentado para Microsoft Excel 2002, es correr la herramienta de grfico y decirle qu tipo de grfica y cmo quiere que se vea. Coloque el cursor en una celda a la derecha cerca de sus 3 columnas de datos. Haga click en Insert y seleccione Chart. En la pestaa de tipos estandar, seleccione XY (Scatter, dispersa). Tambin haga click en la grfica que la configura en "Scatter with data points connected to smoothed Lines without markers". Luego, haga click en Next. Assumiendo que sus datos del eje y empiezan en C3 y terminan en C503, escriba C3..C503 en Data range. Haga Click el botn ratio cercano a las columnas para indicar que la serie de datos est en una columna. Luego, haga click en Next. Complete con la informacin del eje y en chart title, luego haga click en Finish. Repita para el eje x.
Solo partes de cda grfica son relevantes. Considere que los datos que tendrn sentido para el eje y es la porcin de tiempo en que el carro aceler hacia delante y en reversa. Del mismo modo, la parte de la grfica que tendr sentido para el eje x es la porcin cuando el carro estaba dando vuelta.

Graficando la Posicin del Carro y la Velocidad

Si conoce la posicin inicial y la velocidad de un objeto, puede usar la aceleracin durante un perodo de tiempo para calcular su posicin. Estos clculos pueden hacerse iterativamente en una hoja de clculo para graficar la velocidad y la ruta del carro RC.
Descargando la hoja de clculo. Las hojas de clculo de MS Excel usadas para trazar estas grficas estn disponibles como descarga en la pgina de Sensores Inteligentes y sus Aplicaciones en www.parallax.com. Descargue la hoja de clculo y examine las ecuaciones en las columnas junto con las configuraciones para cada trazado.

Por ejemplo, la grfica de aceleracin en la Figura 6-10 muestra un trazado para el carro RC al acelerar adelante y atrs. (La hoja de clculo fu modificada para que los valores positivos indiquen aceleracin al frente y los valores negativos indiquen aceleracin atrs o desaceleracin.) Entonces, esta grfica muestra que el carro aceler hacia adelante a un promedio de unos 0.16 g por poco menos de 2 seconds. Luego, desaceler a un promedio

Captulo 6: Ms Proyectos con el Acelermetro Page 237

de unos 1.4 g por poco ms de 2 segundos. Entonces descans como por 1 segundo. Despus, aceler en reversa y desaceler (aceler en reversa) para un segundo paro.
Figura 6-10: Grfica de aceleracin modificada con valores positivos indicando hacia adelante

Seleccionando Datos a Graficar. Haga click derecho sobre la linea en la grfica con el ttulo "RC Car acceleration for Forward and Backward. Luego seleccione source data y haga click en la pestaa Series. Note que la serie que est siendo ploteada es de F229 a F492. Esta es la segunda de 2 pruebas adelante/atrs que fueron ejecutadas durante la sesin de registro de datos. Lo mismo aplica a las grficas de velocidad y posicin.

Se agreg una columna con una ecuacin la hoja de clculo que calcula el cambio en la velocidad para cada medicin de aceleracin. La ecuacin para la velocidad en una linea recta es v = v0 + at. Esto es, la velocidad inicial (v0) ms el producto de la aceleracin (a) y la duracin de esa aceleracin (t). Agregar una columna a la hoja de clculo que recalcula la velocidad entre cada medicin de aceleracin hace posible graficar la velocidad como se muestra en Figura 6-11. Como se esperaba, cuando el carro acelera al frente, su velocidad se incrementa. Luego, cuando se va deteniendo, su velocidad decrece. Al volver a acelerar, su velocidad decrece an ms (incrementa en direccin negativa). Entonces, al irse deteniendo de su movimiento en reversa, su velocidad regresa a casi cero.

Pgina 238 Sensores Inteligentes y sus Aplicaciones

Figura 6-11: Grfica de velocidad derivada de los datos de posicin inicial y aceleracin

Los clculos para esta grfica se hicieron en la columna F de la hoja de clculo. Si hace click en la celda F-17 de la hoja de clculo, esta ecuacin debe aparecer en el campo de funcin: =F16 + (0.03*9.8*E17/100) In este caso, F16 is la celda justo arriba F17, y tiene la velocidad previa. Esta velocidad previa es usada como V0 para el intervalo muestra. 0.03 es t, el tiempo entre muestras, y 9.8 * E17 / 100 toma la medicin E17, que est en centsimas de una g y la convierte a metros por segundo (m/s2). Al dividir entre 100 se toma el valor de centsimas de g a g y luego al multiplicar por 9.8 la convierte de g a m/s2. Esto es porque 1 g es aproximadamente 9.8 m/s2. Con las columnas en la hoja de clculo para aceleracin y velocidad, ahora es posible seguir la posicin del carro usando la ecuacin s = s0 + v0t + 1/2 at2. Esto es, la posicin del carro (s) es igual a la posicin inicial (s0) mas el producto de la velocidad inicial y el tiempo (v0t), mas el semiproducto de la aceleracin y el cuadrado del tiempo (1/2 at2). La resultante grfica de posicin mostrada en la Figura 6-12 is sorpresivamente exacta. El carro de hecho fue hacia al frente unos 3.5 metros antes de parar. Luego, regres y se par casi a un metro detrs de donde empez.

Captulo 6: Ms Proyectos con el Acelermetro Page 239

Figura 6-12: Grfica de posicin a partir de la posicin y velocidad iniciales y la aceleracin

La ecuacin que calcula la posicin en la celda G17 es: =G16+(F16*0.03)+((0.5*E17*9.8/100)*(0.03^2)) G16 es la posicin despus de la muestra previa, que es S0, la posicin inicial. F16*0.03 es v0t, velocidad inicial multiplicada por el tiempo. (0.5*E17*9.8/100)*(0.03^2) es 1/2 at2, donde t es nuevamente 0.03 segundos. Mientras que esta tcnica es bastante exacta en perodos cortos de tiempo, varias fuentes de error se arrastran en cada medicin. Las superficies no lisas y la vibracin afectarn las mediciones de aceleracin. Las ecuaciones asumen que la aceleracin entre cada medicin es constante, pero en muchos casos la aceleracin cambiar durante el tiempo entre cada muestra. Adems, cada medicin del acelermetro tiende a ser erronea en un pequeo porcentaje dada la naturaleza del MX2125. La hoja de datos del MX2125's (disponible en el sitio - www.memsic.com) explica estos errores, los mayores de ellos son llamados compensacin de cero y sensitividad. Variarn de un integrado a otro y tambin son influenciados por la temperatura. Tomar mediciones de precisin con el MX2125 involucra un convertidor A/D, a coprocesador de punto flotante, y datos obtenidos de pruebas de calibracin. Este procedimiento de calibracin esta fuera del alcance de este texto. Para averiguar ms acerca de este tema, consulte #AN-00MX-002 Thermal Acceleromters Temperature Compensation, disponible en el sitio web de Memsic.

Pgina 240 Sensores Inteligentes y sus Aplicaciones

Su Turno Registrando la Aceleracin, Velocidad y Posicin de su Carro RC

Como se mencion antes, las hojas de clculo de MS Excel usadas para trazar estas grficas estn disponibles como descarga en la pgina de Sensores Inteligentes y sus Aplicaciones en www.parallax.com. Descarge la hoja de clculo y examine las ecuaciones en las diferentes columnas junto con la configuracin de cada grfica. Luego, experimente y grafique con los datos obtenidos de su vehculo RC. Calesquiera datos grafique debera empezar de una posicin conocida con el carro parado. De esta manera conocer la posicin inicial (s0), y lo ms importante, la velocidad inicial, v0 es 0 m/s.

ACTIVIDAD #6: ESTUDIO DE LA ACELERACIN EN UN TRUCO CON PATINETA


Esta actividad observa un segundo ejemplo de estudio de aceleracin. Registra datos de un truco de patineta llamado ollie. La configuracin para registrar los datos del ollie (Figura 6-13) consta de una tarjeta BASIC Stamp HomeWork adherida con cinta de uso rudo por debajo de una patineta.
Esta actividad fu includa con fines de ilustracin no se espera que el lector se suba a una patineta! Este es solo un ejemplo de como el lector puede usar el acelermetro para hacer estudios del movimiento con sus propios pasatiempos o actividades deportivas; ocurre que el autor sabe usar una patineta. Para todas sus aplicaciones BASIC Stamp, use el sentido comn y equipo de proteccin adecuado y conduzca los experimentos bajo su propio riesgo (vea la Desvinculacin de Responsabilidad al reverso de la pgina inicial).

Figura 6-13: Tarjeta BASIC Stamp HomeWork adherida a la patineta del Autor

Captulo 6: Ms Proyectos con el Acelermetro Page 241

Acerca del Ollie

El primer ollie documentado fue hecho por Alan (Ollie) Gelfand a finales de los 70s. Gelfand lo inici en pistas cncavas. La versin en piso evolucion a principios de los 80s. Cuando el patinador hace un ollie, brinca y parece que su patineta est pegada a sus pies. Sin importar la pista o el estilo, muchos trucos de hoy son variaciones del ollie.
La Mecnica del Ollie

La Figura 6-14 muestra la mecnica de un ollie. Al brincar el ejecutante, (a) sus 2 pies empujan la patineta hacia abajo. Justo antes de volar en el aire (b), levanta su pie frontal y al mismo tiempo extiende su pie trasero hasta quedar con la punta del mismo, y la parte posterior de la patineta golpea el concreto. El momentum del frente de la patineta la mantiene elevndose (c), el patinador despega su pie trasero y patea con su pie frontal hacia adelante. Esto causa que se levante la parte posterior de la patineta (d) y se mueva ligeramente hacia enfrente. Mientras que la cubierta encuentra al pie trasero (e), el patinador aplica justo la suficiente presin para mantener la patineta contra sus pies al ir regresando al piso (f). El ms alto ollie a la fecha, ejecutado por Danny Wainwright, fu superior a los 5 pies de alto.
Figura 6-14: Mecnica del Ollie

Pgina 242 Sensores Inteligentes y sus Aplicaciones

Graficando la Aceleracon del Ollie

La Figura 6-15 muestra una grfica del eje y del acelermetro para los primeros 2 ollies que fueron registrados con el siguiente programa ejemplo. Cada paso de la Figura 6-14 est marcado en la grfica.
Acceleration vs Tim e for First Ollie 3.5 3 2.5 2 gravity (g) 1.5 1 0.5 0 170 -0.5 -1 -1.5 tim e (m s)

190

210

230

250

270

Figura 6-15 Aceleracin durante un Ollie

a, b

c, d e

El primer ollie fue un poco deficiente en los pasos b y c de la Figura 6-14, asi que la parte posterior de la patineta no se encontr con el pie posterior en el paso e. Note que el impacto de la tarjeta durante el paso f fu 3.5 g. Los puntos altos y bajos que siguen al paso fse asemejan a las oscilaciones cuando se toca una campana. Esto es partialmente debido a la vibration de la patineta y parcialmente debido a la turbulencia del gas dentro del acelermetro causada por el impacto. La Figura 6-16 muestra los datos para un ollie un poco mejor. Fue un poco ms alto y el paso e se hizo con gracia. Note que el paso de a a b es ms pronunciado, y llega a -1.25 g antes de subir por encima de 1 g para los pasos c y d. Estos valores, que son mayores que los de la grfica anterior, indican un ollie mayor. Note tambin que el impacto fue menor a 3 g, porque el patinador no estaba intentando de recuperar con la patineta en su camino hacia abajo.

Captulo 6: Ms Proyectos con el Acelermetro Page 243

Acceleration vs Time for Second Ollie 3.5 3 2.5 2 gravity, (g) 1.5 1 0.5 0 775 -0.5 -1 -1.5 tim e (ms) 795 815 835 855 875

Figura 6-16 Grfica de un Ollie ligeramente mejor

a, b

c, d

Registrando un Ollie

La Figura 6-17 muestra cmo el eje y de sensado del acelermetro esta alineado para sensar varias inclinaciones y rotaciones de la patineta. Este es el nico eje que queremos registrar en el siguiente programa ejemplo.
Figura 6-17 Acelermetros Sensing Axes on the patineta

El programa de la actividad #4 fue modificado para guardar solo las mediciones primarias del eje y del acelermetro sin escalamiento ni compensacin. El valor de y estar entre 1875 a 3125 (para 1 g) si no se involuca una aceleracin. Cuando la medicin de la aceleracin es 3.5 g, resulta en una medicin de 4687. en cualquier evento, estos son valores de una palabra, y entonces el comando WRITE en la subrutina Record_Data tiene que sermodificado para que guarde variables de una palabra. Puesto que una palabra toma 2 bytes, the ciclo FOR...NEXT an tiene que contar en pasos de 2.
FOR eeIndex = Records TO RecordsEnd STEP 2 PULSIN 7, 1, y WRITE eeIndex, Word y NEXT

Pgina 244 Sensores Inteligentes y sus Aplicaciones

Se hacen modificaciones similares para el ciclo FOR...NEXT en la subrutina Display_Data mostrada aqu.
FOR eeIndex = Records TO RecordsEnd STEP 2 READ eeIndex, Word y DEBUG DEC eeIndex, CRSRX, 7, SDEC y, CR NEXT

Programa Ejemplo: DatalogYaxisUnscaled.bs2

El siguiente programa ejemplo fu usado para registrar los datos graficados en las Figura 6-15 yFigura 6-16. Le da unos 10 segundos de registro, suficiente para 2 o 3 ollies. El traslado de datos a una hoja de clculo y su grafica est basado en el procedimiento de la actividad #5. La hoja de clculo fue modificada para generar las grficas mostradas en esta actividad agregando una columna con una frmula que toma los datos del eje y, les resta 2500 y los divide entre 625. Esto da una medicin en unidades de gravedad (g).
' -----[ Titulo ]------------------------------------------------------------' Sensores Inteligentes y sus Aplicaciones - DatalogYaxisUnscaled.bs2 ' Registra 500 mediciones de aceleracion en el eje y de tamao de una palabra. '{$STAMP BS2} '{$PBASIC 2.5} ' -----[ Directivas DATA]---------------------------------------------------Reset Records RecordsEnd DATA DATA DATA 0 (1000)

' -----[ Variables ]---------------------------------------------------------char eeIndex value x y VAR VAR VAR VAR VAR Byte Word Word value Word

' -----[ Inicializacion ]----------------------------------------------------Init: READ Reset, value value = value + 1 WRITE Reset, value

Captulo 6: Ms Proyectos con el Acelermetro Page 245

IF value // 2 = 0 THEN FOR char = 10 TO 0 DEBUG CLS, "Datalogging starts", CR, "in ", DEC2 char, " seconds", CR, CR, "Press/release Reset", CR, "for menu..." FREQOUT 4, 50, 3750 PAUSE 950 NEXT GOSUB Record_Data ENDIF ' -----[ Rutina Principal]---------------------------------------------------DO DEBUG CLS, "Press/Release Reset", CR, "to arm datalogger ", CR, CR, " - or - ", CR, CR, "Type C, R or D", CR, "C - Clear records", CR, "R - Record records", CR, "D - Display records", CR, ">" DEBUGIN char DEBUG CR SELECT char CASE "C", "c" GOSUB Clear_Data CASE "R", "r" GOSUB Record_Data CASE "D", "d" GOSUB Display_Data CASE ELSE DEBUG CR, "Not a valid entry.", CR, "Try again." PAUSE 1500 ENDSELECT LOOP ' -----[ Subrutina - Clear_Data ]-------------------------------------------Clear_Data:

Pgina 246 Sensores Inteligentes y sus Aplicaciones

DEBUG CR, "Clearing..." FOR eeIndex = Records TO RecordsEnd WRITE eeIndex, 0 NEXT DEBUG CR, "Records cleared." PAUSE 1000 RETURN ' -----[ Subrutina - Record_Data ]------------------------------------------Record_Data: FREQOUT 4, 75, 4000 PAUSE 200 FREQOUT 4, 75, 4000 DEBUG CLS, "Recording..." FOR eeIndex = Records TO RecordsEnd STEP 2 PULSIN 7, 1, y WRITE eeIndex, Word y NEXT FREQOUT 4, 200, 4000 DEBUG CR, "End of records.", CR, "Press Enter for menu..." DEBUGIN char RETURN ' -----[ Subrutina - Display_Data ]-----------------------------------------Display_Data: DEBUG CR, "Index CR, "----CR x-axis -----y-axis", ------",

FOR eeIndex = Records TO RecordsEnd STEP 2 READ eeIndex, Word y DEBUG DEC eeIndex, CRSRX, 7, SDEC y, CR

Captulo 6: Ms Proyectos con el Acelermetro Page 247

NEXT DEBUG CR, "Press Enter for menu..." DEBUGIN char RETURN

Su Turno - Qu es lo que logra un Ollie alto?

Sera interesante registrar y comparar ollies de diferentes patinadores. La mejor manera de hacerlo sera tomar un video de cada ollie, y entonces ver el video y examinar la grfica al mismo tiempo. Otra cosa que puede medirse es el tiempo en el aire, que es el tiempo entre los pasos a y f en las grficas.

ACTIVIDAD #7: DISTANCIA DE RECORRIDO DE UNA BICICLETA


La Figura 6-18 en la siguiente pgina muestra cmo la tarjeta y acelermetro pueden ser montados dentro de una rueda de bicicleta, a fin de medir la distancia de recorrido de la misma. Al levantar la bicicleta, esto podra parecer en principio como un problema del ngulo of rotation, como en el Captulo 3, actividad #5. Sin embargo, tambin hay aceleracin hacia el centro de la rueda que medirn los ejes. Esto es porque el acelermetro esta viajando en una ruta circular, justo como el carro RC de la actividad previa. Esta aceleracin hacia el centro de la rueda ser diferente a diferentes velocidades y resultar en mediciones de ngulo inclinadas. Las mediciones del acelermetro tambin sern afectadas cuando ciclista aplique los frenos, acelere y se incline en las vueltas. Adems, qu criterio debe ser usado para agregar un uno al nmero de crculos completos que ha dado la rueda? Esta actividad presenta la histresis como un modo de medir la rotacin de la rueda. Tambin demuestra como pueden ser usadas las tcnicas de registro usadas en las actividades anteriores para examinar cada uno de estos asuntos y para probar la confiabilidad del prototipo.
No permita que el metal en el lado inferior de su tarjeta entre en contacto con los rayos. Use un material aislante como plstico, cartn o espuma esd para aislar la parte inferior de la tarjeta de los rayos.

Pgina 248 Sensores Inteligentes y sus Aplicaciones

Figura 6-18 HomeWork Board con el acelermetro montada en una rueda de bicicleta

a.

b.

Contando Revoluciones de la rueda con Histresis

Un problema para contar las revoluciones de la rueda es asegurar que el programa no avance el conteo si la rueda no ha dado una vuelta completa. El error ms comn se hace cuando para medir las revoluciones se establece un solo punto lmite. Qu pasa si el ciclista est esperando en un semforo y est moviendo su bicicleta hacia adelante y atrs 1 o 2 pulgadas? Si hay un solo punto lmite, el contador de revoluciones de rueda seguir incrementando cada vez que el ciclista se balancee hacia adelante y atrs. El siguiente programa ejemplo demuestra una forma de resolver este problema con histresis. Histresis es el proceso de fijar 2 valores de umbral diferentes que deben ser cruzados antes de que occurra un cambio de estado. En nuestro caso, el cambio de estado es un incremento en el contador de revoluciones de la rueda. Con histresis, la medicin debe caer por debajo de un valor de umbral bajo, y luego el programa espera hasta que se halla levantado hasta por encima de un valor ms alto antes de reconocer un cambio. Luego, la medicin tiene que ir debajo del valor de umbral bajo nuevamente antes de reconocer un cambio de estado alto a bajo. Cada vez que el programa reconoce que la medicin fu menor que el valor bajo y luego arriba del valor alto, incrementa el contador de revoluciones en 1. He aqu un cdigo que ejecuta histresis. En el primero de los dos bloques anidados DO...LOOP, el programa espera hasta que eje y sube por encima de 2650. Luego, el segundo de los dos comandos anidados DO...LOOP espera hasta que la medicin del eje y cae por debajo de 2350. Solo entonces sumar un 1 a la variable counter. Luego de esto, el programa har que suene el piezo parlante y entonces repite el DO...LOOP exterior. En este punto, el programa regresa a esperar la medicin del eje y, que fue menor que

Captulo 6: Ms Proyectos con el Acelermetro Page 249

2350 para levantarse nuevamente por encima de 2650 otra vez. Considere que no es necesariamente la forma optima de medir revoluciones de rueda. Eso lo determinar usted.
DO DO UNTIL y > 2650 PULSIN 7, 1, y ciclo DO UNTIL y < 2350 PULSIN 7, 1, y ciclo counter = counter + 1 FREQOUT 4, 200, 3750 LOOP Banda muerta (Deadband): El rango entre 2350 y 2650 en el bloque de cdigo anterior es referido como banda muerta.

Programa Ejemplo: TestWheelCounter.bs2

Monte su tarjeta dentro de una rueda de bicicleta como se muestra en la Figura 618. Asegrese de mantener un buen aislante entre los rayos y la parte inferior de la tarjeta. Introduzca, salve y corra TestWheelCounter.bs2. Gire la rueda y verifique que alerta una vez por revolucin.

' Sensores Inteligentes y sus Aplicaciones - TestWheelCounter.bs2 ' Rastrea revoluciones de rueda de una bicicleta. '{$STAMP BS2} '{$PBASIC 2.5} x y counter DEBUG CLS DO DO UNTIL y > 2650 VAR VAR VAR Word Word Word

Pgina 250 Sensores Inteligentes y sus Aplicaciones

PULSIN 7, 1, y ciclo DO UNTIL y < 2350 PULSIN 7, 1, y ciclo counter = counter + 1 FREQOUT 4, 200, 3750 LOOP

Registrando Varias Condiciones de Operacin

En este punto podra parecer que la aplicacin est lista para un cdigo que convierta las revoluciones en distancia y quiz una pantalla LCD y un par de botones para seleccionar elementos de menu en LCD. El problema aqu es que solo hemos examinado a la rueda girando en 2 velocidades. Qu ocurre cuando el ciclista se inclina en vueltas cerradas? cambia entonces la aceleracin? Qu pasa a temperaturas altas y bajas? causarn que las mediciones sean diferentes? Ciertamente no servira tener un producto en el mercado que solo rastreara la distancia de vuelta de bicicleta en parte del tiempo. El producto obtendra una mala reputacin muy rapidamente. La Figura 6-19 muestra un estudio de aceleracin registrado para la bicicleta a dos velocidades ligeramente diferentes. El area alrededor de 400 ms es donde la rueda fue desacelerada. El hecho importante que hay que notar en esta grfica es la diferencia de las mediciones de los ejes x y y. A la mayor velocidad, la seal del eje y vari entre 1 y 0.5 g mientras que las mediciones del eje x variaron entre 1.5 y 0.25 g. Despus de reducir la velocidad de la rueda, la medicin del eje y vari entre 1 y -1 g, mientras que la medicin del eje x vari entre 0.7 y 1.3 g aproximadamente. La Figura 6-19 es tan solo una grfica de dos velocidades diferentes. Es cierto, el cdigo de histresis de TestWheelCounter.bs2 trabaja bajo ambas de estas condiciones, pero trabaja bajo TODAS las condiciones? Con esta clase de preguntas, los ingenieros pueden aplicar algunas ecuaciones para predecir las aceleraciones bajo varias condiciones extremas que ellos anticipan. Un software de simulacin podra tambien ser usado para verificar los imprevistos. An cuando esta clase de especializacin est disponible, el producto an tiene que ser probado en una variedad de conditions "de la vida real", especialmente para eliminar la posibilidad de suposiciones incorrectas de parte de los ingenieros. Es aqu donde el registro de datos regresa a la escena. El prototipo real an tiene que ser llevado a travs de las diversas condiciones que pudiera experimentar en la

Captulo 6: Ms Proyectos con el Acelermetro Page 251

bicicleta de cualquier persona antes de que sea seguro hacer la inversin en cajas plsticas y un diseo electrnico ms refinado que presente partes de bajo costo, produccin en masa y costos de inventarios.
Figura 6-19: Estudio de aceleracin de rueda de bicicleta
Accelerometer y-axis
Bike Wheel at Tw o Different Speeds 2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 tim e, m s 0 100 200 300 400 500 600 700 800 900 1000

Accelerometer x-axis

Con esto en mente, regresamos a ejecutar estudios de aceleracin, bajo tantas situaciones diferentes como sea posible. He aqu el programa que fue usado para registrar los datos para la grfica en la Figura 6-19. Note que est registrando valores de tamao de una palabra para las mediciones de los dos ejes x y y. La hoja de clculo ha tomado el trabajo de cambiar las mediciones primarias del acelermetro PULSIN a mediciones de gravedad.
Programa Ejemplo: BikeWheelAcceleration.bs2

A modo de proyecto, pruebe el medidor de bicicleta en diferentes temperaturas y condiciones de manejo, vueltas, cuesta arriba, cuesta abajo, lento, rpido, etc. Busque una secuencia de cambios en mediciones que pueda ser rastreada sin importar las condiciones. Si no hay un rango de histresis para todas las condiciones, su cdigo puede necesitar peridicamente actualizar los valores alto y bajo ms recientes y luego buscar una histresis dentro de ese rango.

gravity, g

Pgina 252 Sensores Inteligentes y sus Aplicaciones

' -----[ Titulo ]------------------------------------------------------------' Sensores Inteligentes y sus Aplicaciones - BikeWheelAcceleration.bs2 ' Registra 500 mediciones de aceleracion en los ejes x y y. '{$STAMP BS2} '{$PBASIC 2.5} ' -----[ Directivas DATA]---------------------------------------------------Reset Records RecordsEnd DATA DATA DATA 0 (1000)

' -----[ Variables ]---------------------------------------------------------char eeIndex value x y VAR VAR VAR VAR VAR Byte Word Word value Word

' -----[ Inicializacin ]----------------------------------------------------Init: READ Reset, value value = value + 1 WRITE Reset, value IF value // 2 = 0 THEN FOR char = 10 TO 0 DEBUG CLS, "Datalogging starts", CR, "in ", DEC2 char, " seconds", CR, CR, "Press/release Reset", CR, "for menu..." FREQOUT 4, 50, 3750 PAUSE 950 NEXT GOSUB Record_Data ENDIF ' -----[ Rutina Principal ]-------------------------------------------------DO DEBUG CLS,

Captulo 6: Ms Proyectos con el Acelermetro Page 253

"Press/Release Reset", CR, "to arm datalogger ", CR, CR, " - or - ", CR, CR, "Type C, R or D", CR, "C - Clear records", CR, "R - Record records", CR, "D - Display records", CR, ">" DEBUGIN char DEBUG CR SELECT char CASE "C", "c" GOSUB Clear_Data CASE "R", "r" GOSUB Record_Data CASE "D", "d" GOSUB Display_Data CASE ELSE DEBUG CR, "Not a valid entry.", CR, "Try again." PAUSE 1500 ENDSELECT LOOP ' -----[ Subrutina - Clear_Data ]-------------------------------------------Clear_Data: DEBUG CR, "Clearing..." FOR eeIndex = Records TO RecordsEnd WRITE eeIndex, 0 NEXT DEBUG CR, "Records cleared." PAUSE 1000 RETURN ' -----[ Subrutina - Record_Data ]------------------------------------------Record_Data: FREQOUT 4, 75, 4000 PAUSE 200 FREQOUT 4, 75, 4000 DEBUG CLS, "Recording..." FOR eeIndex = Records TO RecordsEnd STEP 4 PULSIN 6, 1, x

Pgina 254 Sensores Inteligentes y sus Aplicaciones

PULSIN 7, 1, y WRITE eeIndex, Word x WRITE eeIndex + 2, Word y NEXT FREQOUT 4, 200, 4000 DEBUG CR, "End of records.", CR, "Press Enter for menu..." DEBUGIN char RETURN ' -----[ Subrutina - Display_Data ]-----------------------------------------Display_Data: DEBUG CR, "Index x-axis y-axis", CR, "----- ------ ------", CR FOR eeIndex = Records TO RecordsEnd STEP 4 READ eeIndex, Word x READ eeIndex + 2, Word y DEBUG DEC eeIndex, CRSRX, 7, SDEC x, CRSRX, 14, SDEC y, CR NEXT DEBUG CR, "Press Enter for menu..." DEBUGIN char RETURN

Su Turno

Otra cosa por examinar es como se ejecutan las mediciones de rotacin en el plano vertical bajo las diversas condiciones de rueda de bicicleta. La seccin Su Turno de la actividad #4 registra mediciones de brads. Usela para registrar la rotacin de rueda de su bicicleta en brads. Grafique la rotation en el tiempo bajo las diversas condiciones de manejo discutidas en esta actividad.

Hay un comportamiento del ngulo medicin para el cual la histresis pueda ser aplicada bajo todas las condiciones de manejo?

Captulo 6: Ms Proyectos con el Acelermetro Page 255

RESUMEN
Este captulo present una variedad de aplicaciones del acelermetro y de las tcnicas de registro de datos que pueden ser usadas para estudiar las mediciones del acelermetro en varias condiciones, y en algunos casos, para refinar sus programas. Cuando se observa la cima de un objeto, las mediciones de rotacin en un plano vertical pueden ser usadas con la distancia al objeto y algo de trigonometra para determinar la altura del objeto. Se presentaron directivas DATA con nombres Smbolo opcionales como una forma de simplificar el mantener los registros en los programas de registro de datos. Pueden ser usadas para definir rangos de Memoria de programacin EEPROM no usada. Puesto que los nombres Smbolo guardan la direccin de inicio de las directives DATA, son tiles en ciclos FOR...NEXT que ejecutan operationes READ/WRITE sobre el rango de los bytes EEPROM definidos por las directives DATA de inicio y fin. Tambin se present una tcnica para usar una directiva DATA para apartar un byte para establecer el modo del programa. Cada vez que el programa inicia, una rutina de inicializacin lee el byte, le agrega un uno y reemplaza el valor viejo en la EEPROM con el valor modificado. Cada vez que el programa es reiniciado presionando y liberando el botn Reset de la tarjeta, el programa puede usar el nuevo valor en EEPROM para seleccionar entre diferentes modos. Para cambiar el estado on y off de una caracterstica en el programa, se us una lnea IF...THEN que examina si el residuo del valor dividido entre 2 es cero. Esto hace posible iniciar y parar el registro de datos sin estar conectado a la computadora. Las aplicaciones del acelermetro con registrado de datos incluyen la aceleracin de un carro RC, mediciones de trucos en patineta y mediciones de rueda de bicicleta. Cada una de estas emple un programa que fue una variacin del programa de registrado remoto presentado en la actividad #4. Los datos desplegados en la Terminal de Depuracin fueron sombreados, copiados y pegados en archivos de texto. Los archivos de texto fueron entonces importados en un programa de hoja de clculo y graficados. Las grficas fueron analizadas para examinar las aceleraciones, inclinaciones y ngulos involucrados en los movimientos del carro RC, la patineta y la bicicleta.
Preguntas

1. Cules son las 3 piezas de informacin que necesita para medir la altura de un edificio a distancia?

Pgina 256 Sensores Inteligentes y sus Aplicaciones

2. Cul es la diferencia entre DATA (100) y DATA 20 (100)? 3. Qu esta mal con este comando? WRITE eeIndex, 1000. Cmo lo puede arreglar? 4. Qu otras directivas y comandos tienen que estar presentes para que IF value // 2 = 0 THEN... haga posible cambiar modos de programa con el botn Reset de su tarjeta? 5. Qu hace el piezo parlante en DatalogAcceleration.bs2? 6. Cmo puede modificar una directiva DATA para hacer que aparte ms valores? 7. Cmo difiere la aceleracin al frente de la desaceleracin al frente? 8. Cuando se maneja en crculos a una velocidad y radio constante, en qu direccin es la acceleration? 9. En qu difieren el programa registrador que mide un ollie de un patinador y el programa que mide los movimientos de un carro RC? En qu son similares?
Ejercicios

1. La cima de un edificio se divis a 75 desde un punto de observacin a 15 m del edificio y a 1 m a partir del piso. Cul es la altura del edificio? 2. Escriba un par de directivas DATA que reserve 1501 bytes. Use nombres smbolo. 3. Escriba un ciclo FOR...NEXT que recupere 751 palabras. Asuma que sus nombres Simbolo de la directiva DATA son StartData y EndData. 4. Modifique un bloque de cdigo en DatalogAcceleration.bs2 para que su cuenta regresiva sea 5 segundos.
Proyectos

1. Use Google para encontrar el valor de la pendiente por encima de la cual la nieve fcilmente forma una avalancha. Haga un prototipo de un dispositivo que le advierta si una pendiente es demasiado pronunciada. Este dispositivo puede ser usado para reemplazar un dispositivo mecnico comnmente usado en areas de ski. 2. Disee un prototipo de pedmetro (contador de pasos).

Captulo 6: Ms Proyectos con el Acelermetro Page 257

Soluciones

Q1. (1) La altura a partir de la cual la medicin es tomada, (2) la distancia a partir de la base del edificio, y (3) el ngulo a partir de la horizontal al cual se divisa la cima del edificio. Q2. DATA (100) reserva 100 bytes en EEPROM; mientras que, DATA 20 (100)guarda el valor 20 en cada uno de los 100 bytes. Q3. Los comandos WRITE guardan valores byte. Para arreglar este comando, tendra que insertar el modificador Word antes del valor 1000. Considere que tendr que incrementar eeIndex en 2 antes de guardar el siguiente valor. Q4. Necesitara: Reset DATA 0; value VAR Word; READ Reset, value, value = value + 1; WRITE Reset, value Q5. Le permite al usuario saber en qu modo esta operando el dispositivo emitiendo chirridos (tonos de cierta duracin y frecuencia). El conteo antes de registrar datos involucra 11 tonos de 50 ms y 3.75 kHz seguidos por 2 tonos ms pronunciados y agudos (75 ms y 4 kHz). Despus de registrar datos, el piezo parlante emite un chirrido ms largo (200 ms y 4 kHz) para decirle al usuario que el registrado de datos esta completo. Q6. Incrementa el valor entre parntesis que sigue la palabra clave DATA. Q7. Si est viajando hacia al frente y desacelera es lo mismo que acelerar en reversa, que es acelerar en la direccin opuesta a adelante. Q8. Hacia el centro de un crculo. Q9. Esta es una comparacin de 2 programas ejemplo, DatalogAcceleration.bs2 contra DatalogYaxisUnscaled.bs2. DatalogAcceleration.bs2 guarda valores x y y que son proporcionalmente divididos a 0 a 200 con 100 como 0 g. DatalogYaxisUnscaled.bs2 no solo guarda la version sin escalar, no aplica ninguna compensacin tampoco. Es solo la medicin primaria del eje y, que va de 1875 a 3125. En ambos programas se requiere un valor de una palabra para guardar cada medicin. En DatalogAcceleration.bs2, es una palabra (2 bytes) la que guarda las mediciones de los ejes x y y escaladas y compensadas. En DatalogYaxisUnscaled.bs2, cada valor del eje y toma una palabra entera. An cuando el tiempo que toma guarder los bytes es el mismo en ambos programas, se salva algo de tiempo entre mediciones con DatalogYaxisUnscaled.bs2 porque no toma ningn tiempo para un comando PULSIN que hubiera de otra manera leido el eje x. E1. Altura del objeto = opuesto + altura del acelermetro = (adyacente tan (75)) m + 1 m = (15 3.73) m + 1 m

Pgina 258 Sensores Inteligentes y sus Aplicaciones

= 56.98 m E2.
StartSymbol DATA (1500) EndSymbol DATA

E3.
' Asume que StartData y EndData han sido definidas correctamente FOR counter = StartData TO EndData READ counter, dataItem DEBUG dataItem ' Formato no especificado, no se usa algo como DEC. ' Si DEC dataItem was used, aun estaria correcto ' porque es lo que los textos ejemplos usaron. NEXT

E4.
FOR char = 4 TO 0 DEBUG CLS, "Datalogging starts", CR, "in ", DEC2 char, " seconds", CR, CR, "Press/release Reset", CR, "for menu..." FREQOUT 4, 50, 3750 PAUSE 950 NEXT

P1. Palabras clave usadas: avalanche prediction slope Artcule de ayuda resultante usado: http://en.wikipedia.org/wiki/Avalanche Information clave: La seccin Terrain indica que una inclinacin abajo de 25 o ariba 60 presenta bajo riesgo y que el riesgo ms alto est en pendientes entre 35 a 45. El hardware podra involucrar un acelermetro, una LCD, botones para seleccionar el modo y un piezo parlante para una alarma. La clave para el prototipe sera demostrar que el dispositivo puede detectar ciertos niveles de riesgo a partir de, digamos, la base de la pendiente. Se pueden agregar caractersticas asumiendo que el prototipo est aprobado. Nota: Los complejos de Ski regularmente mantienen sus pendientes tomando estas mediciones y luego lanzando cargas explosivas en las laderas para crear pequeas avalanchas, y as prevenir una avalancha mayor. Entonces an cuando podra parecer riesgoso medir a partir de la base de la pendiente, estamos hablando de una pendiente que es regularmente mantenida para prevenir avalanchas. El prototipo involucra usar su tarjeta para ver la cima de la pendiente desde la base, que resulta ser una simple modificacin de la aplicacin discutida en la

Captulo 6: Ms Proyectos con el Acelermetro Page 259

actividad #1 de este captulo. Una lnea SELECTCASE puede ser agregada a la version modificada de VertWheelRotation.bs2 que despliegue mensajes diferentes en la LCD basado en el ngulo medido. La lnea SELECTCASE pudiera ser como esta cuando est completa:
SELECT angle CASE 0 to 25 GOSUB Display_Pretty_Safe CASE 25 to 35, 45 to 60 GOSUB Display_Some_Danger CASE 35 to 45 GOSUB Display_Max_Danger ENDSELECT

Cada subrutina desplegara un mensaje indicando riesgo despus de cada ngulo. P2. Cargue y corra DatalogYaxisUnscaled.bs2. Fije la tarjeta a su cinturn en su cintura de tal forma que el eje y est vertical. Presione y libere el botn reset de su tarjeta y camine durante el perodo de registro de datos. Siga las instrucciones en la actividad #5 para graficar sus puntos registrados. Probablemente quisiera graficar 200 de las 1001 mediciones. Busque un patrn, con cada paso la grfica debe exceder algun valor e ir por debajo de algn otro. Se presenta un ejemplo. Note que cada aceleracin de cada paso cae debajo de 2900 y luego excede 3300. Ejemplo de grfica de caminado:
x-axis -----3900 3700 3500 3300 x-axis -----3100 2900 2700 2500 1 16 31 46 61 76 91 106 121 136 151 166 181 196 211 226 241

Pgina 260 Sensores Inteligentes y sus Aplicaciones

Use aquellos valores para definir las constantes StepLow y StepHigh en el siguiente programa:
' Sensores Inteligentes y sus Aplicaciones - Ch6_Project2.bs2 ' ' ' ' IMPORTANTE, siga las instrucciones para poder colocar sus propios valores. Las encontrar en la seccin Soluciones del Captulo 6. Examine la solucion del Proyecto 2 para informacin de como determinar sus propias constantes StepLow y StepHigh.

' {$STAMP BS2} ' {$PBASIC 2.5} StepLow CON 2900 StepHigh CON 3300 y VAR Word yOld VAR Word stepCnt VAR Word yOld = 3300 PAUSE 250 SEROUT 14, 84, [22, 12] PAUSE 5 DO PULSIN 7, 1, y IF (y <= 2900 y yOld >= 3300) OR (y >= 3300 y yOld <= 2900) THEN yOld = y stepCnt = stepCnt + 1 ENDIF SEROUT 14, 84, [128, DEC5 stepCnt / 2] LOOP ' Estabiliza la fuente de energia ' Inicia LCD & limpia la pantalla ' Pausa 5 ms para limpiar pantalla

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 261

Captulo 7: Graficos de Barra en LCD para Distancias e inclinaciones


La definicin y desplegado de caracteres personalizados con la LCD Serial Parallax fue presentado en el Captulo 1, actividad #4. Este captulo presenta ms tcnicas de caracteres personalizados y las aplica a pantallas de grfico de barra. Estas pantallas indicarn la distancia a un objeto del sensor ultrasnico Ping))) y la inclinacin del Acelermetro bi-axial Memsic 2125.

ACTIVIDAD #1: INTERCAMBIO DE CARACTERES PERSONALIZADOS


La LCD Serial Parallax puede desplegar hasta 8 caracteres personalizados en cualquier momento. Sin embargo, pueden haber muchos ms que 8 caracteres personalizados en su aplicacin, porque los caracteres personalizados pueden ser definidos y redefinidos segn se requiera. El nico lmite es que solo 8 pueden ser desplegados simultaneamente, y 8 es bastante para muchos proyectos. El lugar donde puede definir y guardar una librera de mas de 8 definiciones de caracteres personalizados es en una parte de la memoria EEPROM BASIC Stamp que no se use para almacenaje de programa. Puesto que los programas PBASIC raramente llenan toda la memoria EEPROM, tpicamente hay espacio para todas las definiciones de caracteres personalizados que una aplicacin pueda necesitar. Una tcnica poderosa es usar solo 1 de los 8 espacios para caracteres personalizados de la LCD para desplegar una secuencia de definiciones de caracteres personalizados que est guardada en la EEPROM. Esto es especialmente til para animacin, pero tambin es importante para desplegar grficas de barra. Esta actividad da un ejemplo de animacin.
De Almacenado en EEPROM a Memoria de Caracteres LCD

El siguiente programa ejemplo demuestra una forma conveniente de guardar definiciones de caracteres personalizados en la EEPROM del BASIC Stamp. A continuacin se muestran 2 de las 15 definiciones de caracteres personalizados del programa. Cada definicin tiene un nico nombre Smbolo, como Char0, Char1, etc., hasta Char14. Cada uno de estos nombres Smbolo representan la direccin EEPROM del primer byte en la directiva DATA. La subrutina que transfiere las definiciones de la EEPROM al espacio de memoria del caracter personalizado en la LCD usa estos nombres Smbolo

Pgina 262 Sensores Inteligentes y sus Aplicaciones

como un punto de referencia para leer los bytes de la EEPROM. Despus de leer cada byte de la EEPROM, la subrutina lo manda a la LCD serial.
. . . %11111, %00011, %11011, %11011, %11111, %11111, %11111, %11111 . . . %11111, %11111, %11111, %11111, %11011, %11011, %11000, %11111 . . .

Char4

DATA

' ' ' ' ' ' ' '

* 0 * * * * * *

* 0 * * * * * *

* 0 0 0 * * * *

* * * * * * * *

* * * * * * * *

Char9

DATA

' ' ' ' ' ' ' '

* * * * * * * *

* * * * * * * *

* * * * 0 0 0 *

* * * * * * 0 *

* * * * * * 0 *

El siguiente programa ejemplo obtiene las definiciones de los caracteres personalizados de la EEPROM y las manda a la LCD serial usando una subrutina llamada Def_Cust_Char. Lo que tiene que hacer antes de llamar a la subrutina es fijar el valor de 2 variables: custChar y charBase. custChar es para seleccionar qu caracter personalizado se va a definir (0, 1, 2...7). charBase es usada para decirle a la subrutina dnde buscar el inicio de la definicin del caracter en la EEPROM. Por ejemplo, use estos 3 comandos para transferir la definicin Char9 en la EEPROM del BASIC Stamp al caracter personalizado 5 en la memoria de caracteres de la LCD Serial Parallax:
custChar = 5 charBase = Char9 GOSUB Def_Cust_Char

Si su programa tiene que escoger entre muchas definiciones de caracteres personalizados diferentes, puede reemplazar charBase = Char9 con un comando LOOKUP. Ahora, un ejemplo que escoge 1 de las 3 diferentes definiciones de caracteres personalizados en el siguiente programa ejemplo con un comando LOOKUP. Dependiendo del valor de counter, Char0, Char1 o Char2 ser copiado a la variable charBase.

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 263

DO counter = counter + 1 counter = counter // 3 ' Define caracter personalizado. custChar = 5 LOOKUP counter, [Char0, Char1, Char2], charBase GOSUB Def_Cust_Char . . . LOOP Como hacer que counter cuente 0, 1, 2, 0, 1, 2, ... sin FOR...NEXT El bloque de cdigo arriba est en un DO...LOOP, y por ello se repite indefinidamente. La variable del contador se incrementa en 1 cada vez que pasa por el ciclo. El comando counter = counter // 3 usa el operador mdulo // de PBASIC para calcular el residuo de counter 3. Al hacer counter igual al residuo de counter 3, counter solo cuenta hasta 2 antes de regresar a 0. La secuencia resultante de valores guardados por counter es 0, 1, 2, 0, 1, 2, 0, 1, 2, ...

Para desplegar el caracter personalizado en un cierto caracter, el siguiente programa ejemplo tiene una subrutina Disp_Cust_Char. Esta depende de 3variables, line, custChar, y cursor. line debe ser puesta en Line0 o Line1, que estn definidos en la seccin Constantes del programa ejemplo. Nuevamente, custChar es un valor entre 0 y 7, que selecciona un caracter personalizado en la memoria de caracter de la LCD. cursor puede ser un valor de 0 a 15 dependiendo qu tan lejos de la izquierda de la LCD quiere que se escriba el caracter. Por ejemplo, para escribir el caracter personalizado 5 en la Lnea 0 caracter 8 de la LCD, use estos comandos:
custChar = 5 line = Line0 cursor = 8 GOSUB Disp_Cust_Char

Puesto que el siguiente programa ejemplo est slo animando un caracter, puede usarse un ciclo FOR...NEXT para accesar cada una de las directivas DATA del caracter personalizado. La direccin de inicio de cada directiva DATA ser 8 bytes despus de la siguiente. Se puede actualizar la LCD con cada definicin de caracter en la secuencia de

Pgina 264 Sensores Inteligentes y sus Aplicaciones

directivas DATA con un ciclo FOR...NEXT que d pasos de 8, que comience en Char0 y termine en Char14.
DO FOR charBase = Char0 TO Char14 STEP 8 GOSUB Def_Cust_Char cursor = 7 GOSUB Disp_Cust_Char PAUSE 200 '- charBase NEXT PAUSE 1000 LOOP

Programa Ejemplo: EepromPixelWorm.bs2


Descarga gratis Este programa est disponible como descarga grtis .bs2 en la pgina del producto de Sensores Inteligentes y sus Aplicaciones en www.parallax.com.

EepromPixelWorm.bs2 crea un gusano de pixeles, arrastrndose a travs de un caracter. Examine las definiciones de caracter EEPROM y prediga cmo se ver la animacin corra el programa. Abra y corra EepromPixelWorm.bs2. Compare sus results esperados con la pantalla LCD.

' -----[ Tiutlo ]-----------------------------------------------------------' Sensores Inteligentes y sus Aplicaciones - EepromPixelWorm.bs2 ' Despliega un gusano de pixel animado en un solo caracter LCD ' {$STAMP BS2} ' {$PBASIC 2.5} ' Dispositivo Objeto ' Lenguaje = BASIC Stamp 2 = PBASIC 2.5

' -----[ Datos EEPROM]-------------------------------------------------------Char0 DATA %11111, %01111, %11111, %11111, %11111, %11111, %11111, ' ' ' ' ' ' ' * 0 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 265

%11111 Char1 DATA %11111, %00111, %11111, %11111, %11111, %11111, %11111, %11111 %11111, %00011, %11111, %11111, %11111, %11111, %11111, %11111 %11111, %00011, %11011, %11111, %11111, %11111, %11111, %11111 %11111, %00011, %11011, %11011, %11111, %11111, %11111, %11111 %11111, %10011, %11011, %11011, %11011, %11111, %11111, %11111 %11111, %11011, %11011, %11011,

' * * * * * ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' * 0 * * * * * * * 0 * * * * * * * 0 * * * * * * * 0 * * * * * * * * * * * * * * * * * * * 0 * * * * * * * 0 * * * * * * * 0 * * * * * * * 0 * * * * * * * 0 * * * * * * * * * * * * * * * * * * * 0 * * * * * * * 0 0 * * * * * * 0 0 0 * * * * * 0 0 0 0 * * * * 0 0 0 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Char2

DATA

Char3

DATA

Char4

DATA

Char5

DATA

Char6

DATA

Pgina 266 Sensores Inteligentes y sus Aplicaciones

%11011, %11011, %11111, %11111 Char7 DATA %11111, %11111, %11011, %11011, %11011, %11011, %11011, %11111 %11111, %11111, %11111, %11011, %11011, %11011, %11001, %11111 %11111, %11111, %11111, %11111, %11011, %11011, %11000, %11111 %11111, %11111, %11111, %11111, %11111, %11011, %11000, %11111 %11111, %11111, %11111, %11111, %11111, %11111, %11000, %11111 %11111,

' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

0 0 * * * * 0 0 0 0 0 * * * * 0 0 0 0 * * * * * 0 0 0 * * * * * * 0 0 * * * * * * * 0 *

* * * * * * * * * * * * * * * * * * 0 * * * * * * * 0 * * * * * * * 0 * * * * * * * 0 *

* * * * * * * * * * * * * * * * * * * * * * * * * * 0 * * * * * * * 0 * * * * * * * 0 *

Char8

DATA

Char9

DATA

Char10

DATA

Char11

DATA

Char12

DATA

' * * * * *

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 267

%11111, %11111, %11111, %11111, %11111, %11100, %11111 Char13 DATA %11111, %11111, %11111, %11111, %11111, %11111, %11110, %11111 %11111, %11111, %11111, %11111, %11111, %11111, %11111, %11111

' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '

* * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * * * * *

* * * * * 0 * * * * * * * * * * * * * * * * *

* * * * * 0 * * * * * * * 0 * * * * * * * * *

Char14

DATA

' -----[ Pines E/S]----------------------------------------------------------LcdPin PIN 14 ' pin E/S conectado a RX de la LCD

' -----[ Constantes ]--------------------------------------------------------T9600 LcdCls LcdCr LcdOff LcdOn Line0 Line1 Define CON CON CON CON CON CON CON CON 84 12 13 21 22 128 148 248 ' True, 8-bits, no parity, 9600 ' ' ' ' ' ' ' Form feed -> limpia pantalla Retorno de carro Apaga la pantalla Enciende la pantalla Linea 0, caracter 0 Linea 1, caracter 0 direccion define caract pers 0

' -----[ Variables ]---------------------------------------------------------custChar index charBase dotLine cursor counter line VAR VAR VAR VAR VAR VAR VAR Nib Nib Byte Byte Nib Nib Byte ' selector de carcter personalizado ' variable indice Eeprom ' Caracter base para READ ' linea punteada de 5-pixel ' Colocacion de Cursor ' variable de conteo ciclo ppal. ' Linea0 o Linea1

Pgina 268 Sensores Inteligentes y sus Aplicaciones

' -----[ Inicializacin ]----------------------------------------------------PAUSE 100 SEROUT LcdPin, T9600, [LcdOn, LcdCls] PAUSE 5 custChar = 2 line = Line0 ' Estabiliza fuente de poder ' Inicializa LCD ' 5 ms retraso para limpiar pantalla ' Selecc caracter personalizado 2 ' BarGraph en Linea 0.

' -----[ Rutina Principal ]--------------------------------------------------DO FOR charBase = Char0 TO Char14 STEP 8 GOSUB Def_Cust_Char cursor = 7 GOSUB Disp_Cust_Char PAUSE 200 '- charBase NEXT PAUSE 1000 LOOP ' Ciclo Principal ' ' ' ' ' ' Va los 10 caracteres personal. Define el caracter Coloca the cursor Imprime el caracter charbase mayor - pausa menor Repite FOR charbase...

' Pausa 1 segundo ' Repite ciclo principal

' -----[ Subrutina - Def_Cust_Char ]----------------------------------------' ' ' ' Esta subrutina define uno de los 8 caracteres personalizados de LCD. Hace la variable charBase igual a 1 de los nombres simbolo que precede la directiva DATA del character personalizado. Establece la variable custChar en un valor entre 0 y 7 para escoger uno de los 8 caracteres personalizados de la LCD.

Def_Cust_Char: SEROUT LcdPin, T9600, [Define + custChar] FOR index = 0 TO 7 READ charBase + index, dotLine SEROUT LcdPin, T9600, [dotLine] NEXT RETURN

' Define caracter personalizado ' 7 bytes, define 7 lineas punteadas ' Obtiene byte para linea punteada ' Lo manda a la LCD

' -----[ Subrutinas - Disp_Cust_Char ]--------------------------------------' ' ' ' Esta subrutina muestra un caracter personalizado. La variable linea puede hacerse ya sea Line0 o Line1, y la variable cursor puede establecerse en un valor entre 0 y 15. La variable custChar selecciona uno de los caracteres personalizados de la LCD y debe ser puesta a un valor entre 0 y 7.

Disp_Cust_Char: SEROUT LcdPin, T9600,

' Escribe caracter personalizado

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 269

[line + cursor, custChar] RETURN

Dentro de las Subrutinas - Def_Cust_Char y Disp_Cust_Char

Hechemos un vistazo a la subrutina Def_Cust_Char (abajo). El primer comando, SEROUT LcdPin, T9600, [Define + custChar] enva un valor entre 248 y 255 a la LCD. Esto es porque Define esta definido en 248 en la seccin Constantes. 248 es el valor que le dice a la LCD que defina el caracter personalizado 0. Si quiere definir el caracter personalizado 1, es 249, etc., hasta el caracter personalizado 7, que es 255. El trmino Define + custChar puede ser 248 si custChar guarda 0, o 249 si custChar guarda 1, etc., hasta 255 si custChar guarda 7.
Def_Cust_Char: SEROUT LcdPin, T9600, 2 [Define + custChar] FOR index = 0 TO 7 ' 7 bytes, define 7 lineas punteadas READ charBase + index, dotLine ' Obtiene byte para linea punteada SEROUT LcdPin, T9600, [dotLine] ' Lo manda a la LCD NEXT RETURN ' Define caracter personalizado

Despus de que la LCD recibe un valor entre 248 y 255 espera recibir 8 bytes mas, cada uno conteniendo una de las 8 lneas punteadas que hacen la definicin de un caracter personalizado. El FOR...NEXT en Def_Cust_Char lee cada byte en la EEPROM, empezando en charBase. Considere que la rutina principal establece a charBase en el nombre Smbolo de una de las directives DATA, que es una constante igual a la direccin de inicio de los datos. READ charBase + index, dotLine lee un byte de la definicin de caracter y lo guarda en la variable dotLine. La primera vez al pasar por el ciclo FOR...NEXT, index es 0, entonces el primer byte en la definicin de caracter es trada de la EEPROM y guardada en la variable dotLine. Luego, el valor guardado por dotLine es enviado a la LCD con el comando SEROUT LcdPin, T9600, [dotLine]. La segunda vez el pasar por el ciclo FOR...NEXT, index es ahora 1, y entonces el segundo byte es ledo de la EEPROM y enviado a la LCD. La tercera vez, el tercer byte en la definicin de caracter es trada y enviada, etc., hasta el octavo byte cuando index llega a 7. La subrutina Disp_Cust_Char tiene solo un comando, SEROUT LcdPin, T9600, [line + cursor, custChar]. Enva 2 valores a la LCD. El primero es line +

Pgina 270 Sensores Inteligentes y sus Aplicaciones

cursor, que coloca el cursor donde el caracter personalizado va a ser escrito. line contiene ya sea Line0 o Line1. Line0 es el valor constante 128, que apunta a caracter 0 Lnea 0. Line1 es el valor constante 148, que apunta a caracter 0 Lnea 1. Al sumar cursor (un valor entre 0 y 15) le da control sobre en qu lnea y caracter es colocado el cursor. La variable custChar, que contiene un valor entre 0 y 7, causar que el caracter

personalizado sea escrito donde el cursor ha sido puesto. El segundo valor que enva el comando SEROUT es custChar, que contiene un valor entre 0 y 7. Este valor hace que la LCD escriba un caracter personalizado donde el cursor fue puesto.
Disp_Cust_Char: SEROUT LcdPin, T9600, [line + cursor, custChar] RETURN

Su Turno - Copias Mltiples de Caracteres personalizados?

Si tiene muchos caracteres personalizados diferentes, pero solo quiere desplegar uno en cierto momento, solo necesita una de las definiciones de caracter personalizado de la LCD. Sin embargo, si quiere que ms de un caracter personalizado diferente sea desplegado por la LCD al mismo tiempo, use ms de una de las diferentes definiciones de caracter personalizado en la memoria de caracteres de la LCD. Salve CustomEepromCharacters.bs2 as CustomEepromCharactersYourTurn.bs2 Agregue este bloque de cdigo a la seccin de inicializacin del programa.
custChar = 5 line = Line0 cursor = 9 GOSUB Disp_Cust_Char line = Line1 GOSUB Disp_Cust_Char cursor = 8 GOSUB Disp_Cust_Char

Corra el programa, y observe el resultado desplegado en la LCD.

El DO...LOOP principal esta solo actualizando la Lnea 0, caracter 8, pero las otras 3 instancias del caracter personalizado 5 tambin estn cambiando! Porqu? Cuando la definicin del caracter personalizado 5 cambia, todos los caracteres personalizados 5s en la pantalla son automaticamente actualizados.

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 271

En algunos casos, esto es deseable. Por ejemplo, puede lograr algunos efectos visuales interesantes al hacer 32 copias de un caracter personalizado y luego repetidamente actualizar la definicin del caracter. Para situaciones donde desee desplegar ms de un caracter personalizado al mismo tiempo, simplemente use ms de un caracter personalizado. En otros casos, cuando quiera que la LCD despliegue ms de un caracter personalizado diferente al mismo tiempo, use diferentes definiciones de caracteres personalizados. Resumen del desplegado de caracteres personalizados:

Si tiene muchos caracteres personalizados diferentes pero solo quiere desplegar uno en un momento dado, use un solo caracter personalizado y actualice su definicin para cambiar el caracter. Si quiere desplegar mas de un caracter personalizado en la LCD al mismo tiempo, use ms de una definicin de los diferentes caracteres personalizados en la memoria de caracteres de la LCD.

Respecto a la segunda regla, acerca tener ms de un caracter personalizado en la pantalla al mismo tiempo, la siguiente actividad provee un ejemplo en operacin.

ACTIVIDAD #2: GRAFICOS DE BARRAS HORIZONTALES PARA DISTANCIA CON PING)))


Este primer ejemplo de grfico de barra demuestra cmo desplegar grficamente una medicin del sensor Ping))) de la distancia en centmetros a un objeto.
Partes y Equipo

Vea el Captulo #2, actividad #4.


Una grfica de barra Horizontal

Para probar la grfica de barra horizontal del programa del siguiente ejemplo , introducir valores en la Ventana de Transmisin de la Terminal de Depuracin, y la LCD desplegar el resultado en formato de grfica de barra como se muestra en la Figura 7-1. Cada rengln en la LCD tiene 80 columnas de lneas puntueadas verticales. Si introduce un 1, la columna en la izquierda extrema del character ms a la izquierda se obscurecer. Si introduce un 2 causar que 2 columns se obscurezcan. Con un 29 se obscurecern 29 columnas. Puesto que cada caracter es de 5 columnas de ancho, el valor 29 se muestra como5 caracteres obscurecidos y the sexto caracter con 4 columnas obscurecidas.

Pgina 272 Sensores Inteligentes y sus Aplicaciones

Figura 7-1: Grfica de barra Horizontal con caracteres personalizados

Transmit Windowpane Receive Windowpane

LCD Bar Displays

El siguiente programa ejemplo usa las 2 reglas para desplegar caracteres personalizados que discutimos en la seccin Su Turno de la actividad previa. Dependiendo del valor que es desplegado, el programa guarda una de las 5 diferentes definiciones de caracter en el caracter personalizado 2. Sin embargo, a diferencia de CustomEepromCharacters.bs2, este programa no guarda definiciones de caracteres personalizados en la EEPROM del BASIC Stamp. En vez de ello, las definiciones son derivadas durante la ejecucin del programa, segn el valor de la variable que est siendo expresada por la grfica de barra. La Figura 7-2 muestra cmo las definiciones van de vaco (Char0) a 4 columnas verticales negras (Char4). Estas definiciones sern guardadas en la EEPROM y usadas una por una para redefinir el caracter 2, puesto que solo una es necesaria en un momento

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 273

dado. Pero el programa puede necesitar desplegar copias mltiples de un caracter todo de negro para nmeros mayores a 10; para esto se usa el caracter personalizado 3.

Figura 7-2 Libreria de Definiciones para el caracter personalizado 2

Programa Ejemplo: HorizBarGraph.bs2


' ' ' '

Introduzca, salve y corra HorizBarGraph.bs2. Haga Click en la Ventana de Transmisin de la Terminal de Depuracin. Escriba un 8, luego presione Enter. Revise la grfica de barra y asegrese que el caracter mas a la izquierda esta negro y que el siguiente muestra Char3. Intente los valores mostrados en la Figura 7-1. Intente 45, 46, 47, 48, 49, 50, 51, 52. Experimente con los lmites como 0, 80. Intente valores fuera de los lmites. Qu pasa?

-----[ Titulo ]------------------------------------------------------------Sensores Inteligentes y sus Aplicaciones - HorizBarGraph.bs2 Despliega valores introducidos en la Ventana de Recepcion de la Terminal de Depuracion como datos de una grafica de barra horizontal en la LCD. ' Dispositivo Objeto ' Lenguaje = BASIC Stamp 2 = PBASIC 2.5

' {$STAMP BS2} ' {$PBASIC 2.5}

' -----[ Pines E/S]----------------------------------------------------------LcdPin PIN 14 ' pin E/S conectado a RX de la LCD

Pgina 274 Sensores Inteligentes y sus Aplicaciones

' -----[ Constantes ]--------------------------------------------------------T9600 LcdCls LcdCr LcdOff LcdOn Line0 Line1 Define CON CON CON CON CON CON CON CON 84 12 13 21 22 128 148 248 ' True, 8-bits, no parity, 9600 ' ' ' ' ' ' ' Form feed -> limpia pantalla Retorno de carro Apaga la pantalla Enciende la pantalla Linea 0, caracter 0 Linea 1, caracter 0 direccion define caract pers 0

' -----[ Variables ]---------------------------------------------------------custChar index dotLine cursor value charCnt line VAR VAR VAR VAR VAR VAR VAR Nib Nib Byte Nib Byte Byte Byte ' selector de carcter personalizado ' variable indice Eeprom ' linea punteada de 5-pixel ' Colocacion de Cursor ' Valor a ser graficado ' variable para conteo Caracter ' Linea0 o Linea1

' -----[ inicializacin ]----------------------------------------------------PAUSE 100 SEROUT LcdPin, T9600, [LcdOn, LcdCls] PAUSE 5 custChar = 3 dotLine = %11111 GOSUB Def_Horiz_Bar_Char line = Line0 DEBUG "Enter valores (0 to 80)", CR ' -----[ Main Rutina ]------------------------------------------------------DO DEBUG ">" DEBUGIN DEC value GOSUB Bar_Graph LOOP ' Ciclo Principal ' Estabiliza fuente de poder ' Initializa LCD ' 5 ms retraso para limpiar pantalla

' Selecciona caracter personalizado 3 ' Oscurece todos los pixeles en cada linea ' Subrutina define Caracter ' BarGraph en Linea 0.

' Valor en ventana de Transmision ' Despliega como grafica de barra ' Repite ciclo principal

' -----[ Subrutina - Bar_Graph ]---------------------------------------------Bar_Graph: ' Llena desde la izquierda con barras negras

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 275

value = value MAX 80 charCnt = value / 5 custChar = 3 IF charCnt > 0 THEN FOR cursor = 0 TO charCnt - 1 GOSUB Disp_Cust_Char NEXT ENDIF

' valor Limite - 0 a 80 ' nmero de barras negras ' Escoge caracter pers. negro ' Si escribe barras negras ' Escribe charCnt - 1 barras negras ' Escribe la barra negra

' Despliega caracter pers. 2 con cierto nmero de columnas negras. cursor = charCnt ' Coloca cursor custChar = value // 5 ' Cuantos quintos de barra? ' Escoge patron de bits para la definicion de caracter personalizado LOOKUP custChar, [%00000, %10000, %11000, %11100, %11110], dotLine custChar = 2 ' Establece caracter personalizado en 2 GOSUB Def_Horiz_Bar_Char ' Define el caracter personalizado GOSUB Disp_Cust_Char ' Despliega el caracter personalizado ' Sobreescribe todo a la derecha con espacios. IF (charCnt + 1) < 15 THEN ' Caracteres Parciales a la izq de char 15? FOR cursor = (charCnt + 1) TO 15 ' Llena a la derecha con " " SEROUT LcdPin, T9600, [line + cursor, " "] NEXT ELSEIF value = 80 THEN ' Caso especial: value = 80 SEROUT LcdPin, T9600, [line + cursor, 3] ELSEIF charCnt = 14 THEN ' Caso especial: 75 <= value <= 80 SEROUT LcdPin, T9600, [line + 15, " "] ENDIF RETURN ' -----[ Subrutina - Def_Horiz_Bar_Char ]-----------------------------------Def_Horiz_Bar_Char: SEROUT LcdPin, T9600, [Define + custChar] FOR index = 0 TO 7 SEROUT LcdPin, T9600, [dotLine] NEXT RETURN ' Define caracter personalizado ' 7 bytes, define 7 lineas punteadas ' Manda a la LCD

Pgina 276 Sensores Inteligentes y sus Aplicaciones

' -----[ Subrutinas - Disp_Cust_Char ]--------------------------------------' ' ' ' Esta subrutina despliega un caracter personalizado. La variable line puede establecerse en Line0 o Line1, y la variable cursor puede establecerse a un valor entre 0 y 15. La variable custChar selecciona uno de los caracteres personalizados de la LCD y debe ser establecida a un valor entre 0 y 7.

Disp_Cust_Char: SEROUT LcdPin, T9600, [line + cursor, custChar] RETURN ' Escribe caracter personalizado

Como trabaja HorizBarGraph.bs2

El caracter personalizado 2 de la LCD es reservado para desplegar una de las 5 diferentes definiciones de caracteres personalizados, pero el caracter personalizado 3 siempre usar la misma definicin, tener todos sus pixeles negros. Con esto en mente, un bloque de cdigo fue agregado a la seccin de inicializacin que define el caracter personalizado 3 de la LCD usando la subrutina Def_Horiz_Bar_Char. Esta subrutina hace 8 copias idnticas del rengln de 5 pixeles guardados por la variable dotLine para construir el caracter personalizado. Despus de esto, la variable line se establece para colocar el cursor en el rengln de arriba y el programa despliega un aviso al usuario "Enter values (0 to 80)", seguido de un retorno de carro.
custChar = 3 dotLine = %11111 GOSUB Def_Horiz_Bar_Char line = Line0 DEBUG "Enter valores (0 to 80)", CR ' Selecciona caracter personalizado 3 ' Oscurece todos los pixeles en cada linea ' Subrutina define Caracter ' BarGraph en Linea 0.

La Rutina Principal es un DO...LOOP que repetdamente despliega el aviso ">", y luego obtiene valores decimales introducids en la Ventana de Transmisin de la Terminal de Depuracin. Luego llama a la subroutine Bar_Graph.
' -----[ Rutina Principal ]-------------------------------------------DO DEBUG ">" DEBUGIN DEC value GOSUB Bar_Graph LOOP ' Ciclo Principal

' Valor en ventana de Transmision ' Despliega como grafica de barra ' Repite ciclo principal

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 277

La subrutina Bar_Graph toma lo que est guardado en la variable value y lo representa en la LCD con una pantalla de grfico de barra. Esta subrutina confa en las subrutinas Def_Cust_Char y Disp_Cust_Char de la actividad previa. La subrutina Bar_Graph consiste en 3 pasos mayores: 1. Llena cualesquiera caracteres negros de izquierda a derecha. Por ejemplo, si la variable value es establecida en 28, 5 caracteres LCD (con 5 lineas negras verticales cada uno) deben ser oscurecidos. 2. En el ejemplo, el sexto caracter LCD tendr 3 lneas verticales. Recuerde, el caracter personalizado 2 es usado para desplegar 1 de las 5 definiciones de caracter (Figura 7-2). El nmero de columnas negras en el caracter es el residuo de value // 5. Este resultado selecciona un patrn de bits a partir de una tabla LOOKUP y lo copia a la dotLine. Luego, custChar es igualada a 2 y la subrutina Def_Horiz_Bar_Char copia este patrn de bits a los 8 renglones en el caracter. Ya que el caracter fue redefinido puede ser entonces escrito. 3. Todos los caracteres no necesarios para representar el valor en la grfica de barra tienen que ser limpiados con el caracter espacio " ". En este ejemplo value = 28, esto es, limpiar todo entre la derecha del sexto caracter y el 15avo caracter. Si bien esto es sola y absolutamente necesario si value anterior es menor que value actual, el programa lo hace todo el tiempo a travs del ciclo. El primer paso en la subrutina Bar_Graph es llenar caracteres negros. value primero es forzada a 80 o menos. Luego, charCnt guarda el nmero de caracteres negros que tienen que ser escritos, que es 1/5 de value. custChar tiene que ser igualada a 3, puesto que el caracter personalizado 3 guarda el carcter negro. Si charCnt es mayor que 0, significa que habrn algunos caracteres completamente negros que tienen que ser escritos, y un FOR...NEXT repetdamente llama a la subrutina Disp_Cust_Char. Recuerde, esta subrutina depende de 2 variables: cursor y custChar. El valor de charCnt fu establecido antes del ciclo FOR...NEXT, y la variable cursor es la variable index del ciclo FOR...NEXT. Cada vez que se cumple el ciclo FOR...NEXT, cursor se incrmenta en 1, lo que causa que la subrutina Disp_Cust_Char coloque el cursor un paso a la derecha cada vez que es llamada, y por lo tanto llenando caracteres negros de izquierda a derecha.
' -----[ Subrutina - Bar_Graph ]----------------------------------Bar_Graph: ' Llena desde la izquierda con barras negras

Pgina 278 Sensores Inteligentes y sus Aplicaciones

value = value MAX 80 charCnt = value / 5 custChar = 3 IF charCnt > 0 THEN FOR cursor = 0 TO charCnt - 1 GOSUB Disp_Cust_Char NEXT ENDIF

' valor Limite - 0 to 80 ' nmero de barras negras ' Escoge caracter pers. negro ' Si escribe barras negras ' Escribe charCnt - 1 barras negras ' Escribe la barra negra

El segundo paso es desplegar el caracter que est parcialmente negro. cursor = charCnt asegura que el cursor ahora est justo a la derecha de los caracteres negros que fueron escritos con un FOR...NEXT en el paso anterior. Luego, custChar = value // 5 establece custChar en el residuo de value 5. Por ejemplo, si value es 28, el residuo de 28 5 es 3. Si custChar = 3, una tabla lookup guarda %11100 en dotLine. La subrutina Def_Horiz_Bar_Char necesita saber 2 cosas: dotLine y custChar. Estamos usando y re-usando el caracter personalizado 2 para definir y redefinir el caracter parcialmente oscurecido. Entonces, antes de llamar a Def_Horiz_Bar_Char, custChar necesita ser cambiada de 3 a 2 con custChar = 2. Entonces, Def_Horiz_Bar_Char puede ser llamada para definir el caracter personalizado, seguida por Disp_Cust_Char para desplegarla.
' Despliega caracter pers. 2 con cierto nmero de columnas negras. cursor = charCnt custChar = value // 5 ' Escoge patron de bits para la LOOKUP custChar, [%00000, %10000, %11000, dotLine custChar = 2 ' GOSUB Def_Horiz_Bar_Char GOSUB Disp_Cust_Char ' Coloca cursor ' Cuantos quintos de barra? definicion de caracter personalizado %11100, %11110], Establece caracter personalizado en 2 ' Define el caracter personalizado ' Despliega el caracter personalizado

La subrutina Def_Horiz_Bar_Char que es llamada despus de que se establece el valor de las variables dotLine y custChar hace innecesario que se guarden caracteres personalizados en la EEPROM. Por esta razn, si quiere crear un caracter personalizado con varias columnas de pixeles negros, todo lo que tiene que hacer es enviar a la LCD el mismo valor binario, 8 veces en un regln. La variable dotLine es la que guarda la definicin binaria para los renglones en el caracter personalizado parcialmente llenado. Si dotLine es %11000, las 2 columnas izquierdas de pixeles se harn negras. Si dotLine es %11100, las 3 columnas izquierdas de pixeles se harn negras, etc.

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 279

Def_Horiz_Bar_Char: SEROUT LcdPin, T9600, ' Define caracter personalizado [Define + custChar] FOR index = 0 TO 7 ' 7 bytes, define 7 lineas punteadas SEROUT LcdPin, T9600, [dotLine] ' Manda a la LCD NEXT RETURN

Sobreescribir cualesquiera caracteres negros a la derecha del caracter desplegado en el paso 2 no involucra ms caracteres personalizados puesto que el caracter espacio " " hace un buen trabajo para borrar las cosas. En la mayora de los casos, un ciclo FOR...NEXT que escriba de (charCnt + 1) TO 15 limpia todo a la derecha. Sin embargo, hay algunas circunstancias especiales que ocurren cuando el 15avo caracter tiene una o ms columnas negras. Si value = 80, una parte anterior del programa imprimir un carcter negro en la posicin-0. Si la posicin-0 fuera negra, el bloque de cdigo ELSEIF value = 80 reemplaza ese caracter vaco con uno negro. Tambin, si charCnt es 14, un solo caracter vaco tiene que ser escrito en la posicin 15.
' Sobreescribe todo a la derecha con espacios. IF charCnt + 1 < 15 THEN ' Caracteres Parciales a la izq de char 15? FOR cursor = (charCnt + 1) TO 15 ' Llena a la derecha con " " SEROUT LcdPin, T9600, [Line0 + cursor, " "] NEXT ELSEIF value = 80 THEN ' Caso especial: valor = 80 SEROUT LcdPin, T9600, [Line0 + cursor, 3] ELSEIF charCnt = 14 THEN ' Caso especial: 75 <= valor <= 80 SEROUT LcdPin, T9600, [Line0 + 15, " "] ENDIF RETURN

Su Turno - Desplegado Grfico de la Distancia al Sensor Ping)))

Es sencillo desplegar una grfica de barra horizontal que indique hasta 80 cm con el sensor Ping))) y la LCD Serial Parallax. El truco es tomar componentes de PingMeasureCm.bs2 e incorporarlos en una copia de HorizBarGraph.bs2 de esta actividad. Siga las instrucciones para conectar el sensor Ping))) y la LCD Serial a su tarjeta (Captulo 2, actividad #4, pgina 51).

Pgina 280 Sensores Inteligentes y sus Aplicaciones

Abra PingMeasureCm.bs2 (Captulo 2, actividad #2 pgina 48) en el Editor de BASIC Stamp. Abra HorizBarGraph.bs2 (esta actividad), y slvelo como PingBarGraph.bs2. Sombree y copie las directivas CON y VAR de PingDistance.bs2, y pguelas en las secciones CON y VAR en PingBarGraph.bs2. Reemplace los comandos DEBUG y DEBUGIN en el DO...LOOP de la Rutina principal de PingBarGraph.bs2 con los comandos en el DO...LOOP de PingMeasureCm.bs2. Agrege un comando justo antes de GOSUB Bar_Graph que iguale la variable value a cmDistance. Mueva el comando PAUSE 100 para que quede justo antes del ciclo.

Ahora, la rutina principal en PingBarGraph.bs2 debe verse as:


' -----[ Rutina Principal ]-------------------------------------------DO PULSOUT 15, 5 PULSIN 15, 1, time cmDistance = CmConstant ** time DEBUG HOME, DEC3 cmDistance, " cm" value = cmDistance GOSUB Bar_Graph PAUSE 100 LOOP ' Repite ciclo principal ' Despliega como grafica de barra ' Ciclo Principal

Salve el programa modificado, prubelo, y verifique que trabaja.

Tambin puede reemplazar el comando DEBUG con un comando SEROUT que despliegue las mediciones en la lnea inferior. Recuerde que tendr que enviar a la LCD un cdigo de control para colocar el cursor en la Lnea 1 caracter-0, en vez de usar HOME. Intntelo!

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 281

ACTIVIDAD #3: GRAFICA DE BARRA DE DOS EJES PARA INCLINACIN DEL ACELERMETRO
Esta actividad desarrolla una grfica de barra de dos ejes que es til para desplegar grficamente las mediciones de inclinacin del acelermetro.
Partes y Equipo

Use el circuito del Captulo 3, actividad #2, page 71.


Caracteres personalizados de Grfica de Barra Vertical

La subrutina Def_Vert_Bar_Char en el siguiente programa ejemplo define cualquiera de los 16 diferentes caracteres de barra vertical personalizados. La Figura 7-3 muestra como cada caracter de barra corresponde a un valor.

Figura 7-3 Valores de grfica de barra vertical con Caracteres

Las definiciones de caracteres personalizados (Figura 7-3) siguen una secuencia que se relaciona directamente a los valores que representan, entonces las definiciones pueden ser calculadas segn se requiera en vez de ser guardadas en la EEPROM. Puesto que cada definicin de caracter personalizado toma 8 bytes, eliminar 16 definiciones salvar 128 bytes de memoria de programacin. La subrutina Def_Vert_Bar_Char define los caracteres de la Figura 7-3. La variable value define cual de los 0 a 15 caracteres ser desplegado. Cada bit en la variable rowMap determina si uno de los renglones en el caracter personalizado es blanco o negro.
Def_Vert_Bar_Char: SEROUT LcdPin, T9600, [Define + custChar]

Pgina 282 Sensores Inteligentes y sus Aplicaciones

rowMap = %1111111100000000 >> (value & %1111) FOR index = 0 TO 7 IF rowMap.LOWBIT(index) = 1 THEN SEROUT LcdPin, T9600, [%11111] ELSE SEROUT LcdPin, T9600, [%00000] ENDIF NEXT RETURN

El comando rowMap = %1111111100000000 >> (value & %1111) recorre los ocho bits 1 de %1111111100000000 hacia la derecha tantos lugares como lo indique la variable value. El trmino (value & %1111) es llamado una mascara de bits y hace posible usar valores de 16 a 31 para darle los mismos resultados que de 0 a 15. Si value es 3, el comando rowMap = %1111111100000000 >> (value & %1111) guarda %0001111111100000 en la variable rowMap. Puesto que rowMap es una variable de solo un byte, solo guarda los 8 bits ms bajos del trmino, o sea %11100000. Comparelo con el caracter personalizado para 3 en la Figura 7-3. Si value es 4, el resultado del byte bajo de la variable rowMap es %11110000. Ahora, observe el caracter 4 en la Figura 7-3. Intntelo para cada valor (0 al 15) y ver que el patron de bits en el byte rowMap coincide con el patrn de los renglones con pixeles negros en la Figura 7-3. Definir un caracter personalizado involucra enviar 8 bytes. Los valores binarios en cada byte sucesivo define cada uno de los 8 renglones en el caracter, de arriba a abajo. El ciclo FOR...NEXT en la subrutina Def_Vert_Bar_Char tiene un bloque de cdigo IF...THEN que usa el operator.LOWBIT para revisar cada bit en la variable rowMap y lo usa para definir un rengln de 5 pixeles blancos o negros en el caracter personalizado. Digamos que value es 3, entonces rowMap es %11100000. La primera vez en el ciclo FOR...NEXT, index es 0 y entonces la lnea IF...THEN examina rowMap.LOWBIT(0), el bit ms a la derecha. Puesto que es 0, la lnea IF...THEN manda un byte que contiene %00000 a la LCD, que hace que todos los pixeles sean blancos. La sexta vez en el ciclo FOR...NEXT, rowMap.LOWBIT(5) = 1, entonces la lnea IF...THEN manda un comando SEROUT con un byte conteniendo %11111. Entonces, los renglones sexto, sptimo y octavo sern negros, que resulta en el caracter mostrado en la Figura 7-3.
SEROUT 14, 84, [%11111] de hecho manda el byte %00011111, y los 5 bits ms
bajos son los que usa la LCD para definir sus renglones de 5 pixeles de ancho.

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 283

Programa Ejemplo: TestVerticalBars.bs2

Este programa ejemplo despliega los 16 diferentes caracteres personalizados de la barra vertical en la Lnea 0, carcter 8 de la LCD Parallax. Lo hace en rpida sucesin, una y otra vez. Tambin despliega el nmero que value guarda en la Terminal de Depuracin.
' ' ' '

Abra TestVerticalBars.bs2 en el Editor del BASIC Stamp. Crralo y verifique que todos los caracteres de la Figura 7-3 son desplegados. Incremente el argumento Duration del comando PAUSE. Vuelva a correr el programa y verifque que las barras en la LCD representan correctamente los nmeros desplegados en la Terminal de Depuracin.

-----[ Titulo ]------------------------------------------------------------Sensores Inteligentes y sus Aplicaciones - TestVerticalBars.bs2 Despliega 16 caracteres de barra vertical diferentes en Linea 0, caracter-8 de la LCD Serial Parallax. ' Dispositivo Objeto ' Lenguaje = BASIC Stamp 2 = PBASIC 2.5

' {$STAMP BS2} ' {$PBASIC 2.5}

' -----[ Pins E/S]----------------------------------------------------------LcdPin PIN 14 ' pin E/S conectado a RX de la LCD

' -----[ Constants ]---------------------------------------------------------T9600 LcdCls LcdOn Line0 Line1 Define CON CON CON CON CON CON 84 12 22 128 148 248 ' True, 8-bits, no parity, 9600 ' ' ' ' ' Form feed -> limpia pantalla Enciende la pantalla Linea 0, caracter 0 Linea 1, caracter 0 direccion define caract pers 0

' -----[ Variables ]---------------------------------------------------------custChar index rowMap cursor value line VAR VAR VAR VAR VAR VAR Byte Nib Byte Byte Byte Byte ' selector de carcter personalizado ' variable indice Eeprom ' linea punteada de 5-pixel ' Colocacion de Cursor ' Valor a ser graficado ' Linea0 o Linea1

' -----[ Inicializacin ]----------------------------------------------------' LCD initializiation. PAUSE 100

' Estabiliza fuente de poder

Pgina 284 Sensores Inteligentes y sus Aplicaciones

SEROUT LcdPin, T9600, [LcdOn, LcdCls] PAUSE 5

' Inicializa LCD ' 5 ms retraso para limpiar pantalla

' subrutina valores Caracter personalizado. custChar = 3 line = Line0 cursor = 7

' Use caracter personalizado 3 ' Cursor a Linea0 ' Cursor a 8avo caracter

' -----[ Rutina Principal ]--------------------------------------------------DO FOR value = 0 TO 16 DEBUG ? value GOSUB Def_Vert_Bar_Char GOSUB Disp_Cust_Char PAUSE 50 NEXT DEBUG CR, CR PAUSE 500 LOOP ' Ciclo Principal ' value cuenta de 0 a 16 ' Muestra value en Terminal de Depuracin ' Define caracter de grafica de barra ' Muestra caracter en la LCD ' Hace lento al ciclo

' espacios antes sig. secuencia ' Retraso antes sig. secuencia ' Repite ciclo principal

' -----[ Subrutina - Def_Vert_Bar_Char ]------------------------------------' Define un caracter de grafica de barra vertical basado en la variable value ' (0 to 15) y la variable custChar, que selecciona los caracteres ' personalizados de la LCD Serial Parallax entre 0 y 7. Def_Vert_Bar_Char: ' Inicia definicion de caracter personalizado SEROUT LcdPin, T9600, [Define + custChar] ' Selecciona un mapa de renglon para el caracter personalizado segun value. rowMap = %1111111100000000 >> (value & %1111) ' Manda 8 bytes, cada uno definiendo un rengln punteado en el caracter ' personalizado. Cada renglon es definido examinando un bit en la variable ' rowMap y luego enviando %11111 si el bit es 1 o %00000 si el bit es 0. FOR index = 0 TO 7 ' Repite 7 veces, index cuenta IF rowMap.LOWBIT(index) = 1 THEN ' Examina siguiente bit en rowMap SEROUT LcdPin, T9600, [%11111] ' Si 1, envia %11111 ELSE SEROUT LcdPin, T9600, [%00000] ' De lo contrario, envia %00000 ENDIF NEXT ' Regresa de la subrutina. RETURN

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 285

' -----[ Subrutinas - Disp_Cust_Char ]--------------------------------------' ' ' ' Esta subrutina despliega un caracter personalizado. La variable line puede ser establecida en Line0 o Line1 y la variable cursor puede ser establecida en un valor entre 0 y 15. La variable custChar selecciona uno de los caracteres personalizados de la LCD y debe estar en un valor entre 0 y 7.

Disp_Cust_Char: SEROUT LcdPin, T9600, [line + cursor, custChar] RETURN

' Escribe caracter personalizado

Su Turno - 31 Niveles cubriendo 2 renglones y Agregando un eje Horizontal

El comando que establece el patron de bits en la variable rowMap fu rowMap = %1111111100000000 >> (value & %1111). El clculo value & %1111 resultar 0 si value es 16, en 1 si value es 17, etc., hasta 15 si value es 31. Este patron continuar sin importer que tan grande es value. Puesto que la grfica de barra se comportar de la misma forma para valores entre 16 y 31 como lo hace para valores entre 0 y 15, la grfica de barra puede ser colocada en la lnea superior o en la inferior para indicar en qu rango cae la variable value. El rango real de desplegado es de 1 a 31, con el 16 mostrando ninguna barra. Modificar el programa para mostrar los caracteres en esta forma involucra solo unos pocos cambios a la Rutina Principal. Primero, los argumentos StartValue y EndValue del ciclo FOR...NEXT tienen que ser cambiados de (0 a 15) a (1 a 31). Tambin, un comando SEROUT tiene que ser agregado para sobreescribir los caracteres personalizados previos con espacios en blanco. Luego, puede ser agregado un bloque de cdigo IF...THEN...ELSE que posicione el cursor en la Linea 0 o la Linea 1. Debe colocar el cursor en la Linea 0 si value es mayor a 16, o en la lnea inferior si es menor o igual a 16. Salve TestVerticalBars.bs2 como TestVerticalBarsYourTurn.bs2. Modifique el DO...LOOP en la rutina principal como se muestra a continuacin. Corra el programa y verifique que la grfica de barra ahora despliega 31 niveles diferentes, del 1 al 31.
DO FOR value = 1 TO 31 SEROUT 14, 84, [Line0 + cursor, " ", Line1 + cursor, " "] IF value <= 16 THEN

Pgina 286 Sensores Inteligentes y sus Aplicaciones

line = Line1 ELSE line = Line0 ENDIF DEBUG ? value GOSUB Def_Vert_Bar_Char GOSUB Disp_Cust_Char PAUSE 50 NEXT DEBUG CR, CR PAUSE 500 LOOP

Puede tambin anidar el ciclo FOR value = 1 TO 31...NEXT dentro de un ciclo FOR cursor = 0 TO 15...NEXT y causar que la grfica de barra se mueva a travs de la pantalla cada vez que se repite. Controlando asi la compensacin del cursor, la grfica de barra puede desplegar 2 ejes con valores verticales de 1 a 31 y valores horizontales de 0 a 15. Intntelo!

Una pantalla de dos ejes

Si bien la anterior seccin Su Turno demostr como desplegar caracteres en 2 ejes, una pantalla completamente en blanco no comunica realmente que el valor est a la mitad de su rango. Una mejor forma de hacer llegar el mensaje es haciendo que aparezcan 2 caracteres personalizados uno junto al otro. La Figura 7-4 muestra cmo trabaja esto. Los primeros 2 ejemplos de pantalla no estn a la mitad ni del rango horizontal ni del vertical y entonces se despliegan caracteres simples. El tercer ejemplo est a la mitad del rango horizontal (8), y entonces la medicin vertical se despliega con dos caracteres adyacentes. El cuarto ejemplo muestra que la medicin est a la mitad de su rango vertical, y entonces los renglones en el carcter de arriba y abajo del valor tienen pixeles negros. Cuando the medicin est centrada en ambas la horizontal y la vertical el quinto ejemplo muestra cmo se debera ver. Estas caractersticas son especialmente importantes para graficamente indicar cuando uno o los dos ejes del acelermetro estn nivelados.

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 287

Figura 7-4 Puntos trazados en la grfica de barra de dos ejes

Si bien las caractersticas mostradas en la Figura 7-4 hacen que la pantalla est un poco menos cifrada, el programa tiene que tomar muchas ms decisiones. En el siguiente programa ejemplo, las subrutinas Bar_Graph_H_V y Horizontal_Placement se encarga de todas las decisiones que apoyan estas caractersticas adicionales.
Programa Ejemplo: TwoAxisBarDisplay.bs2
Descarga gratis Este programa est disponible como descarga grtis .bs2 en la pgina del producto de Sensores Inteligentes y sus Aplicaciones en www.parallax.com.

Puede probar este programa ejemplo introduciendo coordenadas horizontales y verticales en la Ventana de Transmisin de la Terminal de Depuracin. Abra y corra TwoAxisBarDisplay.bs2 con the Editor del BASIC Stamp. Introduzca valores en el rango de 0 a 16 para valores horizontales y de 1 a 31 para verticales, y observe los resultados desplegados por la LCD.

Pgina 288 Sensores Inteligentes y sus Aplicaciones

Intente los valores de la Figura 7-4 y verifique que concuerdan con las pantallas. Pruebe los valores horizontales 0, 8, y 16 para varios valores verticales. Pruebe los valores verticales 1, 16, y 31 para varios valores horizontales.

Otra forma de probar la pantalla es con la Rutina principal alterna mostrada a continuacin. Tiene ciclos FOR...NEXT anidados que prueban toda la variable value en todos los valores posibles de la variable cursor. Salve una copia de TwoAxisBarDisplay.bs2 como TwoAxisBarDisplayTest.bs2. Corra el programa modificado y observe para asegurarse que todos los valores son desplegados correctamente.
' -----[ Rutina Principal ]-------------------------------------------DO FOR cursor = 0 TO 16 FOR value = 1 TO 31 GOSUB Bar_Graph_H_V PAUSE 200 NEXT SEROUT 14, 84, [LcdCls] PAUSE 500 NEXT LOOP ' -----[ Titulo ]------------------------------------------------------------' Sensores Inteligentes y sus Aplicaciones - TwoAxisBarDisplay.bs2 ' Despliega un caracter que cambia vertical y horizontalmente. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Dispositivo Objeto ' Lenguaje = BASIC Stamp 2 = PBASIC 2.5

' -----[ Pins E/S]----------------------------------------------------------LcdPin PIN 14 ' pin E/S conectado a RX de la LCD

' -----[ Constants ]---------------------------------------------------------T9600 LcdCls LcdCr LcdOff LcdOn Line0 Line1 Define CON CON CON CON CON CON CON CON 84 12 13 21 22 128 148 248 ' True, 8-bits, no parity, 9600 ' ' ' ' ' ' ' Form feed -> limpia pantalla Retorno de carro Apaga la pantalla Enciende la pantalla Linea 0, caracter 0 Linea 1, caracter 0 direccion define caract pers 0

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 289

' -----[ Variables ]---------------------------------------------------------custChar index rowMap cursor value line VAR VAR VAR VAR VAR VAR Byte Nib Byte Byte Byte Byte ' selector de carcter personalizado ' variable indice Eeprom ' linea punteada de 5-pixel ' Colocacion de Cursor ' Valor a ser graficado ' Linea0 or Linea1

' -----[ Inicializacin ]----------------------------------------------------PAUSE 100 SEROUT LcdPin, T9600, [LcdOn, LcdCls] PAUSE 5 ' Estabiliza fuente de poder ' Inicializa LCD ' 5 ms retraso para limpiar pantalla

' -----[ Rutina Principal ]--------------------------------------------------DO DEBUG "Enter horizontal", CR, "value (0 TO 16)" DEBUGIN DEC cursor DEBUG "Enter vertical", CR, "value (1 TO 31)" DEBUGIN DEC value GOSUB Bar_Graph_H_V LOOP ' Ciclo Principal ' Pide posicion de caracter ' Obtiene posicion de caracter ' Pide al usuario valor ' Obtiene valor ' Llama a Bar_Graph_H_V ' Repite ciclo principal

' -----[ Subrutinas - Bar_Graph_H_V ]--------------------------------------' Define y despliega caracteres de grfica de barra de 2 ejes segun valor de ' cursor (0 to 16) y value (1 to 31). Llama a Def_Vert_Bar_Char y a ' Horizontal_Placement. Bar_Graph_H_V: SEROUT 14, 84, [LcdCls] PAUSE 5 ' Limpia trazado previo ' Retraso 5 ms para limpiar pantalla

' Decide whether to display on Line 0 or Line 1. IF value >= 16 THEN line = Line0 ELSE Line = Line1 GOSUB Def_Vert_Bar_Char GOSUB Horizontal_Placement IF value = 16 THEN value = 1 custChar = 2 ' Define caracter personalizado

' Caso especial: value = 16 ' Linea 0 display

Pgina 290 Sensores Inteligentes y sus Aplicaciones

GOSUB Def_Vert_Bar_Char line = Line0 GOSUB Horizontal_Placement value = 15 custChar = 3 GOSUB Def_Vert_Bar_Char line = Line1 GOSUB Horizontal_Placement value = 16 ENDIF RETURN ' -----[ Subroutine - Def_Vert_Bar_Char ]------------------------------------' Define un caracter de grfica vertical de barra segun la variable value (0 a ' 15) y la variable custChar, la cual selecciona los caracteres personalizados ' entre 0 y 7 de la LCD Serial Parallax. Def_Vert_Bar_Char: ' Inicia definicion de caracter personalizado SEROUT LcdPin, T9600, [Define + custChar] ' Selecciona un mapa de renglon para el caracter personalizado segn value. rowMap = %1111111100000000 >> (value & %1111) ' Manda 8 bytes, cada uno definiendo un rengln punteado en el caracter ' personalizado. Cada renglon es definido examinando un bit en la variable ' rowMap y luego enviando %11111 si el bit es 1 o %00000 si el bit es 0. FOR index = 0 TO 7 ' Repite 7 veces, index cuenta IF rowMap.LOWBIT(index) = 1 THEN ' Examina siguiente bit en rowMap SEROUT 14, 84, [%11111] ' Si 1, envia %11111 ELSE SEROUT 14, 84, [%00000] ' De lo contrario, envia %00000 ENDIF NEXT ' Regresa de la subrutina. RETURN ' -----[ Subrutinas - Horizontal_Placement ]--------------------------------' Coloca la grfica de barra vertical en una de las 16 columnas verticales de ' la LCD 2X16 de Parallax. La variable cursor puede poner la posicion ' horizontal en valores entre 0 y 16 (centro en 8). Llama a Disp_Custom_Char. Horizontal_Placement: ' Linea 1 Display

' Restaura value

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 291

SELECT cursor CASE 0 TO 7 GOSUB Disp_Cust_Char CASE 8 cursor = 7 GOSUB Disp_Cust_Char cursor = 8 GOSUB Disp_Cust_Char CASE 9 TO 16 cursor = cursor - 1 GOSUB Disp_Cust_Char cursor = cursor + 1 ENDSELECT RETURN

' Cursor 0 a 7, sin cambios

' Cursor 8, despliega en 7 & 8

' Cursor 9 a 16, despliega 1 izq

' -----[ Subrutinas - Disp_Cust_Char ]--------------------------------------' ' ' ' Esta subrutina despliega un caracter personalizado. La variable line puede ser establecida en Line0 o Line1 y la variable cursor puede ser establecida en un valor entre 0 y 15. La variable custChar selecciona uno de los caracteres personalizados de la LCD y debe estar en un valor entre 0 y 7.

Disp_Cust_Char: SEROUT LcdPin, T9600, [line + cursor, custChar] RETURN ' Escribe caracter personalizado

Su Turno - Desplegado Grfico de inclinacin en dos ejes

Indicar la inclinacin con TwoAxisBarDisplay.bs2 involucra comandos PULSIN para obtener las mediciones del acelermetro en los ejes x y y. Tambin require escalar y compensar para ajustar las mediciones del acelermetro en una escala vertical de 31 y una escala horizontal de 17. La escala horizontal tambin tiene que ser invertida. La Figura 7-5 muestra cmo los ejes x y y del acelermetro se relacionan con los ejes horizontal y vertical de la LCD. Note que la direccin positiva del eje y apunta a la direccin contraria en la que los valores del eje horizontal de la LCD se incrementan. Cuando el valor escalado del eje y sea 16, la pantalla debiera mostrar 0 y cuando el valor escalado del eje y sea 0, la pantalla debiera mostrar 16. La manera de corregir esto es usar un comando que reste a 16 el valor escalado del eje y. Esencialmente, esto es cursor = 16 (valor escalado de y).

Pgina 292 Sensores Inteligentes y sus Aplicaciones

Figura 7-5: Ejes x y y del acelermetro

La forma ms fcil de convertir TwoAxisBarDisplay.bs2 en una herramienta de nivelacin bi-axial es tomar prestados los bloques de cdigo del Captulo 3 y ajustarlos segn se requiera. Las variables de los ejes x y y, comandos PULSIN y los comandos para escalamiento y compensacin de HorizontalTilt.bs2 en el Captulo 3, actividad #6 proveen un punto de inicio. Los comandos PULSIN y escalamiento pueden reemplazar los comandos DEBUG y DEBUGIN en la Rutina Principal de TwoAxisBarDisplay.bs2. La subrutina Bar_Graph_H_V usa las variables value y cursor para graficar en la LCD. Antes de que pueda ser llamada, value necesita ser igualada al valor escalado del eje x y cursor necesita ser igualada al valor escalado del eje y, restado a 16.
Obtener las constantes de escalamiento ** se dejan como ejercicios al final del ejercicio.

Salve TwoAxisBarDisplay.bs2 como TwoAxisBarTiltDisplay.bs2. Agregue estas 2 declaraciones a la seccin de Variables del programa.
X y VAR VAR Word Word ' eje x del Acelermetro ' eje y del Acelermetro

Reemplace el DO...LOOP ms externo en la rutina principal con:

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 293

DO PULSIN 6, 1, x PULSIN 7, 1, y

' Ciclo Principal

value = (x MIN 1875 MAX 3125) - 1875 ** 1625 + 1 cursor = 16 - ((y MIN 1875 MAX 3125) - 1875 ** 891) GOSUB Bar_Graph_H_V LOOP ' Llama a Bar_Graph_H_V ' Repite ciclo principal

Salve y corra el programa y prubelo bajo una variedad de circunstancias de inclinacin.

Pgina 294 Sensores Inteligentes y sus Aplicaciones

RESUMEN
La mediciones de distancia e inclinacin se prestan para desplegarlas en grficas de barra. La mayora de las grficas de barra pueden hacerse usando solo uno o dos de los 8 espacios de memoria para caracteres personalizados de la LCD Serial Parallax. Las definiciones de caracter personalizado para las grficas de barra pueden ser guardadas en la EEPROM del BASIC Stamp, o definidas por cdigo que relacione el valor que est siendo graficado al nmero de lineas o columnas de pixeles que necesitan ser desplegados. Guardar caracteres personalizados en la EEPROM involucra directivas DATA que contengan 8 bytes cada una. Los 5 bits ms bajos de cada byte guardan el patron de bits para cada una de las 8 lineas (de 5 pixeles de ancho) que componen un caracter. Nombres Smbolo precediendo directivas DATA hacen posible copiar la direccin inicial de los bytes de una directiva DATA determinada en una variable. Una subrutina puede usar la variable que guarda la direccin de inicio para operaciones READ que secuencialmente copia bytes a una variable, luego enva el contenido de esa variable a la LCD. Desplegar grficas de barra es tpicamente mas eficiente con la memoria si los caracteres pueden ser generados en base al valor. Cuando la grfica de barra es horizontal, un comando LOOKUP es til para guardar valores binarios que correspondan con el nmero de columnas que tendrn pixeles negros en un caracter personalizado determinado. Para grficas verticales, los bits pueden ser cambiados en una variable. En cualquier caso, las subrutinas pueden examinar los bits en una variable, luego oscurecer pixeles en un cierto nmero of renglones o columnas en un caracter.
Preguntas

1. Qu parte de las directivas DATA hace posible encontrar la direccin de inicio de una definicin de caracter? 2. Cmo le dicen los programas en este captulo a la subrutina Def_Cust_Char qu caracter definir y dnde encontrar la definicin de caracter? Cmo especifica una posicin de caracter para la subrutina Disp_Cust_Char? Si quiere desplegar 2 caracteres personalizados diferentes al mismo tiempo, puede usar la misma definicin de caracter personalizado? Porqu? 3. Cmo guarda informacin HorizBarGraph.bs2 acerca de qu columnas en un caracter personalizado deben tener pixeles blancos o negros?

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 295

4. Porqu puede usar solo un byte en vez de 8 para definir personalizado con ciertas columnas negras? 5. Qu es lo que hace la instruccin IF rowMap.LOWBIT(index) = en TestVerticalBars.bs2? 6. Porqu puede usar solo un byte en vez de 8 para definir personalizado con ciertas columnas negras? 7. Qu es lo que hace la instruccin IF rowMap.LOWBIT(index) = en el programa TestVerticalBars.bs2?
Ejercicios

un caracter
1 THEN... do

un caracter
1 THEN... do

1. Escriba una directiva DATA para caracter personalizado para un caracter con todas las lneas horizontales. 2. Derive el valor 1625 en el comando value = (x MIN 1875 MAX 3125) 1875 ** 1625 + 1.
Proyectos

1. Modifique PingBarGraph.bs2 para que despliegue la medicin de distancia en centmetros en la lnea inferior. 2. Modifique TwoAxisBarTiltDisplay.bs2 para que despliegue barras que correspondan con el ngulo de inclinacin. Recuerde que ese ngulo es una funcin de la gravedad sensada por cada uno de los ejes del acelermetro. Tip: Use el cdigo de ejemplo del Captulo 3, actividad #6 para clculos del ngulo de inclinacin.

Pgina 296 Sensores Inteligentes y sus Aplicaciones

Soluciones

Q1. El nombre Smbolo. Q2. Los programas tienen que establecer 2 variables antes de hacer la llamada a la subrutina Def_Cust_Char: custChar y charBase. La variable custChar debe guardar el valor que el programa usar para decirle a la LCD que despliegue el caracter personalizado. Las definiciones de caracteres personalizados de la LCD pueden ser un valor de 0 a 7 y entonces custChar tiene que caer en ese rango. El nombre Smbolo en la directiva DATA del caracter personalizado tiene que ser guardada en la variable charBase. Puesto que variable = SymbolName guarda la direccin EEPROM del primer byte en una directiva DATA definida por SymbolName como variable, hace posible pasar la direccin de inicio de una directiva DATA de un caracter personalizado a la subrutina Def_Cust_Char. Q3. Establece el valor de las variables cursor y line antes de llamar a la subrutina. The rutina Disp_Cust_Char posicionara al cursor usando estas 2 variables antes de decirle a la LCD que despliegue el caracter personalizado en esa posicin. Q4. No, porque todas las instancias del mismo caracter personalizado actualmente desplegado por la LCD ser actualizado tan pronto como la definicin de caracter sea actualizada. Q5. La variable dotLine termina guardando uno de 5 valores: %00000, %10000, %11000, %11100, o %11110. Cada dgito corresponde a una de las 5 columnas verticales de pixeles en un caracter personalizado. Si el valor es 1, los pixeles en esa columna sern puestos en negro. Si es 0, sern dejados en blanco. Q6. Cada uno de los 8 renglones en la definicin del caracter personalizado tendr el mismo patrn, entonces el programa solo tiene que enviar el mismo byte de rengln 8 veces para definir cada rengln del caracter personalizado. Q7. Cuando la condicin IFTHEN evala a 1, los pixeles para el rengln se establecen en negro con SEROUT 14, 84, [%11111]; de otra forma, se establecen en blanco con SEROUT 14, 84, [%00000]. E1. Ejemplo de solucin:

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 297

Stripes

DATA

%11111, %00000, %11111, %00000, %11111, %00000, %11111, %00000

' ' ' ' ' ' ' '

* * * * * * * * * * * * * * * * * * * *

E2. El objetivo de la expresin value = (x MIN 1875 MAX 3125) - 1875 ** 1625 + 1 en la actividad #3 es escalar el valor del eje x del acelermetro, que debe estar en algn punto entre 1875 y 3125, a un valor entre 1 a 31. Esto eligir una de las 31 posibles variantes de grfica de barra vertical para la subrutina Bar_Graph_H_V. Para cuando el operator ** es alcanzado, 1875 ha sido restado, entonces el rango es 0 a 1250 (1251 elementos en la escala de entrada), y queremos escalarlo al rango de 1 a 31 (31 elementos en la escala de salida). Del Captulo 3, actividad #3, sabemos que ** ScaleConstant = Int[65536 (elementos en la escala de salida (elementos en la escala de entrada 1))]. Entonces, Int[65536 (31 (1251 1))] = Int[65536 (31 1250)] = Int[65536 0.0248] = Int[1625.2928] = 1625. P1. Solution Ejemplo Rutina principal modificada de PingBarGraph.bs2.
' -----[ Rutina Principal ]-------------------------------------------DO PULSOUT 15, 5 PULSIN 15, 1, time cmDistance = CmConstant ** time DEBUG HOME, DEC3 cmDistance, " cm" value = cmDistance GOSUB Bar_Graph SEROUT 14, 84, [Line1, DEC4 value, " cm"] PAUSE 100 LOOP ' Repite ciclo principal ' Despliega como grfica de barra ' Despliega medicin cm ' en Linea 1 ' Ciclo Principal

Pgina 298 Sensores Inteligentes y sus Aplicaciones

P2. Solution Ejemplo Vea los comentarios en la seccin Titulo par aver cmo fue construdo este programa a partir de programas ejemplo previos y clculos explicados en el texto:
' ' ' ' ' ' ' ' ' ' -----[ Titulo ]------------------------------------------------------------Sensores Inteligentes y sus Aplicaciones - Ch7Proj2.bs2 Despliega un caracter que cambia vertical y horizontalmente segn el ngulo de inclinacin del MX2125 en grados. Este programa es una combinacion de HorizontalTilt.bs2 del Captulo 3, actividad #6 y TwoAxisBarTiltDisplay.bs2 del Captulo 7, actividad #3. La medicin del eje x tiene que ser cambiada de -90 a +90 grados a un valor de 1 a 31 usando la equation de constante de escalamiento **. De igual forma, la medicin angular del eje y de -90 a +90 tiene que ser cambiada a un valor de 0 a 16. Los calculos con comentados y mostrados en la rutina principal justo antes su uso con los operadores **. ' Dispositivo Objeto ' Lenguaje = BASIC Stamp 2 = PBASIC 2.5

' {$STAMP BS2} ' {$PBASIC 2.5}

' -----[ Pines E/S]----------------------------------------------------------LcdPin PIN 14 ' pin E/S conectado a RX de la LCD

' -----[ Constants ]---------------------------------------------------------T9600 LcdCls LcdCr LcdOff LcdOn Line0 Line1 Define Negative Positive CON CON CON CON CON CON CON CON CON CON 84 12 13 21 22 128 148 248 1 0 ' True, 8-bits, no parity, 9600 Form feed -> limpia pantalla Retorno de carro Apaga la pantalla Enciende la pantalla Linea 0, caracter 0 Linea 1, caracter 0 direccion define caract pers 0 ' Signo - .bit15 de variables de palabra ' ' ' ' ' ' '

' -----[ Variables ]---------------------------------------------------------custChar index rowMap cursor value line x y sine side angle sign VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR VAR Byte Nib Byte Byte Byte Byte Word Word Word Word Word Bit ' selector de carcter personalizado ' variable indice Eeprom ' linea punteada de 5-pixel ' Colocacion de Cursor ' Valor a ser graficado ' Linea0 or Linea1

' ' ' '

seno en circulo r = 127 variable para disparo de subrutinas resultado angulo - grados bit de signo

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 299

' -----[ inicializacin ]----------------------------------------------------PAUSE 100 ' Estabiliza fuente de poder SEROUT LcdPin, T9600, [LcdOn, LcdCls] ' Inicializa LCD PAUSE 5 ' 5 ms retraso para limpiar pantalla ' -----[ Main Rutina ]------------------------------------------------------DO PULSIN 6, 1, x PULSIN 7, 1, y x = (x MIN 1875 MAX 3125) - 1875 ** 13369 - 127 y = (y MIN 1875 MAX 3125) - 1875 ** 13369 - 127 side = x GOSUB Arcsine ' Int[65536 * (31 / (181 - 1))] = 11286 value = angle + 90 ** 11286 + 1 side = y GOSUB Arcsine ' Int[65536 * (17 / (181 - 1))] = 6189 cursor = 16 - (angle + 90 ** 6189) ' Ciclo Principal

GOSUB Bar_Graph_H_V LOOP

' Llama Bar_Graph_H_V ' Repite ciclo principal

' -----[ Subrutinas - Bar_Graph_H_V ]--------------------------------------' Define y despliega caracteres de grfica de barra de 2 ejes segn el valor ' de cursor (0 to 16) y value (1 to 31). Llama Def_Vert_Bar_Char y ' Horizontal_Placement. Bar_Graph_H_V: SEROUT 14, 84, [LcdCls] PAUSE 5 ' Limpia trazado previo ' Retraso 5 ms para limpiar pantalla

' Decide si escribe en la Linea 0 o en la Linea 1. IF value >= 16 THEN line = Line0 ELSE Line = Line1 GOSUB Def_Vert_Bar_Char GOSUB Horizontal_Placement IF value = 16 THEN ' Define caracter personalizado

' Caso especial: value = 16

Pgina 300 Sensores Inteligentes y sus Aplicaciones

value = 1 custChar = 2 GOSUB Def_Vert_Bar_Char line = Line0 GOSUB Horizontal_Placement value = 15 custChar = 3 GOSUB Def_Vert_Bar_Char line = Line1 GOSUB Horizontal_Placement value = 16 ENDIF RETURN

' Despiega Linea 0

' Despiega Linea 1

' Restaura value

' -----[ Subrutina - Def_Vert_Bar_Char ]------------------------------------' Define un caracter de grfica vertical de barra segun la variable value (0 a ' 15) y la variable custChar, la cual selecciona los caracteres personalizados ' entre 0 y 7 de la LCD Serial Parallax. Def_Vert_Bar_Char: ' Inicia definicion de caracter personalizado SEROUT LcdPin, T9600, [Define + custChar] ' Selecciona un mapa de renglon para el caracter personalizado segn value. rowMap = %1111111100000000 >> (value & %1111) ' Manda 8 bytes, cada uno definiendo un rengln punteado en el caracter ' personalizado. Cada renglon es definido examinando un bit en la variable ' rowMap y luego enviando %11111 si el bit es 1 o %00000 si el bit es 0. FOR index = 0 TO 7 ' Repite 7 veces, index cuenta IF rowMap.LOWBIT(index) = 1 THEN ' Examina siguiente bit en rowMap SEROUT 14, 84, [%11111] ' Si 1, envia %11111 ELSE SEROUT 14, 84, [%00000] ' De lo contrario, envia %00000 ENDIF NEXT ' Regresa de la subrutina. RETURN ' -----[ Subrutinas - Horizontal_Placement ]--------------------------------' Coloca la grfica de barra vertical en una de las 16 columnas verticales de ' la LCD 2X16 de Parallax. La variable cursor puede poner la posicion ' horizontal en valores entre 0 y 16 (centro en 8). Llama a Disp_Custom_Char.

Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 301

Horizontal_Placement: SELECT cursor CASE 0 TO 7 GOSUB Disp_Cust_Char CASE 8 cursor = 7 GOSUB Disp_Cust_Char cursor = 8 GOSUB Disp_Cust_Char CASE 9 TO 16 cursor = cursor - 1 GOSUB Disp_Cust_Char cursor = cursor + 1 ENDSELECT RETURN ' -----[ Subrutinas - Disp_Cust_Char ]--------------------------------------' ' ' ' Esta subrutina despliega un caracter personalizado. La variable line puede ser establecida en Line0 o Line1 y la variable cursor puede ser establecida en un valor entre 0 y 15. La variable custChar selecciona uno de los caracteres personalizados de la LCD y debe estar en un valor entre 0 y 7. ' Cursor 0 a 7, sin cambios

' Cursor 8, despliega en 7 & 8

' Cursor 9 a 16, despliega 1 izq

Disp_Cust_Char: SEROUT LcdPin, T9600, [line + cursor, custChar] RETURN ' Escribe caracter personalizado

' -----[ Subrutina - Arcsine ]----------------------------------------------' Esta subrutina calcula el arcoseno segun la coordenada y en un circulo de ' radio 127. Establezca la variable side igual a su coordenada y antes de ' llamar a esta subrutina. Arcsine: GOSUB Arccosine angle = 90 - angle RETURN ' Subrutina Seno Inverso ' Obtiene coseno inverso ' sin(angle) = cos(90 - angle)

' -----[ Subrutina - Arccosine ]--------------------------------------------' Esta subrutina calcula arcocoseno basado en la coordenada x en un circulo ' de radio 127. Establezca la variable side igual a su coordenada x antes ' de llamar a esta subrutina. Arccosine: sign = side.BIT15 ' Subrutina Inverso coseno ' Guarda el signo de side

Pgina 302 Sensores Inteligentes y sus Aplicaciones

side = ABS(side) ' angle = 63 - (side / 2) ' DO ' IF (COS angle <= side) THEN EXIT ' angle = angle + 1 ' LOOP angle = angle */ 361 ' IF sign = Negative THEN angle = 180 - angle' RETURN

Evalua side positivo aproximacion inicial al angulo Ciclo de approximation sucesiva Hecho cuando COS angle <= side Mantiene incrementando angulo Convierte brads a grados Ajusta si el signo es negativo.

Apndice A: Tabla de caracteres ASCII Page 303

Apndice A: Tabla de caracteres ASCII


Tabla ASCII (primeros 128 caracteres)
Dec 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Hex 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F Char NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US Nombre / Funcin Null Start Of Heading Start Of Text End Of Text End Of Transmit Enquiry Acknowledge Bell Backspace Horizontal Tab Line Feed Vertical Tab Form Feed Carriage Return Shift Out Shift In Data Line Escape Device Control 1 Device Control 2 Device Control 3 Device Control 4 Non Acknowledge Synchronous Idle End Transmit Block Cancel End Of Medium Substitute Escape File Separator Group Separator Record Separator Unit Separator Dec 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 Hex 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F Char space ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? Dec 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 Hex 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F Char @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ Dec 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 Hex 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F Char ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ delete

Note que los cdigos de control (los 32 caracteres ASCII ms bajos) no tienen smbolos de pantalla estandarizados. Los caracteres listados para ellos son solo nombres usados en referencia a estos cdigos. Por ejemplo, para mover el cursor al principio de la siguiente lnea de una impresora o terminal frecuentemente se requiere enviar los cdigos line feed y carriage return. Este par es comnmente referido como "LF/CR."

Pgina 304 Sensores Inteligentes y sus Aplicaciones

Apndice B: Documentacin de la pantalla LCD Serial Parallax Page 305

Apndice B: Documentacin de la pantalla LCD Serial Parallax


599 Menlo Drive, Suite 100 Rocklin, California 95765, USA Office: (916) 624-8333 Fax: (916) 624-8003 General: info@parallax.com Tcnico: support@parallax.com Web Site: www.parallax.com Educacional: www.stampsinclass.com

Version 2.0

LCD Serial Parallax


2 renglones x 16 caracteres sin luz de fondo (#27976) 2 renglones x 16 caracteres con luz de fondo (#27977) 4 renglones x 20 caracteres con luz de fondo (#27979)
Introduccin

Las pantallas LCDs Seriales Parallax son muy funcionales y de bajo costo y pueden ser fcilmente controladas por un microcontrolador BASIC Stamp. Las LCD son de 2 o de 4 renglones por 16 caracteres y proveen ajuste bsico del texto para que su texto est completo en pantalla. Tambin le dan control completo sobre todas sus caractersticas avanzadas, permitindole mover el cursor a cualquier parte de la pantalla con una sola instruccin y apagarla y encenderla en cualquier configuracin. Soportan los mismos caracteres visibles que la Terminal de Depuracin del Editor de BASIC Stamp (ASCII Dec 32-127). Adems, puede definir hasta 8 caracteres personalizados para desplegar en cualquier lugar de la LCD.
Ideas de Aplicaciones

Qu puede hacer una una LCD Serial Parallax? Si bien hay muchas posibilidades, esta es una pequea lista de ideas con una LCD Serial y el BASIC Stamp de Parallax: Una muy profesional interface de texto con el usuario en cualquier aplicacin de microcontrolador Una forma fcil de implementar la depuracin de programas via serie sin una PC Datos de salida en tiempo real en aplicaciones robticas autnomas (Boe-Bot, Toddler, SumoBot)

Pgina 306 Sensores Inteligentes y sus Aplicaciones

Cables de Extensin para la LCD

Las LCDs Seriales Parallax son compatible con nuestros cables Extension para LCD de 14-pulgadas, parte #805-00012, en venta por separado en www.parallax.com. Este cable de 3 pines hembra-hembra viene con un conector de 3 pines y fcilmente lo puede conectar su LCD a su tableta de proyectos.
Cdigo Muestra

Se pueden buscar por nmero de parte en www.parallax.com: 2x16 LCD Serial: bsqueda 27976 2x16 LCD Serial: (con luz de fondo): bsqueda 27977 4x20 LCD Serial: (con luz de fondo) bsqueda 27979
Caractersticas

Despliega el juego de caracteres ASCII directamente a la pantalla Ajusta a la siguiente lnea automticamente para fcil despliegue de cadenas de texto Trabaja a 2400, 9600, y 19,200 baud Muevee el cursor a cualquier punto en la pantalla con un solo comando Limpia toda la pantalla con un solo comando Le permite definer hasta 8 caracteres personalizados
Conexiones

Conectar la LCD Serial al BASIC Stamp es una operation directa, requiere solo 3 pines de E/S. Va la figura B-1 y B-2 para detalles de conexiones electricas. Vea las Figuras B-3 y B-4 en las siguienes pginas para etalles de tamao y montaje mecnico.
Figura B-1 Conexiones de la LCD Serial para la Rev D y anteriores.

Apndice B: Documentacin de la pantalla LCD Serial Parallax Page 307

Figura B-2 Conexiones de la LCD Serial para la Rev E y posteriores.

La tabla abajo lista los requerimientos de voltaje y corriente de la LCD Serial, con la luz de fondo encendida y apagada. Puesto que en cada caso la corriente que toma excede la capacidad de todos los mdulos BASIC Stamp, debe energizar la LCD Serial de una fuente externa de 5 V. Asegrese de que la fuente tiene un nivel de corriente adecuado para energizar la LCD Serial y el BASIC Stamp.
Estado de la LCD Serial Todos los modelos, luz de fondo apagada Luz de fondo encendida 27977 / 27979 Voltaje 5 VDC 5 VDC Corriente 20 mA 80 mA

Figura B-3 Especificaciones de Tamao y Montaje para los modelos 27976, 27977. Precaucion: Las dimensiones pueden variar.

Pgina 308 Sensores Inteligentes y sus Aplicaciones

Figura B-4 Especificaciones de Tamao y Montaje para el modelo 27979. Precaucion: Las dimensiones pueden variar.

Notas Tcnicas
Caracterstica Tipo de pantalla LCD Direccin de observacin Luz de fondo Temperatura de Operacin Temperatura de almacenaje Tolerancia dimensional Descripcin STN, YG, positive, transflective 6H YG LED -4F~158F (-20C~70C) -22F~176F (-30C~80C) .02 (.5mm)

Configuracin de la velocidad Baud

Despus de conectar la LCD Serial, necesitar seleccionar la velocidad baud a la cual va a enviar datos. Tiene 3 opciones: 2400, 9600, y 19,200 baud. Para establecer esta velocidad, mueva los interruptores dip switch en la parte posterior de la LCD a las posiciones correctas de acuerdo a la tabla cercana a los interruptores, que aqu se copia:

MODE Test 2,400 9,600 19.200

SW1 OFF ON OFF ON

SW2 OFF OFF ON ON

Apndice B: Documentacin de la pantalla LCD Serial Parallax Page 309

Como puede ver, hay una cuarta opcin llamada Test. Ya que conect la energa, use este modo para confirmar que estn correctamente conectados la energa y tierra a la LCD antes de que enve algn dato. Mueva los interruptores a Test y encienda la energa. La pantalla LCD se debe encender con la luz de fondo encendida (modelos 27977, 27979) y desplegando el siguiente texto:
Parallax, Inc. www.parallax.com

Si no ve esto al principio, trate ajustar el contraste de la LCD girando el potencimetro Increase Contrast con un desarmador. Grelo en direccin de la flecha para hacer que los caracteres se muestren ms claros. Si an no los ve, revise sus conexiones elctricas e intente de nuevo. Una vez que haya completado exitosamente el modo prueba, mueva los interruptores a las posiciones correctas para seleccionar la velocidad baud a la que quiere para su aplicacin.
Displegando Texto

Ahora que la LCD est configurada, es hora de empesar a enviar texto a la pantalla. Para desplegar un caracter de texto en la LCD Serial, simplemente enve el cdigo ASCII de ese caracter a la LCD Serial por el puerto serial a la velcidad baud correcta. Cuando un caracter es recibido, la LCD Serial despliega ese caracter en la posicin actual del cursor y luego mueve el cursor una posicin a la derecha. Cuando enciende la LCD, el cursor esta en la posicin extrema izquierda de la lnea superior, como podra esperar. La pequea barra en la parte baja del caracter muestra dnde est posicionado el cursor. Una vez que ha enviado una lnea completa de caracteres a la LCD, notar que el cursor automticamente ajusta a la posicin extrema izquierda de la segunda lnea, como el texto en un libro. El texto se ajustar as al final de cada lnea, con el final de la lnea inferior ajustndose a la lnea superior de la LCD. El texto nunca saldr de la pantalla; siempre ver todos los caracteres que enve. Intente el siguiente cdigo en su BASIC Stamp 2 para enviar una cadena de texto a la pantalla LCD. Primero, configure la velocidad baud en su LCD Serial a 19,200. Luego, cargue el cdigo siguiente en su BASIC Stamp 2 y crralo. Ver la cadena de texto aparecer y ajustarse a la segunda lnea de la pantalla.

Pgina 310 Sensores Inteligentes y sus Aplicaciones

En todo su cdigo para la LCD Serial, debe hacer una pausa de 100 ms al inicio para darle tiempo para initializar. Tambin debe configurar el pin de Puerto serie en el BASIC Stamp a ALTO antes del retraso de 100 ms para arranque, dado que este es el estado normal de un puerto serie cuando no est enviando ningn dato.
' {$STAMP BS2} TxPin Baud19200 CON CON 0 32

HIGH TxPin ' Establece pin alto para ser Puerto serie PAUSE 100 ' Pause para inicializar la LCD Serial SEROUT TxPin, Baud19200, ["Hello, this text will wrap."]

Moviendo el Cursor

Cuando enva un caracter a la LCD Serial, siempre se despliega en la posicin acual del cursor. Hay algunos modos diferentes para mover el cursor en la pantalla LCD Serial. Despus de cada caracter que enva, el cursor automticamente se mueve una posicin. Junto con esto, hay un juego estndar de comandos para movimiento de que incluye Backspace, Carriage Return, y Line Feed. El comando Backspace/Left (Dec 8) mueve el cursor una posicin a la izquierda y el comando Right (Dec 9) mueve el cursor una posicin a la derecha. Esto puede ser til para mover el cursor para sobreescribir texto existente. Estos comandos ajustan a la siguiente line de la pantalla si es necesario. El comando Line Feed (Dec 10) mueve el cursor a la siguiente lnea de la pantalla sin cambiar la posicin horizontal del cursor. El comando Carriage Return (Dec 13) tambin mueve el cursor a la siguiente lnea, pero tambin mueve el cursor a la posicin extrema izquierda en esa lnea. El comando Form Feed (Dec 12) limpia toda la pantalla y mueve el cursor a la posicin extrema izquierda en la Lnea 0, como cuando enciende la pantalla. Necesitar hacer una pausa de 5mS en su cdigo despus de enviar el comando Form Feed, para darle a la LCD Serial tiempo para limpiar la pantalla. A excepcin de Form Feed, ninguno de estos de comandos movimiento afecta los caracteres en la pantalla. Tambin hay comandos de movimiento directo que puede usar para mover el cursor a cualquier posicin en la pantalla con un solo comando. Los comandos en el rango Dec 128 a 143 y Dec 148 a 163 mueven el cursor a las 16 diferentes posiciones en cada una de las 2 lneas de los modelos 27976 y 27977. Los comandos en el rango Dec 128 a 207

Apndice B: Documentacin de la pantalla LCD Serial Parallax Page 311

mueven el cursor a las 20 diferentes posiciones en cada una de las 4 lneas del modelo 27979 LCD.
Controlando la Pantalla

Tambin tiene control sobre los diversos modos de pantalla de la LCD Serial. El comando display-off (Dec 21) apaga la pantalla y todos los caracteres desaparecen. Los caracteres no son borrados de la pantalla, e incluso puede escribir nuevos caracteres a la pantalla cuando est apagada. Un truco para hacer que mucho texto aparezca de golpe, an a una baja velocidad baud rate, es apagar la pantalla y enviar todo su texto. Entonces, cuando la encienda de nuevo, todo el texto aparece instantaneamente. Los comandos display-on (DEC 22 to 25) encienden nuevamente la pantalla y tambin controlan si desea o no desplegar el cursor y/o hacer que el caracter del cursor parpadee. El cursor es la pequea barra que se muestra abajo del caracter en la at posicin actual del cursor. La opcin de parpadeo hace que ese caracter encienda y apague repetidamente. Puede encender o apagar el cursor o su parpadeo en cualquier combinacin como se lista en la tabla de juego de comandos. Puede cambiar el modo de cursor y parpadeo an si la pantalla ya est encendida; no necesita apagarla y volverla a encender. Con los modelos 27977 y 27979, puede tambin controlar la luz de fondo de la pantalla. Esta ilumina la pantalla para facilitar su lectura en la oscuridad. Hay comandos para encenderla (Dec 17) y apagarla (Dec 18).
Caracteres personalizados

La LCD Serial tiene la capacidad de guardar hasta 8 caracteres personalizados definidos por el usuario. Los caracteres personalizados son guardados en RAM y por ello necesitan ser redefinidos si desconecta la energa. Puede despegar los caracteres personalizados enviando los comandos Dec 0 a 7, como se muestra en la tabla de juego de comandos. El caracter personalizado se desplegar en la posicin actual del cursor. Los caracteres personalizados son de 5 pixeles de ancho por 8 pixeles de alto. Cada uno de los caracteres es guardado como una serie de datos de 8 bytes donde los 5 bits ms bajos de cada byte representan una linea de pixeles en el caracter. Los 3 bits ms altos de cada bytes son ignorados. Un valor 1 en el bit enciende ese pixel (lo hace negro). La lnea de pixeles de hasta abajo se deja normalmente en blanco (todo ceros) para poder ver el cursor.

Pgina 312 Sensores Inteligentes y sus Aplicaciones

Para definir un caracter personalizado, enviar un total de 9 bytes a la LCD Serial. El primer byte necesita ser un comando valido define-caracter-personalizado (Dec 248 a 255) y debe ser seguido por 8 bytes de datos que definen los pixeles del caracter. La LCD serial siempre usar los siguientes 8 bytes que reciba para configurar los pixeles del caracter. Los bytes de datos definen el caracter empezando en el rengln de pixeles extremo superior, como se muestra en el cdigo ejemplo. Defina un caracter personalizado usando el cdigo ejemplo siguiente. Primero, configure la velocidad baud en su LCD Serial a 19,200. Luego, cargue el siguiente cdigo en su BASIC Stamp 2 y crralo. Ver un caracter de diamante aparecer en la pantalla.
' {$STAMP BS2} TxPin Baud19200 HIGH TxPin PAUSE 100 CON CON 0 32 ' Establece pin en alto para ser un puerto serial ' Pausa para que LCD Serial inicialize Define caracter personalizado 2 Ahora envia los 8 bytes de datos 0 = %00000 4 = %00100 * 14 = %01110 * * * 31 = %11111 * * * * * 14 = %01110 * * * 4 = %00100 * 0 = %00000 0 = %00000 ' Despliega el nuevo caracter personalizado 2 ' ' ' ' ' ' ' ' ' '

SEROUT TxPin, Baud19200, [250] SEROUT SEROUT SEROUT SEROUT SEROUT SEROUT SEROUT SEROUT SEROUT TxPin, TxPin, TxPin, TxPin, TxPin, TxPin, TxPin, TxPin, TxPin, Baud19200, Baud19200, Baud19200, Baud19200, Baud19200, Baud19200, Baud19200, Baud19200, Baud19200, [0] [4] [14] [31] [14] [4] [0] [0] [2]

Conjunto de Comandos

Las tablas a continuacin listan todos los comandos vlidos de la LCD Serial. Los comandos marcados como N/A son invalidos y son ignorados. Las lineas de la pantalla LCD estn numeradas desde 0, siendo la Linea 0 la de hasta arriba. Las posiciones de caracter en cada lnea estn numeradas empezando desde 0, siendo la posicin 0 la de la extrema izquierda en la lnea.

Apndice B: Documentacin de la pantalla LCD Serial Parallax Page 313

Dec 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 - 16 17 18 19 - 20 21 22 23 24 25 26 - 31 32 - 127 128 129 130 131 132 133 134

Hex 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E - 10 11 12 13 - 14 15 16 17 18 19 1A - 1F 20 - 7F 80 81 82 83 84 85 86

Accin Despliega el caracter personalizado 0 Despliega el caracter personalizado 1 Despliega el caracter personalizado 2 Despliega el caracter personalizado 3 Despliega el caracter personalizado 4 Despliega el caracter personalizado 5 Despliega el caracter personalizado 6 Despliega el caracter personalizado 7 Backspace / Left - El cursor es movido una posicin a la izquierda. El comando no borra el caracter. Right - El cursor es movido una posicin a la derecha. El comando no borra el caracter. Line Feed - El cursor es movido hacia abajo una lnea. Para los modelos LCD de 2 lneas, si est en la lnea 0 va a la lnea1. Si est en la lnea 1, se ajusta a la lnea 0. La posicin horizontal se mantiene igual. N/A Form Feed - El cursor es movido a la posicin 0 en la lnea 0 y toda la pantalla es limpiada. Los usuarios deben hacer una pausa de 5mS depus de este comando. Carriage Return En LCDs de 2 lneas, si est en lnea 0 el cursor se mueve a la posicin 0 en la linea 1. Si est en la lnea 1 se ajusta a la posicin 0 en la lnea 0. N/A Enciende la pantalla (solo los modelos 27977, 27979) Apaga la pantalla (Default) N/A Apaga la pantalla Enciende la pantalla, con cursor apagado y sin parpadeo Enciende la pantalla, con cursor apagado y con parpaedo de caracter Enciende la pantalla, con cursor encendido y sin parpadeo (Default) Turn the display on, con cursor encendido y con parpaedo de caracter N/A Despliega caracteres ASCII. Vea la tabla de juego de caracteres ASCII. Mueve el cursor a la lnea 0, posicin 0 Mueve el cursor a la lnea 0, posicin 1 Mueve el cursor a la lnea 0, posicin 2 Mueve el cursor a la lnea 0, posicin 3 Mueve el cursor a la lnea 0, posicin 4 Mueve el cursor a la lnea 0, posicin 5 Mueve el cursor a la lnea 0, posicin 6

Pgina 314 Sensores Inteligentes y sus Aplicaciones

Dec 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180

Hex 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4

Action Mueve el cursor a la lnea 0, posicin 7 Mueve el cursor a la lnea 0, posicin 8 Mueve el cursor a la lnea 0, posicin 9 Mueve el cursor a la lnea 0, posicin 10 Mueve el cursor a la lnea 0, posicin 11 Mueve el cursor a la lnea 0, posicin 12 Mueve el cursor a la lnea 0, posicin 13 Mueve el cursor a la lnea 0, posicin 14 Mueve el cursor a la lnea 0, posicin 15 Mueve el cursor a la lnea 0, posicin 16 (solo el modelo 27979) Mueve el cursor a la lnea 0, posicin 17 (solo el modelo 27979) Mueve el cursor a la lnea 0, posicin 18 (solo el modelo 27979) Mueve el cursor a la lnea 0, posicin 19 (solo el modelo 27979) Mueve el cursor a la lnea 1, posicin 0 Mueve el cursor a la lnea 1, posicin 1 Mueve el cursor a la lnea 1, posicin 2 Mueve el cursor a la lnea 1, posicin 3 Mueve el cursor a la lnea 1, posicin 4 Mueve el cursor a la lnea 1, posicin 5 Mueve el cursor a la lnea 1, posicin 6 Mueve el cursor a la lnea 1, posicin 7 Mueve el cursor a la lnea 1, posicin 8 Mueve el cursor a la lnea 1, posicin 9 Mueve el cursor a la lnea 1, posicin 10 Mueve el cursor a la lnea 1, posicin 11 Mueve el cursor a la lnea 1, posicin 12 Mueve el cursor a la lnea 1, posicin 13 Mueve el cursor a la lnea 1, posicin 14 Mueve el cursor a la lnea 1, posicin 15 Mueve el cursor a la lnea 1, posicin 16 (solo el modelo 27979) Mueve el cursor a la lnea 1, posicin 17 (solo el modelo 27979) Mueve el cursor a la lnea 1, posicin 18 (solo el modelo 27979) Mueve el cursor a la lnea 1, posicin 19 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 0 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 1 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 2 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 3 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 4 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 5 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 6 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 7 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 8 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 9 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 10 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 11 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 12 (solo el modelo 27979)

Apndice B: Documentacin de la pantalla LCD Serial Parallax Page 315

Dec 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 - 247 248 249 250 251 252 253 254 255

Hex B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 F7 F8 F9 FA FB FC FD FE FF

Action Mueve el cursor a la lnea 2, posicin 13 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 14 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 15 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 16 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 17 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 18 (solo el modelo 27979) Mueve el cursor a la lnea 2, posicin 19 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 0 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 1 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 2 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 3 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 4 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 5 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 6 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 7 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 8 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 9 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 10 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 11 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 12 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 13 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 14 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 15 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 16 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 17 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 18 (solo el modelo 27979) Mueve el cursor a la lnea 3, posicin 19 (solo el modelo 27979) N/A Define caracter personalizado 0. 8 bytes de datos deben seguir al comando. Define caracter personalizado 1. 8 bytes de datos deben seguir al comando. Define caracter personalizado 2. 8 bytes de datos deben seguir al comando. Define caracter personalizado 3. 8 bytes de datos deben seguir al comando. Define caracter personalizado 4. 8 bytes de datos deben seguir al comando. Define caracter personalizado 5. 8 bytes de datos deben seguir al comando. Define caracter personalizado 6. 8 bytes de datos deben seguir al comando. Define caracter personalizado 7. 8 bytes de datos deben seguir al comando.

Pgina 316 Sensores Inteligentes y sus Aplicaciones

Juego de Caracteres ASCII

La siguiente tabla muestra todos los caracteres ASCII como se despliegan en la LCD Serial. Todos los caracteres ASCII (Dec 32 to 127) son caracteres ASCII estandar, excepto por la contradiagonal \ (Dec 92) y el tilde ~ (Dec 126). Para su facilidad, la LCD Serial viene pre-programada con estos caracteres en los primeros 2 caracteres personalizados. Entonces, para desplegar una contradiagonal, use el comando Dec 0 y para desplegar un tilde, use el comando Dec 1. Por supuesto, siempre puede sobreescribir estos caracteres con sus propios caracteres personalizados.

Apndice C: Definiciones de Caracteres Hexadecimales Page 317

Apndice C: Definiciones de Caracteres Hexadecimales


Muchas notas de aplicaciones de la LCD y documentacin usan nmeros hexadecimales en vez de nmeros binarios para definir comandos y caracteres. En PBASIC, escribir un signo de exclamacin es tan simple como un comando SEROUT con un signo de exclamacio entre comillas.
SEROUT 14, 84, ["!"]

No todos los lenguajes de programacin para controladores soportan este uso nativo de caracteres escribibles. En algunos casos, sobre todo en lenguaje ensamblador, se usa el cdigo ASCII para el signo de exclamacin. El cdigo ASCII para este signo es 33, y an en PBASIC, el comando SEROUT 14, 84, [33] realiza la misma tarea. En lenguaje ensamblador, los valores hexadecimales son algunas veces el nmero base preferido porque hace ciertas tareas ms fciles. Debido a esto, mucha documentacin para LCD lista sus comandos LCD como valores hexadecimales. The equivalente hexadecimal de decimal-33 es hexadecimal-21. Esto es (2 16) + 1. Puede usar el operator $ para especificar que un valor es hexadecimal, lo que hara que el comando para desplegar un signo de exclamacin fuera: SEROUT 14, 84, [$21]. He aqu un ejemplo de un comando SEROUT que define una barra en una grfica de barra. Llena la parte de abajo del caracter con pixeles negros y deja la parte mitad superior en blanco:
SEROUT 14, 84, [250, %00000, %00000, %00000, %00000, %11111, %11111, %11111, %11111] ' ' ' ' ' ' ' '

* * * *

* * * *

* * * *

* * * *

* * * *

He aqu un comando equivalente usando valores hexadecimales. Si bien salva mucho espacio, no es tan fcil de entender como definir un caracter personalizado con nmeros binarios. Siendo as, ver programas de aplicaciones PBASIC escritos de esta manera de

Pgina 318 Sensores Inteligentes y sus Aplicaciones

vez en vez, principalente por la prevalecencia de valores hexadecimal en documentacin para LCD.
SEROUT 14, 84, [250, $00, $00, $00, $00, $1F, $1F, $1F, $1F]

La Table 7-1 cuenta a 15 en decimal, hexadecimal y binario. En trminos de convertir de hexadecimal a binary y viceversa, esta tabla es todo lo que necesitar. La razn es porque cada dgito hexadecimal suelto corresponde a un grupo de 4 dgitos binarios.
Table 7-1: Valores Decimales, Hexadecimales y Binarios
Base 10 Base 16 Base 2 0 0 00 00 1 1 00 01 2 2 00 10 3 3 00 11 4 4 01 00 5 5 01 01 6 6 01 10 7 7 01 11 8 8 10 00 9 9 10 01 10 A 10 10 11 B 10 11 12 C 11 00 13 D 11 01 14 E 11 10 15 F 11 11

Ejemplo: Convierta $8FE6 a binario. Solucin: Cada dgito hexadecimal se convierte en un grupo de 4 nmeros binarios, entonces el valor binario puede ser escrito con la ayuda de la Table 7-1: Hexadecimal Binario 8 1000 F 1111 E 6 1110 0110

$8FE6 = %1000111111100110 Ejemplo: Convierta %1100011000001001 a hexadecimal. Solucin: Arregle el nmero binario en grupos de 4 dgitos, luego use la Table 7-1: Binario Hexadecimal 1100 C 0110 6 0000 1001 0 9

%1100011000001001 = $C609
Programa Ejemplo: ConvertBinaryToHexadecimal.bs2

Por supuesto, puede tambin hacer que el BASIC Stamp lo haga por usted. Simplemente use el operador % para definir el nmero binario y entonces usar el formateador HEX en un comando SEROUT para desplegar el valor.

Apndice C: Definiciones de Caracteres Hexadecimales Page 319

Intntelo y vea si la LCD coincide con nuestros clculos

' Sensores Inteligentes y sus Aplicaciones - ConvertBinaryToHexadecimal.bs2 ' {$STAMP BS2} ' {$PBASIC 2.5} PAUSE 250 SEROUT 14, 84, [22, 12] PAUSE 5 ' Estabiliza la fuente de energia ' Enciende y limpia la pantalla ' Retraso de 5 ms para limpiar

SEROUT 14, 84, ["Value = ", HEX %1100011000001001] END

Su Turno Convierta de Hexadecimal a Binario

Convertir de hexadecimal a binario es un asunto de usar el formateador BIN en vez de HEX y using el operator $ para decirle al Editor del BASIC Stamp que le est dando un valor hexadecimal (en vez de % para binario). Si est conviertiendo 4 dgitos hexadecimal a binario, el resultado ser un nmero de 16 dgitos. Entonces, el comando SEROUT tambin debe ser modificado para desplegar el resultado comenzando al incio de la segunda lnea. Comente la lnea de cdigo existente que ejecuta la conversion de binario a hexadecimal.
SEROUT 14, 84, ["Value = ", 148, BIN $8FE6]

Pgina 320 Sensores Inteligentes y sus Aplicaciones

Apndice D: Listado de Partes Page 321

Apndice D: Listado de Partes


Requerimientos del sistema de Cmputo : PC con Windows 2000/XP Un puerto serie disponible o puerto USB. Si necesita un adaptador USB a Serie, recomendamos el Parallax parte #800-00030. Acceso a Internet Requerimientos de Software: Editor BASIC Stamp para Windows v2.0 o ms reciente (Descarga gratis en www.parallax.com) Programas ejemplo seleccionados (Descarga gratis en www.parallax.com) Microsoft Notepad y Microsoft Excel 2002 o ms reciente (para estudios de aceleracin del Captulo 6) Requerimientos de Hardware: Uno de los siguientes kits que incluye una plataforma de programacin BASIC Stamp 2, ms la fuente de energa adecuada o las bateras: o Board of Education Full Kit Serial (#28102) o USB (#28802) o Boe-Bot Robot Kit Serial (#28132) o USB (#28832) o BASIC Stamp activity Kit* (incluye HomeWork Board) (#90005) Sensores Inteligentes y sus Aplicaciones, Partes y Texto (#28029) o Kit de partes (#130-28029) Items de casa requeridos: Pequea barra magntica Brjula Mecnica (para calibrar el Modulo de brjula, Captulo 4) Carro RC y Controlador, con bateras (para Captulo 6, actividad #5) Rueda de bicicleta (para Captulo 6, actividad #6) *Todas las actividades en este texto son compatibles con la tarjeta BASIC Stamp HomeWork mientras que est usando la LCD sin luz de fondo includa en el kit de partes de Sensores Inteligentes. Si est usando una LCD con luz de fondo, use tambin una tarjeta Board of Education para proteger su LCD.

Pgina 322 Sensores Inteligentes y sus Aplicaciones

Sensores Inteligentes y sus Aplicaciones, Partes y Texto #28029 (Sin libro, #130-28029) Partes y cantidades sujetas a cambio sin previo aviso Parallax Parte # 122-28029 150-01020 27976 28015 28017 29123 451-00303 700-00003 700-00028 710-00006 713-00005 720-00011 800-00016 805-00002 900-00001 Descripcin Libro Sensores Inteligentes y sus Aplicaciones Resistenciass 220 , watt 5% LCD Serial Parallax 2 x 16 sin luz de fondo Sensor de Distancia Ultrasnico Ping))) Acelermetro Memsic Bi-axial Mdulo de brjula Hitachi Conector de 3 pines macho/macho 4-40 tuercas zincadas-plateadas Tornillos de 1/4 4-40 pan-head Tornillos de1/2 4-40 pan-head Espaciador #4 de 1/4 circular de nylon Herrajes para montaje universal de 90 grados Bolsa con 10 cables conectores de 3 pulgadas Cable Extension para Servo/LCD Piezo parlante Cantidad 1 2 1 1 1 1 3 6 4 2 2 4 2 2 1

Puede encontrar algunos componentes electrnicos extra en su kit que no se usan en el libro Sensores Inteligentes y sus Aplicaciones. Si quiere usar estas para construir sus propios circuitos, aprenda acerca los capacitores electrolticos y sus requerimientos de seguridad antes de proceder PRECAUCIN: El uso incorrecto de capacitores electrolticos puede causar que exploten. Siga las siguienes reglas de seguridad para evitar cualquier dao Los capacitores electrolticos tienen una terminal positiva (+) y una negativa (-). El voltaje en la terminal (+) del capacitor debe ser siempre mayor que el voltaje en su terminal (-). Use la imagen (derecha) para identificar las terminales (+) y (-). Siempre asegrese de conectar estas terminales exactamente como se muestra en diagramas confiables. Conectar uno de estos capacitores incorrectamente puede daarlo. En algunos circuitos conectar este tipo de capacitor incorrectamente y luego energizar puede causar su ruptura e incluso explotar. Vss es el voltaje ms bajo (0 V) en las tarjetas Board of Education y BASIC Stamp HomeWork. Al conectar la terminal negativa del capacitor a Vss asegurar que la polaridad a travs de las terminales del capacitor siempre ser correcta. SEGURIDAD Siempre apague la energa antes de construir o modificar los circuitos. Siempre observe la polaridad cuando conecte capacitores electrolticos. Nunca invierta la polaridad de la fuente en cualquier capacitor polar. Use lentes de seguridad cuando use estos capacitores. Mantenga sus manos y cara lejos de estos capacitores al energizarlos. Smbolo del Capacitor

10 F

ndice Page 323

ndice
-A-

acceleration, 65
on a circular path, 233 RC car study, 230 skateboard trick study, 240

bicycle distance measurement, 247 binary radians (brads), 101


converting to degrees, 87

-C-

accelerometer
and LCD tilt bubble graph, 188 measuring height, 211 MX2125 design (picture), 67 schematic and wiring diagram, 68 three-axis, 66

capacitor safety, 322 Cartesian coordinates, 174 Celsius to Fahrenheit conversion, 59 clamping input range, 78 CLREOL, 96 collision, 65 compass (drawing), 129 compass module, Hitachi HM55B, 119
calibration, 128 interpreting measurements, 119 magnet cautions, 125 schematic and wiring diagram, 121 sensing axes, 120 testing, 121

animation
flashing text, 11 pixel worm custom characters, 264

arccosine, 99 arcsine, 99 arctangent, 92 ATN, 85, 127


-B-

computer system requirements, 321 contrast adjustment for LCD, 7 conversion


binary radians to degrees, 87 Fahrenheit to Celsius temperature, 59

bar graph
horizontal, 271 two-axis, 291 vertical, 281

bar magnet, 125 baud rate, 7 baud rate switches for LCD, 6

coordinate systems, 174 COS, 100 counting wheel revolutions, 248 CR, 10 CRSRXY, 8, 168 custom characters

Page 324 Smart Sensors y Applications

hourglass animation, 24 pixel worm animation, 264 predefined in Parallax Serial LCD, 19 swapping, 261

-L-

LCD
and accelerometer tilt bubble graph, 188 baud rate switches, 6 cautions for older models, 4 contrast adjustment, 7 control codes, 9 creating custom characters, 264 defining custom characters, 20 horizontal bar graph, 271 mounting brackets, 153 Parallax Serial LCD Documentation, 305 predefined custom characters, 19 scrolling text, 25 scrolling text in window, 30 two-axis bar graph, 291 vertical bar graph, 281

-D-

DATA, 180, 213, 223 deadband, 249 declination, 124 degree symbol in ASCII, 143 display coordinates, 174
-E-

EEPROM, 262
-F-

Fahrenheit to Celsius conversion, 59


-G-

Gelfand, Alan (Ollie), 241 graphic character display, 168 gravity, 65


-H-

-M-

hardware requirements, 321 hexadecimal, 22, 317 hexadecimal to binary conversion, 319 HIDs (Human Interface Devices), 167 horizontal bar graph, 271 household items required, 321 hysteresis, 248
-I-

MIN, 196
-N-

negative numbers and PBASIC, 174 negative numbers in PBASIC


division, 145

-O-

inclination, 124 incline, 65 input range clamping, 78

ollie, 241 oscillations, 242


-P-

Parts Kit component listing, 322

ndice Page 325

percent error measurements, 59 Ping))) sensor, 41


and bar graph LCD display, 271 distance measurements, centimeter, 46 distance measurements, inches, 49 extension cable connections, 51 schematic and wiring diagram, 43

LcdTimer.bs2, 17 PingLcdCmAndIn.bs2, 57 PingMeasureCm.bs2, 48 PingMeasureCmAndIn.bs2, 50 PingTest.bs2, 43 PlotXYGraph.bs2, 172 PredfinedCustomCharacters.bs2, 20 SignedNumbers.bs2, 81 SimpleTilt.bs2, 70 SimpleTiltLcd.bs2, 74 SineCosine.bs2, 101 TestArcsine.bs2, 103 TestAtn.bs2, 89 TestCalibratedCompass.bs2, 139 TestCompass.bs2, 122 TestCompassAveraged.bs2, 146 TestScaleOffset.bs2, 78 TestScrollingSubroutine.bs2, 28 TestVerticalBars.bs2, 283 TestWheelCounter.bs2, 249 TiltObstacleGame.bs2, 198 TwoAxisBarDisplay.bs2, 287 VertWheelRotation.bs2, 95

Predefined Custom Characters, 20 Programs


BikeWheelAcceleration.bs2, 251 BradsToDegrees.bs2, 90 BubbleGraph.bs2, 191 CalibrateCompass.bs2, 132 ConvertBinaryToHexadecimal.bs2, 318 CrsrxyPlot.bs2, 169 CursorPositions.bs2, 15 DatalogAcceleration.bs2, 226 DatalogYaxisUnscaled.bs2, 244 EepromBackgroundDisplay.bs2, 181 EepromBackgroundRefresh.bs2, 185 EepromDataStorage.bs2, 216 EepromDataStorageWithReset.bs2, 221 EepromPixelWorm.bs2, 264 HorizBarGraph.bs2, 273 HorizontalTilt.bs2, 108 Hourglass.bs2, 23 LcdTestCompass.bs2, 155 LcdTestMessage.bs2, 10 LcdTestNumbers.bs2, 12

PULSIN, 69
-R-

RC car acceleration, 230 READ, 213 Reset button as program switch, 219 rotation, 65, 85, 229

Page 326 Smart Sensors y Applications

-S-

scaling constant, 77 scaling input values, 76 SEROUT, 8, 317 servo port jumper, 150 signed numbers and PBASIC, 174 signed numbers in PBASIC, 80
division, 145

tesla (T), 124 tilt game controller, 196 tracking character coordinates, 182 two equations with two unknowns, 176 twos complement, 174, 196 two-axis bar graph, 291
-V-

SIN, 100 sine, 99 software requirements, 321


-T-

vertial bar graph, 281 vibration, 65


-W-

temperature unit conversion, 59

Wainwright, Danny, 241 worm, custom character for LCD, 264 WRITE, 213

Das könnte Ihnen auch gefallen