Documentos de Académico
Documentos de Profesional
Documentos de Cultura
aplicaciones
Guía del Estudiante
VERSION 1.0
GARANTÍA
Parallax garantiza sus productos contra defectos en sus materiales o debidos a la fabricación por un período de 90
días a partir de la recepción de los mismos. Si usted descubre un defecto, Parallax según corresponda, reparará,
reemplazará o regresará el valor de la compra. Antes de regresar el producto a Parallax, simplemente pida un número
de autorización de regreso de mercancía (Return Merchandise Authorization, “RMA”), escriba el número en el
exterior de la caja y envíela a Parallax. Por favor incluya su nombre, número telefónico, dirección y una descripción
del problema. Parallax le regresará su producto o el reemplazo, usando el mismo método de correo que usted usó para
enviar el producto a Parallax.
Si dentro de los 14 días 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 envío y manejo. Esto no se aplica si el producto ha sido alterado o dañado. Consulte la sección de Garantía
arriba acerca de las instrucciones para regresar un producto a Parallax.
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
violación de los derechos de copia, propiedad intelectual y derechos de autor de Parallax, Inc. y dicha violación es
objeto de las penas que marcan las leyes Federal de derechos de autor y propiedad intelectual. Parallax Inc.
expresamente no permite la reproducción con fines comerciales. Se permite la reproducción con fines educativos,
reproducción 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 duplicación.
Este texto está disponible en formato impreso por Parallax Inc. Dado el tiraje de la impresión del mismo, el precio al
consumidor es frecuentemente menor que los costos típicos por duplicación.
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
páginas de Internet o en cualquier material impreso, forzosamente deberá agregar la aclaración: “(la marca en
cuestión) es una marca registrada de Parallax, Inc.” Otros nombres de productos y marcas son marcas registradas de
sus respectivos dueños.
ISBN 1-928982-39-5
DESVINCULACIÓN DE RESPONSABILIDAD
Parallax, Inc. no es responsable de daños por consecuencias, incidentes o daños especiales que resulten de cualquier
violación de la garantía, bajo cualquier teoría legal, incluyendo pérdida de beneficios, tiempos muertos, buena fe,
daño o reemplazo de equipo o propiedad y cualesquiera costos de recuperación, reprogramación o de reproducción de
datos guardados o usados dentro de los productos Parallax. Parallax tampoco es responsable de cualquier daño
personal, incluyendo vida o muerte, resultado del uso de cualquiera de nuestros productos. Usted tiene absoluta
responsabilidad por la aplicación que desarrolle con el BASIC Stamp, sin importar la naturaleza del riesgo de la
misma.
SEGUNDA IMPRESION
• Propeller chip – Esta lista es específicamente 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 retroalimentación en el desarrollo
de nuestro currículum y proveer un sitio para que los educadores desarrollen y obtengan Guías para
Profesores.
• Robotics – Diseñado para los robots Parallax, este foro fue creado para ser un diálogo abierto entre
entusiastas de la robótica. Los temas incluyen el ensamble, código fuente, expansiones y
actualizaciones de manuales. Los robots Boe-Bot®, Toddler®, SumoBot®, HexCrawler y
QuadCrawler son ampliamente discutidos aquí.
• SX Microcontrollers y SX-Key – Discusión de la programación del microcontrolador SX con
herramientas del lenguaje ensamblador Parallax SX – Key® y compiladores de terceros en lenguajes
BASIC y C.
• Javelin Stamp – Discusión de aplicaciones y diseños usando Javelin Stamp, un modulo Parallax que
es programado utilizando un subconjunto de comandos del lenguaje de programación Java® de Sun
Microsystems.
ERRATA
Si bien se realiza un gran esfuerzo para asegurar la precisión de nuestros textos, aún 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 páginas individuales
de los productos para obtener una descarga gratuita de este archivo de fe de errata.
Tabla de Contenido · Página i
Tabla de Contenido
Prefacio.......................................................................................................................iii
Introducción y notas del autor........................................................................................ iii
Idea general.................................................................................................................... v
Antes de comenzar......................................................................................................... v
La serie educativa Stamps en class .............................................................................. vi
Traducciones ................................................................................................................ vii
Colaboradores especiales ............................................................................................ vii
Capítulo 1: La Pantalla LCD Serial Parallax.............................................................1
LCDs en Productos.........................................................................................................2
El LCD serial Parallax - Su terminal portátil de depuración............................................2
Actividad #1: Conexión 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 animación en LCD ....................................19
Actividad #5: Avance de texto traves de la pentalla .....................................................25
Resumen ......................................................................................................................34
Capítulo 2: El Sensor Ultrasónico de Distancia Ping)))........................................41
¿Cómo trabaja el Sensor Ping)))? ................................................................................41
Actividad #1: Medición del tiempo de eco ....................................................................42
Actividad #2: Mediciones de CentÍmetroS....................................................................46
Actividad #3: Medición de pulgadas .............................................................................49
Actividad #4: Mediciones en movimiento......................................................................51
Actividad #5: El efecto de la temperatura en la velocidad del sonido...........................58
Resumen ......................................................................................................................61
Capítulo 3: El Acelerómetro MEMS de dos ejes....................................................65
EL Acelerómetro MX2125 – como funciona .................................................................67
Actividad #1: Conexión y prueba de pendiente con el MX2125 ...................................68
Actividad #2: Mediciones en movimiento......................................................................71
Actividad #3: División proporcional y compensación de los valores de entrada ..........76
Actividad #4: Dividiendo en 1/100 g .............................................................................83
Actividad #5: Medición de Rotación Vertical de 360° ...................................................85
Actividad #6: Medición de la inclinación respecto a la Horizontal ................................98
Resumen ....................................................................................................................112
Capítulo 4: El Módulo de brújula Hitachi HM55B ................................................119
Interpretación de las mediciones de la brújula ...........................................................119
Actividad #1: Conexion y prueba del módulo de brújula.............................................120
Actividad #2: Calibración del módulo de brújula.........................................................128
Página ii · Sensores inteligentes y sus aplicaciones
Prefacio
INTRODUCCIÓN Y NOTAS DEL AUTOR
La primera vez que ví el término “sensor inteligente” fue en el texto Sensores Aplicados
de Tracy Allen (entonces conocido como Mediciones Ambientales). De manera adecuada,
Tracy aplicó este término al termómetro digital DS1620, el cual tiene elementos
electrónicos interconstruídos que simplifican las mediciones de temperatura del
microcontrolador. Adicionalmente, podía recordar la configuración1 que recibía del
microcontrolador y, más aún, funcionar independientemente como un controlador de
termostato.
En contraste con los sensores inteligentes, los sensores primitivos son dispositivos o
materiales que tienen alguna propiedad eléctrica que cambia con algún fenómeno físico.
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/tensión, transductores de micrófonos y aún el
potenciómetro, que es un sensor de posición rotacional.
Dentro de cada sensor inteligente radica uno o más sensores primitivos y la circuitería de
soporte. Lo que hace a un sensor inteligente “inteligente” es la electrónica interconstruída
adicional. Esta electrónica hace que estos sensores sean capaces de hacer una o más de
las siguientes funciones:
Durante mi primer encuentro con un sensor inteligente pensé: “¡Vaya! ¡Un kit completo
de estos sensores con un libro podría ser REALMENTE interesante! En verdad espero
1
En ingles, setting (N. del T)
Página iv · Sensores inteligentes y sus aplicaciones
que alguien haga un kit y un libro así pronto…” No tenía idea que “pronto” terminaría
siendo casi seis años después, y que “alguien” terminaría siendo yo. Y si alguno de mis
jefes me hubiera dicho entonces que ese kit contendría un acelerómetro, un medidor de
distancias ultrasónico, una brújula digital y una pantalla o visor LCD2 serial para
mediciones en movimiento, quizá la impresión me hubiera deshecho por completo.
Puesto que solo recientemente fue posible para nosotros conjuntar un grupo de
componentes tan sorprendente en un solo kit, debería decir que la espera valió la pena.
En concordancia con el resto de los tutoriales Stamps en Class, este libro es una colección
de actividades, algunas de las cuales cubren aspectos básicos, algunas otras cubren otros
aspectos más 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 inclinación, herramientas de medición personalizadas y
dispositivos de diagnóstico para entusiastas del deporte y del bricolaje. El límite de
páginas para este libro delimitado por nuestro empaque es 350 y fue difícil 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 propósito principal de este libro es proveer algunos bloques de
construcción e ideas para proyectos e inventos futuros. Por ejemplo, después de
completar el capítulo 3, nuestro revisor del libro Kris Magri puso su tarjeta de
entrenamiento “Board of Education” con el acelerómetro y la LCD sobre el tablero de su
auto, y ahora su auto tiene un medidor de aceleración en planos a un lado de su
velocímetro. Con algunas modificaciones al código, se pudo haber cambiado por un
sistema de alerta de volcadura en autos de doble tracción. Después de revisar el
dispositivo mecánico de vigilancia para predecir condiciones de avalancha en áreas
montañosas basado en la inclinación de la ladera, Ken Gracey desarrolló en una noche la
versión digital con las mismas partes que tenía Kris en su auto.
2
Visor o pantalla de cristal líquido; de sus siglas en inglés, Liquid Cristal Display (N. del T.)
Prefacio · Página 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. Asegúrese de incluir algunas
fotos, una descripción breve y preferentemente un esquema y el programa PBASIC.
Entonces, diviértase 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 construcción para una variedad de inventos y proyectos de estudiantes. He
aquí una lista de los dispositivos:
Además de proveer tanto el equipo como la información de cómo se usa este para
proyectos estudiantiles, este texto hace 2 énfasis mayores que proveen teoría, ejemplos y
los cálculos requeridos, lo cual puede ser usado para reforzar una variedad de conceptos
de medición, de física/ingeniería y de trigonometría. Estos énfasis son:
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 comunicación
enre su computadora y su BASIC Stamp. Para instrucciones detalladas a este respecto,
consulte ¿Qué es un Microcontrolador?, disponible como descarga gratuita en
Página vi · Sensores inteligentes y sus aplicaciones
Podrá entonces continuar con otros tópicos de proyectos educativos, o quizá prefiera
explorer nuestros kits Robóticos.
Kits Robóticos:
Para adquirir experiencia con robótica, considere continuar con las siguientes Guías Del
Estudiante Stamps en Class, cada una tiene un kit robot correspondiente:
“Control remoto IR para el Boe-Bot”, Guía del Estudiante, Version 1.1, Parallax
Inc., 2004
“Robotica Aplicada con el SumoBot”, Guía del Estudiante, Version 1.0, Parallax
Inc., 2005
“Robótica avanzada con el Toddler”, Guía del Estudiante, Version 1.2, Parallax
Inc., 2003
Referencias
Este libro es una referencia esencial para todas las Guías del Estudiante Stamps en Class.
Se presenta con información de la serie de modulos microcontroladores BASIC Stamp,
nuestro Editor BASIC Stamp y nuestro lenguaje de programación PBASIC.
TRADUCCIONES
Los textos educativos Parallax pueden ser traducidos a otros idiomas con nuestro permiso
(correo electrónico: translations@parallax.com). Si usted planea hacer alguna traducción
por favor contáctenos y así podremos proveerle con los documentos MS Word en el
formato adecuado, imágenes, etc. También mantenemos un grupo privado de discusión
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 Educación: al
administrador del Proyecto Aristides Alvarez, el Ilustrador Técnico Rich Allred,
Diseñadora Gráfica Larissa Crittenden, Revisor Técnico 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.
Página viii · Sensores inteligentes y sus aplicaciones
Cap 1: La pantalla LCD Serial Parallax · Página 1
Figura 1-1: BASIC Stamp, Board of Education, y Pantalla LCD Serial Parallax
LCDS EN PRODUCTOS
Todos los productos mostrados en la Figura 1-2 tienen pantallas de cristal líquido. Son
fáciles de leer y los más pequeños consumo poca energía. Piense cuántos productos que
usted posee tienen pantallas de cristal líquido. 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 cómo una pantalla LCD serial puede mejorarlos o ayudarle a completarlos.
que recibe del BASIC Stamp. Es especialmente útil para mostrar mensajes de diagnóstico
y valores de variables, haciendo más fácil aislar los problemas en un programa. También
es útil para probar circuitos, sensores y más.
Figura 1-3
LCD Serial Parallax
(2×16)
La pantalla LCD Serial Parallax 2×16 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 envía estos mensajes desde un solo pin de entrada/salida que está
conectado a la entrada serial de la LCD. Hay dos versiones, estándar y con luz de fondo:
Version Parte Parallax #
Estándar 27976
Con Luz 27977
Pantallas LCDs Seriales vs Paralelas
La pantalla LCD paralela es probablemente el tipo más común de pantallas LCD. Requiere
un mínimo de 6 pines de entrada/salida para ser controlada por el BASIC Stamp. También,
si no está usando un BASIC Stamp 2p, 2pe o 2px, el código para controlar la pantalla tiende
a ser más complejo que el código 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.
Página 4 · Sensores Inteligentes y sus Aplicaciones
Partes Requeridas
(1) Pantalla LCD Serial Parallax 2×16
(3) Segmentos de cable
Figura 1-5
Vista posterior
del Módulo de la
pantalla LCD
Figura 1-6
Configurando los
interruptores de
velocidad Baud en el
modo de auto- prueba
Figura 1-7
Potenciómetro de
Ajuste de Contraste
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
Página 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 según sea el caso.
Figura 1-9
Configuración de
los interruptores de
Velocidad Baud
En esta actividad, usted programará el BASIC Stamp para hacer que la LCD despliegue
mensajes de texto y valores numéricos. Como un primer paso en la animación, también
modificará los programas para que el texto y los números parpadeen. El comando SEROUT
será su herramienta para cumplir estas tareas. Usará el comando SEROUT para enviar
texto, números, códigos de control y elementos de formato a la pantalla LCD Serial
Parallax. Como pronto verá, el texto, los números y los formateadotes son idénticos a los
que usa con el comando DEBUG. Los códigos de control serán un poco diferentes, pero
con un poco de práctica serán tan fáciles de usar como CR, CLS, HOME, y CRSRXY. (Si no
está familiarizado con CRSRXY, podrá aprender más de él en el capítulo 6, Actividad # 1).
En nuestros programas, el argumento Pin tiene que ser 14 puesto que el pin RX (de
recepción 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 · Página 9
El argumento BaudMode es un valor que le dice al BASIC Stamp qué tan rápido deberá
enviar los datos en serie y también determina algunas de las características de la señal
serial. El programa de ayuda del Editor del BASIC Stamp tiene tablas que dan los
valores de BaudMode para velocidades baud y señales 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, señal verdadera. Esto es exactamente para lo que la LCD Serial
Parallax fue diseñada para recibir.
Los argumentos DataItem pueden ser escritos entre comillas como “Hola”. También
pueden ser caracteres de control como CR, CLS, o valores, con o sin formateadotes como
DEC, BIN, y ?. Si se envía con formateadores, ellos son enviados como los caracteres que
representan el valor. Si se envían sin formateadores, ellos serán enviados como valores,
como 22, 12 y 13. Podemos enviar valores sin formato como estos a la LCD, los cuales
serán interpretados como códigos de control.
Si usted desea intentar usar la terminal de Depuración 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 Depuración, haga coincidir la designación del puerto de comunicación. Note
que también puede cambiar la velocidad Baud de la Terminal de Depuración así como otros
parámetros de comunicación.
Hay mucho más que aprender acerca de SEROUT. Tanto el Manual del BASIC Stamp como
la Guía de Sintaxis del Editor PBASIC dan explicación 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 Guía de Sintaxis de PBASIC. Para accesar, simplemente
seleccione el índice desde el menú de ayuda del Editor de BASIC Stamp.
• 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 línea.
• 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 versión 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.
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.
NEXT
Figura 1-11
Despliegue de números
• 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
Página 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 línea superior de la LCD (línea 0). De manera
semejante, puede usar valores de 148 to 163 para colocar el cursor en los caracteres 0 al
15 de la línea inferior (línea 1).
Figura 1-12
Desplegado de Texto
Luego de colocar el cursor, el siguiente caracter que envíe a la LCD será desplegado en
esa posición. 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 línea 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 múltiples después de dar una posición inicial, la LCD aún
cambiará el cursor a la derecha después de cada caracter. Por ejemplo, también puede
colocar el cursor en el caracter 7 de la línea superior y entonces desplegar "ALL", luego
mover el cursor al carácter 6 de la línea inferior y desplegar "DONE!", así:
SEROUT 14, 84, [135, "ALL", 154, "DONE!"]
Cap 1: La pantalla LCD Serial Parallax · Página 15
He aquí un bloque de código 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 después del caracter "1", para borrar los caracteres a su derecha
conforme se mueve el texto a la izquierda.
' 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
' 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
√ ¡Inténtelo!
Cap 1: La pantalla LCD Serial Parallax · Página 17
SEROUT 14, 84, ["Time Elapsed...", 13] ' Texto + retorno de carro
SEROUT 14, 84, [" h m s"] ' Texto en la segunda linea
Para esta aplicación, los códigos de control para colocación del cursor son
particularmente útiles. Por ejemplo, el cursor puede ser colocado en la línea 1, caracter 0
antes de enviar el valor decimal de 2 dígitos de las horas. El cursor puede ser movido a la
línea 1, caracter 5 para desplegar los minutos y luego movido a la línea 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 precisión no es por mucho la de un reloj de
muñeca digital; sin embargo es lo suficientemente Buena para mostrar como el desplegar
la hora puede trabajar con el posicionado de caracteres. Para mayor precisión, intente
incorporar el circuito integrado de tiempo DS1302. Está disponible en
www.parallax.com, solo teclee DS1302 en el campo de búsqueda.
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
' 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 ]
La Figura 6-14 muestra los comandos de Definición que puede enviar a la LCD para
decirle cuál es el caracter que está a punto de definir. También lo puede ver así: para
decirle a la LCD cuál caracter está definiendo, envíele el valor del caracter personalizado,
más 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 · Página 21
Luego de enviar el código que le dice a la LCD cuál caracter personalizado va a definir,
debe enviar 8 bytes que describan al caracter. La LCD usa los 5 bits más bajos de cada
byte que recibe para describir cada una de las 8 líneas de 5 pixeles de ancho que hay en el
caracter. La Figura 1-15 muestra un ejemplo de la definición del caracter personalizado 0
para un reloj de arena que acaba de ser volteado.
Note como cada valor sucesivo en el comando SEROUT corresponde a una línea de pixeles
en el caracter personalizado. Note también como los unos corresponde a pixeles negros y
los ceros corresponden a blancos.
Esta definición 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. También
usa una técnica 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.
Después de que se ve bien, usa los asteriscos para indicar cuáles 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 recién discutidos redefinen los
caracteres personalizados de la LCD.
Con estas nuevas definiciones puede escribir un ciclo para hacer que el reloj de arena
cambie de vacío a lleno, indicando que el usuario debe esperar. El siguiente bloque
DO...LOOP hace esto primero colocando el cursor en la línea 0, caracter 5 en la LCD.
Luego muestra el caracter personalizado 0, el reloj de arena recién volteado. Después de
una breve PAUSE, el programa envía el comando de espacio atrás (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 · Página 23
DO
LOOP
DO
LOOP
Su Turno
La Figura 1-17 muestra a los caracteres personalizados describiendo a los granos de arena
en el reloj moviéndose de arriba hacia abajo.
He aquí una Rutina principal que puede también intentar para animar los ocho caracteres
personalizados una vez que los haya dado de alta en la sección de Inicialización:
DO
' Espacio atras, Caracter Pers. 1, espacio atrás, 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
√ ¡Inténtelo!
Figura 1-18
Text Avanzando
El código para el avance que se presenta en esta actividad es bastante diferente del
programa ejemplo en la Actividad #2, el cual hizo que la línea 1 se moviera a lo ancho de
Página 26 · Sensores Inteligentes y sus Aplicaciones
Para hacer que un texto avance sobre solo una línea, el programa tiene que empezar con
la primera letra en el mensaje y desplegarla en la posición extrema derecha. Después de
un corto retraso, el programa debe mover el cursor a la segunda posición (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 posición
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.
El primer mensaje de texto empieza en una dirección EEPROM igual al valor del símbolo
del Message1, el cual ha sido establecido en 2 a través del argumento opcional @Address
de la directiva DATA. La dirección después del final del Message1 es la dirección
EEPROM 11. Esto es denotado por la etiqueta Message2, lo cual es también 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 · Página 27
El siguiente programa ejemplo también tiene variables que usted puede establecer para
configurar diferentes posiciones de ventana, anchos e incrementos. Después 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
código que hace que la subrutina despliegue todos los caracteres entre las etiquetas
Message1 y Message2 en los cuatro caracteres centrales de la línea superior de la LCD.
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 número 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 más 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.
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
Página 28 · Sensores Inteligentes y sus Aplicaciones
END
Scroll_Message:
DO WHILE tail<(MessageEnd-MessageStart)+(windowRight-windowLeft+increment)
RETURN
√ La posición de inicio del cursor tiene que mantenerse en 134 mientras que los
caracteres de head (punta) y tail (cola) continúan avanzado: 2 al 5 - "ssag", 3 al 6
- "sage". La ventana se mantiene corriendo y la Figura 1-22 muestra del
penúltimo 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.
RESUMEN
La pantalla de cristal líquido (LCD) es usada en una tremenda variedad de productos.
Una pantalla de caracteres simple como la LCD serial Parallax 2X16 puede substituir las
características de la Terminal de Depuración, 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 potenciómetro de ajuste de contraste atrás, 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 Documentación del Producto LCD Serial Parallax
(Apéndice B). Este capítulo 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 través del comando SEROUT de PBASIC. Muchas
de las características 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 Depuración. Los
códigos de control de la LCD son diferentes y más numerosos que los que se usan con la
Terminal de Depuración. En vez de intentar usar CR, CLS, CRSRXY, etc, use los valores de
códigos de control listados en el conjunto de commandos de la LCD. También 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.
mas bajos definen los pixeles en una determinada línea de pixeles. Un 1 hace al píxel
negro, un 0 lo hace blanco.
Este capítulo también 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 Símbolo 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 cuántos caracteres a la vez se
cambian de derecha a izquierda.
Preguntas
1. Mencione 3 dispositivos que usa todos los días que despliegan información con
la LCD.
2. ¿Qué significan el 2 y el 16 en el término 2x16 LCD?
3. ¿Qué comando usa para enviar información a la LCD Serial Parallax?
4. ¿De qué manera son diferentes los comandos DEBUG y SEROUT?
5. ¿En qué posición deben estar los interruptores SW1 y SW2 si necesita escribir
un programa que envíe 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 códigos de
control CR, CLS, y HOME del comando DEBUG con la LCD Serial Parallax?
9. ¿Cuáles son los 3 argumentos que necesita para un comando SEROUT mínimo?
10. ¿Cómo 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é carácter reside en el carácter personalizado 1 por definición?
13. ¿Cómo despliega un caracter personalizado después de que ha sido definido?
14. ¿Cuáles son algunas aplicaciones de la ventana corrediza?
Página 36 · Sensores Inteligentes y sus Aplicaciones
Ejercicios
1. Haga que el mensaje "Hola" aparezca en la terminal de Depuración sin usar el
comando DEBUG.
2. Despliegue el mensaje "Hola" centrado en la línea 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 línea 0 y el mensaje "Final" aparezca en el lado derecho de la línea 1.
5. Escriba un comando SEROUT para enviar mensajes a la LCD cuando SW1 y
SW2 están 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 líneas. Empieza
desplegando las líneas 0 y 1 con una pausa. Luego avanza a las líneas 2 y 3,
nuevamente con una pausa. Finalmente, despliega las líneas 4 y 5.
2. Escriba un programa que imprima 3 copias de un carácter personalizado. Luego,
redefina el caracter personalizado. ¿Qué pasa con las 3 copias de este caracter?
Cap 1: La pantalla LCD Serial Parallax · Página 37
Soluciones
Q1. Reloj de pulsera, calculadora, teléfono (las respuestas pueden variar).
Q2. Dos líneas de texto, cada una con 16 caracteres de ancho.
Q3. El comando SEROUT.
Q4. Cuando use el comando SEROUT debe especificar el número de pin y la velocidad
baud.
Q5. Ambos SW1 y SW2 deben estar en la posición de encendido para 19,200 bps.
Q6. Un potenciómetro.
Q7. El comando SEROUT 14, 84, [12] limpiará la pantalla.
Q8. Las constantes PBASIC pre-definidas como CR, CLS, y HOME no están
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 línea 0 y 148-163 para la línea 1.
Q12. La contradiagonal.
Q13. Envíe 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, aún las grandes que hay en estaciones de tren, terminales de
aeropuertos o en eventos deportivos, asi como texto desplazándose 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}
DO
SEROUT 14, 84, [21] ' Apaga pantalla
PAUSE 500
SEROUT 14, 84, [22] ' Enciende pantalla
PAUSE 500
LOOP
LcdPin PIN 14
T9600 CON 84
PAUSE 250
SEROUT 14, 84, [22, 12] ' Enciende y limpia pantalla
PAUSE 5 ' 5 ms retraso para limpiar
END
PAUSE 250
SEROUT 14, 84, [22, 12] ' Enciende y limpia pantalla
PAUSE 5 ' 5 ms retraso para limpiar
FOR copies = 1 TO 3
SEROUT 14, 84, [0] ' Despliega Caracter Pers. 0
NEXT
Figura 2-1
The Sensor Ultrasonico de Distancia
Ping)))™
El comando PULSIN del BASIC Stamp usa una variable para guardar cuanto duró la señal
alta del sensor Ping))). El tiempo de esta medición es lo que le tomó al sonido viajar al
objeto de ida y vuelta. Usando esta medición y el dato de la velocidad del sonido en el
aire, usted puede hacer que su programa calcule la distancia al objeto en centímetrosa,
pulgadas, pies, etc.
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 programación (y errors de
cableado), por lo que no necesita usar ninguna resistencia de 220 Ω entre P15 y la
terminal SIG del sensor Ping))).
√ Construya el circuito.
Capítulo 2: Inclinación con el Acelerómetro Memsic · Page 43
√ 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 Depuración debe estar reportando un valor entre 400 y 500.
Página 44 · Sensores Inteligentes y sus Aplicaciones
DO
PULSOUT 15, 5
PULSIN 15, 1, time
PAUSE 100
LOOP
a. b. c.
Capítulo 2: Inclinación con el Acelerómetro Memsic · Page 45
Adicionalmente, como descubrió Ken Gracey de Parallax Inc. durante una demostración
en la escuela de su hijo, algunos objetos con superficies suaves e irregulares (como
animalitos de peluche) en vez de reflejar absorberán el sonido y por lo tanto puede ser
difícil la detección para el sensor Ping))). Los objetos con superficies lisas que fácilmente
reflejan el sonido facilitan la detección del sensor.
Figura 2-5
Determinando el
Angulo Mínimo de
Detección
√ Intente colgar varios objetos del techo a 1.5 metros de distancia del sensor
Ping))). ¿Qué tan pequeños pueden ser los objetos? ¿Afecta la forma o el
ángulo? ¿Cambia la afectación por el tamaño del objeto a medio metro de
distancia?
√ Intente detectar objetos de tamaño 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 detección más corto con objetos que absorben el sonido.
¿Puede encontrar algún objeto invisible para el sensor Ping))), como un cúmulo
de algodón?
Página 46 · Sensores Inteligentes y sus Aplicaciones
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á más conveniente calcular mediciones de centímetros (cm) con
el BASIC Stamp. Puesto que hay 100 centímetros en un metro, usemos el término Sobject-
cm lo cual es simplemente 100 veces Sobject. Las unidades de medición 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 número de segundos. Hay
entonces un par de números 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
Cair tPULSIN-BS2
Sobject-cm =
10,000
Capítulo 2: Inclinación con el Acelerómetro Memsic · Page 47
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
medición Duration del comando PULSIN por un valor fraccional menor que 1. Por
ejemplo, si el comando PULSIN guarda la medición del tiempo de eco en la variable
time, este comando guardará la distancia en centímetros resultante en la variable
cmDistance así:
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 fracción con
denominador 65536. Para obtener dicho numerador, multiplique su valor fraccional por
65536.
Ahora ya tenemos el valor que necesitamos para modificar PingTest.bs2 y así medir
distancias en centímetros. También agregaremos una variable para guardar la distancia
(cmDistance) junto con la constante para guardar el valor 2260 (CmConstant).
CmConstant CON 2260
DO
PULSOUT 15, 5
PULSIN 15, 1, time
PAUSE 100
LOOP
DO
PULSOUT 15, 5
PULSIN 15, 1, time
PAUSE 100
LOOP
Su Turno
√ Hay 12 pulgadas en 1 pie. Modifique el programa para que despliegue pies y
pulgadas. Tip: después de calcular inDistance, use / 12 para determinar el
número de pies y // 12 para encontrar el sobrante en pulgadas.
√ Hay 10 centímetros en un decímetro. Repita para decímetros y centímetros.
Capítulo 2: Inclinación con el Acelerómetro Memsic · Page 51
Partes Requeridas
(1) Sensor Ultrasónico Ping)))
(1) LCD Serial Parallax (2×16)
(1) Cable Extensión para la LCD de 14 pulgadas
(3) Cables de conexión
Si esta trabajando con una tarjeta BASIC Stamp HomeWork Board o una tarjeta Board of
Education Rev A o B serial , también necesitará:
Figura 2-7
Esquemáticos del Sensor
Ping))) y la LCD Serial
Parallax
Figura 2-8
El jumper del Puerto Servo
colocado en Vdd (+5 V)
Capítulo 2: Inclinación con el Acelerómetro Memsic · Page 53
La configuración 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 tensión de la tarjeta Board of Education. Si el jumper se coloca a Vin,
el Puerto recibe energía directamente de la betería o de la fuente de poder.
√ Conecte la LCD Serial Parallax como se indica (igual que el capítulo anterior).
√ Conecte una punta del cable extension en el Puerto 15 del cabezal X4,
asegurándose que las etiquetas "Red" y "Black" que están en el lado derecho del
puerto X5 coincidan con los cables rojo y negro.
√ Verifique que su cable está bien conectado asegurándo que el cable blanco es el
más cercano a la etiqueta 15 y que el negro es el más cercano a la etiqueta X4.
Figura 2-9
Puerto Servo y
Conexión del
Jumper de energía
para el Sensor
Ping)))
Página 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 posición del jumper y
asegúrese que son correctas.
¡ATENCION! No conecte la energía 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 podría ser permanentemente dañada.
También puede conectar la LCD Serial Parallax al puerto 14 con un cable. Las
instrucciones son aproximadamente las mismas que las de conexión del Ping))). Empiece
por desconectar la energía 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,
asegúrese que el cable negro se conecte a GND, el cable rojo a 5V, y el cable blanco a RX.
Figura 2-10
Cableado en tableta para la
conexión del cable del Sensor
Ping)))
¡ATENCION! No conecte la energía 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 podría ser permanentemente dañada.
Figura 2-11: Conexiones en la tableta para el Sensor Ping))) y la LCD Serial Parallax
Capítulo 2: Inclinación con el Acelerómetro Memsic · Page 57
Después, 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 Depuración (HOME y CR) tienen que ser
cambiados por códigos de control que coloquen el cursor en la LCD.
SEROUT 14, 84, [128, DEC3 cmDistance, " cm"]
SEROUT 14, 84, [148, DEC3 inDistance, " in"]
PAUSE 200
SEROUT 14, 84, [22, 12]
PAUSE 5
DEBUG CLS, "Program running..."
DO
PULSOUT 15, 5
PULSIN 15, 1, time
PAUSE 100
LOOP
Convirtiendo de °F a °C y Viceversa
Para converter un grado Fahrenheit a Celsius, reste 32 deTF (la medición 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 continuación hay unos ejemplos de velocidad del sonido a temperaturas de cuarto que,
aún cuando ambas son confortables, son ligeramente diferentes.
Ejemplo 2: Calcule la velocidad del sonido a 25 °C, que es 77 grados Fahrenheit (°F).
¿Qué tanta diferencia hace esto en sus mediciones de distancia? Podemos calcular el
porcentaje de error que esto propagará con la ecuación de porcentaje de error.
Página 60 · Sensores Inteligentes y sus Aplicaciones
real - predicha
% error = ×100%
predicha
346.5 - 344.8
% error = ×100%
344.8
= 0.49%
RESUMEN
El BASIC Stamp solicita una medición 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 medición 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 centímegros por unidades de medición PULSIN.
El valor resultado también 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 medición resultante es pequeño,
especialmente a temperatura de cuarto.
Preguntas
1. ¿Cual es el rango de medición del sensor Ping)))?
2. ¿Qué significa ultrasónico?
3. ¿Qué señal manda el sensor Ping))) al BASIC Stamp y cómo corresponde esta a
la medición de distancia?
4. ¿Cuáles son las tres condiciones entre el sensor y el objeto que pueden causar
que el sensor Ping))) regrese una medición de distancia incorrecta?
5. ¿Cuáles son los incrementos de tiempo que regresa el commando PULSIN
cuando se usa un BS2?
6. ¿Cuál es la velocidad del sonido a temperatura de cuarto?
7. ¿Cómo 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 tensión correcta a dispositivos
como el sensor Ping))) sensor y la LCD Serial Parallax? ¿Qué podría 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 Depuración esta desplegando?
10. ¿Qué papel juega la temperature del aire en la velocidad del sonido en el aire?
Página 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 cuál sería 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 ningún objeto dentro del rango de
medición.
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 través del camino que la gente usa para entrar o salir.
Soluciones
Q1. De 3 centímetros a 3.3 metros.
Q2. Sonido con frecuencias mayores que 20 kHz.
Q3. Un pulso alto, cuya duración 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 pequeños.
Q5. Incrementos de 2µs.
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 posición Vdd, o la LCD pudiera dañarse.
Q9. Todos los comandos DEBUG tienen que ser modificados, también los caracteres
de control para que se usen los códigos 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.
Capítulo 2: Inclinación con el Acelerómetro Memsic · Page 63
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
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
Capítulo 3: Inclinación con el Acelerómetro Memsic · Page 65
• Aceleración
• Pendiente y ángulo de pendiente
• Inclinación
• Rotación
• Vibración
• Colisión
• Gravedad
• robots auto-equilibrantes
• Mandos de juego con sensado de inclinación
• Pilotos automáticos para aeromodelismo
• Sistemas de alarmas de autos
• Detección de colisión / sistemas para despliegue de bolsas de aire
• Sistemas para monitoreo de movimiento humano
• Herramientas para nivelación
Hace mucho tiempo, los acelerómeros eran instrumentos grandes, estorbozos y caros que
no se prestaban para proyectos de robótica y electrónica. Todo esto cambió gracias a la
llegada de los sistemas-micro-electrónicos-mecánicos (MEMS por sus siglas en inglés).
La tecnología MEMS es responsable de un número siempre creciente de dispositivos
otrora mecánicos y que ahora están siendo diseñados en circuitos integrados de silicón.
Página 66 · Sensores Inteligentes y sus Aplicaciones
En vez de los 3 ejes que la gente percibe, el acelerómetro MX2125 percibe la aceleración
en dos ejes. La aceleración que sensa depende de cómo esté posicionado. Al sostenerlo de
una manera, puede percibir adelante/atrás e izquierda/derecha. Si lo sostiene de manera
diferente, puede sensar arriba/abajo y adelante/atrás. Dos ejes de aceleración son
suficientes para muhcas de las aplicaciones listadas anteriormente. Si bien puede montar
y monitorear un segundo acelerómetro para capturar el tercer eje, también son comunes
los acelerómetros de 3 ejes.
En muchas situaciones, hacer que estas mediciones tengan sentido es simple gracias a la
electrónica dentro del MX2125. El MX2125 convierte las mediciones de temperatura en
señales (duraciones de pulsos) que son fáciles para el microcontroller BASIC Stamp de
medir y descifrar.
Página 68 · Sensores Inteligentes y sus Aplicaciones
Partes Requeridas
(2) Cables conectores de 3 pulgadas
(2) Resistencias – 220 Ω
(1) Acelerómetro Bi-Axial Mems MX2125
Para una prueba a temperatura de cuarto, obtendrá una muy buena indicación de
inclinación 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é dirección, 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.
Página 70 · Sensores Inteligentes y sus Aplicaciones
√ Asegúrese que su tarjeta está sin inclinación en su mesa, orientada con los ejes x
y y como se muestra en la Figura 3-4.
√ Introduzca y corra SimpleTilt.bs2.
'{$STAMP BS2}
'{$PBASIC 2.5}
x VAR Word
y VAR Word
DEBUG CLS
DO
PULSIN 6, 1, x
PULSIN 7, 1, y
PAUSE 100
LOOP
Figura 3-5
Salida de la
Terminal de
Depuración
Capítulo 3: Inclinación con el Acelerómetro Memsic · Page 71
Partes Requeridas
(1) Acelerometro Mems 2125
(1) LCD Serial Parallax (2×16)
(5) Cables de conexiones
(2) Resistencias 220 Ω
Página 72 · Sensores Inteligentes y sus Aplicaciones
Figura 3-6
Esquemáticos para el
acelerómetro
MX2125 y la LCD
Serial Parallax
Figura 3-7
Alambrado para el
acelerómetro Mems
y la LCD Serial
Parallax
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 carácter de retorno de carro después.
¿Recuerda del Capítlo 1 que CR es el único caracter de control que es igual tanto para la
Terminal de Depuración 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]
'{$STAMP BS2}
'{$PBASIC 2.5}
x VAR Word
y VAR Word
Capítulo 3: Inclinación con el Acelerómetro Memsic · Page 75
DO
PULSIN 6, 1, x
PULSIN 7, 1, y
PAUSE 100
LOOP
Este comando SEROUT despliega la misma información en la LCD Serial Parallax. Note
como el the código 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 más fácil desplegar caracteres después de
cada valor. Por ejemplo, he aquí un comando SEROUT que multiplica cada medición por
2 y despliega "us" después.
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 mayoría de las personas comprendería el significado. Usted también
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.
Página 76 · Sensores Inteligentes y sus Aplicaciones
La Figura 3-10 muestra cómo aplicar estos pasos con un solo commando PBASIC que
ejecuta escalamiento y compensación. Recuerde que los cálculos en PBASIC trabajan de
izquierda a derecho a no ser que se re-jerarquize con paréntesis. Entonces la primer cosa
que este cálculo 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.
Después de que el rango ha sido escalado, se le resta 127 y resulta en −127 a 127.
⎡ ⎛ 255 ⎞⎤
ScaleCons tan t = Int ⎢65536 ⎜ ⎟⎥
⎣ ⎝ 1251 − 1 ⎠⎦
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 número 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.
'{$STAMP BS2}
'{$PBASIC 2.5}
DO
DEBUG ">"
LOOP
Transmit
Windowpane
Receive
Windowpane
Página 80 · Sensores Inteligentes y sus Aplicaciones
Visualize una recta numérica (Figura 3-12). Del 0 en adelante, los valores 0 al 32767
están 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 tamaño de palabra, que es todo
en 1’s. Yendo hacia atrás con estos valores negativos, sus correspondientes números
binarios que los representan se hacen más pequeños hasta llegar al −32768 representado
por el binario 32768.
Capítulo 3: Inclinación con el Acelerómetro Memsic · Page 81
(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.
x VAR Word
x = 32768 '<<< Introduzca nuevos valores de x, y vuelva a correr
Como en PBASIC solo las variables de palabra completa pueden retener números con
signo, todos los números con signo tienen 16 bits. Viendo el bit más hacia la izquierda, el
Bit 15, podemos saber si un número es positivo o negativo. Puede usar value.BIT15
como una variable que le diga si value es un número positivo o negativo. Si
value.BIT15 es igual a 0, el número 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 módulo "//". Cuando se usan estos operadores, es útil
Página 82 · Sensores Inteligentes y sus Aplicaciones
⎡ ⎛ 3 ⎞⎤
ScaleCons tan t = Int ⎢65536 ⎜ ⎟⎥
⎣ ⎝ 11 − 1 ⎠⎦
La Table 3-2 muestra algunos ejemplos de cálculos 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 matemático de enteros, trunca cualquier resultado
al valor entero, redondeándolo 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
Capítulo 3: Inclinación con el Acelerómetro Memsic · Page 83
√ Complete los calculos en la Table 3-2 para valores de entrada del 5 al 10.
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 compensación, 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).
Página 84 · Sensores Inteligentes y sus Aplicaciones
Figura 3-15
Inclinación en el Plano Vertical
Figura 3-16
y Tangente y Arcotangente
tan θ =
x
⎛y⎞
θ = tan −1 ⎜⎜ ⎟⎟
⎝x⎠
La función arcotangente puede usarse para determinar the ángulo de rotación del
acelerómetro con sus mediciones x y y. PBASIC tiene un operador llamado ATN que
puede usar para calcular tan−1(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 círculo es dividido en 256 segmentos de la misma
manera que los ángulos lo dividen en 360 segmentos.
Figura 3-17
Círculo Unitario en grados y
Radianes Binarios
Capítulo 3: Inclinación con el Acelerómetro Memsic · Page 87
Recuerde:
El operador ** multiplica por un número de 65536avos.
Las reglas matemáticas de enteros para escalar de una escala a otra aún aplican, aún si
convertimos de una escala más pequeña a una más grande. Lo único que cambiaremos es
la constante de la escala, el cual es un numerador de 256 por */, en vez de 65536 por **.
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 operación hecha con BASIC Stamp a los hechos con una
hoja de cálculo.
angledegrees = (360/256) × anglebrads
Redondee el resultado de angledegrees al entero más 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 Depuración con 360
*/ angle, luego repita con 361 */ angle. Una hoja de cálculo es útil para esta comparación.
Si lo intenta, verá que el nivel de enteros que empatan es mucho mayor con 361 */ angle.
Figura 3-18
Tangente y Arcotangente
Capítulo 3: Inclinación con el Acelerómetro Memsic · Page 89
Figura 3-19
Tangente y Arcotangente
y = h sin θ
x = h cosθ
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
Algunos valores serán mas bajos que lo que esperaba. Por ejemplo, cuando h = 100 y
θ = 30°, y = 50 y x = 87. La Terminal de Depuración mostrará 21 para el ángulo brad, que
es correcto, pero 29 para el ángulo en grados que no es correcto. Debería ser 30. Esto
pasa ocasionalmente al escalar de un rango menor a uno mayor. La medición de 21 brads
corresponde a 29° y 22 brads corresponden a 31°.
'{$STAMP BS2}
'{$PBASIC 2.5}
DO
angle = x ATN y
LOOP
'{$STAMP BS2}
'{$PBASIC 2.5}
Capítulo 3: Inclinación con el Acelerómetro Memsic · Page 91
NEXT
END
Figura 3-20
Rotación vertical en
sentido antihorario
−1 ⎛ AY ⎞
θ = tan ⎜ ⎟
⎜A ⎟
⎝ X ⎠
⎛0⎞
tan −1 ⎜ ⎟ = 0°
⎝1⎠
⎛ 1 ⎞
⎜ ⎟
tan −1 ⎜ 2 ⎟ = 30°
⎜ 3 ⎟
⎜ ⎟
⎝ 2 ⎠
⎛ 1 ⎞
⎜ ⎟
tan −1 ⎜ 2 ⎟ = 135°
⎜ −1 ⎟
⎜ ⎟
⎝ 2⎠
Página 94 · Sensores Inteligentes y sus Aplicaciones
El caso general
El ángulo de rotación (θ) es la inversa-tangente o arcotangente de la componente de
gravedad que actúa sobre el eje de sensado Y del Mems 2125 (AY) dividida entre la
componente de gravedad que actúa 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 geométricas, θ también está dentro de los
dos triángulos que muestran las componentes de gravedad actuando en cada uno de los
ejes de sensado del acelerómetro (xm y ym). La componente de gravedad actuando sobre
xm is AX = g cosθ y la componente actuando sobre ym es AY = g sinθ. Después de aplicar las
identidades trigonométricas mostradas, se demuestra que el ángulo de rotación θ 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 ⎠
'{$STAMP BS2}
'{$PBASIC 2.5}
DO
PULSIN 6, 1, x
PULSIN 7, 1, y
angle = x ATN y
angle = angle */ 361
PAUSE 100
LOOP
el nuevo. Aún cuando CLS puede arreglar este problema también, el parapdeo resultante
en la Terminal de Depuración no es agadable para la vista. CLREOL borra a la derecha del
cursor en una linea dada. Si bien aún causa un poco de parpadeo con cada valor, es
mucho más facil de ver que con la versión CLS.
DEBUG HOME, CLREOL, SDEC ? x,
CLREOL, SDEC ? y,
"angle = ", DEC3 angle,
176 ' ASCII 176 es el simbolo de grados
Figura 3-24
Medición de ángulo con
rotación en sentido anti-horario
Página 98 · Sensores Inteligentes y sus Aplicaciones
Para invertir el ángulo de rotación que muestra el programa, solo hay que usar −Ay en
vez de Ay (Figura 3-25). Si gira el acelerómetro 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°.
⎛ 1 ⎞
⎜ ⎟
⎛ − AY ⎞ ⎜ 2 ⎟
tan −1 ⎜⎜ ⎟ = tan
⎟
− 1
⎜ 3 ⎟ = 330 °
⎝ AX ⎠ ⎜⎜ ⎟⎟
⎝ 2⎠
⎛ 1 ⎞
⎜ ⎟
− 1 ⎛ − Ay ⎞ −1 ⎜ 2 ⎟
tan ⎜ ⎜ ⎟ = tan ⎜
⎟ ⎟ = 30 °
⎝ Ax ⎠ ⎜⎜ 3 ⎟⎟
⎝ 2 ⎠
Seno y Coseno
La Figura 3-27 muestra la relación entre los lados de un triángulo rectángulo y las
funciones seno y coseno. El seno de un ángulo es el lado opuesto del triángulo (y)
dividido entre la hipotenusa (h). Si conoce h y y, y quiere conocer el ángulo (θ), use
arcoseno (sin−1). El coseno de un ángulo es el lado adyacente (x) divido entre h. Si
quiere conocer el ángulo conociendo x y h, use arcocoseno (cos−1).
y Figura 3-27
sin θ = Seno y Coseno
h
x
cos θ =
h
Página 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 relación de x/h y y/h son ambas menores que 1. No importa que
tan grande es el triángulo, la relación siempre estará entre 1 y 0.
El círculo unitario es un elemento comun para describir las funciones seno y coseno. La
hipotenusa del triangulo se convierte en el radio del círculo. El círculo unitario es
también llamado así porque la longitude de la hipotenusa es 1 (una unidad). Conforme
gira la hipotenusa en sentido anti-horario, el ángulo θ se hace más grande, o más pequeño
si rota en sentido horario. El coseno es determinado dibujando una línea vertical desde el
punto donde la hipotenusa se cruza con el círculo 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.
a. b. c.
La Figura 3-29 muestra la version de BASIC Stamp de un círculo unitario para sus
operadores SIN y COS. En vez de resultados que van de −1 a 1, los resultados para SIN y
Capítulo 3: Inclinación con el Acelerómetro Memsic · Page 101
COS van de −127 a 127. Los ángulos para los operadores SIN y COS están 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 número de brads por
360/256. Para convertir de grados a brads, use 256/360.
Figura 3-29
Operadores Seno y
Coseno en el
círculo unitario de
BASIC Stamp
NEXT
END
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
Capítulo 3: Inclinación con el Acelerómetro Memsic · Page 103
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 aproximación 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 medición en grados en la variable angle.
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
END
La Figura 3-32 muestra como el arcoseno puede ser usado para determinar el ángulo.
Viendo de lado el Módulo acelerómetro, la componente de gravedad actuando en su eje
xm es la aceleración 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 ecuación :
⎛A ⎞
θ X = sin −1 ⎜⎜ X ⎟
⎟
⎝ g ⎠
El mismo principio aplica en el eje ym del acelerómetro y el resultado es:
⎛A ⎞
θ X = sin −1 ⎜⎜ Y ⎟
⎟
⎝ g ⎠
Capítulo 3: Inclinación con el Acelerómetro Memsic · Page 107
AX = g sin θ
AX
= sin θ
g
AX
sin θ =
g
⎛A ⎞
sin −1 (sin θ ) = sin −1 ⎜⎜ X ⎟
⎟
⎝ g ⎠
⎛A ⎞
θ = sin −1 ⎜⎜ X ⎟
⎟
⎝ g ⎠
PULSIN 6, 1, x
PULSIN 7, 1, y
side = y
GOSUB Arcsine
DEBUG "y tilt angle = ", CLREOL, SDEC3 angle
PAUSE 100
LOOP
DO
Capítulo 3: Inclinación con el Acelerómetro Memsic · Page 109
Su Turno - Ajustes
Si su pantalla no recorrió 90° cuando mantuvo su tarjeta en un eje vertical en particular,
puede personalizar s escalamiento y compensación para que ajuste. Esto implica
determinar la escala de salida real de su acelerómetro. Si es en realidad 1865 a 3100,
repita los pasos de la actividad #3 para hacer las correcciones de escala y compensación.
Página 112 · Sensores Inteligentes y sus Aplicaciones
RESUMEN
Este capítulo se enfoca en sensar la aceleración debida a la gravedad con el acelerómetro
biaxial Mems 2125. Esto hace posible medir tanto inclinación como rotación. El
acelerómetro Mems transmite pulsos que indican la aceleración actuando en sus ejes x y
y. A temperatura ambiente, los pulsos varían 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
acelerómetro. 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 acelerómetro pueden ser desplegadas con la LCD Serial Parallax. Si
el programa ha sido ya probado con la Terminal de Depuración, desplegar mediciones
con la LCD serial es typicamente un asunto de agregar una rutina de inicialización de la
LCD al principio del programa y usar comandos SEROUT en lugar de commands DEBUG.
Los caracteres personalizados on útiles para desplegar el símbolo de grados (°) y la letra
griega mu (μ).
El acelerómetro puede ser usado para medir la rotación en un plano vertical. Para hacer
esto, BASIC Stamp debe calcular el arcotangente de la medición del eje y del
acelerómetro dividido entre su medición 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 círculo en 360 segmentos, los radianes
binarios lo hacen en 256 segmentos. El operator */ de PBASIC puede ser usado para
convertir una medición dada en radianes binarios a grados.
El acelerómetro puede también ser usado para medir ángulos de inclinación. Puesto que
la componente de gravedad que actúa en caja eje de sensado del acelerómetro es el seno
del ángulo de inclinación, el seno inverso o arcoseno puede ser usado en un eje de
medición para determinar el ángulo de inclinación. Una An subrutina Arcoseno puede ser
usada para calcular el ángulo (en grados) dado un valor que fluctúa 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 técnicas para escalamiento y compensación de las mediciones
del acelerómetro. El rango de mediciones que obtiene BASIC Stamp del acelerómetro
está en una escala de 1875 a 3125. La manera más eficiente de escalar estos valores a un
Capítulo 3: Inclinación con el Acelerómetro 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, después restar 127. La línea de código 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. ¿Cuáles son las 7 cantidades que puede medir con un acelerómetro?
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 aceleración?
5. ¿Que tiene que hacer a un programa que muestra mediciones en la Terminal de
Depuración para que las muestre en una LCD serial?
6. ¿Cómo puede restringir a una variable a un rango de valores?
7. ¿Cómo puede orientar su tarjeta para aplicar 1 g al eje x del acelerómetro?
8. ¿Cómo 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. ¿Cómo 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 rotación de su tarjeta?
14. ¿Qué rango de valores está la subrutina Arccosine diseñada para aceptar? ¿Qué
representan esos valores?
15. ¿Qué rango de valores está la subrutina Arcsine diseñada para aceptar? ¿Qué
representan esos valores?
16. ¿Porqué es necesario usar la subrutina Arcsine para determinar el ángulo de
inclinación?
Ejercicios
1. Escriba un comando that receives the aceleración medición from the
acelerómetro's eje y output pin connected to P10.
2. Escriba un comando that receives the aceleración medición from the
acelerómetro's eje x output pin connected to P9.
3. Escriba un comando que convierta el eje de medición x a microsegundos.
4. Escriba un comando que convierta el eje de medición x a millisegundos.
5. Escriba una linea de código PBASIC que escale un rango de 0 a 100 a un rango
de 20 a 32.
Página 114 · Sensores Inteligentes y sus Aplicaciones
Proyects
1. Diseñe un dispositivo que cuente el número de veces que gira su tarjeta en un
plano vertical. Asuma que empieza en 0˚.
2. Diseñe un dispositivo que muestre un mensaje de alarma cada vez que ha sido
inclinado más allá de 10˚ a partir de la horizontal.
Capítulo 3: Inclinación con el Acelerómetro Memsic · Page 115
Soluciones
Q1. Aceleración, inclinación y ángulo de inclinación, pendiente, rotación, vibración,
colisión, gravedad.
Q2. Sistemas micro electromecánicos, de sus siglas en inglés Micro electro-
mechanical systems.
Q3. Una burbuja de gas caliente.
Q4. Si, ya sea estática o dinámica.
Q5. Agregar una rutina de inicialización 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 más largo, con los puertos servo hacia
arriba. (Como en la Figura 3-14a).
Q8. Colocarla plana sobre una mesa.
Q9. El ángulo divide un círculo en 360 unidades, mientras que un radian binario
divide un círculo 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 triángulo.
Q13. Puesto que el acelerómetro medirá la aceleración 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 rotación a partir del plano vertical, sobre el que g está actuando.
Q14. De -127 a 127, que representa la longitud del lado x del triángulo.
Q15. De -127 a 127, que representa la longitud del lado y del triángulo.
Q16. Sabemos por geometría que la componente de gravedad que actúa en el
acelerómetro es g sin θ, entonces para obtener el ángulo debemos tomar
arcoseno.
'{$STAMP BS2}
'{$PBASIC 2.5}
DO
PULSIN 6, 1, x
PULSIN 7, 1, y
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
LOOP
DO
Capítulo 3: Inclinación con el Acelerómetro Memsic · Page 117
Figura 4-1
módulo de brújula Hitachi en la
tarjeta Board of Education con
una pantalla LCD
Figura 4-2
Ejes de sensado del módulo de brújula
−N sin θ − y
tan θ = =
N cos θ x
⎛−y⎞
tan −1 (tan θ ) = tan −1 ⎜⎜ ⎟⎟
⎝ x ⎠
⎛−y⎞
θ = tan −1 ⎜⎜ ⎟⎟
⎝ x ⎠
Partes Requeridas
(1) Módulo de brújula Hitachi HM55B
(6) Cables para conexiones
La Figura 4-4 muestra lo que la brújula debe mostrar cuando detecta que apunta a 35° en
sentido horario respecto al norte. No se preocupe ahora de una dirección exacta, el
programa solo está probando que el modulo trabaja. Hasta ahora y si lo usa para una idea
general de ubicación del norte, sur, este y oeste, debe estar funcionando.
Página 122 · Sensores Inteligentes y sus Aplicaciones
Figura 4-4: Salida de la Terminal de Depuración con la brújula apuntando a 35° en sentido
horario respecto al norte.
¡Descarga grátis! Este programa está disponible como el archivo gratuito de en la página
de Producto de “Sensores Inteligentes y sus Aplicaciones”, en www.parallax.com.
SHIFTOUT DinDout,clk,MSBFIRST,[Report\4]
SHIFTIN DinDout,clk,MSBPOST,[Status\4] ' Obtiene Status
ciclo UNTIL status = Ready ' Deja ciclo cuando status esta listo
RETURN
http://nationalatlas.gov/articles/geology/a_geomag.html
Uno de los mapas en esta página también muestra la intensidad total del campo
magnético en nanoteslas. La tesla (T) es una medición de la intensidad del campo
magnético, y nanoteslas (nT) son billonésimas de tesla. Las lecturas que regresan los ejes
x y y del módulo brújula están aproximadamente en millonésimas de teslas (µT). De
acuerdo con la hoja de datos del HM55B, las unidades de su modulo brújula podrían estar
entre 1 a 1.6 μT.
Chapter 4: El módulo de brújula Hitachi HM55B · Page 125
El módulo de brújula puede también sensar campos magnéticos de imanes, ¡pero estos
pueden dañar el sensor! ¡TENGA GUIDADO!
√ Comience por poner su tarjeta en una mesa y alinear hacia arriba su eje x con el
norte magnético.
√ Sostenga una barra magnética sobre el módulo de brújula 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 bájela hasta que la Terminal de Depuración
reporte una lectura de 120 en el eje x.
Página 126 · Sensores Inteligentes y sus Aplicaciones
Figura 4-5: Campo magnético de una barra magnética sobre el módulo brújula
√ Mantenga la barra magnética horizontal a la misma altura y rótela para que sus
polos N y S no estén alineados con el norte y sur terrestre. Conforme gira, la
rotación de la barra magnética debe ser fácil de rastrear con la Terminal de
Depuración.
Note como el campo magnético actuando sobre el módulo de brújula fué opuesto a lo que
mostraban los poles en la barra magnética. Esto es debido a la forma en que el campo
magnético da la vuelta del polo norte al sur de la barra magnética. La Figura 4-5 ilustra
esto con lineas de campo magnético que muestran el patrón del campo magnético
alrededor de la barra magnética.
Chapter 4: El módulo de brújula Hitachi HM55B · Page 127
También puede sostener la barra magnética al mismo nivel con el module brújula,
directamente enfrente, como se muestra en la Figura 4-6a. Esta vez los polos del imán
están alineados con el norte y el sur en vez de estar opuestos.
a. b.
módulo brújula. Con una brújula mecánica, su barra magnética automáticamente se alinea
con el norte, asi es que tendrá que mover el módulo de brújula alrededor de la brújula
mecánica y no al revés.
√ Inténtelo y note cuánta distorsión causa una brújula mecánica cercana sobre las
mediciones del módulo brújula.
Teniendo esta lección presente, asegúrese de mantener brújulas mecánicas muy lejos del
módulo de brújula al ejecutar y probar las calibraciones en las siguientes 2 actividades.
Configuración
√ 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 disposición, solo baje la
version .pdf de este texto de la página del producto Sensores Inteligentes y sus
Aplicaciones en www.parallax.com. Luego, haga una impresión.
Chapter 4: El módulo de brújula Hitachi HM55B · Page 129
Figura 4-8
Alineando al Norte
Magnético
Procedimiento
Cuando corra CalibrateCompass.bs2, le pedirá alinear su tarjeta a varios ángulos en la
impresión de la brújula y presionar la tecla enter después de cada uno. Los primeros dos
ángulos (0 y 90°) se muestran en la Figura 4-9.
a. b.
Chapter 4: El módulo de brújula Hitachi HM55B · Page 131
Transmit
Windowpane
Página 132 · Sensores Inteligentes y sus Aplicaciones
¡Descarga grátis! Este programa esta disponible como descarga grátis .bs2 en la página
del producto de Sensores Inteligentes y sus Aplicaciones en www.parallax.com. Si desea
saber cómo trabaja este programa, lea los comentarios aquí.
DEBUG "Click the Transmit Windowpane, ", CR, ' Espera al usuario.
"then press Enter... ", CR, CR
DEBUGIN character
DEBUG CR, "Press any key to", ' espera por el usuario
CR, "continue"
DEBUGIN character
DEBUG CR, CR
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
' Esta subrutina pide al usuario apuntar la brújula a norte, luego este, luego
Página 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:
' 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
Get_And_Store_Interpolation:
FOR counter = 0 TO 15
DEBUG CR, "Point brújula 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 fracción = 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
' Esta subrutina encuentra y guarda la dirección 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 código
' 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
Calibration_Review:
Página 136 · Sensores Inteligentes y sus Aplicaciones
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
RETURN
' Esta subrutina corrige interferencia acumulativa del campo magnético 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:
RETURN
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 interpolación lineal.
Si esto aún no es suficiente precisión para usted, la siguiente actividad le mostrará cómo
mejorar aún más.
Descarga Gratis. Este programa está disponible como descarga grátis .bs2 en la página
del producto Sensores Inteligentes y sus Aplicaciones en www.parallax.com. Lea los
comentarios del código para una explicación de cómo funciona.
' IMPORTANTE: Este programa confia en los valores EEPROM guardados por
' CalibrateCompass.bs2 durante el proceso de calibración.
Página 140 · Sensores Inteligentes y sus Aplicaciones
DEBUG CLS
' Esta subrutina maneja la communication BASIC Stamp - HM55B y guarda las
' mediciones de fuerza de campo magnético regresadas por el dispositivo en
' las variables de ejes x y y.
RETURN
' Esta subrutina corrige interferencia acumulativa del campo magnético 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.
Página 142 · Sensores Inteligentes y sus Aplicaciones
Compass_Correct_Offsets:
RETURN
Compass_Interpolate:
angleOffset = angleOffset * 16
angle = (angleOffset / span) + ((angleOffset // span) / (span / 2))
angle = ((index - 1 & $F) * 16) + angle
angle = angle & $ff
RETURN
√ Cambie el programa para mostrar grados con el caracter ASCII 176, símbolo °.
Un modo efectivo para eliminar los efectos del ruido es tomando un promedio de las
mediciones de los ejes x y y de la brújujla. Así, si el ruido causa que una medición sea un
poco más alta, la siguiente un poco más baja, y la siguiente correcta, el promedio de todas
las mediciones eliminará los altos y bajos y las establecerá en el valor correcto.
NEXT
Chapter 4: El módulo de brújula Hitachi HM55B · Page 145
RETURN
Negative CON 1
Positive CON 0
Descarga gratis Este programa está disponible como descarga grátis .bs2 en la página del
producto de Sensores Inteligentes y sus Aplicaciones en www.parallax.com.
Página 146 · Sensores Inteligentes y sus Aplicaciones
NEXT
Página 148 · Sensores Inteligentes y sus Aplicaciones
RETURN
√ 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 péguela 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 precisión de la actividad #3. Su brújula digital debe
funcionar realmente bien ahora.
Partes Requeridas
(1) Módulo brújula Hitachi HM55B
(1) LCD Serial Parallax (2×16)
(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, también necesitará:
Figura 4-12
Schematics de la LCD
Serial Parallax y el
módulo de brújula
Página 150 · Sensores Inteligentes y sus Aplicaciones
Figura 4-13
Colocando el Jumper de los puertos
Servo a Vdd
Configuración de jumper Vdd vs. Vin Determine qué fuente de energía está conectada a
los puertos X4 y X5. Si el jumper esta en Vdd, estos puertos reciben 5 V regulados del
regulador de tensión del Board of Education. Si está en Vin, el puerto recibe energía
directamente de la batería o de la fuente de energía. ¡ASEGÚRESE DE QUE SU JUMPER
ESTÁ PUESTO CORRECTAMENTE A Vdd O DAÑARÁ PERMANENTEMENTE SU LCD!
√ Conecte una punta del cable extensión en el Puerto 14 del cabezal X4,
asegurándose que las etiquetas "Red" y "Black" en el lado derecho del puerto X5
se alineen con los cables rojo y nego del cable extensión.
√ Asegúrese de que el cable blanco sea el más cercado a la etiqueta 14 y que el
cable nego es el más 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 asegúrese de que son correctas.
¡ATENCIÓN!
No reconecte la energía a su tarjeta hasta que esté seguro de que las conexiones
están correctas. Si comete un error con las conexiones de la LCD, esta será
permanentemente dañada.
Chapter 4: El módulo de brújula Hitachi HM55B · Page 151
Figura 4-15
Cableado en tableta
para la conexión de
cable de la LCD Serial
Parallax Cable y el
Módulo brújula
Figura 4-16: Módulo de brújula y LCD Serial Parallax Conectados con cable extensión
¡ATENCIÓN!
No reconecte la energía a su tarjeta hasta que esté seguro de que las conexiones
están correctas. Si comete un error con las conexiones de la LCD, esta será
permanentemente dañada.
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
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 aparición de caracteres fantasma cuando
cambia el número de dígitos en el valor, pero sin los molectos efectos laterales de
pantalla parpadeante que obtendría si de otra forma se limpiara la pantalla entre cada
medición.
' 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]
Descarga gratis Este programa está disponible como descarga grátis .bs2 en la página del
producto de Sensores Inteligentes y sus Aplicaciones en www.parallax.com.
Página 156 · Sensores Inteligentes y sus Aplicaciones
RETURN
Página 158 · Sensores Inteligentes y sus Aplicaciones
Su Turno
Intente extender las actividades de la sección “Su Turno” en la actividad #4 ahora con la
LCD Serial Parallax. No se preocupe de agregar funcionalidad de la LCD al programa de
calibración, solo al programa modificado de prueba de calibración de la actividad #3.
Podría necesitar recalibrar para eliminar interferencia magnética causada por la
proximidad de la LCD. Agregue un comando a la Rutina principal de
CalibrateCompass.bs2 que envíe unos cuantos caracteres a la LCD cada vez que haga un
ciclo antes de que lo corra. Para liberar un poco de espacio de código intente remover
unos caracteres de uno de los comandos DEBUG en la subroutine Calibration_Review.
Chapter 4: El módulo de brújula Hitachi HM55B · Page 159
RESUMEN
El módulo de brújula Hitachi HM55B es un sensor bi-axial de campo magnético capaz de
detectar variaciones de microteslas en las componentes del campo magnético de la tierra
actuando en sus ejes x y y. El angle del módulo a partir del norte puede ser determinado
dividiendo la medición del eje x entre la medición del eje y, y luego tomando el
arcotangente del resultado. El módulo de brújula también puede ser usado para detectar
campos magnéticos de barras magnéticas y la inclinación del campo magnético de la
tierra en su localidad.
Preguntas
1. ¿Cuál es la relación entre el eje x de medición del módulo brújula a un ángulo
dado y la medición cuando el eje x está alineado con el norte magnético?
2. ¿Cuáles son los nombres de cada uno de los pines del módulo brújula que tienen
que ser conecados a los pines E/S del BASIC Stamp?
3. ¿Hacia dónde se incrementa el ángulo a partir del norte en las brújulas
convencionales?
4. ¿Qué es declinación?
5. Si está midiendo un campo magnético cercano a una barra magnética, ¿cómo se
relaciona la dirección del campo magnético con sus marcas N y S?
6. ¿Porqué puede una brújula mecánica cercana causar errores en las mediciones
del módulo brújula?
7. ¿Cómo promediaría 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. ¿Cuál es el comando SEROUT para definer el símbolo de grados? ¿Cuántos bytes
envía?
Página 160 · Sensores Inteligentes y sus Aplicaciones
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 número 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 dirección presente en la LCD serial. Presione y libere un botón
para recordad esa dirección deseada. Si la dirección presente está movida por
más de 5°, emita un sonido de avertencia con un piezo parlante.
2. Diseñe un prototipo que le diga cuando si brújula digital Hitachi HM55B es
sostenida a nivel con la ayuda del Acelerómetro Mems 2125.
Chapter 4: El módulo de brújula Hitachi HM55B · Page 161
Soluciones
Q1. Si N es el valor reportado por x cuando está alineado con el norte magnético,
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 magnético y el norte verdadero.
Q5. La dirección del campo parecerá ser opuesta a las marcas N y S, debido a la
forma en que el campo magnético da vuelta.
Q6. La brújula mecánica contiene un pequeño imán que puede afectar el módulo
brújula.
Q7. Con una suma en ejecución de las 20 mediciones y dividir la suma total entre 20.
Q8. La suma en ejecución de x y y debe empezar en cero. Una vez que un cálculo
termine, las sumas contendrán un valor más alto. Para hacer un Segundo cálculo,
debe regresar la suma a cero.
Q9. El comando es 255, segudio por 8 bytes de datos caracter.
SEROUT pinNumber, baudrate, [255, byte0…byte7]
Q10. Primero escriba espacios para sobreescribir (borrar) el valor anterior, luego
coloque el cursor de regreso al punto inicial y escriba el nuevo valor.
IF (value.BIT15 = 1) THEN
DEBUG "Negative", CR
ELSE
DEBUG "Positive", CR
ENDIF
P1. Ejemplo de solución:
Asumiendo que un botón activo en nivel bajo está conectado a P10 y un piezo
parlante está conectado a P11 (Vea ¿Qué es un Microcontrolador?, Capítulos 3
y 8), LcdTestCompass.bs2 puede ser modificado como sigue:
Agregue estas directivas de pin a la sección de definiciones de E/S:
pushbutton PIN 10
Página 162 · Sensores Inteligentes y sus Aplicaciones
speaker PIN 11
IF PushButton = 1 THEN
angleMem = angle
alarmArm = 1
FREQOUT speaker, 20, 3000
SEROUT 14, 84, [148,"ON " ]
ENDIF
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
DO
Página 164 · Sensores Inteligentes y sus Aplicaciones
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
RETURN
Página 166 · Sensores Inteligentes y sus Aplicaciones
Capítulo 5: Fundamentos de juegos con el Acelerómetro· Page 167
Este capítulo tiene 4 actividades que demuestran las varias facetas del uso de inclinación
para controlar una pantalla. He aquí un resumen de cada actividad:
dentro del MX2125 cuando lo inclina. También establece los fundamentos del
acelerómetro para trabajar en conjunto con las técnicas de la actividad #2.
• Actividad #4: Control de Juego– Ahora está listo para usar la inclinación para
empezar a controlar su carácter de juego. Los caracteres de fondo pueden ser
usados para definir si su caracter de juego está dentro o fuera de los límites.
Diviértase personalizando y expandiendo este video juego por inclinación.
El siguiente programa ejemplo también hace uso del caracter de control CLRDN. DEBUG
CLRDN hace que todas las lineas por debajo de la posición actual del cursor sean borradas.
Transmit
Windowpane
Receive
Windowpane
'{$STAMP BS2}
'{$PBASIC 2.5}
x VAR Word
y VAR Word
temp VAR Byte
Página 170 · Sensores Inteligentes y sus Aplicaciones
DEBUG CLS,
"0123456789X", CR,
"1 ", CR,
"2 ", CR,
"3 ", CR,
"4 ", CR,
"5 ", CR,
"Y ", CR, CR
DO
LOOP
Escalado y Compensación
Estos conceptos fueron presentados en el Capítulo 3 para manejar valores de entrada del
acelerómetro. En el capítulo 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 Depuración una gráfica 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 Depuración y los ejes
usados por el comando CRSRXY.
Por ejemplo, donde los ejes de la gráfica intersectan en las coordenadas (0, 0) es de hecho
la posición CRSRXY 6,3 (compare esto con la Figura 5-2 hasta que perciba como es esto).
Para este programa nos gustría poder escribir “-3-3” en la Terminal de Depuración y
hacer que el asterisco aparezca en la coordenada (-3, -3) de la gráfica, que sería la
posición 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 traslación de mapeo
usando escalado y compensación.
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 número correcto de espacios. Esto es una escala
de 2 y una compensación de 6. Esta es la línea de PBASIC para hacer la conversión de
coordenada X a número 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 compensación de 3. Esta es la línea de PBASIC para hacer la conversión de
coordenada Y al número de retornos de carro.
y = 3 - y
'{$STAMP BS2}
'{$PBASIC 2.5}
x VAR Word
y VAR Word
temp VAR Byte
Capítulo 5: Fundamentos de juegos con el Acelerómetro· Page 173
DEBUG CLS,
" 3| ", CR,
" 2| ", CR,
" 1| ", CR,
"------+------", CR,
"-3-2-1| 1 2 3", CR,
" -2| ", CR,
" -3| ", CR, CR
DO
x = (x * 2) + 6
y = 3 - y
LOOP
√ Verifique que este programa no le permite introducir caracteres fueran del rango
de -3 a 3.
Puede usar una técnica algebráica estandar, resolviendo 2 ecuaciones con 2 incógnitas,
para definir las líneas que necesitará para transformar coordenadas Cartesianas en
coordenadas de pantalla para la Terminal de Depuración. El siguiente ejemplo muestra
cómo se hizo para las líneas que convierten x y y de Cartesianas a coordenadas de
pantalla en PlotXYGraph.bs2.
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
Figura 5-5
Coordenadas de prueba
Cuando se dieseña una pantalla para mostrar coordenadas Cartesianas, ayuda tomar un
par de valores antes y después como los de la Tabla 5-1. Entonces puede usarlos para
resolver la escala (K) y compensación (C) usando 2 ecuaciones con 2 incógnitas.
Xafter = (K × Xbefore ) + C
12 = (K × 3) + C
2 = (K × − 2 ) + C
Capítulo 5: Fundamentos de juegos con el Acelerómetro· Page 177
(2) De requerirse, multiplique una de las 2 ecuaciones por un término que iguale los
números de una de las incógnitas en ambas ecuaciones.
(3) Reste una ecuación de la otra para anular una de las incógnitas.
12 = (K × 3) + C
− [ 2 = (K × -2) + C ]
10 = K × 5
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
12 = (2 × 3) + C
12 = 6 + C
C = 12 - 6
C =6
Xafter = (K × Xbefore ) + C
K = 2 and C = 6
Xafter = (2 × Xbefore ) + 6
Página 178 · Sensores Inteligentes y sus Aplicaciones
Figura 5-6
Coordenadas de prueba
√ Repita los pasos 1 al 7 para la ecuación del eje y. La respuesta correcta es:
yafter = (− 1× ybefore ) + 3
Capítulo 5: Fundamentos de juegos con el Acelerómetro· Page 179
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 más comunes en CRTs son 60, 70, y 72 Hz. Otros
dispositivos como algunas pantallas LCD y LED sostienen la imagen automáticamente, 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í también como trabaja la video compresión en su computadora. A fin de
reducir el tamaño 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
Depuración o una LCD), el BASIC Stamp puede guardar una imagen de un juego o un
fondo de gráfica en su EEPROM. Cuando un caracter de juego se mueve y es redibujado
en una posición diferente, el BASIC Stamp puede leer su EEPROM y redibujar los
caracteres de fondo en la antigua posición del carácter 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 técnica puede salvar una considerable cantidad de tiempo que el BASIC
Stamp puede necesitar para ejecutar otras tareas.
caracteres en la EEPROM y luego desplegarlos con un ciclo FOR…NEXT 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 también que cada renglón es de
14 caracteres de ancho cuando agrega el caracter de control CR. La programación es más
fácil si cada renglón es del mismo ancho. De otra forma, encontrar el carácter que desea
se vuelve un problema más 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
FOR…NEXT. 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 más
Capítulo 5: Fundamentos de juegos con el Acelerómetro· Page 181
END
√ Este mapa muestra 16 caracteres por renglón en vez de 14. Revise que tiene en
total 100 caracteres (0 a 99) guardados para fines de pantalla en la EEPROM.
(1) Declare un par de variables para guardar los valores viejos, xOld y yOld por
ejemplo.
x VAR Word
y VAR Word
(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.
Capítulo 5: Fundamentos de juegos con el Acelerómetro· Page 183
DO
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, "*"
DEBUGIN temp
Re-Dibujando el Fondo
Hasta este punto, todos nuestros trazados acumularon asteriscos mientras introducíamos
más valores en la ventana de Transmisión. El efecto neto que queremos para control de
juego es hacer desaparecer el asterisco de su vieja posición y aparecer en su nueva
posición cuando la redefinamos para dar el aspecto de un asterisco moviéndose.
Página 184 · Sensores Inteligentes y sus Aplicaciones
Observe la Figura 5-9. Note que 6 pares ordenados fueron introducidos en la Terminal de
Depuración, 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 posición, 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 técnica de fondo definida con
DATA de EepromBackgroundDisplay.bs2 con la técnica de graficado de asterisco y rastreo
de posición de PlotXYGraphRecall.bs2. Esta combinación nos permite redibujar el
caracter de fondo sobre el viejo asterisco con este código:
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
Capítulo 5: Fundamentos de juegos con el Acelerómetro· Page 185
Lo más importante que hay que tener en cuenta en relación de esta técnica de
programación es que se ahorra al procesador mucho tiempo. Solo tiene que recuperar un
caracter de la EEPROM y enviarlo a la Terminal de Depuración. 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.
DO
LOOP
Capítulo 5: Fundamentos de juegos con el Acelerómetro· Page 187
DO
LOOP
Página 188 · Sensores Inteligentes y sus Aplicaciones
Parts Required
(2) Cables conectores de 3 pulgadas
(2) Resistencias – 220 Ω
(1) Acelerómetro Bi-axial Mems MX2125
Asterisk Indicates
Hot Gas Location
Página 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 inclinación en la posición de la bolsa de gas.
Level (0, 0)
Tilt
(-3, 0)
Right
Figura 5-12:
Inclinación del
Acelerómetro y
Posición del
Tilt
(3, 0) Cursor
Left
Tilt
(0, -3)
Down
Tilt
(0, 3)
Up
Capítulo 5: Fundamentos de juegos con el Acelerómetro· Page 191
Cada uno de estos pasos es discutido con más detalle en la sección que sigue al programa
ejemplo.
' Guarda fondo en EEPROM ' Direccion del ultimo caracter en el renglon
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 código
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
Página 194 · Sensores Inteligentes y sus Aplicaciones
Si las mediciones del acelerómetro están ligeramente fuera de la escala de 1875 a 3125,
puede causar síntomas extraños. Los operadores MIN y MAX previenen esto. También 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 inclinación, la posición 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 oración y = 10 - y resuelve esto. Si y es 0, después de escalar
se vuelve 10. Igualmente, si y es 10 después de escalar se vuelve 0. Si es 9 después de
escalar se vuelve 1, si es 8 después 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 porción “on” del asterisco parpadeante.
' Despliega el asterisco en la nueva posicion del cursor.
DEBUG CRSRXY, x, y, "*"
PAUSE 50
Figura 5-13
Grupo de Asteriscos
con Refrecado de Fondo
Página 196 · Sensores Inteligentes y sus Aplicaciones
Intente primero el juego y luego veremos con más detalle como funciona.
Descarga gratis Este programa está disponible como descarga grátis .bs2 en la página del
producto de Sensores Inteligentes y sus Aplicaciones en www.parallax.com.
' 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
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 obstáculos.
Puesto que todas las variables inicializan en cero en PBASIC, una falla en su
inicialización causaría que el caracter de juego empezara en la esquina superior izquierda
en vez de a la mitad.
x = 10
y = 5
symbol = Maze
La segunda rutina es crucial; es una linea SELECT…CASE que sigue las reglas del juego.
La línea SELECT…CASE ve el caracter de fondo en la posición presente del asterisco. Si el
asterisco esta sobre un espacio " ", la línea SELECT…CASE no necesita cambiar nada y el
DO…LOOP de la Rutina Principal solo se mantiene repitiéndose, revisándo las mediciones
del acelerómetro y actualizando la posición 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 símbolo 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
Capítulo 5: Fundamentos de juegos con el Acelerómetro· Page 203
Al navegar su asterisco sobre " ", "$", or "%", la siguiente rutina es ignorada porque
symbol aún guarda Maze. La línea SELECT…CASE solo cambia esto cuando el asterisco es
movido sobre "#", "W", "I", o "N". Siempre que la línea SELECT…CASE 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
√ Verifique que tanto el botón Run del Editor BASIC Stamp y el botón Reset de la
tarjeta Board of Education se comportan igual después de esta modificación.
Página 204 · Sensores Inteligentes y sus Aplicaciones
√ 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.
RESUMEN
La actividad #1 presenta los caracteres de control, técnicas para mantener los caracteres
dentro de los límites del trazado y el álgebra para mapear coordenadas a trazado. Los
ejemplos de caracteres de control incluyeron CRSRXY y CLRDN. Los ejemplos de límites de
trazado incluyeron los operadores MIN y MAX y una técnica IF…THEN. Las técnicas de
mapeo incluyeron ecuaciones PBASIC simples para cambiar los valores de las
coordenadas x y y de Cartesianas a sus equivalentes de Terminal de Depuración.
La actividad #3 demostró cómo las mediciones del acelerómetro del Capítulo 3 pueden
ser combinadas con las técnicas de posicionado de cursor y llamado de caracter de la
actividad #2 para crear una pantalla controlada por inclincación. Se usaron mediciones
simples PULSIN para medir la inclinación y los ejes x y y del acelerómetro. Los valores
de inclinación fueron escalados y compensados usando las técnicas presentadas en el
Capítulo 3, actividad #3. Los valores modificados x y y dictaron el posicionado del
cursor para escribir el asterisco en la Terminal de Depuración. La posición del asterisco
relativa al plano Cartesiano desplegado en el fondo representó el centro de la bolsa de
aire caliente dentro de la cámara del MX2125. Al moverse el asterisco, el fondo de su
posición previa fue redibujado usando las técnicas presentadas en la actividad #2.
ser incorporados fondos múltiples en un juego haciendo uso de los operadores opcionales
@Address y nombre Símbolo de las directivas DATA. Puesto que el nombre Símbolo es en
realidad la dirección EEPROM al principio de una directiva DATA determinada, su
programa puede accesar elementos en diferentes fondos agregando el valor de Symbol al
argument de dirección del comando READ.
Preguntas
1. ¿Qué significan las siglas HID?
2. ¿Qué caracter de control causa que todas las líneas por debajo de la posición
presente del cursor sean borradas?
3. ¿Qué comando y qué formateador puede usar para guardar en la variable X un
solo dígito que teclee en la ventana de Transmisión Terminal de Depuración?
4. ¿Existen otras técnicas de programación que pueda usar con otros operadores
para prevenir que el valor que guarda una variable exceda un valor máximo o
mínimo?
5. ¿Cuáles 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 acelerómetro a la izquierda, ¿hacia dónde 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 acelerómetro?
10. ¿Qué eje fue el fulcrum si el acelerómetro empezó en (2, 2) y terminó en (-2, 2)?
11. Si las lecturas del acelerómetro viajan de (0, 5) a (0, -5), de nuevo y
repetidamente, ¿que secuencia de movimiento es la que probablemente ocurre?
12. ¿Cuál es el valor de YouWin?
13. ¿Qué comando puede usar para checar el valor de un nombre Símbolo de una
directiva DATA?
14. Si cambia el operador @Address de la directiva Maze DATA de 0 a 10, ¿qué
tendría que hacer a las otras directivas DATA en el programa?
15. En TiltObstacleGame.bs2, ¿qué clase de bloque de código hace mandatorias las
reglas del juego?
16. ¿Qué comando cambia los valores "%" de regreso a valores "$" en la EEPROM?
Capítulo 5: Fundamentos de juegos con el Acelerómetro· 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 Depuración”.
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 compensación que necesitará para desplegar pares
ordenados introducido en la ventana de Transmisión de la Terminal de
Depuración en un sistema coordenado cartesiano que vaya de -5 a 5 en ambos
ejes x y y.
4. Escriba una rutina que dibuje un rectángulo 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
tamaño de variable mínimo que puede usar para establecer la dirección para su
comando READ y explique su selección. ¿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.
Página 208 · Sensores Inteligentes y sus Aplicaciones
Soluciones
Q1. Dispositivo de interface humana (en inglés Human interface device).
Q2. CLRDN.
Q3. DEBUGIN DEC1 x.
Q4. Si, también puede usar las líneas IF…THEN para checar si los valores están fuera
de los límites.
Q5. 60, 70, y 72 Hz.
Q6. Puede usar un ciclo FOR…NEXT, con líneas 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 posición inclinada a la derecha a otra inclinada a la izquierda.
Q10. El eje Y, o el más largo eje de la tarjeta Board of Education.
Q11. Inclinar la tarjeta arriba y abajo repetidamente.
Q12. Dirección 486 de la EEPROM.
Q13. Puede usar el comando DEBUG como lo haría para desplegar el valor de
cualquier otra cantidad numérica, use el modificador DEC.
DEBUG DEC symbol
READ index + symbol, char
Q14. Necesitaría agregar 10 a cada valor símbolo, entonces su programa sería:
YouLose DATA @253…
YouWin DATA @496 …
Q15. Una línea SELECT…CASE.
Q16. El comando WRITE.
E1. Solución ejemplo:
DEBUG CRSRXY, 5, 7,
"* esta es la coordenada (5,7) en la Terminal de Depuración"
E2. Solución ejemplo:
DEBUG CLS,
" 2| ", CR,
" 1| ", CR,
"----+----", CR,
"-2-1| 1 2", CR,
" -2| ", CR, CR
FOR x = 1 TO 15
FOR y = 1 TO 5
DEBUG CRSRXY, x, y, "*"
NEXT
NEXT
E5. El número de caracteres a guardar equivale a 5 x 3 = 15. El mínimo tamaño de
variable a usar sería un Nibble (4 bits), con lo cual las direcciones pueden ir de 0
a 15. Habría espacio solo para un (1) caracter adicional.
P1. La clave para resolver este problema es mover la gráfica dentro del DO…LOOP y
cambiar CLS a HOME. Puede haber otras formas de solución. Solución 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
Página 210 · Sensores Inteligentes y sus Aplicaciones
Capítulo 6: Más Proyectos con el Acelerómetro · Page 211
Partes Requeridas
Use la lista de partes y circuito del Capítulo 3, actividad #2 en la página 71 para su línea
de visión.
Programa Ejemplo
Use el programa ejemplo VertWheelRotation.bs2 from de la página 95 (Capítulo 3,
actividad #5) junto con las modificaciones de pantalla LCD en la sección Su Turno –
Pantalla LCD en la página 96.
Procedimiento
√ Use su tarjeta línea de visión a la cima del objeto y registre el ángulo.
√ Mida la distancia entre su punto de observación y el objeto (lado adyacente en la
Figura 6-1).
√ Mida la altura a la cual sostuvo el acelerómetro.
√ Use los siguienes calculos para determinar la altura del objeto.
Cálculos
Sabemos de capítulos previos que θ equivale al lado opuesto dividido entre el lado
adyacente de un triángulo rectángulo. Multiplicar ambos lados por la distancia adyacente
resulta en una expresión para resolver la altura opuesta. Es la distancia adyacente
multiplicada por la tangente del ángulo.
opposite
tan θ =
adjacent
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 acelerómetro cuando tomó la medición.
Ejemplo
Digamos que la distancia adyacente a un objeto es 10 m, y que a esa distancia el
acelerómetro fué sostenido a 1.5 m del piso para tener una linea de visión a la cima de un
objeto. El ángulo reportado por el acelerómetro fue 61°. Con esto podemos estimar la
altura del objeto en 19.54 m, como se indica a continuación.
Adjacent distance = 10 m
Accelerome ter measured θ = 61°
Accelerome ter height = 1.5 m
Records = 0 RecordsEnd = 10
Clear_Data:
FOR eeIndex = Records TO RecordsEnd
WRITE eeIndex, 100
NEXT
DEBUG CR, "Records cleared."
PAUSE 1000
RETURN
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
Página 216 · Sensores Inteligentes y sus Aplicaciones
cada valor antes de ser guardado con el comando WRITE, se resta 100 a la variable value
después 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
Transmit
Windowpane
Figura 6-2
Introduciendo valores
para
EepromDataStorage.
Receive bs2
Windowpane
'{$STAMP BS2}
'{$PBASIC 2.5}
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
Página 218 · Sensores Inteligentes y sus Aplicaciones
ENDSELECT
LOOP
Clear_Data:
FOR eeIndex = Records TO RecordsEnd
WRITE eeIndex, 100
NEXT
DEBUG CR, "Records cleared."
PAUSE 1000
RETURN
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
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
En la actividad #4, usaremos esta característica para cambiar el número de registros que
el programa guarda a 1000 con Records DATA (1000). 11
En este ejemplo, si esa condición es verdad, el programa termina aquí. La siguiente vez
que presione y libere su botón Reset, value será impar, la condición será falsa y el
bloque de código no detendrá el programa antes de que alcance la Rutina Principal. Si el
botón Reset es presionado y liberado nuevamente, el bloque de código detenderá el
Página 220 · Sensores Inteligentes y sus Aplicaciones
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
'{$STAMP BS2}
'{$PBASIC 2.5}
Reset DATA 0
Records DATA (10)
RecordsEnd DATA
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
DO
Página 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
Clear_Data:
FOR eeIndex = Records TO RecordsEnd
WRITE eeIndex, 100
NEXT
DEBUG CR, "Records cleared."
PAUSE 1000
RETURN
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..."
Capítulo 6: Más Proyectos con el Acelerómetro · Page 223
DEBUGIN char
RETURN
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
Parts Required
(1) Acelerómetro Mems 2125
(2) resistencias 220 Ω
(1) piezo parlante
(4) cables conectores
Página 224 · Sensores Inteligentes y sus Aplicaciones
Circuito
√ Construya los circuitos de acelerómetro y piezo parlante de la Figura 6-3.
Figura 6-3
Acelerómetro y Piezo parlante,
esquemático (Izquierda) y
Diagrama de conexiones (abajo)
Modificaciones al Programa
El siguiente programa ejemplo, DatalogAcceleration.bs2, es una expansión de
EepromDataStorageWithReset.bs2. Ha sido modificado para que pueda iniciar, parar y
reiniciar el registro con el botón 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 Depuración. Esta es una característica crucial para tomar
mediciones de campo y luego desplegarlas más tarde.
Init:
.
.
Capítulo 6: Más Proyectos con el Acelerómetro · Page 225
.
FOR char = 10 TO 0
.
.
.
FREQOUT 4, 50, 3750
PAUSE 950
NEXT
.
.
.
Record_Data:
PULSIN 6, 1, x
PULSIN 7, 1, y
WRITE eeIndex, x
WRITE eeIndex + 1, y
NEXT
The piezo parlante también suena dos veces con un sonido más alto al principo del
registrado de datos. Una característica importante de este contador regresivo es que puede
Página 226 · Sensores Inteligentes y sus Aplicaciones
detener el registro antes de que inicie solo con presionar y liberar el botón Reset de su
tarjeta. Para reiniciar el conteo regresivo, solo presione y libere el botón Reset otra vez.
Descarga gratis Este programa está disponible como descarga grátis .bs2 en la página 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 acelerómetro 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 más largos
y lentos, la subrutina Record_Data puede ser alentada con un comando PAUSE.
Cuando esté listo para empezar a inclinar the acelerómetro por 15 segundos, presione y
libere el botón Reset. El registrador sonará durante la cuenta regresiva de 10 segundos,
luego terminará con 2 pitidos más altos indicando el inicio del registrador. Hará un solo
pitido más alto cuando haya terminado.
'{$STAMP BS2}
'{$PBASIC 2.5}
Reset DATA 0
Records DATA (1000)
RecordsEnd DATA
Init:
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
DO
DEBUG CLS,
"Press/Release Reset", CR,
Página 228 · Sensores Inteligentes y sus Aplicaciones
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
Clear_Data:
DEBUG CR, "Clearing..."
FOR eeIndex = Records TO RecordsEnd
WRITE eeIndex, 0
NEXT
DEBUG CR, "Records cleared."
PAUSE 1000
RETURN
Record_Data:
PULSIN 6, 1, x
PULSIN 7, 1, y
Capítulo 6: Más Proyectos con el Acelerómetro · Page 229
WRITE eeIndex, x
WRITE eeIndex + 1, y
NEXT
RETURN
Display_Data:
...con estos 2:
READ eeIndex, value
value = value */ 361
mediciones de aceleración cubiertas en esta actividad junto con giroscopios que miden la
rotación del vehículo.
Hardware y Configuración
La Figura 6-4a muestra un carro RC económico que puede ser obtenido en muchas
tiendas de pasatiempos y tiendas de electrónica. La Figura 6-4b muestra cómo la tarjeta
fue montada. Se fijaron patitas de goma por debajo de la tarjeta de tal forma que ninguna
de sus conexiones eléctricas estuviera en contacto con alguna de las partes metálicas del
carro RC. Otra opción hubiera sido usar cinta adhesiva de doble cara para fijar la tarjeta
al techo plástico del carro. La tarjeta fue orientada con la tableta hacia el frente del carro.
a. b.
Evite corto circuitos accidentales. Asegúrese 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 eléctricas.
Como Trabaja
La Figura 6-5 muestra una gráfica de las mediciones del eje y del acelerómetro al acelerar
el carro hacia enfrente, desacelerado para detenerlo y luego acelerado en reversa. Las
Página 232 · Sensores Inteligentes y sus Aplicaciones
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
Acelerómetro en el Carro
-20 RC
-30
Stop
-40
seconds/30
Decelerate
Accelerate
Forward
La razón de que la aceleración 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 aceleración es negativa. Cuando un carro reduce su
velocidad, de hecho está acelerando hacia atrás. Esto se muestra en la Figura 6-5.
Primero, el carro acelera al frente, luego aplicó frenos y perdió velocidad (desaceleró).
La medición y fue positiva, luego la aceleración fué negativa. Después 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 medición y es negativa otra vez.
Capítulo 6: Más Proyectos con el Acelerómetro · Page 233
Figura 6-6
Aceleración del Carro RC
vs Ejes de Sensado del
Acelerómetro
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 súbita 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 cómo 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 círculo en el que está viajando.
Figura 6-7
Viajando en un Círculo
La Figura 6-8 muestra una gráfica de las mediciones del eje x del acelerómetro al
manejar el carro RC en círculos dando vueltas a la izquierda, luego en círculos dando
vueltas a la derecha. Note como la medición del eje x muestra aceleración positiva
cuando el carro RC da vuelta a la izquierda, y aceleración negativa cuando el carro RC
da vuelta a la derecha.
Página 234 · Sensores Inteligentes y sus Aplicaciones
60
40
20 Figura 6-8
0 Mediciones del
gravity/100
-20
0 100 200 300 400 500 600
Acelerómetro en el Carro
-40 RC mientras se maneja
-60 en círculos
-80
-100
seconds/30
Right Turn
Circles
La Figura 6-9 muestra cómo está orientado el eje x del acelerómetro y la aceleración que
mide. Para una vuelta a la izquierda, el carro está acelerando a la izquierda, lo que para el
acelerómetro es una medición de aceleración en el eje x positiva. Cuando da vuelta a la
derecha, la aceleración es en la dirección opuesta del eje x positivo, entonces la medición
en el eje x es negativa.
a. b.
Capítulo 6: Más Proyectos con el Acelerómetro · Page 235
Procedimiento
El procedimiento para medir y luego graficar la aceleración del carro RC es como sigue.
Las siguientes instrucciones explican como importar el archivo .txt en Microsoft Excel
2002 y graficarlo. Si está usando un programa de hoja de cálculo diferente, las palabras
clave como espacio delimitado, trazado disperso XY pueden darle pistas de cómo hacerlo
en su software de hoja de cálculo particular.
√ Su hoja de cálculo debe ser de 3 columnas (ancho) y como 503 renglones (largo)
El siguiente paso, que también se ha documentado para Microsoft Excel 2002, es correr
la herramienta de gráfico y decirle qué tipo de gráfica y cómo quiere que se vea.
Solo partes de cda gráfica son relevantes. Considere que los datos que tendrán sentido
para el eje y es la porción de tiempo en que el carro aceleró hacia delante y en reversa. Del
mismo modo, la parte de la gráfica que tendrá sentido para el eje x es la porción cuando el
carro estaba dando vuelta.
Descargando la hoja de cálculo. Las hojas de cálculo de MS Excel usadas para trazar
estas gráficas están disponibles como descarga en la página de Sensores Inteligentes y sus
Aplicaciones en www.parallax.com. Descargue la hoja de cálculo y examine las ecuaciones
en las columnas junto con las configuraciones para cada trazado.
Por ejemplo, la gráfica de aceleración en la Figura 6-10 muestra un trazado para el carro
RC al acelerar adelante y atrás. (La hoja de cálculo fué modificada para que los valores
positivos indiquen aceleración al frente y los valores negativos indiquen aceleración atrás
o desaceleración.) Entonces, esta gráfica 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
Capítulo 6: Más Proyectos con el Acelerómetro · Page 237
de unos 1.4 g por poco más de 2 segundos. Entonces descansó como por 1 segundo.
Después, aceleró en reversa y desaceleró (aceleró en reversa) para un segundo paro.
Figura 6-10: Gráfica de aceleración modificada con valores positivos indicando hacia adelante
Seleccionando Datos a Graficar. Haga click derecho sobre la linea en la gráfica con el
título "RC Car acceleration for Forward and Backward.” Luego seleccione source data y
haga click en la pestaña Series. Note que la serie que está siendo ploteada es de F229 a
F492. Esta es la segunda de 2 pruebas adelante/atrás que fueron ejecutadas durante la
sesión de registro de datos. Lo mismo aplica a las gráficas de velocidad y posición.
Se agregó una columna con una ecuación la hoja de cálculo que calcula el cambio en la
velocidad para cada medición de aceleración. La ecuación para la velocidad en una linea
recta es v = v0 + at. Esto es, la velocidad inicial (v0) más el producto de la aceleración
(a) y la duración de esa aceleración (t). Agregar una columna a la hoja de cálculo que
recalcula la velocidad entre cada medición de aceleración 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 aún más (incrementa en dirección
negativa). Entonces, al irse deteniendo de su movimiento en reversa, su velocidad regresa
a casi cero.
Página 238 · Sensores Inteligentes y sus Aplicaciones
Figura 6-11: Gráfica de velocidad derivada de los datos de posición inicial y aceleración
Los cálculos para esta gráfica se hicieron en la columna F de la hoja de cálculo. Si hace
click en la celda F-17 de la hoja de cálculo, esta ecuación debe aparecer en el campo de
función:
=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 medición E17, que está en centésimas de una g y la convierte a
metros por segundo (m/s2). Al dividir entre 100 se toma el valor de centésimas 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 cálculo para aceleración y velocidad, ahora es posible
seguir la posición del carro usando la ecuación s = s0 + v0t + 1/2 at2. Esto es, la posición
del carro (s) es igual a la posición inicial (s0) mas el producto de la velocidad inicial y el
tiempo (v0t), mas el semiproducto de la aceleración y el cuadrado del tiempo (1/2 at2). La
resultante gráfica de posición 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 detrás de donde empezó.
Capítulo 6: Más Proyectos con el Acelerómetro · Page 239
=G16+(F16*0.03)+((0.5*E17*9.8/100)*(0.03^2))
G16 es la posición después de la muestra previa, que es S0, la posición 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 técnica es bastante exacta en períodos cortos de tiempo, varias fuentes
de error se arrastran en cada medición. Las superficies no lisas y la vibración afectarán
las mediciones de aceleración. Las ecuaciones asumen que la aceleración entre cada
medición es constante, pero en muchos casos la aceleración cambiará durante el tiempo
entre cada muestra. Además, cada medición del acelerómetro tiende a ser erronea en un
pequeño 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 compensación de cero y sensitividad. Variarán de un integrado a otro y también
son influenciados por la temperatura. Tomar mediciones de precisión con el MX2125
involucra un convertidor A/D, a coprocesador de punto flotante, y datos obtenidos de
pruebas de calibración. Este procedimiento de calibración esta fuera del alcance de este
texto. Para averiguar más acerca de este tema, consulte #AN-00MX-002 Thermal
Acceleromters Temperature Compensation, disponible en el sitio web de Memsic.
Página 240 · Sensores Inteligentes y sus Aplicaciones
¡Esta actividad fué incluída con fines de ilustración – no se espera que el lector se
suba a una patineta! Este es solo un ejemplo de como el lector puede usar el
acelerómetro 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 común y equipo de protección adecuado y
conduzca los experimentos bajo su propio riesgo (vea la Desvinculación de
Responsabilidad al reverso de la página inicial).
Figura 6-13: Tarjeta BASIC Stamp HomeWork adherida a la patineta del Autor
Capítulo 6: Más Proyectos con el Acelerómetro · Page 241
3.5
3
f
2.5
1.5
gravity (g)
1 Figura 6-15
0.5 Aceleración 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 acelerómetro causada por el impacto.
La Figura 6-16 muestra los datos para un ollie un poco mejor. Fue un poco más alto y el
paso e se hizo con gracia. Note que el paso de a a b es más 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 gráfica anterior, indican un ollie mayor. Note también que el impacto fue menor
a 3 g, porque el patinador no estaba intentando de recuperar con la patineta en su camino
hacia abajo.
Capítulo 6: Más Proyectos con el Acelerómetro · Page 243
3.5
2.5 f
2
1.5
gravity, (g)
1 Figura 6-16
0.5 Gráfica 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 cómo el eje y de sensado del acelerómetro 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
Acelerómetro’s Sensing
Axes on the patineta
PULSIN 7, 1, y
NEXT
Página 244 · Sensores Inteligentes y sus Aplicaciones
NEXT
'{$STAMP BS2}
'{$PBASIC 2.5}
Reset DATA 0
Records DATA (1000)
RecordsEnd DATA
Init:
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
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
Clear_Data:
Página 246 · Sensores Inteligentes y sus Aplicaciones
RETURN
Record_Data:
PULSIN 7, 1, y
NEXT
RETURN
Display_Data:
NEXT
RETURN
No permita que el metal en el lado inferior de su tarjeta entre en contacto con los
rayos. Use un material aislante como plástico, cartón o espuma esd para aislar la parte
inferior de la tarjeta de los rayos.
Página 248 · Sensores Inteligentes y sus Aplicaciones
Figura 6-18
HomeWork Board con el
acelerómetro montada en
una rueda de bicicleta
a. b.
El siguiente programa ejemplo demuestra una forma de resolver este problema con
histéresis. Histéresis 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 histéresis, la medición
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 más alto antes de reconocer un cambio.
Luego, la medición 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
medición fué menor que el valor bajo y luego arriba del valor alto, incrementa el contador
de revoluciones en 1.
He aquí un código que ejecuta histéresis. 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 medición 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 medición del eje y, que fue menor que
Capítulo 6: Más Proyectos con el Acelerómetro · 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
counter = counter + 1
FREQOUT 4, 200, 3750
LOOP
Banda muerta (Deadband): El rango entre 2350 y 2650 en el bloque de código anterior es
referido como banda muerta.
'{$STAMP BS2}
'{$PBASIC 2.5}
x VAR Word
y VAR Word
counter VAR Word
DEBUG CLS
DO
PULSIN 7, 1, y
ciclo
counter = counter + 1
FREQOUT 4, 200, 3750
LOOP
La Figura 6-19 es tan solo una gráfica de dos velocidades diferentes. Es cierto, el código
de histéresis 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 simulación podría tambien ser usado para
verificar los imprevistos. Aún cuando esta clase de especialización está disponible, el
producto aún 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 aún
tiene que ser llevado a través de las diversas condiciones que pudiera experimentar en la
Capítulo 6: Más Proyectos con el Acelerómetro · Page 251
bicicleta de cualquier persona antes de que sea seguro hacer la inversión en cajas
plásticas y un diseño electrónico más refinado que presente partes de bajo costo,
producción en masa y costos de inventarios.
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 aceleración, bajo tantas situaciones
diferentes como sea posible. He aquí el programa que fue usado para registrar los datos
para la gráfica en la Figura 6-19. Note que está registrando valores de tamaño de una
palabra para las mediciones de los dos ejes x y y. La hoja de cálculo ha tomado el trabajo
de cambiar las mediciones primarias del acelerómetro PULSIN a mediciones de gravedad.
'{$STAMP BS2}
'{$PBASIC 2.5}
Reset DATA 0
Records DATA (1000)
RecordsEnd DATA
Init:
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
DO
DEBUG CLS,
Capítulo 6: Más Proyectos con el Acelerómetro · Page 253
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
Clear_Data:
DEBUG CR, "Clearing..."
FOR eeIndex = Records TO RecordsEnd
WRITE eeIndex, 0
NEXT
DEBUG CR, "Records cleared."
PAUSE 1000
RETURN
Record_Data:
PULSIN 6, 1, x
Página 254 · Sensores Inteligentes y sus Aplicaciones
PULSIN 7, 1, y
NEXT
RETURN
Display_Data:
Su Turno
Otra cosa por examinar es como se ejecutan las mediciones de rotación en el plano
vertical bajo las diversas condiciones de rueda de bicicleta.
¿Hay un comportamiento del ángulo medición para el cual la histéresis pueda ser
aplicada bajo todas las condiciones de manejo?
Capítulo 6: Más Proyectos con el Acelerómetro · Page 255
RESUMEN
Este capítulo presentó una variedad de aplicaciones del acelerómetro y de las técnicas de
registro de datos que pueden ser usadas para estudiar las mediciones del acelerómetro en
varias condiciones, y en algunos casos, para refinar sus programas. Cuando se observa la
cima de un objeto, las mediciones de rotación en un plano vertical pueden ser usadas con
la distancia al objeto y algo de trigonometría para determinar la altura del objeto.
Se presentaron directivas DATA con nombres Símbolo 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 programación EEPROM no usada. Puesto que
los nombres Símbolo guardan la dirección 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.
También se presentó una técnica para usar una directiva DATA para apartar un byte para
establecer el modo del programa. Cada vez que el programa inicia, una rutina de
inicialización 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
botón 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 característica
en el programa, se usó una línea 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.
Preguntas
1. ¿Cuáles son las 3 piezas de información que necesita para medir la altura de un
edificio a distancia?
Página 256 · Sensores Inteligentes y sus Aplicaciones
Ejercicios
1. La cima de un edificio se divisó a 75° desde un punto de observación a 15 m del
edificio y a 1 m a partir del piso. ¿Cuál es la altura del edificio?
2. Escriba un par de directivas DATA que reserve 1501 bytes. Use nombres símbolo.
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 código 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
fácilmente 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 mecánico comúnmente usado en areas de
ski.
2. Diseñe un prototipo de pedómetro (contador de pasos).
Capítulo 6: Más Proyectos con el Acelerómetro · Page 257
Soluciones
Q1. (1) La altura a partir de la cual la medición 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, tendría
que insertar el modificador Word antes del valor 1000. Considere que tendrá que
incrementar eeIndex en 2 antes de guardar el siguiente valor.
Q4. Necesitaría: 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 duración y frecuencia). El conteo antes de registrar
datos involucra 11 tonos de 50 ms y 3.75 kHz seguidos por 2 tonos más
pronunciados y agudos (75 ms y 4 kHz). Después de registrar datos, el piezo
parlante emite un chirrido más largo (200 ms y 4 kHz) para decirle al usuario
que el registrado de datos esta completo.
Q6. Incrementa el valor entre paréntesis 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 dirección opuesta a adelante.
Q8. Hacia el centro de un círculo.
Q9. Esta es una comparación 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 compensación tampoco. Es solo la medición primaria del eje y, que va
de 1875 a 3125. En ambos programas se requiere un valor de una palabra para
guardar cada medición. 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. Aún
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 ningún tiempo para un comando PULSIN que hubiera de otra manera
leido el eje x.
E1. Altura del objeto = opuesto + altura del acelerómetro
= (adyacente × tan (75˚)) m + 1 m
= (15 × 3.73) m + 1 m
Página 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
Artícule de ayuda resultante usado: http://en.wikipedia.org/wiki/Avalanche
Information clave: La sección Terrain indica que una inclinación abajo de 25˚ o
ariba 60˚ presenta bajo riesgo y que el riesgo más alto está en pendientes entre
35 a 45˚.
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
Página 260 · Sensores Inteligentes y sus Aplicaciones
' IMPORTANTE, siga las instrucciones para poder colocar sus propios
' valores. Las encontrará en la sección Soluciones del Capítulo 6.
' Examine la solucion del Proyecto 2 para información de como
' determinar sus propias constantes StepLow y StepHigh.
y VAR Word
yOld VAR Word
stepCnt VAR Word
yOld = 3300
DO
PULSIN 7, 1, y
IF (y <= 2900 y yOld >= 3300) OR (y >= 3300 y yOld <= 2900) THEN
yOld = y
stepCnt = stepCnt + 1
ENDIF
LOOP
Capítulo 7: Gráficos de Barra en LCD para Distancias e inclinaciones · Page 261
El lugar donde puede definir y guardar una librería 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, típicamente hay espacio para todas las definiciones de caracteres
personalizados que una aplicación pueda necesitar.
Una técnica 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 animación, pero también es
importante para desplegar gráficas de barra. Esta actividad da un ejemplo de animación.
como un punto de referencia para leer los bytes de la EEPROM. Después 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
dónde buscar el inicio de la definición del caracter en la EEPROM. Por ejemplo, use
estos 3 comandos para transferir la definición 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
DO
counter = counter + 1
counter = counter // 3
Puesto que el siguiente programa ejemplo está sólo animando un caracter, puede usarse
un ciclo FOR...NEXT para accesar cada una de las directivas DATA del caracter
personalizado. La dirección de inicio de cada directiva DATA será 8 bytes después de la
siguiente. Se puede actualizar la LCD con cada definición de caracter en la secuencia de
Página 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
PAUSE 1000
LOOP
Descarga gratis Este programa está disponible como descarga grátis .bs2 en la página del
producto de Sensores Inteligentes y sus Aplicaciones en www.parallax.com.
%11111 ' * * * * *
%11011, ' * * 0 * *
%11011, ' * * 0 * *
%11111, ' * * * * *
%11111 ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11111, ' * * * * *
%11100, ' * * * 0 0
%11111 ' * * * * *
' 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
Disp_Cust_Char:
SEROUT LcdPin, T9600, ' Escribe caracter personalizado
Capítulo 7: Gráficos de Barra en LCD para Distancias e inclinaciones · Page 269
RETURN
Después de que la LCD recibe un valor entre 248 y 255 espera recibir 8 bytes mas, cada
uno conteniendo una de las 8 líneas punteadas que hacen la definición 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 Símbolo de una de las directives DATA, que es una constante igual a la dirección
de inicio de los datos. READ charBase + index, dotLine lee un byte de la definición
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 definición de caracter es traída 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
leído de la EEPROM y enviado a la LCD. La tercera vez, el tercer byte en la definición
de caracter es traída y enviada, etc., hasta el octavo byte cuando index llega a 7.
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
Línea 0. Line1 es el valor constante 148, que apunta a caracter 0 Línea 1. Al sumar
cursor (un valor entre 0 y 15) le da control sobre en qué línea 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 envía 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:
El DO...LOOP principal esta solo actualizando la Línea 0, caracter 8, ¡pero las otras 3
instancias del caracter personalizado 5 también están cambiando! ¿Porqué? Cuando la
definición del caracter personalizado 5 cambia, todos los caracteres personalizados 5s
en la pantalla son automaticamente actualizados.
Capítulo 7: Gráficos 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 definición del caracter. Para situaciones donde desee desplegar más de un
caracter personalizado al mismo tiempo, simplemente use más de un caracter
personalizado. En otros casos, cuando quiera que la LCD despliegue más de un caracter
personalizado diferente al mismo tiempo, use diferentes definiciones de caracteres
personalizados.
Partes y Equipo
Vea el Capítulo #2, actividad #4.
Transmit
Windowpane
Receive
Windowpane
LCD
Bar Displays
El siguiente programa ejemplo usa las 2 reglas para desplegar caracteres personalizados
que discutimos en la sección 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 ejecución del
programa, según el valor de la variable que está siendo expresada por la gráfica de barra.
La Figura 7-2 muestra cómo las definiciones van de vacío (Char0) a 4 columnas
verticales negras (Char4). Estas definiciones serán guardadas en la EEPROM y usadas
una por una para redefinir el caracter 2, puesto que solo una es necesaria en un momento
Capítulo 7: Gráficos de Barra en LCD para Distancias e inclinaciones · Page 273
dado. Pero el programa puede necesitar desplegar copias múltiples de un caracter todo de
negro para números mayores a 10; para esto se usa el caracter personalizado 3.
Figura 7-2
Libreria de Definiciones
para el caracter
personalizado 2
DEBUG ">"
DEBUGIN DEC value ' Valor en ventana de Transmision
GOSUB Bar_Graph ' Despliega como grafica de barra
Bar_Graph:
RETURN
Def_Horiz_Bar_Char:
RETURN
Página 276 · Sensores Inteligentes y sus Aplicaciones
Disp_Cust_Char:
DEBUG ">"
DEBUGIN DEC value ' Valor en ventana de Transmision
GOSUB Bar_Graph ' Despliega como grafica de barra
Bar_Graph:
Def_Horiz_Bar_Char:
RETURN
RETURN
√ Siga las instrucciones para conectar el sensor Ping))) y la LCD Serial a su tarjeta
(Capítulo 2, actividad #4, página 51).
Página 280 · Sensores Inteligentes y sus Aplicaciones
PULSOUT 15, 5
PULSIN 15, 1, time
value = cmDistance
PAUSE 100
También puede reemplazar el comando DEBUG con un comando SEROUT que despliegue
las mediciones en la línea inferior. Recuerde que tendrá que enviar a la LCD un código
de control para colocar el cursor en la Línea 1 caracter-0, en vez de usar HOME.
√ ¡Inténtelo!
Capítulo 7: Gráficos de Barra en LCD para Distancias e inclinaciones · Page 281
Partes y Equipo
Use el circuito del Capítulo 3, actividad #2, page 71.
Figura 7-3
Valores de gráfica 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 según se requiera en vez de ser guardadas en la EEPROM. Puesto que cada
definición de caracter personalizado toma 8 bytes, eliminar 16 definiciones salvará 128
bytes de memoria de programación.
Def_Vert_Bar_Char:
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 término (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 más bajos del término, 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.
Inténtelo para cada valor (0 al 15) y verá que el patron de bits en el byte rowMap coincide
con el patrón 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 código IF...THEN que
usa el operator.LOWBIT para revisar cada bit en la variable rowMap y lo usa para definir
un renglón 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 línea IF...THEN examina rowMap.LOWBIT(0), el bit más a la
derecha. Puesto que es 0, la línea 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 línea IF...THEN manda un comando SEROUT con un
byte conteniendo %11111. Entonces, los renglones sexto, séptimo y octavo serán 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 más
bajos son los que usa la LCD para definir sus renglones de 5 pixeles de ancho.
Capítulo 7: Gráficos de Barra en LCD para Distancias e inclinaciones · Page 283
Def_Vert_Bar_Char:
' Inicia definicion de caracter personalizado
SEROUT LcdPin, T9600,
[Define + custChar]
Disp_Cust_Char:
SEROUT LcdPin, T9600, ' Escribe caracter personalizado
[line + cursor, custChar]
RETURN
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). También, un
comando SEROUT tiene que ser agregado para sobreescribir los caracteres personalizados
previos con espacios en blanco. Luego, puede ser agregado un bloque de código
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 línea inferior si es menor o igual a 16.
FOR value = 1 TO 31
SEROUT 14, 84, [Line0 + cursor, " ",
Line1 + cursor, " "]
IF value <= 16 THEN
Página 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 también anidar el ciclo FOR value = 1 TO 31...NEXT dentro de un ciclo FOR
cursor = 0 TO 15...NEXT y causar que la gráfica de barra se mueva a través de la
pantalla cada vez que se repite. Controlando asi la compensación del cursor, la gráfica de
barra puede desplegar 2 ejes con valores verticales de 1 a 31 y valores horizontales de 0 a
15.
√ ¡Inténtelo!
Figura 7-4
Puntos trazados en la
gráfica de barra de dos
ejes
Si bien las características mostradas en la Figura 7-4 hacen que la pantalla esté un poco
menos cifrada, el programa tiene que tomar muchas más decisiones. En el siguiente
programa ejemplo, las subrutinas Bar_Graph_H_V y Horizontal_Placement se encarga
de todas las decisiones que apoyan estas características adicionales.
Descarga gratis Este programa está disponible como descarga grátis .bs2 en la página del
producto de Sensores Inteligentes y sus Aplicaciones en www.parallax.com.
√ 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.
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
Bar_Graph_H_V:
GOSUB Def_Vert_Bar_Char
line = Line0
GOSUB Horizontal_Placement
ENDIF
RETURN
Def_Vert_Bar_Char:
Horizontal_Placement:
Capítulo 7: Gráficos de Barra en LCD para Distancias e inclinaciones · Page 291
RETURN
Disp_Cust_Char:
La escala horizontal también tiene que ser invertida. La Figura 7-5 muestra cómo los ejes
x y y del acelerómetro se relacionan con los ejes horizontal y vertical de la LCD. Note
que la dirección positiva del eje y apunta a la dirección 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).
Página 292 · Sensores Inteligentes y sus Aplicaciones
Obtener las constantes de escalamiento ** se dejan como ejercicios al final del ejercicio.
PULSIN 6, 1, x
PULSIN 7, 1, y
RESUMEN
La mediciones de distancia e inclinación se prestan para desplegarlas en gráficas de barra.
La mayoría de las gráficas 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 gráficas de barra pueden ser guardadas en
la EEPROM del BASIC Stamp, o definidas por código que relacione el valor que está
siendo graficado al número de lineas o columnas de pixeles que necesitan ser
desplegados.
Desplegar gráficas de barra es típicamente mas eficiente con la memoria si los caracteres
pueden ser generados en base al valor. Cuando la gráfica de barra es horizontal, un
comando LOOKUP es útil para guardar valores binarios que correspondan con el número
de columnas que tendrán pixeles negros en un caracter personalizado determinado. Para
gráficas 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
número of renglones o columnas en un caracter.
Preguntas
1. ¿Qué parte de las directivas DATA hace posible encontrar la dirección de inicio de
una definición de caracter?
2. ¿Cómo le dicen los programas en este capítulo a la subrutina Def_Cust_Char
qué caracter definir y dónde encontrar la definición de caracter? ¿Cómo
especifica una posición de caracter para la subrutina Disp_Cust_Char? Si
quiere desplegar 2 caracteres personalizados diferentes al mismo tiempo, ¿puede
usar la misma definición de caracter personalizado? ¿Porqué?
3. ¿Cómo guarda información HorizBarGraph.bs2 acerca de qué columnas en un
caracter personalizado deben tener pixeles blancos o negros?
Capítulo 7: Gráficos de Barra en LCD para Distancias e inclinaciones · Page 295
Ejercicios
1. Escriba una directiva DATA para caracter personalizado para un caracter con
todas las líneas 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 medición de distancia en
centímetros en la línea inferior.
2. Modifique TwoAxisBarTiltDisplay.bs2 para que despliegue barras que
correspondan con el ángulo de inclinación. Recuerde que ese ángulo es una
función de la gravedad sensada por cada uno de los ejes del acelerómetro. Tip:
Use el código de ejemplo del Capítulo 3, actividad #6 para cálculos del ángulo
de inclinación.
Página 296 · Sensores Inteligentes y sus Aplicaciones
Soluciones
Q1. El nombre Símbolo.
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 Símbolo en la
directiva DATA del caracter personalizado tiene que ser guardada en la
variable charBase. Puesto que variable = SymbolName guarda la
dirección EEPROM del primer byte en una directiva DATA definida por
SymbolName como variable, hace posible pasar la dirección 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 posición.
Q4. No, porque todas las instancias del mismo caracter personalizado
actualmente desplegado por la LCD será actualizado tan pronto como la
definición de caracter sea actualizada.
Q5. La variable dotLine termina guardando uno de 5 valores: %00000,
%10000, %11000, %11100, o %11110. Cada dígito corresponde a una de
las 5 columnas verticales de pixeles en un caracter personalizado. Si el
valor es 1, los pixeles en esa columna serán puestos en negro. Si es 0, serán
dejados en blanco.
Q6. Cada uno de los 8 renglones en la definición del caracter personalizado
tendrá el mismo patrón, entonces el programa solo tiene que enviar el
mismo byte de renglón 8 veces para definir cada renglón del caracter
personalizado.
Q7. Cuando la condición IF…THEN evalúa a 1, los pixeles para el renglón se
establecen en negro con SEROUT 14, 84, [%11111]; de otra forma, se
establecen en blanco con SEROUT 14, 84, [%00000].
E1. Ejemplo de solución:
Capítulo 7: Gráficos de Barra en LCD para Distancias e inclinaciones · Page 297
PULSOUT 15, 5
PULSIN 15, 1, time
value = cmDistance
PAUSE 100
P2. Solution Ejemplo– Vea los comentarios en la sección Titulo par aver cómo fue
construído este programa a partir de programas ejemplo previos y cálculos
explicados en el texto:
PULSIN 6, 1, x
PULSIN 7, 1, y
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)
Bar_Graph_H_V:
ENDIF
RETURN
Def_Vert_Bar_Char:
Horizontal_Placement:
RETURN
Disp_Cust_Char:
Note que los códigos de control (los 32 caracteres ASCII más bajos) no tienen símbolos
de pantalla estandarizados. Los caracteres listados para ellos son solo nombres usados en
referencia a estos códigos. Por ejemplo, para mover el cursor al principio de la siguiente
línea de una impresora o terminal frecuentemente se requiere enviar los códigos line feed
y carriage return. Este par es comúnmente referido como "LF/CR."
Página 304 · Sensores Inteligentes y sus Aplicaciones
Apéndice B: Documentación de la pantalla LCD Serial Parallax · Page 305
Version 2.0
Introducción
Las pantallas LCDs Seriales Parallax son muy funcionales y de bajo costo y pueden ser
fácilmente controladas por un microcontrolador BASIC Stamp®. Las LCD son de 2 o de
4 renglones por 16 caracteres y proveen ajuste básico del texto para que su texto esté
completo en pantalla. También le dan control completo sobre todas sus características
avanzadas, permitiéndole mover el cursor a cualquier parte de la pantalla con una sola
instrucción y apagarla y encenderla en cualquier configuración. Soportan los mismos
caracteres visibles que la Terminal de Depuración del Editor de BASIC Stamp (ASCII
Dec 32-127). Además, 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 pequeña lista de ideas con una LCD Serial y el BASIC Stamp de Parallax:
Código Muestra
Se pueden buscar por número de parte en www.parallax.com:
2x16 LCD Serial: búsqueda “27976”
2x16 LCD Serial: (con luz de fondo): búsqueda “27977”
4x20 LCD Serial: (con luz de fondo) búsqueda “27979”
Características
• Despliega el juego de caracteres ASCII directamente a la pantalla
• Ajusta a la siguiente línea automáticamente para fácil 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. Véa la figura B-1 y B-2 para detalles de conexiones electricas. Vea las Figuras
B-3 y B-4 en las siguienes páginas para etalles de tamaño y montaje mecánico.
Figura B-1
Conexiones de la
LCD Serial para la
Rev D y
anteriores.
Apéndice B: Documentación 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 módulos BASIC Stamp, debe energizar la LCD Serial de una
fuente externa de 5 V. Asegúrese de que la fuente tiene un nivel de corriente adecuado
para energizar la LCD Serial y el BASIC Stamp.
Figura B-3 Especificaciones de Tamaño y Montaje para los modelos 27976, 27977.
Precaucion: Las dimensiones pueden variar.
Página 308 · Sensores Inteligentes y sus Aplicaciones
Figura B-4 Especificaciones de Tamaño y Montaje para el modelo 27979. Precaucion: Las
dimensiones pueden variar.
Notas Técnicas
Característica Descripción
Tipo de pantalla LCD STN, YG, positive, transflective
Dirección de observación 6H
Luz de fondo YG LED
Temperatura de Operación -4°F~158°F (-20°C~70°C)
Temperatura de almacenaje -22°F~176°F (-30°C~80°C)
Tolerancia dimensional ±.02” (.5mm)
Como puede ver, hay una cuarta opción llamada Test. Ya que conectó la energía, use este
modo para confirmar que están correctamente conectados la energía y tierra a la LCD
antes de que envíe algún dato. Mueva los interruptores a Test y encienda la energía. 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
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 envíe el código 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 posición actual
del cursor y luego mueve el cursor una posición a la derecha. Cuando enciende la LCD,
el cursor esta en la posición extrema izquierda de la línea superior, como podría esperar.
La pequeña barra en la parte baja del caracter muestra dónde está posicionado el cursor.
Una vez que ha enviado una línea completa de caracteres a la LCD, notará que el cursor
automáticamente ajusta a la posición extrema izquierda de la segunda línea, como el texto
en un libro. El texto se ajustará así al final de cada línea, con el final de la línea inferior
ajustándose a la línea superior de la LCD. El texto nunca “saldrá” de la pantalla; siempre
verá todos los caracteres que envíe.
Intente el siguiente código 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 código siguiente en su BASIC Stamp 2 y córralo. Verá la cadena de texto
aparecer y ajustarse a la segunda línea de la pantalla.
Página 310 · Sensores Inteligentes y sus Aplicaciones
En todo su código para la LCD Serial, debe hacer una pausa de 100 ms al inicio para
darle tiempo para initializar. También 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 ningún dato.
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 envía un caracter a la LCD Serial, siempre se despliega en la posición acual del
cursor. Hay algunos modos diferentes para mover el cursor en la pantalla LCD Serial.
Después de cada caracter que envía, el cursor automáticamente se mueve una posición.
Junto con esto, hay un juego estándar de comandos para movimiento de que incluye
Backspace, Carriage Return, y Line Feed.
También hay comandos de movimiento directo que puede usar para mover el cursor a
cualquier posición 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 líneas de los modelos 27976 y 27977. Los comandos en el rango Dec 128 a 207
Apéndice B: Documentación de la pantalla LCD Serial Parallax · Page 311
mueven el cursor a las 20 diferentes posiciones en cada una de las 4 líneas del modelo
27979 LCD.
Controlando la Pantalla
También 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,
aún 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.
Con los modelos 27977 y 27979, puede también 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 energía. 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 posición 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 más
bajos de cada byte representan una linea de pixeles en el caracter. Los 3 bits más altos de
cada bytes son ignorados. Un valor 1 en el bit enciende ese pixel (lo hace negro). La
línea de pixeles de hasta abajo se deja normalmente en blanco (todo ceros) para poder ver
el cursor.
Página 312 · Sensores Inteligentes y sus Aplicaciones
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
Conjunto de Comandos
Las tablas a continuación listan todos los comandos válidos de la LCD Serial. Los
comandos marcados como N/A son invalidos y son ignorados. Las lineas de la pantalla
LCD están numeradas desde 0, siendo la Linea 0 la de hasta arriba. Las posiciones de
caracter en cada línea están numeradas empezando desde 0, siendo la posición 0 la de la
extrema izquierda en la línea.
Apéndice B: Documentación de la pantalla LCD Serial Parallax · Page 313
No todos los lenguajes de programación para controladores soportan este uso nativo de
caracteres escribibles. En algunos casos, sobre todo en lenguaje ensamblador, se usa el
código ASCII para el signo de exclamación. El código ASCII para este signo es 33, y aún
en PBASIC, el comando SEROUT 14, 84, [33] realiza la misma tarea. En lenguaje
ensamblador, los valores hexadecimales son algunas veces el número base preferido
porque hace ciertas tareas más fáciles. Debido a esto, mucha documentación para LCD
lista sus comandos LCD como valores hexadecimales.
He aquí un ejemplo de un comando SEROUT que define una barra en una gráfica 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] ' * * * * *
Hexadecimal 8 F E 6
Binario 1000 1111 1110 0110
$8FE6 = %1000111111100110
%1100011000001001 = $C609
END
Requerimientos de Software:
• Editor BASIC Stamp para Windows v2.0 o más reciente (Descarga gratis en
www.parallax.com)
• Programas ejemplo seleccionados (Descarga gratis en www.parallax.com)
• Microsoft Notepad y Microsoft Excel 2002 o más reciente (para estudios de
aceleración del Capítulo 6)
Requerimientos de Hardware:
• Uno de los siguientes kits que incluye una plataforma de programación BASIC
Stamp 2, más la fuente de energía adecuada o las baterías:
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)
*Todas las actividades en este texto son compatibles con la tarjeta BASIC Stamp
HomeWork mientras que esté usando la LCD sin luz de fondo incluída en el kit de partes
de Sensores Inteligentes. Si está usando una LCD con luz de fondo, use también una
tarjeta Board of Education para proteger su LCD.
Página 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 # Descripción 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 Ultrasónico Ping))) 1
28017 Acelerómetro Memsic Bi-axial 1
29123 Módulo de brújula 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 electrónicos 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 electrolíticos y sus requerimientos de seguridad
antes de proceder PRECAUCIÓN: El uso incorrecto de capacitores electrolíticos puede
causar que exploten. Siga las siguienes reglas de seguridad para evitar cualquier daño
Í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-
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