Anda di halaman 1dari 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 Boe-
Bot, 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 Parte Parallax #
Estndar 27976
Con Luz 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} ' Dispositivo Objeto = BASIC Stamp 2


' {$PBASIC 2.5} ' Lenguaje = PBASIC 2.5
Cap 1: La pantalla LCD Serial Parallax Pgina 11

SEROUT 14, 84, [22, 12] ' Inicializa la LCD


PAUSE 5

SEROUT 14, 84, ["See this?", 13, ' Mensaje de texto, retorno de carro
"The LCD works!"] ' mas texto en la linea 1.
END ' 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 ' Inicia el bloque DO...LOOP
PAUSE 600 ' Retraso de 6/10 de segundo
SEROUT 14, 84, [22] ' Enciende la pantalla
PAUSE 400 ' Retraso de 4/10 de segundo
SEROUT 14, 84, [21] ' Apaga la pantalla
LOOP ' 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} ' Dispositivo Objeto = BASIC Stamp 2


' {$PBASIC 2.5} ' Lenguaje = PBASIC 2.5

counter VAR Byte ' Variable del ciclo FOR...NEXT

SEROUT 14, 84, [22, 12] ' Inicializa la LCD


PAUSE 5 ' Retraso 5 ms para limpiar la pantalla

FOR counter = 0 TO 12 ' Cuenta hasta 12; incrementa cada 1/2 s

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 Cursor a la izquierda
9 Cursor a la derecha
10 Cursor abajo (la linea inferior ajustara en la linea superior)
128 to 143 Posiciona el cursor en la linea 0, caracteres 0 al 15
148 to 163 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, "L",
131, "I",
134, "N",
137, "E",
140, "-",
143, "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} ' Dispositivo Objeto = BASIC Stamp 2


' {$PBASIC 2.5} ' Lenguaje = PBASIC 2.5

index VAR Nib ' Variable del ciclo FOR...NEXT


character VAR Byte ' Guardado del caracter
offset VAR Byte ' Valor de compensacion

SEROUT 14, 84, [22, 12] ' Inicializa la LCD


PAUSE 500 ' Retraso de 1/2 segundo

' 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 ' Flashea 5 veces


SEROUT 14, 84, 500, [21, 22]
NEXT
END ' 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 ' Limpia la pantalla
SEROUT 14, 84, ["This is a", 13] ' 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] ' Enciende LCD y limpia
PAUSE 5 ' Pausa 5 ms para limpiar

SEROUT 14, 84, ["Time Elapsed...", 13] ' Texto + retorno de carro
SEROUT 14, 84, [" h m s"] ' 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} ' Directiva de Stamp


' {$PBASIC 2.5} ' Directiva de PBASIC

hours VAR Byte ' Guarda horas


minutes VAR Byte ' Guarda minutos
seconds VAR Byte ' Guarda segundos

SEROUT 14, 84, [22, 12] ' Inicia LCD y limpia pantalla
PAUSE 5 ' Pausa 5 ms para limpiar

SEROUT 14, 84, ["Time Elapsed...", 13] ' Texto + retorno de carro
SEROUT 14, 84, [" h m s"] ' Texto en segunda linea

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 ' Pausa + consumo ~ 1 segundo


seconds = seconds + 1 ' Incrementa segundo contador
LOOP ' 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 PIN 14 ' pin de E/S de la LCD

T9600 CON 84 ' True, 8-bits, no parity, 9600

LcdCls CON 12 ' Form feed -> clear screen


LcdCr CON 13 ' Retorno de Carro
LcdOff CON 21 ' Apaga la pantalla
Cap 1: La pantalla LCD Serial Parallax Pgina 19

LcdOn CON 22 ' Enciende la pantalla


Line0 CON 128 ' Linea 0, caracter 0
Line1 CON 148 ' 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] ' Inicializa la LCD


PAUSE 5 ' 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,  Figura 1-15
%01110,  Redefiniendo el caracter
%00100,  personalizado 0
%01010, 
%10001, 
%11111] 

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, ' Define Caracter Personalizado 7
%00000, '
%11111, ' * * * * *
%10001, ' * *
%01010, ' * *
%00100, ' *
%01110, ' * * *
%11111, ' * * * * *
%11111] ' * * * * *

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, [133] ' Cursor -> Linea 0, char


SEROUT 14, 84, [0] ' Muestra Caracter Personalizado 0
PAUSE 1250 ' Retraso de 1.25 segundos
SEROUT 14, 84, [8] ' Espacio atras
SEROUT 14, 84, [7] ' Muestra Caracter Personalizado 7
PAUSE 1500 ' Retraso de 1.50 segundos

LOOP

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 ' Estabiliza fuente de energia

SEROUT 14, 84, [248, ' Define Caracter Personalizado 0


%00000, '
%11111, ' * * * * *
%11111, ' * * * * *
%01110, ' * * *
%00100, ' *
%01010, ' * *
%10001, ' * *
%11111] ' * * * * *

SEROUT 14, 84, [255, ' Define Caracter Personalizado 7


%00000, '
%11111, ' * * * * *
%10001, ' * *
%01010, ' * *
%00100, ' *
%01110, ' * * *
%11111, ' * * * * *
%11111] ' * * * * *
Pgina 24 Sensores Inteligentes y sus Aplicaciones

SEROUT 14, 84, [22, 12] ' Enciende pantalla y limpia


PAUSE 5 ' 5 ms retraso para limpiar

' -----[ Main Rutina ]-------------------------------------------------------

DO

SEROUT 14, 84, [133] ' Cursor -> Linea 0, char


SEROUT 14, 84, [0] ' Muestra Caracter Pers. 0
PAUSE 1250 ' Retraso de 1.25 seconds
SEROUT 14, 84, [8] ' Espacio atras
SEROUT 14, 84, [7] ' Muestra Caracter Pers. 7
PAUSE 1500 ' Retraso de 1.50 seconds

LOOP

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 DATA @ 2, "Message "
Message2 DATA "again"
Message3 DATA "Larger message, going faster"
Message4 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: messageEnd = message2


windowLeft = 134: windowRight = 137
increment = 1
GOSUB Scroll_Message

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: messageEnd = message4
windowLeft = 150: windowRight = 161
increment = 2
GOSUB Scroll_Message
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} ' Directiva BASIC Stamp


' {$PBASIC 2.5} ' Directiva PBASIC

' -----[ directivas 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 CON 84 ' True, 8-bits, no parity, 9600


LcdCls CON 12 ' Form feed -> limpia pantalla
LcdCr CON 13 ' Retorno de carro
LcdOff CON 21 ' Apaga la pantalla
LcdOn CON 22 ' Enciende la pantalla
Line0 CON 128 ' Linea 0, caracter 0
Line1 CON 148 ' Linea 1, caracter 0

TimeOn CON 250 ' Caracter de tiempo de encendido


TimeOff CON 0 ' Caracter de tiempo de atenuac.

' -----[ Variables ]----------------------------------------------------------

' Variables funcionales para la subrutina Scroll_Message.

cursorStart VAR Byte ' Posicion del primer caracter


head VAR Byte ' Inicio del texto desplegado
tail VAR Byte ' Fin del texto desplegado
pointer VAR Byte ' apuntador de direccion EEPROM
character VAR Byte ' Guarda un caracter
Cap 1: La pantalla LCD Serial Parallax Pgina 29

' Variables de configuracion para la subrutina Scroll_Message.

increment VAR Nib ' Caracteres por cambiar


windowRight VAR Byte ' Direccion del caracter de
' extrema derecha
windowLeft VAR Byte ' Direccion del caracter de
' extrema izquierda
messageStart VAR Byte ' Direccion EEPROM para inicio
messageEnd VAR Byte ' 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: messageEnd = message2


windowLeft = 134: windowRight = 137
increment = 1
GOSUB Scroll_Message

' Cambia los valores de varias variables de configuracion y demuestra el


' efecto en la pantalla con cada cambio.

windowLeft = 131: windowRight = 140


GOSUB Scroll_Message

messageStart = Message1: messageEnd = message3


GOSUB Scroll_Message

messageStart = Message3: messageEnd = message4


windowLeft = 150: windowRight = 161
increment = 2
GOSUB Scroll_Message

END

' -----[ Subrutina - Scroll_Message ]----------------------------------------

Scroll_Message:

cursorStart = windowRight - increment + 1 ' Caracter ExtremaDer en ventan


head = 0 ' Inicializa head y tail
tail = increment - 1 ' del mensaje

' ciclo de avance


Pgina 30 Sensores Inteligentes y sus Aplicaciones

DO WHILE tail<(MessageEnd-MessageStart)+(windowRight-windowLeft+increment)

SEROUT LcdPin, T9600, [cursorStart] ' Caracter ExtramaDer en ventana

FOR pointer = head TO tail ' Limpia caracteres anteriores.


SEROUT LcdPin, T9600, [" "]
NEXT

PAUSE timeOff ' Permite atenuacion caracteres

SEROUT LcdPin, T9600, [cursorStart] ' 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. Reloj de pulsera, calculadora, telfono (las respuestas pueden variar).
Q2. Dos lneas de texto, cada una con 16 caracteres de ancho.
Q3. El comando SEROUT.
Q4. 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 inter-
construido 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] ' Enciende y limpia pantalla


' 1234567890123456
SEROUT 14, 84, [" Hello ", CR] ' 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}

SEROUT 14, 84, [22, 12] ' Enciende y limpia pantalla


' 1234567890123456
SEROUT 14, 84, [" Hello ", CR] ' Centra texto en linea sup.

DO
SEROUT 14, 84, [21] ' Apaga pantalla
PAUSE 500
SEROUT 14, 84, [22] ' Enciende pantalla
PAUSE 500
LOOP

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}

SEROUT 14, 84, [22, 12] ' Enciende y limpia pantalla


SEROUT 14, 84, ["Inicio"] ' Escribe en Linea 0
SEROUT 14, 84, [158] ' Linea2, 6o caracter de der. a izq.
SEROUT 14, 84, ["Final"] ' Escribe en extremo der de la Linea 1

E5. Ejemplo de solucin:


' Sensores Inteligentes y sus Aplicaciones - Ch1_Ex05.bs2
' Escribe a 19200 baud
' {$STAMP BS2}
' {$PBASIC 2.5}

SEROUT 14, 32, [22, 12] ' Enciende y limpia pantalla


SEROUT 14, 32, ["Using 19200 bps"] ' Escribe en Linea 0

E6. Ejemplo de solucin:


' Sensores Inteligentes y sus Aplicaciones - Ch1_Ex06.bs2
' Escribe a 2400 baud
' {$STAMP BS2}
' {$PBASIC 2.5}

SEROUT 14, 396, [22, 12] ' Enciende y limpia pantalla


SEROUT 14, 396, ["Using 2400 bps"] ' Escribe en Linea 0
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}

LcdPin PIN 14
T9600 CON 84

PAUSE 250
SEROUT 14, 84, [22, 12] ' Enciende y limpia pantalla
PAUSE 5 ' 5 ms retraso para limpiar

SEROUT LcdPin, T9600, ["Nunca deje que "]


SEROUT LcdPin, T9600, ["mi escuela "]
PAUSE 1500
SEROUT LcdPin, T9600, ["obstruyera "]
SEROUT LcdPin, T9600, ["mi educacion. "]
PAUSE 1500
SEROUT LcdPin, T9600, [" -Mark Twain"]
SEROUT LcdPin, T9600, [" 1835-1910 "]

END

P2. Las 3 copias cambiarn al nuevo caracter definido! Es como magia. A


continuacin, un programa muestra.
' 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

Line0 CON 128


Line1 CON 148
copies VAR Nib

PAUSE 250
SEROUT 14, 84, [22, 12] ' Enciende y limpia pantalla
PAUSE 5 ' 5 ms retraso para limpiar

SEROUT 14, 84, [248, ' Define Caracter Pers. 0


%00110, ' * *
%00101, ' * *
%00100, ' *
%11111, ' * * * * *
%00100, ' *
%01110, ' * * *
%10101, ' * * *
%00100] ' *
Pgina 40 Sensores Inteligentes y sus Aplicaciones

FOR copies = 1 TO 3
SEROUT 14, 84, [0] ' Despliega Caracter Pers. 0
NEXT

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, ' Re-define Caracter Pers. 0


%00100, ' *
%10011, ' * * *
%01001, ' * *
%00101, ' * *
%00001, ' *
%00010, ' *
%00100, ' *
%11000] ' * *
END
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

S Cair t
Sobject = =
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 Sobject-
cm 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 tPULSIN-
BS2)/10,000.

100 Cair t
Sobject-cm =
2

100 Cair tPULSIN-BS2 2


Sobject-cm =
2 1,000,000

Cair tPULSIN-BS2
Sobject-cm =
10,000
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.

344.8 tPULSIN-BS2
Sobject-cm =
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 CON 2260

cmDistance VAR 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 VAR Word


time VAR Word

DO

PULSOUT 15, 5
PULSIN 15, 1, time

cmDistance = CmConstant ** time

DEBUG HOME, DEC3 cmDistance, " cm"

PAUSE 100

LOOP

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 VAR Word


inDistance VAR Word
time VAR Word

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

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 VAR Word


time VAR 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

real - predicha
% error = 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.

346.5 - 344.8
% error = 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. El objeto esta a 2.59 m de distancia.


E2. 100 F = 37.7 C
E3. 30.48 cm = 1.0 ft.
E4. % error = +/- 6.84%; measured distance = 0.466 m.

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


' Sensores Inteligentes y sus Aplicaciones - Ch2_Project1.bs2
' Indica fuera-de- rango con LED destellante. Ajusta MaxDistance
' de medicion.
' {$STAMP BS2}
' {$PBASIC 2.5}

LED PIN 13 ' LED rojo activo en alto


LCD PIN 14 ' LCD Serial Parallax
Ping PIN 15 ' sensor Ping))) Parallax

CmConstant CON 2260 ' Calc tiempo de sonido viaje redondo


InConstant CON 890
MaxDistance CON 361 ' Maximo posible para medir (empirico)
cmDistance VAR Word ' Distancia en centimetros
time VAR Word ' Tiempo de eco en viaje redondo

PAUSE 200 ' Inicializa LCD


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 ' Bing
PAUSE 50
FREQOUT Speaker, 450, 2200 ' Bong
RETURN

Calc_Distance:
inDistance = inConstant ** tiempo ' Estas son todas las mediciones
RETURN
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 VAR Word
y VAR Word

DEBUG CLS

DO

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

DEBUG HOME, DEC4 ? X, DEC4 ? Y

PAUSE 100

LOOP

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 3-
5.

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 VAR Word
y VAR 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


con Complemento a dos
Decimal sin Binario de 16-Bit Decimal con
signo !Bit 15 Bit 0" signed
1 0000000000000001 1
32767 0111111111111111 32767
32768 1000000000000000 -32768
65535 1111111111111111 -1

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


Constante de Resultado entero
Valor Valor Calculado
escalamiento ** BASIC Stamp
0 x 0.2999 = 0 0
1 x 0.2999 = 0.2999 0
2 x 0.2999 = 0.5998 0
3 x 0.2999 = 0.8997 0
4 x 0.2999 = 1.1996 1
5 x 0.2999 =
6 x 0.2999 =
7 x 0.2999 =
8 x 0.2999 =
9 x 0.2999 =
10 x 0.2999 =

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

Figura 3-16
y Tangente y Arcotangente
tan =
x
y
= tan 1
x

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:

Figura 3-19
Tangente y Arcotangente
y = h sin
x = h cos

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 For h = 100 and = 315 For h = 127 and = 180
y = 127 sin 45 y = 100 sin 315 y = 127 sin 180
= 89.9 = 71 =0
90
x = 127 cos 45 x = 100 cos 315 x = 127 cos 180
= 89.9 = 71 = 127
90

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 VAR Word


x VAR Word
y VAR Word

DO

DEBUG "Enter y: "


DEBUGIN SDEC y
DEBUG "Enter x: "
DEBUGIN SDEC x

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 VAR Word


brads VAR Word

DEBUG CLS, "brads */ 360 */ 361", CR

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

1 AY
= tan
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 = 30
3

2

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

1

tan 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
AY
tan =
AX
A
tan 1 (tan ) = tan 1 Y
AX
A
= tan 1 Y
AX

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 VAR Word


x VAR Word
y VAR Word

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 ' ASCII 176 es el simbolo de grados

PAUSE 100

LOOP

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, ' Define caracter personalizado 7


%01000, ' *
%10100, ' * *
%01000, ' *
%00000, '
%00000, '
%00000, '
%00000, '
%00000] '
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

1

AY 2
tan 1 = tan

1
3 = 330
AX
2
1

1 Ay 1 2
tan = tan
= 30
Ax 3
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).

y Figura 3-27
sin = Seno y Coseno
h
x
cos =
h
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.

y y Figura 3-30
sin = = sin 1 Seno, Arcoseno, Cosenoy
h h Arcocoseno
x x
cos = = cos 1
h h

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} ' Directiva BASIC Stamp


' {$PBASIC 2.5} ' Directiva PBASIC
Pgina 104 Sensores Inteligentes y sus Aplicaciones

' -----[ Constantes ]---------------------------------------------------------

Negative CON 1 ' Signo - .bit15 de variables de palabra


Positive CON 0

' -----[ Variables ]----------------------------------------------------------

sine VAR Word ' seno en circulo r = 127


side VAR Word ' variable de subrutina
angle VAR Word ' resultado angle - degrees
sign VAR Bit ' bit de Signo

' -----[ Inicializacion ]-----------------------------------------------------

DEBUG CLS ' Limpia la Terminal de Depuracion


sine = -128 ' Inicia y en -128

' -----[ Rutina principal ]---------------------------------------------------

DO UNTIL sine = 127 ' Barre desde y = -127 a y = 127


sine = sine + 1 ' Incremento en 1
side = sine ' Coloca side en y
DEBUG "sine = ", SDEC sine, " " ' Muestra el valor de seno
GOSUB Arcsine ' Calcula arcoseno
DEBUG SDEC ? angle ' Muestra el resultado angle
LOOP ' Repite DO...LOOP

END ' 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: ' Subrutina Inverso seno


GOSUB Arccosine ' Obtiene inverso coseno
angle = 90 - angle ' seno(angle) = cos(90 - angle)
RETURN

' -----[ 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: ' Subrutina Inverso coseno


sign = side.BIT15 ' Guarda el signo de side
side = ABS(side) ' Evalua side positivo
angle = 63 - (side / 2) ' aproximacion inicial al angulo
DO ' Ciclo de approximation sucesiva
Captulo 3: Inclinacin con el Acelermetro Memsic Page 105

IF (COS angle <= side) THEN EXIT ' Hecho cuando COS angle <= side
angle = angle + 1 ' Incrementa el angulo
LOOP
angle = angle */ 361 ' Convierte brads a grados
IF sign = Negative THEN angle = 180 - angle' Ajusta si el signo es negativo.
RETURN

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
El mismo principio aplica en el eje ym del acelermetro y el resultado es:
A
X = sin 1 Y

g
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
AX
sin =
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} ' Directiva BASIC Stamp


' {$PBASIC 2.5} ' Directiva PBASIC

' -----[ Constantes ]---------------------------------------------------------

Negative CON 1 ' Signo - .bit15 de variables de una palabra


Positive CON 0

' -----[ Variables ]----------------------------------------------------------

x VAR Word ' Medicion del eje x mems


y VAR Word ' Medicion del eje y mems

side VAR Word ' dispara variable de subrutina


angle VAR Word ' resultado angulo - grados
sign VAR Bit ' 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 ' medicion del eje x


PULSIN 7, 1, y ' 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 ' Pausa 1/10 segundo

LOOP ' 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: ' Subrutina seno inverso


GOSUB Arccosine ' Obtiene coseno inverse
angle = 90 - angle ' seno(angle) = cos(90 - angle)
RETURN

' -----[ 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: ' Subrutina coseno inverso


sign = side.BIT15 ' Salva el signo de side
side = ABS(side) ' Evalua side positivo
angle = 63 - (side / 2) ' Aproximacion inicial de angulo
DO ' Ciclo de aproximacion sucesiva
IF (COS angle <= side) THEN EXIT ' Hecho cuando COS angle <= side
angle = angle + 1 ' Incrementa angulo
ciclo
angle = angle */ 361 ' Convierte brads a grados
IF sign = Negative THEN angle = 180 - angle' Ajusta si el signo es negativo.
RETURN
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, ' Define caracter personalizado 7


%01000, ' *
%10100, ' * *
%01000, ' *
%00000, '
%00000, '
%00000, '
%00000, '
%00000] '

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. Cules son las 7 cantidades que puede medir con un acelermetro?
2. Qu significan las siglas MEMS?
3. Qu es lo que se mueve dentro del MX2125 cuando lo inclina?
4. Puede la gravedad ser considerada una forma de aceleracin?
5. Que tiene que hacer a un programa que muestra mediciones en la Terminal de
Depuracin para que las muestre en una LCD serial?
6. Cmo puede restringir a una variable a un rango de valores?
7. Cmo puede orientar su tarjeta para aplicar 1 g al eje x del acelermetro?
8. Cmo puede orientar su tarjeta para aplicar 0 g a ambos ejes?
9. Cual es la diferencia entre un radian binario y un grado?
10. Qu rango de valores aceptan los operadores SIN y COS? Qu representan
estos valores?
11. Cmo puede convertir de brads a grados?
12. Qu rango of valores acepta el operador ATN? Qu represent esos valores?
13. Porqu puede usar ATN para calcular el ngulo de rotacin de su tarjeta?
14. Qu rango de valores est la subrutina Arccosine diseada para aceptar? Qu
representan esos valores?
15. Qu rango de valores est la subrutina Arcsine diseada para aceptar? Qu
representan esos valores?
16. 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 electro-
mechanical 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. y VAR Word


PULSIN 10, 1, y
E2. x VAR Word
PULSIN 9, 1, x
E3. x = x * 2
E4. x = x * 2 / 1000
-O-
x = x /500
E5. 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 VAR Word


angleOld VAR Word
x VAR Word
y VAR Word
turnCount VAR Word

PAUSE 250 ' Inicializa LCD


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 ' medicion del eje x


PULSIN 7, 1, y ' 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 ' Pause 1/10 second

LOOP ' 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

N sin y
tan = =
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 PIN 2 ' P2 transmite-recibe a/de Din/Dout


Clk PIN 0 ' P0 manda pulsos al reloj de HM55B
En PIN 1 ' P2 controla pin EN(ABLE) de HM55B

' -----[ Constantes ]---------------------------------------------------------

Reset CON %0000 ' comando Reset de HM55B


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

' -----[ Variables ]----------------------------------------------------------

x VAR Word ' datos del eje x


y VAR Word ' datos del eje y
status VAR Nib ' banderas de Status
angle VAR Word ' Guarda medicion de angulo

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

DO ' Ciclo principal

GOSUB Compass_Get_Axes ' Obtiene valores de x y y

angle = x ATN -y ' Convierte x y y a brads


angle = angle */ 361 ' Convierte brads a grados

DEBUG HOME, "x-axis N(-S) = ",SDEC x, ' Muestra ejes y grados


CLREOL, CR, "y-axis W(-E) = ",
SDEC y, CLREOL, CR, CR, "angle = ",
DEC angle, " degrees", CLREOL

PAUSE 150 ' Retraso Debug para alentar PC

LOOP ' Repite ciclo principal

' -----[ Subrutina - Compass_Get_Axes ]--------------------------------------

Compass_Get_Axes: ' subrutina modulo de brujula

HIGH En: LOW En ' Manda comando reset a HM55B


SHIFTOUT DinDout,clk,MSBFIRST,[Reset\4]

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
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 DinDout,clk,MSBPOST,[x\11,y\11] ' Obtiene valores de ejes x & y


HIGH En ' 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.

total magnetic field intensity


x axis units =
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) ' Guardan compensaciones de ejes x y y


CompassLowVal DATA (1) ' Guarda indice del mas bajo angulo
CompassCal DATA (16) ' 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 CON 0 ' Indice para arreglo tabular


Previous CON 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
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 VAR Word ' Valores enteros para pantalla


fraction VAR Nib ' Valores fraccionales para pantalla
brads VAR Byte ' Mediciones de radianes binarios
table VAR Byte(2) ' Guarda valores en tabla
temp VAR Word(2) ' Guarda mediciones de ejes
axisOffset VAR Word ' 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", ' espera por el usuario
CR, "continue"
DEBUGIN character
DEBUG CR, CR

LOOP ' Repite ciclo principal

' -----[ Subrutina - Compass_Calibrate ]-------------------------------------

Compass_Calibrate:

GOSUB Get_And_Store_Axis_Offsets
GOSUB Get_And_Store_Interpolation
GOSUB Get_And_Store_Low_Value_Address
DEBUG 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 ' Obtiene mediciones de eje

' Calcula compensacion en base a valores max y min de cada eje y guarda
' en la EEPROM.
SELECT counter
CASE 0 ' Norte
temp(0) = x
CASE 1 ' Este
temp(1) = y
CASE 2 ' Sur
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 ' Oeste
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 ]----------------------


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 Degree Angle",


CR, "Ideal Actual Ideal Actual",
CR, "------ ------ ------ ------", 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: ' subrutina mdulo de brjula

HIGH En: LOW En ' Comando envia reset al HM55B


SHIFTOUT DinDout,clk,MSBFIRST,[Reset\4]

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 DinDout,clk,MSBPOST,[x\11,y\11] ' Obten valores de ejess x & y


HIGH En ' Deshabilita modulo

IF (y.BIT10 = 1) THEN y = y | NegMask ' Guarda 11-bits,palabra con signo


IF (x.BIT10 = 1) THEN x = x | NegMask ' Repite para el otro eje

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 ' Obtiene compensacion eje x


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

RETURN

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) ' Guarda compensaciones de ejes x y y


CompassLowVal DATA (1) ' Guarda indice del angulo mas bajo
CompassCal DATA (16) ' 16 angulos de referencia para brjula

' -----[ Definiciones de Pines ]----------------------------------------------

DinDout PIN 2 ' P6 transmite-recibe de/a Din/Dout


Clk PIN 0 ' P5 envia pulsos al reloj de HM55B
En PIN 1 ' P4 controla EN(ABLE) de HM55B

' -----[ Constantes ]---------------------------------------------------------

Reset CON %0000 ' Comando Reset para el 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 CON 0 ' Indice para arreglo tabular
previous CON 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 VAR Status ' Indice EEPROM


table VAR Byte(2) ' Guarda tabla de valores EEPROM
span VAR x ' Span entre entradas de tabla
angleOffset VAR y ' Compensa entre medido y tabla

' -----[ Inicializacion ]-----------------------------------------------------

DEBUG CLS

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

DO ' Ciclo principal


Chapter 4: El mdulo de brjula Hitachi HM55B Page 141

GOSUB Compass_Get_Axes ' Obtiene valores x y y


GOSUB Compass_Correct_Offsets ' corrige compensacs de ejes
angle = x ATN -y ' Convierte x y y a brads
DEBUG HOME, "x-axis N(-S) = ",SDEC x, ' Despliega ejes corregidos
CLREOL, CR, "y-axis W(-E) = ",
SDEC y, CLREOL
GOSUB Compass_Interpolate ' Interpolacion Lineal
DEBUG CR, CR, "angle = ", ' Muestra angulo interpolado
DEC angle, " brads", CLREOL ' ... en brads
angle = angle */ 361 ' Convierte brads a grados
DEBUG CR,"angle = ", ' Muestra angulo interpolado
DEC angle, " degrees", CLREOL ' ... en grados
PAUSE 150 ' Retraso de Debug para alentar PCs

LOOP ' 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: ' subrutina mdulo de brjula

HIGH En: LOW En ' Enva comando reset a HM55B


SHIFTOUT DinDout,clk,MSBFIRST,[Reset\4]

HIGH En: LOW En ' Comando inicia medicin HM55B


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]
SHIFTIN DinDout,clk,MSBPOST,[Status\4] ' Obten Status
ciclo UNTIL status = Ready ' Fin ciclo si status es listo

SHIFTIN DinDout,clk,MSBPOST,[x\11,y\11] ' Obtiene valores de ejes x & y


HIGH En ' Deshabilita modulo

IF (y.BIT10 = 1) THEN y = y | NegMask ' Guarda 11-bits,palabra con signo


IF (x.BIT10 = 1) THEN x = x | NegMask ' Repite para el otro eje

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 ' Obtiene compensacion eje x


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

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.

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 CON 1 ' Word.bit15 = 1 -> negative
Positive CON 0 ' Word.bit15 = 0 -> positive

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


mCount VAR Nib ' Medicin count
xSum VAR Word ' eje x medicin accumulator
ySum VAR Word ' eje y medicin accumulator
sign VAR Bit ' 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: ' Subrutina modificada

xSum = 0 ' Acumuladores en cero


ySum = 0

FOR mCount = 1 TO 10 ' Toma 10 mediciones

' *** El codigo Original de la subrutina Compass_Get_Axes va aqu ***

xSum = xSum + x ' Mantiene suma en ejecucion de x


ySum = ySum + y ' Mantiene suma en ejecucion de y

NEXT
Chapter 4: El mdulo de brjula Hitachi HM55B Page 145

' Divide xSum


sign = xSum.BIT15 ' Guarda el signo de xSum
xSum = ABS(xSum) ' Toma el valor absoluto
x = xSum / 10 ' x = la medicion promedidada
IF xSum // 10 >=5 THEN x = x + 1 ' fraccion > .5? Redondea
IF sign = Negative THEN x = - x ' Si xSum es negativo, niega x

sign = ySum.BIT15 ' Guarda el signo de ySum


ySum = ABS(ySum) ' Toma el valor absoluto
y = ySum / 10 ' y = la medicion promedidada
IF ySum // 10 >=5 THEN y = y + 1 ' fraccion > .5? Redondea
IF sign = Negative THEN y = - y ' Si ySum es negativo, niega y

RETURN

Division en PBASIC con nmeros negativos


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 PIN 2 ' P2 transmite-recibe a/de Din/Dout


Clk PIN 0 ' P0 manda pulsos al reloj de HM55B
En PIN 1 ' P2 controla pin EN(ABLE) de HM55B

' -----[ Constantes ]---------------------------------------------------------

Reset CON %0000 ' comando Reset de HM55B


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

Negative CON 1 ' Word.bit15 = 1 -> negativo


Positive CON 0 ' Word.bit15 = 0 -> positivo

' -----[ Variables ]----------------------------------------------------------

x VAR Word ' datos del eje x


y VAR Word ' datos del eje y
status VAR Nib ' banderas de Status
angle VAR Word ' Guarda medicion de angulo

mCount VAR Nib ' cuenta de medicion


xSum VAR Word ' acumulador de medicion de eje x
ySum VAR Word ' acumulador de medicion de eje y
sign VAR Bit ' bit de signo

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


Chapter 4: El mdulo de brjula Hitachi HM55B Page 147

DO ' Ciclo principal

GOSUB Compass_Get_Axes ' Obtiene valores de x y y

angle = x ATN -y ' Convierte x y y a brads


angle = angle */ 361 ' Convierte brads a grados

DEBUG HOME, "x-axis N(-S) = ",SDEC x, ' Muestra ejes y grados


CLREOL, CR, "y-axis W(-E) = ",
SDEC y, CLREOL, CR, CR, "angle = ",
DEC angle, " degrees", CLREOL

PAUSE 150 ' Retraso Debug para alentar PC

LOOP ' Repite ciclo principal

' -----[ Subrutina - Compass_Get_Axes ]--------------------------------------

Compass_Get_Axes: ' subrutina modulo de brujula

xSum = 0 ' Acumuladores a cero


ySum = 0

FOR mCount = 1 TO 10 ' Toma 10 mediciones

HIGH En: LOW En ' Manda comando reset a HM55B


SHIFTOUT DinDout,clk,MSBFIRST,[Reset\4]

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

SHIFTIN DinDout,clk,MSBPOST,[x\11,y\11] ' Obtiene valores de ejes x & y


HIGH En ' 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 ' Mantiene una suma en ejecucion de x


ySum = ySum + y ' Mantiene una suma en ejecucion de y

NEXT
Pgina 148 Sensores Inteligentes y sus Aplicaciones

sign = xSum.BIT15 ' Guarda signo de xSum


xSum = ABS(xSum) ' Toma valor absoluto
x = xSum / 10 ' x = la medicion promediada
IF xSum // 10 >=5 THEN x = x + 1 ' fraccion >.5? Redondea arriba
IF sign = Negative THEN x = - x ' Si xSum negativo, niega x

sign = ySum.BIT15 ' Guarda signo de ySum


ySum = ABS(ySum) ' Toma valor absoluto
y = ySum / 10 ' y = la medicion promediada
IF ySum // 10 >=5 THEN y = y + 1 ' fraccion >.5? Redondea arriba
IF sign = Negative THEN y = - y ' Si xSum negativo, niega x

RETURN

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 ' Estabiliza la fuente de energia
SEROUT 14, 84, [22, 12] ' Enciende y limpia la LCD
PAUSE 5 ' retraso de 5 ms para limpiar

SEROUT 14, 84, [255, ' Define caracter personalizado 7


%01000, ' *
%10100, ' * *
%01000, ' *
%00000, '
%00000, '
%00000, '
%00000, '
%00000] '

SEROUT 14, 84, [129, "Heading...", ' Caracteres Estticos


149, "x=",
158, "y="]

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 PIN 2 ' P2 transmite-recibe a/de Din/Dout


Clk PIN 0 ' P0 manda pulsos al reloj de HM55B
En PIN 1 ' P2 controla pin EN(ABLE) de HM55B

' -----[ Constantes ]---------------------------------------------------------

Reset CON %0000 ' comando Reset de HM55B


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

' -----[ Variables ]----------------------------------------------------------

x VAR Word ' datos del eje x


y VAR Word ' datos del eje y
status VAR Nib ' banderas de Status
angle VAR Word ' Guarda medicion de angulo

' -----[ Inicializacion ]-----------------------------------------------------

' Inicializacion de la LCD


PAUSE 200 ' Estabiliza la fuente de energia
SEROUT 14, 84, [22, 12] ' Enciende y limpia la LCD
PAUSE 5 ' retraso de 5 ms para limpiar

SEROUT 14, 84, [255, ' Define caracter personalizado 7


%01000, ' *
%10100, ' * *
%01000, ' *
%00000, '
%00000, '
%00000, '
%00000, '
%00000] '
Chapter 4: El mdulo de brjula Hitachi HM55B Page 157

SEROUT 14, 84, [129, "Heading...", ' Caracteres Estticos


149, "x=",
158, "y="]

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

DO ' Ciclo principal

GOSUB Compass_Get_Axes ' Obtiene valores de x y y

angle = x ATN -y ' Convierte x y y a brads


angle = angle */ 361 ' 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 ' Retraso Debug para alentar PC

LOOP ' Repite ciclo principal

' -----[ Subrutina - Compass_Get_Axes ]--------------------------------------

Compass_Get_Axes: ' subrutina modulo de brujula

HIGH En: LOW En ' Manda comando reset a HM55B


SHIFTOUT DinDout,clk,MSBFIRST,[Reset\4]

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

SHIFTIN DinDout,clk,MSBPOST,[x\11,y\11] ' Obtiene valores de ejes x & y


HIGH En ' 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. = 0 grados a partir del Norte, o debido al Norte.


E2. = 297.3 a partir del Norte.
E3. 1.6 microtesla = 1.6 x 10-6 T = 1600 x 10-9 T = 1600 nanotesla
E4. 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 VAR Word
difference VAR Word
alarmArm VAR Bit

Modifique el ultimo comando SEROUT en la routine de inicializacin:


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

Modifique la rutina principal como se muestra aqu:


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

DO ' Ciclo principal

GOSUB Compass_Get_Axes ' Obtiene valores x y y

angle = x ATN -y ' Convierte x y y a brads


angle = angle */ 361 ' 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 ' Retraso de Debug para alentar PCs

LOOP ' 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} ' Directiva BASIC Stamp


' {$PBASIC 2.5} ' Directiva PBASIC

' -----[ Constantes ]---------------------------------------------------------

Negative CON 1 ' Signo - .bit15 de variables de una palabra


Positive CON 0

' -----[ I/O Definitions ]----------------------------------------------------

DinDout PIN 2 ' P2 transmite-recibe a/de Din/Dout


Clk PIN 0 ' P0 manda pulsos al reloj de HM55B
En PIN 1 ' P2 controla pin EN(ABLE) de HM55B

Reset CON %0000 ' comando Reset de HM55B


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

' -----[ Variables ]----------------------------------------------------------

xTilt VAR Word ' Medicion del eje x mems


yTilt VAR Word ' Medicion del eje y mems

side VAR Word ' dispara variable de subrutina


angleTilt VAR Word ' resultado angulo - grados
sign VAR Bit ' bit de Signo

xCompass VAR Word ' datos del eje x


yCompass VAR Word ' datos del eje y
status VAR Nib ' banderas de Status
angleCompass VAR Word ' 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 ' medicion del eje x


PULSIN 7, 1, yTilt ' 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 ' Obtiene valores de x y y

angleCompass = xCompass ATN -yCompass ' Convierte x y y a brads


angleCompass = angleCompass */ 361 ' Convierte brads a grados

DEBUG CR, "Compass angle = ",


DEC angleCompass, " degrees", CLREOL

PAUSE 150 ' Retraso de Debug para alentar PCs

LOOP ' Repite DO...LOOP

' -----[ 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: ' Subrutina seno inverso


GOSUB Arccosine ' Obtiene coseno inverse
angleTilt = 90 - angleTilt ' sin(angle) = cos(90 - angle)
RETURN

' -----[ 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: ' Subrutina coseno inverso


sign = side.BIT15 ' Salva el signo de side
side = ABS(side) ' Evalua side positivo
angleTilt = 63 - (side / 2) ' Aproximacion inicial de angulo
DO ' Ciclo de aproximacion sucesiva
Chapter 4: El mdulo de brjula Hitachi HM55B Page 165

IF (COS angleTilt <= side) THEN EXIT ' Hecho cuando COS angle <= side
angleTilt = angleTilt + 1 ' Incrementa angulo
ciclo
angleTilt = angleTilt */ 361 ' Convierte brads a grados
IF sign = Negative THEN ' Ajusta si el signo es negativo.
angleTilt = 180 - angleTilt
ENDIF
RETURN

' -----[ Subroutine - Compass_Get_Axes ]------------------------------------

Compass_Get_Axes: ' Subrutina mdulo de brjula

HIGH En: LOW En ' Manda comando reset a HM55B


SHIFTOUT DinDout,clk,MSBFIRST,[Reset\4]

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 5-
2), 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 VAR Word
y VAR Word
temp VAR Byte
Pgina 170 Sensores Inteligentes y sus Aplicaciones

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

DO

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 ' <--- Add


X = x MIN 1 ' <--- Add

DEBUG CRSRXY, x, y, "*"


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 VAR Word
y VAR Word
temp VAR Byte
Captulo 5: Fundamentos de juegos con el Acelermetro Page 173

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

DO

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 ' <--- hasta aqu

DEBUG CRSRXY, 0, 10, "Press any Key..."


DEBUGIN temp

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 ' <--- Agregue

x = (x * 2) + 6
y = 3 - y

DEBUG CRSRXY, 0, 14, "x after: ", SDEC x ' <--- Agregue

DEBUG CRSRXY, x, y, "*"

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 Antes Despus
(3, 1) 3
(-2, -2) -2
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
10
K=
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 Antes Despus
(3, 1) 1
(-2, -2) -2

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 re-
dibujado. 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, ' 0
" 3| ", CR, ' 14
" 2| ", CR, ' 28
" 1| ", CR, ' 42
"------+------", CR, ' 56
"-3-2-1| 1 2 3", CR, ' 70
" -2| ", CR, ' 84
" -3| ", CR, CR ' 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} ' directivas Stamp & PBASIC


'{$PBASIC 2.5}

index VAR Byte ' Variables


character VAR Byte

DATA CLS, ' 0 ' Guarda fondo en EEPROM


" 3| ", CR, ' 14
" 2| ", CR, ' 28
" 1| ", CR, ' 42
"------+------", CR, ' 56
"-3-2-1| 1 2 3", CR, ' 70
" -2| ", CR, ' 84
" -3| ", CR, CR ' 98 + 1 = 99

FOR index = 0 TO 99 ' Recupera y despliega fondo


READ index, character
DEBUG character
NEXT

END

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 VAR Word
y VAR Word

xOld VAR Nib ' <--- Agregue


yOld VAR Nib ' <--- Agregue

temp VAR Byte

(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 ' <--- Agregue


yOld = y ' <--- Agregue

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.

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, ' <--- Agregue


"Current entry: (",
DEC x, ",", DEC y, ")"
DEBUG CRSRXY, 0, 11, ' <--- Agregue
"Previous entry: (",
DEC xOld, ",", DEC yOld, ")"
DEBUG CRSRXY, 0, 12, "Press any Key..." ' <--- Modifique

DEBUGIN temp

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 ' Ve si el asterisco se movio
index = (14 * yOld) + xOld + 1 ' Direccion de caracter de fondo
READ index, character ' Obtiene caracter de fondo
DEBUG CRSRXY, xOld, yOld, character ' Muestra caracter de fondo
ENDIF
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} ' directivas Stamp/PBASIC


'{$PBASIC 2.5}

' -----[ Variables ]-------------------------------------------------------

x VAR Word ' Guarda posicion presente


y VAR Word

xOld VAR Nib ' Guarda posicion previa


yOld VAR Nib
Pgina 186 Sensores Inteligentes y sus Aplicaciones

temp VAR Byte ' Variable tonta para DEBUGIN

index VAR Byte ' READ index/caracter storage


character VAR Byte

' -----[ Datos de EEPROM]-----------------------------------------------------

DATA CLS, ' Datos de fondo


" 3| ", CR, ' 14
" 2| ", CR, ' 28
" 1| ", CR, ' 42
"------+------", CR, ' 56
"-3-2-1| 1 2 3", CR, ' 70
" -2| ", CR, ' 84
" -3| ", CR, CR ' 98 + 1 = 99

' -----[ Inicializacion ]--------------------------------------------------

FOR index = 0 TO 99 ' Despliega fondo


READ index, character
DEBUG character
NEXT

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

DO

xOld = x ' Guarda coordenadas previas


yOld = y

DEBUG "Type X coordinate: " ' Obtiene nuevas coordenadas


DEBUGIN SDEC1 x
DEBUG CR, "Type Y coordinate: "
DEBUGIN SDEC1 y

x = (x * 2) + 6 ' valores Cartesianos a DEBUG


y = 3 - y

DEBUG CRSRXY, x, y, "*" ' Despliega asterisco

IF (x <> xold) y (y <> yold) THEN ' Checa si el asterisco se movio


index = (14 * yOld) + xOld + 1 ' Direccion de caracter de fondo
READ index, character ' Obtiene caracter de fondo
DEBUG CRSRXY, xOld, yOld, character ' Muestra caracter de fondo
ENDIF

DEBUG CRSRXY, 0, 10, "Press any Key..." ' Espera al usuario


DEBUGIN temp
DEBUG CRSRXY, 0, 8, CLRDN ' Limpia informacion vieja

LOOP
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 ' Re-despliega fondo


READ index, character
DEBUG CRSRXY, x, y, character

DEBUG CRSRXY, 0, 8, ' Obtiene nuevas coordenadas


"Type X coordinate: "
DEBUGIN SDEC1 x
DEBUG CR, "Type Y coordinate: "
DEBUGIN SDEC1 y

x = (x * 2) + 6 ' Valores de cartesiano a DEBUG


y = 3 - y

DEBUG CRSRXY, x, y, "*" ' 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
(-3, 0)
Right

Figura 5-12:
Inclinacin del
Acelermetro y
Posicin del
Tilt
(3, 0) Cursor
Left

Tilt
(0, -3)
Down

Tilt
(0, 3)
Up
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} ' Stamp/PBASIC directives


'{$PBASIC 2.5}

' -----[ Datos EEPROM]--------------------------------------------------------

' Guarda fondo en EEPROM ' Direccion del ultimo caracter en el renglon

DATA CLS, ' 0


" 5^Y ", CR, ' 22
" 4| ", CR, ' 44
" 3| ", CR, ' 66
" 2| ", CR, ' 88
" 1| X", CR, ' 110
"----------+--------->", CR, ' 132
"-5-4-3-2-1| 1 2 3 4 5", CR, ' 154
" -2| ", CR, ' 176
" -3| ", CR, ' 198
" -4| ", CR, ' 220
" -5| ", CR ' 242
Pgina 192 Sensores Inteligentes y sus Aplicaciones

' -----[ Variables ]----------------------------------------------------------

x VAR Word ' Guarda posicin presente


y VAR Word

index VAR Word ' READ index/caracter storage


char VAR Byte

' -----[ Inicializacion ]-----------------------------------------------------

FOR index = 0 TO 242 ' Lee y despliega fondo


READ index, char
DEBUG char
NEXT

' -----[ 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 ' Obtiene Ax y Ay
PULSIN 7, 1, y

' Calcula posicion del cursor.


x = (x MIN 1875 MAX 3125) - 1875 ** 1101 ' Calcula posicion x
y = (y MIN 1875 MAX 3125) - 1875 ** 576 ' Calcula posicion y
y = 10 - 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 ' Obtiene Ax y Ay
PULSIN 7, 1, y

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:
' Calcula posicion del cursor.
x = (x MIN 1875 MAX 3125) - 1875 ** 1101 ' Calcula posicion x
y = (y MIN 1875 MAX 3125) - 1875 ** 576 ' Calcula posicion y
y = 10 - 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 nueva posicion del cursor (modificado).
DEBUG CRSRXY, x, y, "*",
CRSRXY, x MAX 19 + 1, y, "*",
CRSRXY, x, y MAX 9 + 1, "*",
CRSRXY, x MIN 1 - 1, y, "*",
CRSRXY, x, y MIN 1 - 1, "*"
PAUSE 50

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

'{$STAMP BS2} ' directivas Stamp/PBASIC


'{$PBASIC 2.5}

' -----[ Datos EEPROM ]-------------------------------------------------------


' Guarda fondo en EEPROM ' 3 fondos usados en el juego

Maze DATA @0, HOME, ' Fondo de laberinto


"#####################", CR,
"###### $ ########", CR,
"## ### ###", CR,
"# ########### ###", CR,
"#$ # ####", CR,
"##### # $ #####WIN", CR,
"# ## ## $ #", CR,
"# $ ########### # #", CR,
"# ##$## # #", CR,
"# ######## #", CR,
"#####################", CR

YouLose DATA @243, HOME, ' Fondo YouLose


"#####################", CR,
"#####################", CR,
"### ####### ####", CR,
"### ####### ####", CR,
"#####################", CR,
Captulo 5: Fundamentos de juegos con el Acelermetro Page 199

"########## ##########", CR,


"#####################", CR,
"### ####", CR,
"### YOU LOSE ####", CR,
"### ####", CR,
"#####################", CR

YouWin DATA @486, HOME, ' Fondo YouWin


" ########### ", CR,
" ################# ", CR,
"##### ##### #####", CR,
"#### ### ####", CR,
"# ### ##### ### #", CR,
"# ############### #", CR,
"## ########### ##", CR,
"## ##", CR,
" #### YOU WIN #### ", CR,
" #### #### ", CR,
" ######### ", CR

' -----[ Variables ]----------------------------------------------------------


x VAR Word ' coordenadas de grafica e inclinacs. x & y
y VAR Word

index VAR Word ' Direccion EEPROM y caracter


char VAR Byte

symbol VAR Word ' Direccion simbolo para EEPROM DATA


points VAR Byte ' Puntaje durante el juego

' -----[ Inicializacion ]-----------------------------------------------------


x = 10 ' Inicia caracter de juego en medio
y = 5

DEBUG CLS ' Limpia pantalla

' Despliega laberinto.


symbol = Maze ' Establece Symbol en laberinto de EEPROM DATA

FOR index = 0 TO 242 ' Despliega laberinto


READ index + symbol, char
DEBUG char
NEXT

' -----[ 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 ' Calcula posicion x


y = (y MIN 1875 MAX 3125) - 1875 ** 576 ' Calcula posicion y
y = 10 - 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, ' Despliega puntaje
"Score: ", DEC3 points

' 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,
"#####################", CR,
"###### $ ########", CR,



YouLose DATA @243, HOME,
"#####################", CR,
"#####################", CR,



YouWin DATA @486, HOME,
" ########### ", CR,
" ################# ", CR,

Verificando Valores Smbolo


Intente comandos como DEBUG DEC YouWin para verificar que YouWin guarda 486.

Dos variables fueron agregadas, symbol para dar seguimiento de qu fondo se recuperan
caracteres y points para dar seguimiento al marcador del jugador.
symbol VAR Word
points VAR 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, ' Despliega puntaje
"Score: ", DEC3 points

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 ' Despliega laberinto
READ index + symbol, char
IF(char = "%") THEN ' <--- Agregue
char = "$" ' <--- Agregue
WRITE index + symbol, char ' <--- Agregue
ENDIF ' <--- Agregue
DEBUG char
NEXT

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 VAR Word ' coordenadas de grafica e inclinacs. x & y
y VAR Word

xOld VAR Word ' <--- Agregue


yOld VAR Word ' <--- Agregue

Agregue lneas de inicializacin para xOld y yOld.


x = 10 ' Inicia caracter de juego en medio
xOld = 10 ' <--- Agregue
y = 5
yOld = 5 ' <--- 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

IF (x > xOld) THEN x = xOld MAX 19 + 1 ' <--- Agregue


IF (x < xOld) THEN x = xOld MIN 1 - 1 ' <--- Agregue

IF (y > yOld) THEN y = yOld MAX 9 + 1 ' <--- Agregue


IF (y < yOld) THEN y = yOld MIN 1 - 1 ' <--- Agregue

' Display asterisco at new posicin.


DEBUG CRSRXY, x, y, "*" ' Despliega asterisco
PAUSE 50 ' Pausa nuevamente por parpadeo

xOld = x ' <--- Agregue


yOld = y ' <--- Agregue

' Despliega puntaje

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. Dispositivo de interface humana (en ingls Human interface device).
Q2. CLRDN.
Q3. DEBUGIN DEC1 x.
Q4. 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| ", CR,
" 1| ", CR,
"----+----", CR,
"-2-1| 1 2", CR,
" -2| ", 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 VAR Byte
y VAR 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.

opposite
tan =
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
= (10 m )(1.804 )
= 18.04

object height = opposite + accelerome ter height


= 18.04 m + 1.5 m
= 19.54 m

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 DATA (10)
RecordsEnd DATA

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
00 00 00 00 00 00 00 00 00 00 00 00
Contents
Addresses 0 1 2 3 4 5 6 7 8 9 10 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
Figura 6-2
Introduciendo valores
para
EepromDataStorage.
Receive bs2
Windowpane

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 DATA (10)


RecordsEnd DATA

' -----[ Variables ]----------------------------------------------------------

char VAR Byte


eeIndex VAR Word
value VAR 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 DATA 0
Records DATA (10)
RecordsEnd DATA

' -----[ Variables ]----------------------------------------------------------

char VAR Byte


eeIndex VAR Word
value VAR 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 DATA 0
Records DATA (1000)
RecordsEnd DATA

' -----[ Variables ]----------------------------------------------------------

char VAR Byte


eeIndex VAR Word
value VAR Word
x VAR value
y VAR 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 angle ",
CR, "----- ------",
CR

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.

Accelerate
Decelerate
Backward
RC Car Forw ard and Backw ard

30

20

10
Figura 6-5
gravity/100

0
0 50 100 150 200 250 300 Mediciones del eje y del
-10
Acelermetro en el Carro
-20 RC
-30
Stop
-40
seconds/30

Decelerate
Accelerate
Forward

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 Straighten


Circles Out
RC Car Left then Right

60

40

20 Figura 6-8
0 Mediciones del
gravity/100

-20
0 100 200 300 400 500 600
Acelermetro en el Carro
-40 RC mientras se maneja
-60 en crculos
-80

-100
seconds/30

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
f
2.5

1.5
gravity (g)

1 Figura 6-15
0.5 Aceleracin durante un
0
170 190 210 230 250 270
Ollie
-0.5

-1

-1.5
tim e (m s)

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

2.5 f
2

1.5

gravity, (g)
1 Figura 6-16
0.5 Grfica de un Ollie
0
775 795 815 835 855 875
ligeramente mejor
-0.5

-1

-1.5
tim e (ms)

a, b c, d
e

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 DATA 0
Records DATA (1000)
RecordsEnd DATA

' -----[ Variables ]----------------------------------------------------------

char VAR Byte


eeIndex VAR Word
value VAR Word
x VAR value
y VAR 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 x-axis y-axis",


CR, "----- ------ ------",
CR

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 6-
18. 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 VAR Word
y VAR Word
counter VAR Word

DEBUG CLS

DO

DO UNTIL y > 2650


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

1.5

0.5
gravity, g

0
0 100 200 300 400 500 600 700 800 900 1000
-0.5

-1

-1.5

-2
tim e, m s

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.
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 DATA 0
Records DATA (1000)
RecordsEnd DATA

' -----[ Variables ]----------------------------------------------------------

char VAR Byte


eeIndex VAR Word
value VAR Word
x VAR value
y VAR 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 ' Estabiliza la fuente de energia


SEROUT 14, 84, [22, 12] ' Inicia LCD & limpia la pantalla
PAUSE 5 ' Pausa 5 ms para limpiar pantalla

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
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.
.
.
.
Char4 DATA %11111, ' * * * * *
%00011, ' 0 0 0 * *
%11011, ' * * 0 * *
%11011, ' * * 0 * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111 ' * * * * *
.
.
.
Char9 DATA %11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11011, ' * * 0 * *
%11011, ' * * 0 * *
%11000, ' * * 0 0 0
%11111 ' * * * * *
.
.
.
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} ' Dispositivo Objeto = BASIC Stamp 2


' {$PBASIC 2.5} ' Lenguaje = PBASIC 2.5

' -----[ Datos EEPROM]--------------------------------------------------------

Char0 DATA %11111, ' * * * * *


%01111, ' 0 * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 265

%11111 ' * * * * *

Char1 DATA %11111, ' * * * * *


%00111, ' 0 0 * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111 ' * * * * *

Char2 DATA %11111, ' * * * * *


%00011, ' 0 0 0 * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111 ' * * * * *

Char3 DATA %11111, ' * * * * *


%00011, ' 0 0 0 * *
%11011, ' * * 0 * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111 ' * * * * *

Char4 DATA %11111, ' * * * * *


%00011, ' 0 0 0 * *
%11011, ' * * 0 * *
%11011, ' * * 0 * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111 ' * * * * *

Char5 DATA %11111, ' * * * * *


%10011, ' * 0 0 * *
%11011, ' * * 0 * *
%11011, ' * * 0 * *
%11011, ' * * 0 * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111 ' * * * * *

Char6 DATA %11111, ' * * * * *


%11011, ' * * 0 * *
%11011, ' * * 0 * *
%11011, ' * * 0 * *
Pgina 266 Sensores Inteligentes y sus Aplicaciones

%11011, ' * * 0 * *
%11011, ' * * 0 * *
%11111, ' * * * * *
%11111 ' * * * * *

Char7 DATA %11111, ' * * * * *


%11111, ' * * * * *
%11011, ' * * 0 * *
%11011, ' * * 0 * *
%11011, ' * * 0 * *
%11011, ' * * 0 * *
%11011, ' * * 0 * *
%11111 ' * * * * *

Char8 DATA %11111, ' * * * * *


%11111, ' * * * * *
%11111, ' * * * * *
%11011, ' * * 0 * *
%11011, ' * * 0 * *
%11011, ' * * 0 * *
%11001, ' * * 0 0 *
%11111 ' * * * * *

Char9 DATA %11111, ' * * * * *


%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11011, ' * * 0 * *
%11011, ' * * 0 * *
%11000, ' * * 0 0 0
%11111 ' * * * * *

Char10 DATA %11111, ' * * * * *


%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11011, ' * * 0 * *
%11000, ' * * 0 0 0
%11111 ' * * * * *

Char11 DATA %11111, ' * * * * *


%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11000, ' * * 0 0 0
%11111 ' * * * * *

Char12 DATA %11111, ' * * * * *


Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 267

%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11100, ' * * * 0 0
%11111 ' * * * * *

Char13 DATA %11111, ' * * * * *


%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11110, ' * * * * 0
%11111 ' * * * * *

Char14 DATA %11111, ' * * * * *


%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111 ' * * * * *

' -----[ Pines E/S]-----------------------------------------------------------

LcdPin PIN 14 ' pin E/S conectado a RX de la LCD

' -----[ Constantes ]---------------------------------------------------------

T9600 CON 84 ' True, 8-bits, no parity, 9600

LcdCls CON 12 ' Form feed -> limpia pantalla


LcdCr CON 13 ' Retorno de carro
LcdOff CON 21 ' Apaga la pantalla
LcdOn CON 22 ' Enciende la pantalla
Line0 CON 128 ' Linea 0, caracter 0
Line1 CON 148 ' Linea 1, caracter 0
Define CON 248 ' direccion define caract pers 0

' -----[ Variables ]----------------------------------------------------------

custChar VAR Nib ' selector de carcter personalizado


index VAR Nib ' variable indice Eeprom
charBase VAR Byte ' Caracter base para READ
dotLine VAR Byte ' linea punteada de 5-pixel
cursor VAR Nib ' Colocacion de Cursor
counter VAR Nib ' variable de conteo ciclo ppal.
line VAR Byte ' Linea0 o Linea1
Pgina 268 Sensores Inteligentes y sus Aplicaciones

' -----[ Inicializacin ]-----------------------------------------------------

PAUSE 100 ' Estabiliza fuente de poder


SEROUT LcdPin, T9600, [LcdOn, LcdCls] ' Inicializa LCD
PAUSE 5 ' 5 ms retraso para limpiar pantalla

custChar = 2 ' Selecc caracter personalizado 2


line = Line0 ' BarGraph en Linea 0.

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

DO ' Ciclo Principal

FOR charBase = Char0 TO Char14 STEP 8 ' Va los 10 caracteres personal.


GOSUB Def_Cust_Char ' Define el caracter
cursor = 7 ' Coloca the cursor
GOSUB Disp_Cust_Char ' Imprime el caracter
PAUSE 200 '- charBase ' charbase mayor - pausa menor
NEXT ' Repite FOR charbase...

PAUSE 1000 ' Pausa 1 segundo

LOOP ' 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 caracter personalizado
[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

' -----[ 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, ' Define caracter personalizado


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

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.

' {$STAMP BS2} ' Dispositivo Objeto = BASIC Stamp 2


' {$PBASIC 2.5} ' Lenguaje = 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 CON 84 ' True, 8-bits, no parity, 9600

LcdCls CON 12 ' Form feed -> limpia pantalla


LcdCr CON 13 ' Retorno de carro
LcdOff CON 21 ' Apaga la pantalla
LcdOn CON 22 ' Enciende la pantalla
Line0 CON 128 ' Linea 0, caracter 0
Line1 CON 148 ' Linea 1, caracter 0
Define CON 248 ' direccion define caract pers 0

' -----[ Variables ]----------------------------------------------------------

custChar VAR Nib ' selector de carcter personalizado


index VAR Nib ' variable indice Eeprom
dotLine VAR Byte ' linea punteada de 5-pixel
cursor VAR Nib ' Colocacion de Cursor
value VAR Byte ' Valor a ser graficado
charCnt VAR Byte ' variable para conteo Caracter
line VAR Byte ' Linea0 o Linea1

' -----[ inicializacin ]-----------------------------------------------------

PAUSE 100 ' Estabiliza fuente de poder


SEROUT LcdPin, T9600, [LcdOn, LcdCls] ' Initializa LCD
PAUSE 5 ' 5 ms retraso para limpiar pantalla

custChar = 3 ' Selecciona caracter personalizado 3


dotLine = %11111 ' Oscurece todos los pixeles en cada linea
GOSUB Def_Horiz_Bar_Char ' Subrutina define Caracter

line = Line0 ' BarGraph en Linea 0.

DEBUG "Enter valores (0 to 80)", CR

' -----[ Main Rutina ]-------------------------------------------------------

DO ' Ciclo Principal

DEBUG ">"
DEBUGIN DEC value ' Valor en ventana de Transmision
GOSUB Bar_Graph ' Despliega como grafica de barra

LOOP ' 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 ' valor Limite - 0 a 80


charCnt = value / 5 ' nmero de barras negras
custChar = 3 ' Escoge caracter pers. negro

IF charCnt > 0 THEN ' Si escribe barras negras


FOR cursor = 0 TO charCnt - 1 ' Escribe charCnt - 1 barras negras
GOSUB Disp_Cust_Char ' Escribe la barra negra
NEXT
ENDIF

' 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 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
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, ' Escribe caracter personalizado


[line + cursor, custChar]
RETURN

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 ' Selecciona caracter personalizado 3
dotLine = %11111 ' Oscurece todos los pixeles en cada linea
GOSUB Def_Horiz_Bar_Char ' Subrutina define Caracter

line = Line0 ' BarGraph en Linea 0.

DEBUG "Enter valores (0 to 80)", CR

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 ' Ciclo Principal

DEBUG ">"
DEBUGIN DEC value ' Valor en ventana de Transmision
GOSUB Bar_Graph ' Despliega como grafica de barra

LOOP ' 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 ' valor Limite - 0 to 80


charCnt = value / 5 ' nmero de barras negras
custChar = 3 ' Escoge caracter pers. negro

IF charCnt > 0 THEN ' Si escribe barras negras


FOR cursor = 0 TO charCnt - 1 ' Escribe charCnt - 1 barras negras
GOSUB Disp_Cust_Char ' Escribe la barra negra
NEXT
ENDIF

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 ' 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

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 ' Ciclo Principal

PULSOUT 15, 5
PULSIN 15, 1, time

cmDistance = CmConstant ** time

DEBUG HOME, DEC3 cmDistance, " cm"

value = cmDistance

GOSUB Bar_Graph ' Despliega como grafica de barra

PAUSE 100

LOOP ' Repite 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.

' {$STAMP BS2} ' Dispositivo Objeto = BASIC Stamp 2


' {$PBASIC 2.5} ' Lenguaje = PBASIC 2.5

' -----[ Pins E/S]-----------------------------------------------------------

LcdPin PIN 14 ' pin E/S conectado a RX de la LCD

' -----[ Constants ]----------------------------------------------------------

T9600 CON 84 ' True, 8-bits, no parity, 9600

LcdCls CON 12 ' Form feed -> limpia pantalla


LcdOn CON 22 ' Enciende la pantalla
Line0 CON 128 ' Linea 0, caracter 0
Line1 CON 148 ' Linea 1, caracter 0
Define CON 248 ' direccion define caract pers 0

' -----[ Variables ]----------------------------------------------------------

custChar VAR Byte ' selector de carcter personalizado


index VAR Nib ' variable indice Eeprom
rowMap VAR Byte ' linea punteada de 5-pixel
cursor VAR Byte ' Colocacion de Cursor
value VAR Byte ' Valor a ser graficado
line VAR Byte ' Linea0 o Linea1

' -----[ Inicializacin ]-----------------------------------------------------

' LCD initializiation.


PAUSE 100 ' Estabiliza fuente de poder
Pgina 284 Sensores Inteligentes y sus Aplicaciones

SEROUT LcdPin, T9600, [LcdOn, LcdCls] ' Inicializa LCD


PAUSE 5 ' 5 ms retraso para limpiar pantalla

' subrutina valores Caracter personalizado.


custChar = 3 ' Use caracter personalizado 3
line = Line0 ' Cursor a Linea0
cursor = 7 ' Cursor a 8avo caracter

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

DO ' Ciclo Principal

FOR value = 0 TO 16 ' value cuenta de 0 a 16


DEBUG ? value ' Muestra value en Terminal de Depuracin
GOSUB Def_Vert_Bar_Char ' Define caracter de grafica de barra
GOSUB Disp_Cust_Char ' Muestra caracter en la LCD
PAUSE 50 ' Hace lento al ciclo
NEXT

DEBUG CR, CR ' espacios antes sig. secuencia


PAUSE 500 ' Retraso antes sig. secuencia

LOOP ' 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, ' Escribe caracter personalizado
[line + cursor, custChar]
RETURN

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} ' Dispositivo Objeto = BASIC Stamp 2


' {$PBASIC 2.5} ' Lenguaje = PBASIC 2.5

' -----[ Pins E/S]-----------------------------------------------------------

LcdPin PIN 14 ' pin E/S conectado a RX de la LCD

' -----[ Constants ]----------------------------------------------------------

T9600 CON 84 ' True, 8-bits, no parity, 9600

LcdCls CON 12 ' Form feed -> limpia pantalla


LcdCr CON 13 ' Retorno de carro
LcdOff CON 21 ' Apaga la pantalla
LcdOn CON 22 ' Enciende la pantalla
Line0 CON 128 ' Linea 0, caracter 0
Line1 CON 148 ' Linea 1, caracter 0
Define CON 248 ' direccion define caract pers 0
Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 289

' -----[ Variables ]----------------------------------------------------------

custChar VAR Byte ' selector de carcter personalizado


index VAR Nib ' variable indice Eeprom
rowMap VAR Byte ' linea punteada de 5-pixel
cursor VAR Byte ' Colocacion de Cursor
value VAR Byte ' Valor a ser graficado
line VAR Byte ' Linea0 or Linea1

' -----[ Inicializacin ]-----------------------------------------------------

PAUSE 100 ' Estabiliza fuente de poder


SEROUT LcdPin, T9600, [LcdOn, LcdCls] ' Inicializa LCD
PAUSE 5 ' 5 ms retraso para limpiar pantalla

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

DO ' Ciclo Principal

DEBUG "Enter horizontal", ' Pide posicion de caracter


CR, "value (0 TO 16)"
DEBUGIN DEC cursor ' Obtiene posicion de caracter
DEBUG "Enter vertical",
CR, "value (1 TO 31)" ' Pide al usuario valor
DEBUGIN DEC value ' Obtiene valor
GOSUB Bar_Graph_H_V ' Llama a Bar_Graph_H_V

LOOP ' 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] ' Limpia trazado previo


PAUSE 5 ' 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 ' Define caracter personalizado


GOSUB Horizontal_Placement

IF value = 16 THEN ' Caso especial: value = 16

value = 1 ' Linea 0 display


custChar = 2
Pgina 290 Sensores Inteligentes y sus Aplicaciones

GOSUB Def_Vert_Bar_Char
line = Line0
GOSUB Horizontal_Placement

value = 15 ' Linea 1 Display


custChar = 3
GOSUB Def_Vert_Bar_Char
line = Line1
GOSUB Horizontal_Placement

value = 16 ' Restaura value

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:
Captulo 7: Grficos de Barra en LCD para Distancias e inclinaciones Page 291

SELECT cursor ' Cursor 0 a 7, sin cambios


CASE 0 TO 7
GOSUB Disp_Cust_Char
CASE 8 ' Cursor 8, despliega en 7 & 8
cursor = 7
GOSUB Disp_Cust_Char
cursor = 8
GOSUB Disp_Cust_Char
CASE 9 TO 16 ' Cursor 9 a 16, despliega 1 izq
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.

Disp_Cust_Char:

SEROUT LcdPin, T9600, ' Escribe caracter personalizado


[line + cursor, custChar]
RETURN

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 VAR Word ' eje x del Acelermetro
y VAR Word ' 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 ' Ciclo Principal

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

value = (x MIN 1875 MAX 3125) - 1875 ** 1625 + 1


cursor = 16 - ((y MIN 1875 MAX 3125) - 1875 ** 891)

GOSUB Bar_Graph_H_V ' Llama a Bar_Graph_H_V

LOOP ' 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 un caracter


personalizado con ciertas columnas negras?
5. Qu es lo que hace la instruccin IF rowMap.LOWBIT(index) = 1 THEN... do
en TestVerticalBars.bs2?
6. Porqu puede usar solo un byte en vez de 8 para definir un caracter
personalizado con ciertas columnas negras?
7. Qu es lo que hace la instruccin IF rowMap.LOWBIT(index) = 1 THEN... do
en el programa TestVerticalBars.bs2?

Ejercicios
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 ' Ciclo Principal

PULSOUT 15, 5
PULSIN 15, 1, time

cmDistance = CmConstant ** time

DEBUG HOME, DEC3 cmDistance, " cm"

value = cmDistance

GOSUB Bar_Graph ' Despliega como grfica de barra

SEROUT 14, 84, [Line1, DEC4 value, ' Despliega medicin cm


" cm"] ' en Linea 1

PAUSE 100

LOOP ' Repite 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 **.

' {$STAMP BS2} ' Dispositivo Objeto = BASIC Stamp 2


' {$PBASIC 2.5} ' Lenguaje = PBASIC 2.5

' -----[ Pines E/S]-----------------------------------------------------------

LcdPin PIN 14 ' pin E/S conectado a RX de la LCD

' -----[ Constants ]----------------------------------------------------------

T9600 CON 84 ' True, 8-bits, no parity, 9600

LcdCls CON 12 '


Form feed -> limpia pantalla
LcdCr CON 13 '
Retorno de carro
LcdOff CON 21 '
Apaga la pantalla
LcdOn CON 22 '
Enciende la pantalla
Line0 CON 128 '
Linea 0, caracter 0
Line1 CON 148 '
Linea 1, caracter 0
Define CON 248 '
direccion define caract pers 0
Negative CON 1 ' Signo - .bit15 de variables de palabra
Positive CON 0

' -----[ Variables ]----------------------------------------------------------

custChar VAR Byte ' selector de carcter personalizado


index VAR Nib ' variable indice Eeprom
rowMap VAR Byte ' linea punteada de 5-pixel
cursor VAR Byte ' Colocacion de Cursor
value VAR Byte ' Valor a ser graficado
line VAR Byte ' Linea0 or Linea1
x VAR Word
y VAR Word
sine VAR Word ' seno en circulo r = 127
side VAR Word ' variable para disparo de subrutinas
angle VAR Word ' resultado angulo - grados
sign VAR Bit ' 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 ' Ciclo Principal

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)

GOSUB Bar_Graph_H_V ' Llama Bar_Graph_H_V

LOOP ' 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] ' Limpia trazado previo


PAUSE 5 ' 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 ' Define caracter personalizado


GOSUB Horizontal_Placement

IF value = 16 THEN ' Caso especial: value = 16


Pgina 300 Sensores Inteligentes y sus Aplicaciones

value = 1 ' Despiega Linea 0


custChar = 2
GOSUB Def_Vert_Bar_Char
line = Line0
GOSUB Horizontal_Placement

value = 15 ' Despiega Linea 1


custChar = 3
GOSUB Def_Vert_Bar_Char
line = Line1
GOSUB Horizontal_Placement

value = 16 ' Restaura value

ENDIF

RETURN

' -----[ 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 ' Cursor 0 a 7, sin cambios


CASE 0 TO 7
GOSUB Disp_Cust_Char
CASE 8 ' Cursor 8, despliega en 7 & 8
cursor = 7
GOSUB Disp_Cust_Char
cursor = 8
GOSUB Disp_Cust_Char
CASE 9 TO 16 ' Cursor 9 a 16, despliega 1 izq
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.

Disp_Cust_Char:

SEROUT LcdPin, T9600, ' Escribe caracter personalizado


[line + cursor, custChar]
RETURN

' -----[ 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: ' Subrutina Seno Inverso


GOSUB Arccosine ' Obtiene coseno inverso
angle = 90 - angle ' sin(angle) = cos(90 - angle)
RETURN

' -----[ 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: ' Subrutina Inverso coseno


sign = side.BIT15 ' Guarda el signo de side
Pgina 302 Sensores Inteligentes y sus Aplicaciones

side = ABS(side) ' Evalua side positivo


angle = 63 - (side / 2) ' aproximacion inicial al angulo
DO ' Ciclo de approximation sucesiva
IF (COS angle <= side) THEN EXIT ' Hecho cuando COS angle <= side
angle = angle + 1 ' Mantiene incrementando angulo
LOOP
angle = angle */ 361 ' Convierte brads a grados
IF sign = Negative THEN angle = 180 - angle' Ajusta si el signo es negativo.
RETURN
Apndice A: Tabla de caracteres ASCII Page 303

Apndice A: Tabla de caracteres ASCII

Tabla ASCII (primeros 128 caracteres)


Dec Hex Char Nombre / Funcin Dec Hex Char Dec Hex Char Dec Hex Char
0 00 NUL Null 32 20 space 64 40 @ 96 60 `
1 01 SOH Start Of Heading 33 21 ! 65 41 A 97 61 a
2 02 STX Start Of Text 34 22 " 66 42 B 98 62 b
3 03 ETX End Of Text 35 23 # 67 43 C 99 63 c
4 04 EOT End Of Transmit 36 24 $ 68 44 D 100 64 d
5 05 ENQ Enquiry 37 25 % 69 45 E 101 65 e
6 06 ACK Acknowledge 38 26 & 70 46 F 102 66 f
7 07 BEL Bell 39 27 ' 71 47 G 103 67 g
8 08 BS Backspace 40 28 ( 72 48 H 104 68 h
9 09 HT Horizontal Tab 41 29 ) 73 49 I 105 69 i
10 0A LF Line Feed 42 2A * 74 4A J 106 6A j
11 0B VT Vertical Tab 43 2B + 75 4B K 107 6B k
12 0C FF Form Feed 44 2C , 76 4C L 108 6C l
13 0D CR Carriage Return 45 2D - 77 4D M 109 6D m
14 0E SO Shift Out 46 2E . 78 4E N 110 6E n
15 0F SI Shift In 47 2F / 79 4F O 111 6F o
16 10 DLE Data Line Escape 48 30 0 80 50 P 112 70 p
17 11 DC1 Device Control 1 49 31 1 81 51 Q 113 71 q
18 12 DC2 Device Control 2 50 32 2 82 52 R 114 72 r
19 13 DC3 Device Control 3 51 33 3 83 53 S 115 73 s
20 14 DC4 Device Control 4 52 34 4 84 54 T 116 74 t
21 15 NAK Non Acknowledge 53 35 5 85 55 U 117 75 u
22 16 SYN Synchronous Idle 54 36 6 86 56 V 118 76 v
23 17 ETB End Transmit Block 55 37 7 87 57 W 119 77 w
24 18 CAN Cancel 56 38 8 88 58 X 120 78 x
25 19 EM End Of Medium 57 39 9 89 59 Y 121 79 y
26 1A SUB Substitute 58 3A : 90 5A Z 122 7A z
27 1B ESC Escape 59 3B ; 91 5B [ 123 7B {
28 1C FS File Separator 60 3C < 92 5C \ 124 7C |
29 1D GS Group Separator 61 3D = 93 5D ] 125 7D }
30 1E RS Record Separator 62 3E > 94 5E ^ 126 7E ~
31 1F US Unit Separator 63 3F ? 95 5F _ 127 7F 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 General: info@parallax.com


Rocklin, California 95765, USA Tcnico: support@parallax.com
Office: (916) 624-8333 Web Site: www.parallax.com
Fax: (916) 624-8003 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 Voltaje Corriente


Todos los modelos, luz de fondo apagada 5 VDC 20 mA
Luz de fondo encendida 27977 / 27979 5 VDC 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 Descripcin
Tipo de pantalla LCD STN, YG, positive, transflective
Direccin de observacin 6H
Luz de fondo YG LED
Temperatura de Operacin -4F~158F (-20C~70C)
Temperatura de almacenaje -22F~176F (-30C~80C)
Tolerancia dimensional .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 SW1 SW2


Test OFF OFF
2,400 ON OFF
9,600 OFF ON
19.200 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 CON 0
Baud19200 CON 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 CON 0
Baud19200 CON 32

HIGH TxPin ' Establece pin en alto para ser un puerto serial
PAUSE 100 ' Pausa para que LCD Serial inicialize

SEROUT TxPin, Baud19200, [250] ' Define caracter personalizado 2


' Ahora envia los 8 bytes de datos
SEROUT TxPin, Baud19200, [0] ' 0 = %00000
SEROUT TxPin, Baud19200, [4] ' 4 = %00100 *
SEROUT TxPin, Baud19200, [14] ' 14 = %01110 * * *
SEROUT TxPin, Baud19200, [31] ' 31 = %11111 * * * * *
SEROUT TxPin, Baud19200, [14] ' 14 = %01110 * * *
SEROUT TxPin, Baud19200, [4] ' 4 = %00100 *
SEROUT TxPin, Baud19200, [0] ' 0 = %00000
SEROUT TxPin, Baud19200, [0] ' 0 = %00000
SEROUT TxPin, Baud19200, [2] ' Despliega el nuevo caracter personalizado 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 Hex Accin


0 00 Despliega el caracter personalizado 0
1 01 Despliega el caracter personalizado 1
2 02 Despliega el caracter personalizado 2
3 03 Despliega el caracter personalizado 3
4 04 Despliega el caracter personalizado 4
5 05 Despliega el caracter personalizado 5
6 06 Despliega el caracter personalizado 6
7 07 Despliega el caracter personalizado 7
Backspace / Left - El cursor es movido una posicin a la izquierda. El comando no
8 08
borra el caracter.
Right - El cursor es movido una posicin a la derecha. El comando no borra el
9 09
caracter.
Line Feed - El cursor es movido hacia abajo una lnea. Para los modelos LCD de 2
10 0A 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.
11 0B N/A
Form Feed - El cursor es movido a la posicin 0 en la lnea 0 y toda la pantalla es
12 0C
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
13 0D
posicin 0 en la linea 1. Si est en la lnea 1 se ajusta a la posicin 0 en la lnea 0.
14 - 16 0E - 10 N/A
17 11 Enciende la pantalla (solo los modelos 27977, 27979)
18 12 Apaga la pantalla (Default)
19 - 20 13 - 14 N/A
21 15 Apaga la pantalla
22 16 Enciende la pantalla, con cursor apagado y sin parpadeo
23 17 Enciende la pantalla, con cursor apagado y con parpaedo de caracter
24 18 Enciende la pantalla, con cursor encendido y sin parpadeo (Default)
25 19 Turn the display on, con cursor encendido y con parpaedo de caracter
26 - 31 1A - 1F N/A
32 - 127 20 - 7F Despliega caracteres ASCII. Vea la tabla de juego de caracteres ASCII.
128 80 Mueve el cursor a la lnea 0, posicin 0
129 81 Mueve el cursor a la lnea 0, posicin 1
130 82 Mueve el cursor a la lnea 0, posicin 2
131 83 Mueve el cursor a la lnea 0, posicin 3
132 84 Mueve el cursor a la lnea 0, posicin 4
133 85 Mueve el cursor a la lnea 0, posicin 5
134 86 Mueve el cursor a la lnea 0, posicin 6
Pgina 314 Sensores Inteligentes y sus Aplicaciones

Dec Hex Action


135 87 Mueve el cursor a la lnea 0, posicin 7
136 88 Mueve el cursor a la lnea 0, posicin 8
137 89 Mueve el cursor a la lnea 0, posicin 9
138 8A Mueve el cursor a la lnea 0, posicin 10
139 8B Mueve el cursor a la lnea 0, posicin 11
140 8C Mueve el cursor a la lnea 0, posicin 12
141 8D Mueve el cursor a la lnea 0, posicin 13
142 8E Mueve el cursor a la lnea 0, posicin 14
143 8F Mueve el cursor a la lnea 0, posicin 15
144 90 Mueve el cursor a la lnea 0, posicin 16 (solo el modelo 27979)
145 91 Mueve el cursor a la lnea 0, posicin 17 (solo el modelo 27979)
146 92 Mueve el cursor a la lnea 0, posicin 18 (solo el modelo 27979)
147 93 Mueve el cursor a la lnea 0, posicin 19 (solo el modelo 27979)
148 94 Mueve el cursor a la lnea 1, posicin 0
149 95 Mueve el cursor a la lnea 1, posicin 1
150 96 Mueve el cursor a la lnea 1, posicin 2
151 97 Mueve el cursor a la lnea 1, posicin 3
152 98 Mueve el cursor a la lnea 1, posicin 4
153 99 Mueve el cursor a la lnea 1, posicin 5
154 9A Mueve el cursor a la lnea 1, posicin 6
155 9B Mueve el cursor a la lnea 1, posicin 7
156 9C Mueve el cursor a la lnea 1, posicin 8
157 9D Mueve el cursor a la lnea 1, posicin 9
158 9E Mueve el cursor a la lnea 1, posicin 10
159 9F Mueve el cursor a la lnea 1, posicin 11
160 A0 Mueve el cursor a la lnea 1, posicin 12
161 A1 Mueve el cursor a la lnea 1, posicin 13
162 A2 Mueve el cursor a la lnea 1, posicin 14
163 A3 Mueve el cursor a la lnea 1, posicin 15
164 A4 Mueve el cursor a la lnea 1, posicin 16 (solo el modelo 27979)
165 A5 Mueve el cursor a la lnea 1, posicin 17 (solo el modelo 27979)
166 A6 Mueve el cursor a la lnea 1, posicin 18 (solo el modelo 27979)
167 A7 Mueve el cursor a la lnea 1, posicin 19 (solo el modelo 27979)
168 A8 Mueve el cursor a la lnea 2, posicin 0 (solo el modelo 27979)
169 A9 Mueve el cursor a la lnea 2, posicin 1 (solo el modelo 27979)
170 AA Mueve el cursor a la lnea 2, posicin 2 (solo el modelo 27979)
171 AB Mueve el cursor a la lnea 2, posicin 3 (solo el modelo 27979)
172 AC Mueve el cursor a la lnea 2, posicin 4 (solo el modelo 27979)
173 AD Mueve el cursor a la lnea 2, posicin 5 (solo el modelo 27979)
174 AE Mueve el cursor a la lnea 2, posicin 6 (solo el modelo 27979)
175 AF Mueve el cursor a la lnea 2, posicin 7 (solo el modelo 27979)
176 B0 Mueve el cursor a la lnea 2, posicin 8 (solo el modelo 27979)
177 B1 Mueve el cursor a la lnea 2, posicin 9 (solo el modelo 27979)
178 B2 Mueve el cursor a la lnea 2, posicin 10 (solo el modelo 27979)
179 B3 Mueve el cursor a la lnea 2, posicin 11 (solo el modelo 27979)
180 B4 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 Hex Action


181 B5 Mueve el cursor a la lnea 2, posicin 13 (solo el modelo 27979)
182 B6 Mueve el cursor a la lnea 2, posicin 14 (solo el modelo 27979)
183 B7 Mueve el cursor a la lnea 2, posicin 15 (solo el modelo 27979)
184 B8 Mueve el cursor a la lnea 2, posicin 16 (solo el modelo 27979)
185 B9 Mueve el cursor a la lnea 2, posicin 17 (solo el modelo 27979)
186 BA Mueve el cursor a la lnea 2, posicin 18 (solo el modelo 27979)
187 BB Mueve el cursor a la lnea 2, posicin 19 (solo el modelo 27979)
188 BC Mueve el cursor a la lnea 3, posicin 0 (solo el modelo 27979)
189 BD Mueve el cursor a la lnea 3, posicin 1 (solo el modelo 27979)
190 BE Mueve el cursor a la lnea 3, posicin 2 (solo el modelo 27979)
191 BF Mueve el cursor a la lnea 3, posicin 3 (solo el modelo 27979)
192 C0 Mueve el cursor a la lnea 3, posicin 4 (solo el modelo 27979)
193 C1 Mueve el cursor a la lnea 3, posicin 5 (solo el modelo 27979)
194 C2 Mueve el cursor a la lnea 3, posicin 6 (solo el modelo 27979)
195 C3 Mueve el cursor a la lnea 3, posicin 7 (solo el modelo 27979)
196 C4 Mueve el cursor a la lnea 3, posicin 8 (solo el modelo 27979)
197 C5 Mueve el cursor a la lnea 3, posicin 9 (solo el modelo 27979)
198 C6 Mueve el cursor a la lnea 3, posicin 10 (solo el modelo 27979)
199 C7 Mueve el cursor a la lnea 3, posicin 11 (solo el modelo 27979)
200 C8 Mueve el cursor a la lnea 3, posicin 12 (solo el modelo 27979)
201 C9 Mueve el cursor a la lnea 3, posicin 13 (solo el modelo 27979)
202 CA Mueve el cursor a la lnea 3, posicin 14 (solo el modelo 27979)
203 CB Mueve el cursor a la lnea 3, posicin 15 (solo el modelo 27979)
204 CC Mueve el cursor a la lnea 3, posicin 16 (solo el modelo 27979)
205 CD Mueve el cursor a la lnea 3, posicin 17 (solo el modelo 27979)
206 CE Mueve el cursor a la lnea 3, posicin 18 (solo el modelo 27979)
207 CF Mueve el cursor a la lnea 3, posicin 19 (solo el modelo 27979)
208 - 247 D0 F7 N/A
248 F8 Define caracter personalizado 0. 8 bytes de datos deben seguir al comando.
249 F9 Define caracter personalizado 1. 8 bytes de datos deben seguir al comando.
250 FA Define caracter personalizado 2. 8 bytes de datos deben seguir al comando.
251 FB Define caracter personalizado 3. 8 bytes de datos deben seguir al comando.
252 FC Define caracter personalizado 4. 8 bytes de datos deben seguir al comando.
253 FD Define caracter personalizado 5. 8 bytes de datos deben seguir al comando.
254 FE Define caracter personalizado 6. 8 bytes de datos deben seguir al comando.
255 FF 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
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
10
Base
0 1 2 3 4 5 6 7 8 9 A B C D E F
16
Base 00 00 00 00 01 01 01 01 10 10 10 10 11 11 11 11
2 00 01 10 11 00 01 10 11 00 01 10 11 00 01 10 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 8 F E 6
Binario 1000 1111 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 1100 0110 0000 1001


Hexadecimal C 6 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 ' Estabiliza la fuente de energia


SEROUT 14, 84, [22, 12] ' Enciende y limpia la pantalla
PAUSE 5 ' 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 # Descripcin Cantidad
122-28029 Libro Sensores Inteligentes y sus Aplicaciones 1
150-01020 Resistenciass 220 , watt 5% 2
27976 LCD Serial Parallax 2 x 16 sin luz de fondo 1
28015 Sensor de Distancia Ultrasnico Ping))) 1
28017 Acelermetro Memsic Bi-axial 1
29123 Mdulo de brjula Hitachi 1
451-00303 Conector de 3 pines macho/macho 3
700-00003 4-40 tuercas zincadas-plateadas 6
700-00028 Tornillos de 1/4 4-40 pan-head 4
710-00006 Tornillos de1/2 4-40 pan-head 2
713-00005 Espaciador #4 de 1/4 circular de nylon 2
720-00011 Herrajes para montaje universal de 90 grados 4
800-00016 Bolsa con 10 cables conectores de 3 pulgadas 2
805-00002 Cable Extension para Servo/LCD 2
900-00001 Piezo parlante 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


Smbolo del
negativa (-). El voltaje en la terminal (+) del capacitor debe ser siempre mayor
Capacitor
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
10 F
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.
ndice Page 323

ndice
-A- bicycle distance measurement, 247
binary radians (brads), 101
acceleration, 65
converting to degrees, 87
on a circular path, 233
RC car study, 230
-C-

skateboard trick study, 240 capacitor safety, 322


Cartesian coordinates, 174
accelerometer Celsius to Fahrenheit conversion, 59
and LCD tilt bubble graph, 188 clamping input range, 78
CLREOL, 96
measuring height, 211
collision, 65
MX2125 design (picture), 67 compass (drawing), 129
schematic and wiring diagram, 68 compass module, Hitachi HM55B, 119
three-axis, 66 calibration, 128

animation interpreting measurements, 119

flashing text, 11 magnet cautions, 125

pixel worm custom characters, 264 schematic and wiring diagram, 121
sensing axes, 120
arccosine, 99
arcsine, 99 testing, 121
arctangent, 92
computer system requirements, 321
ATN, 85, 127
contrast adjustment for LCD, 7
-B- conversion
bar graph binary radians to degrees, 87

horizontal, 271 Fahrenheit to Celsius temperature, 59

two-axis, 291 coordinate systems, 174


vertical, 281
COS, 100
counting wheel revolutions, 248
bar magnet, 125 CR, 10
baud rate, 7 CRSRXY, 8, 168
baud rate switches for LCD, 6 custom characters
Page 324 Smart Sensors y Applications

hourglass animation, 24 -L-


pixel worm animation, 264 LCD
predefined in Parallax Serial LCD, 19 and accelerometer tilt bubble graph, 188
swapping, 261 baud rate switches, 6
-D- cautions for older models, 4
DATA, 180, 213, 223 contrast adjustment, 7
deadband, 249 control codes, 9
declination, 124
degree symbol in ASCII, 143 creating custom characters, 264
display coordinates, 174 defining custom characters, 20
-E- horizontal bar graph, 271

EEPROM, 262 mounting brackets, 153

-F- Parallax Serial LCD Documentation, 305


predefined custom characters, 19
Fahrenheit to Celsius conversion, 59
scrolling text, 25
-G-
scrolling text in window, 30
Gelfand, Alan (Ollie), 241
graphic character display, 168 two-axis bar graph, 291
gravity, 65 vertical bar graph, 281
-H- -M-
hardware requirements, 321 MIN, 196
hexadecimal, 22, 317
-N-
hexadecimal to binary conversion, 319
HIDs (Human Interface Devices), 167 negative numbers and PBASIC, 174
horizontal bar graph, 271 negative numbers in PBASIC
household items required, 321 division, 145
hysteresis, 248
-O-
-I-
ollie, 241
inclination, 124 oscillations, 242
incline, 65
input range clamping, 78 -P-
Parts Kit component listing, 322
ndice Page 325

percent error measurements, 59 LcdTimer.bs2, 17


Ping))) sensor, 41 PingLcdCmAndIn.bs2, 57
and bar graph LCD display, 271 PingMeasureCm.bs2, 48
distance measurements, centimeter, 46 PingMeasureCmAndIn.bs2, 50
distance measurements, inches, 49 PingTest.bs2, 43
extension cable connections, 51 PlotXYGraph.bs2, 172
schematic and wiring diagram, 43 PredfinedCustomCharacters.bs2, 20
Predefined Custom Characters, 20 SignedNumbers.bs2, 81
Programs
SimpleTilt.bs2, 70
BikeWheelAcceleration.bs2, 251
SimpleTiltLcd.bs2, 74
BradsToDegrees.bs2, 90
SineCosine.bs2, 101
BubbleGraph.bs2, 191
TestArcsine.bs2, 103
CalibrateCompass.bs2, 132
TestAtn.bs2, 89
ConvertBinaryToHexadecimal.bs2, 318
TestCalibratedCompass.bs2, 139
CrsrxyPlot.bs2, 169
TestCompass.bs2, 122
CursorPositions.bs2, 15
TestCompassAveraged.bs2, 146
DatalogAcceleration.bs2, 226
TestScaleOffset.bs2, 78
DatalogYaxisUnscaled.bs2, 244
TestScrollingSubroutine.bs2, 28
EepromBackgroundDisplay.bs2, 181
TestVerticalBars.bs2, 283
EepromBackgroundRefresh.bs2, 185
TestWheelCounter.bs2, 249
EepromDataStorage.bs2, 216
TiltObstacleGame.bs2, 198
EepromDataStorageWithReset.bs2, 221
TwoAxisBarDisplay.bs2, 287
EepromPixelWorm.bs2, 264
VertWheelRotation.bs2, 95
HorizBarGraph.bs2, 273
PULSIN, 69
HorizontalTilt.bs2, 108
-R-
Hourglass.bs2, 23
RC car acceleration, 230
LcdTestCompass.bs2, 155
READ, 213
LcdTestMessage.bs2, 10 Reset button as program switch, 219
LcdTestNumbers.bs2, 12 rotation, 65, 85, 229
Page 326 Smart Sensors y Applications

-S- tesla (T), 124


tilt game controller, 196
scaling constant, 77
tracking character coordinates, 182
scaling input values, 76
two equations with two unknowns, 176
SEROUT, 8, 317
twos complement, 174, 196
servo port jumper, 150
two-axis bar graph, 291
signed numbers and PBASIC, 174
signed numbers in PBASIC, 80 -V-
division, 145 vertial bar graph, 281
SIN, 100 vibration, 65
sine, 99 -W-
software requirements, 321
Wainwright, Danny, 241
-T- worm, custom character for LCD, 264
temperature unit conversion, 59 WRITE, 213

Anda mungkin juga menyukai