Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sensores Inteligentes y Sus Aplicaciones - Guia Del Estudiante
Sensores Inteligentes y Sus Aplicaciones - Guia Del Estudiante
aplicaciones
Gua del Estudiante
VERSION 1.0
GARANTA
Parallax garantiza sus productos contra defectos en sus materiales o debidos a la fabricacin por un perodo de 90
das a partir de la recepcin de los mismos. Si usted descubre un defecto, Parallax segn corresponda, reparar,
reemplazar o regresar el valor de la compra. Antes de regresar el producto a Parallax, simplemente pida un nmero
de autorizacin de regreso de mercanca (Return Merchandise Authorization, RMA), escriba el nmero en el
exterior de la caja y envela a Parallax. Por favor incluya su nombre, nmero telefnico, direccin y una descripcin
del problema. Parallax le regresar su producto o el reemplazo, usando el mismo mtodo de correo que usted us para
enviar el producto a Parallax.
ISBN 1-928982-39-5
DESVINCULACIN DE RESPONSABILIDAD
Parallax, Inc. no es responsable de daos por consecuencias, incidentes o daos especiales que resulten de cualquier
violacin de la garanta, bajo cualquier teora legal, incluyendo prdida de beneficios, tiempos muertos, buena fe,
dao o reemplazo de equipo o propiedad y cualesquiera costos de recuperacin, reprogramacin o de reproduccin de
datos guardados o usados dentro de los productos Parallax. Parallax tampoco es responsable de cualquier dao
personal, incluyendo vida o muerte, resultado del uso de cualquiera de nuestros productos. Usted tiene absoluta
responsabilidad por la aplicacin que desarrolle con el BASIC Stamp, sin importar la naturaleza del riesgo de la
misma.
SEGUNDA IMPRESION
SITIOS WEB Y LISTAS DE DISCUSIN
Mantenemos foros de discusin activa basados en la red mundial dirigidos a personas interesadas en los productos
Parallax. Estos foros o listas de discusin son accesibles desde www.parallax.com:
Propeller chip Esta lista es especficamente para clientes que usan los circuitos y productos
Propeller.
BASIC Stamp esta lista es extensamente utilizada por Ingenieros, aficionados y estudiantes,
quienes comparten sus proyectos y preguntas acerca del BASIC Stamp.
Stamps en Class Creada para educadores y estudiantes, los suscriptores de esta lista discuten el
uso del material de Stamps en Class en sus cursos. La lista prove la oportunidad tanto a estudiantes
como a educadores de hacer preguntas y obtener respuestas.
Parallax Educators Es un foro exclusivo para educadores y aquellos que contribuyen al desarrollo
de Stamps en Class. Parallax creo este grupo con el fin de obtener retroalimentacin en el desarrollo
de nuestro currculum y proveer un sitio para que los educadores desarrollen y obtengan Guas para
Profesores.
Robotics Diseado para los robots Parallax, este foro fue creado para ser un dilogo abierto entre
entusiastas de la robtica. Los temas incluyen el ensamble, cdigo fuente, expansiones y
actualizaciones de manuales. Los robots Boe-Bot, Toddler, SumoBot, HexCrawler y
QuadCrawler son ampliamente discutidos aqu.
SX Microcontrollers y SX-Key Discusin de la programacin del microcontrolador SX con
herramientas del lenguaje ensamblador Parallax SX Key y compiladores de terceros en lenguajes
BASIC y C.
Javelin Stamp Discusin de aplicaciones y diseos usando Javelin Stamp, un modulo Parallax que
es programado utilizando un subconjunto de comandos del lenguaje de programacin Java de Sun
Microsystems.
ERRATA
Si bien se realiza un gran esfuerzo para asegurar la precisin de nuestros textos, an puede haber errores.
Continuamente nos esforzamos para mejorar todos nuestros materiales educativos y documentos y frecuentemente
revisamos nuestros textos. Ocasionalmente se publica en nuestro sitio www.parallax.com una hoja de fe de errata con
una lista de los errores y correcciones conocidos para un texto determinado. Por favor, revise las pginas individuales
de los productos para obtener una descarga gratuita de este archivo de fe de errata.
Tabla de Contenido
Prefacio.......................................................................................................................iii
Introduccin y notas del autor........................................................................................ iii
Idea general.................................................................................................................... v
Antes de comenzar......................................................................................................... v
La serie educativa Stamps en class .............................................................................. vi
Traducciones ................................................................................................................ vii
Colaboradores especiales ............................................................................................ vii
Prefacio
INTRODUCCIN Y NOTAS DEL AUTOR
La primera vez que v el trmino sensor inteligente fue en el texto Sensores Aplicados
de Tracy Allen (entonces conocido como Mediciones Ambientales). De manera adecuada,
Tracy aplic este trmino al termmetro digital DS1620, el cual tiene elementos
electrnicos interconstrudos que simplifican las mediciones de temperatura del
microcontrolador. Adicionalmente, poda recordar la configuracin1 que reciba del
microcontrolador y, ms an, funcionar independientemente como un controlador de
termostato.
En contraste con los sensores inteligentes, los sensores primitivos son dispositivos o
materiales que tienen alguna propiedad elctrica que cambia con algn fenmeno fsico.
Un ejemplo de un sensor primitivo en Qu es un Microcontrolador? es la
fotorresistencia de sulfato de cadmio. Su resistencia cambia con la intensidad de la luz.
Con el programa y el circuito adecuados, es posible realizar mediciones de luz con un
microcontrolador. Otros ejemplos de sensores primitivos comunes son los sensores de
temperatura con salida de corriente/tensin, transductores de micrfonos y an el
potencimetro, que es un sensor de posicin rotacional.
Dentro de cada sensor inteligente radica uno o ms sensores primitivos y la circuitera de
soporte. Lo que hace a un sensor inteligente inteligente es la electrnica interconstruda
adicional. Esta electrnica hace que estos sensores sean capaces de hacer una o ms de
las siguientes funciones:
Durante mi primer encuentro con un sensor inteligente pens: Vaya! Un kit completo
de estos sensores con un libro podra ser REALMENTE interesante! En verdad espero
1
que alguien haga un kit y un libro as pronto No tena idea que pronto terminara
siendo casi seis aos despus, y que alguien terminara siendo yo. Y si alguno de mis
jefes me hubiera dicho entonces que ese kit contendra un acelermetro, un medidor de
distancias ultrasnico, una brjula digital y una pantalla o visor LCD2 serial para
mediciones en movimiento, quiz la impresin me hubiera deshecho por completo.
Puesto que solo recientemente fue posible para nosotros conjuntar un grupo de
componentes tan sorprendente en un solo kit, debera decir que la espera vali la pena.
En concordancia con el resto de los tutoriales Stamps en Class, este libro es una coleccin
de actividades, algunas de las cuales cubren aspectos bsicos, algunas otras cubren otros
aspectos ms avanzados, y otras demuestran aplicaciones o arman bloques para varios
productos e inventos. La primera mitad del libro presenta al sensor junto con algunas
mediciones en movimiento desplegadas en una pantalla LCD. Luego, la segunda mitad
del libro tiene una cantidad considerable de aplicaciones para que usted las intente, tales
como juegos de video por inclinacin, herramientas de medicin personalizadas y
dispositivos de diagnstico para entusiastas del deporte y del bricolaje. El lmite de
pginas para este libro delimitado por nuestro empaque es 350 y fue difcil detenerme
all. Se pueden encontrar actividades adicionales de sensores inteligentes para el robot
Boe-Bot en el foro de Stamps en Class en www.parallax.com.
Si bien este libro cubre los fundamentos y demuestra algunas aplicaciones como
ejemplos, solamente rasga la superficie de lo que usted puede hacer con estos
dispositivos. El propsito principal de este libro es proveer algunos bloques de
construccin e ideas para proyectos e inventos futuros. Por ejemplo, despus de
completar el captulo 3, nuestro revisor del libro Kris Magri puso su tarjeta de
entrenamiento Board of Education con el acelermetro y la LCD sobre el tablero de su
auto, y ahora su auto tiene un medidor de aceleracin en planos a un lado de su
velocmetro. Con algunas modificaciones al cdigo, se pudo haber cambiado por un
sistema de alerta de volcadura en autos de doble traccin. Despus de revisar el
dispositivo mecnico de vigilancia para predecir condiciones de avalancha en reas
montaosas basado en la inclinacin de la ladera, Ken Gracey desarroll en una noche la
versin digital con las mismas partes que tena Kris en su auto.
El acelermetro en el tablero del auto y el medidor de riesgo de avalancha son dos
ejemplos nicos de las muchas aplicaciones, proyectos e inventos que pueden ser
inspirados por el kit de sensores inteligentes y su texto. Nos gustara ver lo que usted
2
Visor o pantalla de cristal lquido; de sus siglas en ingls, Liquid Cristal Display (N. del T.)
Prefacio Pgina v
puede hacer con su kit en el foro de Stamps en Class. No importa si piensa que su
proyecto esta en onda, es nico, poco original o lo que sea. Solo tome unos minutos para
publicar las cosas que ha hecho con estos sensores inteligentes en
http://forums.parallax.com/forums/ Stamps en Class. Asegrese de incluir algunas
fotos, una descripcin breve y preferentemente un esquema y el programa PBASIC.
Entonces, divirtase con este kit y este libro y nosotros veremos sus inventos en el foro
de Stamps en Class.
IDEA GENERAL
El kit de sensores inteligentes contiene cuatro dispositivos que, cuando se usan con
BASIC Stamp y la Tarjeta Board of Education o la tarjeta HomeWork Board, pueden ser
bloques de construccin para una variedad de inventos y proyectos de estudiantes. He
aqu una lista de los dispositivos:
Adems de proveer tanto el equipo como la informacin de cmo se usa este para
proyectos estudiantiles, este texto hace 2 nfasis mayores que proveen teora, ejemplos y
los clculos requeridos, lo cual puede ser usado para reforzar una variedad de conceptos
de medicin, de fsica/ingeniera y de trigonometra. Estos nfasis son:
ANTES DE COMENZAR
Para ejecutar los experimentos en este texto, necesitar tener su tarjeta Board of
Education o bien HomeWork Board conectada a su computadora, el software Editor de
BASIC Stamp instalado en su computadora y haber verificado que hay comunicacin
enre su computadora y su BASIC Stamp. Para instrucciones detalladas a este respecto,
consulte Qu es un Microcontrolador?, disponible como descarga gratuita en
Los siguientes textos y kits proven una variedad de actividades que son tiles para
aficionados al bricolaje, inventores y diseadores de productos interesados en intentar un
amplio espectro de proyectos:
Sensores inteligentes y sus aplicaciones, Gua del Estudiante, Version 1.0,
Parallax Inc., 2006
Control de Procesos, Gua del Estudiante, Version 1.0, Parallax Inc., 2006
Sensores Aplicados, Gua del Estudiante, Version 1.3, Parallax Inc., 2003
Basicos Analgicos y Digitales, Gua del Estudiante, Version 1.3, Parallax Inc.,
2004
Entendiendo las seales, Gua del Estudiante, Version 1.0, Parallax Inc., 2003
Kits Robticos:
Para adquirir experiencia con robtica, considere continuar con las siguientes Guas Del
Estudiante Stamps en Class, cada una tiene un kit robot correspondiente:
Control remoto IR para el Boe-Bot, Gua del Estudiante, Version 1.1, Parallax
Inc., 2004
Robotica Aplicada con el SumoBot, Gua del Estudiante, Version 1.0, Parallax
Inc., 2005
Robtica avanzada con el Toddler, Gua del Estudiante, Version 1.2, Parallax
Inc., 2003
Referencias
Este libro es una referencia esencial para todas las Guas del Estudiante Stamps en Class.
Se presenta con informacin de la serie de modulos microcontroladores BASIC Stamp,
nuestro Editor BASIC Stamp y nuestro lenguaje de programacin PBASIC.
Manual BASIC Stamp, Version 2.2, Parallax Inc., 2005
TRADUCCIONES
Los textos educativos Parallax pueden ser traducidos a otros idiomas con nuestro permiso
(correo electrnico: translations@parallax.com). Si usted planea hacer alguna traduccin
por favor contctenos y as podremos proveerle con los documentos MS Word en el
formato adecuado, imgenes, etc. Tambin mantenemos un grupo privado de discusin
para traductores al cual quiz quiera unirse. Esto asegurar que se le mantiene al corriente
con nuestras frecuentes revisiones de texto.
COLABORADORES ESPECIALES
Parallax Inc. quiere dar reconocimiento a sus miembros del equipo de Educacin: al
administrador del Proyecto Aristides Alvarez, el Ilustrador Tcnico Rich Allred,
Diseadora Grfica Larissa Crittenden, Revisor Tcnico Kris Magri y la Editora Tecnica
Stephanie Lindsay. Adicionalmente, gracias a nuestro cliente Steve Nicholson por poner
a prueba de usuario la mayoria de nuestras actividades. Como siempre, un
agradecimiento especial a Ken Gracey, fundador del programa educativo Stamps en Class
de Parallax Inc.
LCDS EN PRODUCTOS
Todos los productos mostrados en la Figura 1-2 tienen pantallas de cristal lquido. Son
fciles de leer y los ms pequeos consumo poca energa. Piense cuntos productos que
usted posee tienen pantallas de cristal lquido. Al avanzar en las actividades de este texto,
piense acerca los proyectos de BASIC Stamp, los prototipos y los inventos que tiene en
progreso y cmo una pantalla LCD serial puede mejorarlos o ayudarle a completarlos.
Figura 1-2: Ejemplos de Productos con pantallas LCD
De arriba a abajo y de izquierda a derecha: telfono celular, GPS porttil, calculadora,
multmetro digital, reloj de oficina, computadora lap-top, osciloscopio, telfono de oficina.
que recibe del BASIC Stamp. Es especialmente til para mostrar mensajes de diagnstico
y valores de variables, haciendo ms fcil aislar los problemas en un programa. Tambin
es til para probar circuitos, sensores y ms.
La Terminal de Depuracin tiene una desventaja y es la conexin por cable serial.
Considere cuantas veces fue inconveniente tener su tarjeta conectada a la computadora
para probar un sensor, o para descubrir qu estaba viendo su robot Boe-Bot con sus
detectores infrarrojos en la otra habitacin. Estas son situaciones que pueden ser
remediadas con la pantalla LCD Serial Parallax mostrada en la Figura 1-3. Una vez que
construya un circuito sensor en su tarjeta Board of Education, puede usar una batera y su
pantalla LCD Serial parallax para llevar el arreglo tan lejos de su terminal de
programacin como usted quiera, mientras que despliega las mediciones de su sensor y
otra informacin de diagnstico.
Figura 1-3
LCD Serial Parallax
(216)
La pantalla LCD Serial Parallax 216 tiene dos renglones de 16 caracteres cada uno para
desplegar mensajes. La pantalla es controlada por mensajes seriales desde el BASIC
Stamp. El BASIC Stamp enva estos mensajes desde un solo pin de entrada/salida que est
conectado a la entrada serial de la LCD. Hay dos versiones, estndar y con luz de fondo:
Version
Estndar
Con Luz
Parte Parallax #
27976
27977
La LCD Serial Parallax tiene un modo de auto-prueba que puede usar para asegurarse que
esta en condiciones de operar y que el contraste est ajustado adecuadamente. La Figura
1-5 muestra la parte posterior del modulo de la LCD. Los interruptores SW1 y SW2 son
para entrar en modo de auto-prueba y para ajustar la velocidad de transmisin baud, el
contraste se ajusta con un potencimetro INCREASE CONTRAST.
Figura 1-5
Vista posterior
del Mdulo de la
pantalla LCD
Figura 1-7
Potencimetro 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
La Figura 1-9 muestra la tabla impresa en la parte posterior de la LCD Serial Parallax. Si
quiere enviar mensajes a otras velocidad baud (2400 o 19,200 bps), use esta tabla y ajuste
los interruptores SW1 y SW2 segn sea el caso.
Figura 1-9
Configuracin de
los interruptores de
Velocidad Baud
En nuestros programas, el argumento Pin tiene que ser 14 puesto que el pin RX (de
recepcin de datos) de la pantalla LCD's est conectada a pin de entrada/salida P14 del
BASIC Stamp.
El argumento BaudMode es un valor que le dice al BASIC Stamp qu tan rpido deber
enviar los datos en serie y tambin determina algunas de las caractersticas de la seal
serial. El programa de ayuda del Editor del BASIC Stamp tiene tablas que dan los
valores de BaudMode para velocidades baud y seales comunes. Al consultarlas, resulta
que 84 es el valor del argumento de BaudMode para 9600 bits por segundo (bps), palabras
de 8 bits, sin paridad, seal verdadera. Esto es exactamente para lo que la LCD Serial
Parallax fue diseada para recibir.
Los argumentos DataItem pueden ser escritos entre comillas como Hola. Tambin
pueden ser caracteres de control como CR, CLS, o valores, con o sin formateadotes como
DEC, BIN, y ?. Si se enva con formateadores, ellos son enviados como los caracteres que
representan el valor. Si se envan sin formateadores, ellos sern enviados como valores,
como 22, 12 y 13. Podemos enviar valores sin formato como estos a la LCD, los cuales
sern interpretados como cdigos de control.
Ms acerca SEROUT
Si usted desea intentar usar la terminal de Depuracin con SEROUT en vez de DEBUG,
primero brala desde la barra de herramientas con Run Debug New. Luego,
seleccione Run Identify para ver qu puerto est usando su BASIC Stamp. Entonces, en
la Terminal de Depuracin, haga coincidir la designacin del puerto de comunicacin. Note
que tambin puede cambiar la velocidad Baud de la Terminal de Depuracin as como otros
parmetros de comunicacin.
Hay mucho ms que aprender acerca de SEROUT. Tanto el Manual del BASIC Stamp como
la Gua de Sintaxis del Editor PBASIC dan explicacin amplia acerca el comando SEROUT.
El Manual del BASIC Stamp est disponible como descarga gratis en www.parallax.com
Downloads Documentation. Si su Editor de BASIC Stamp soporta PBASIC 2.5,
probablemente ya tenga la Gua de Sintaxis de PBASIC. Para accesar, simplemente
seleccione el ndice desde el men de ayuda del Editor de BASIC Stamp.
12 limpia la pantalla. Nota: siempre debe seguir PAUSE 5 para dar tiempo a la
LCD de limpiarse.
Para encender y apagar la luz de fondo (solo pantallas LCD con Luz de fondo):
Algunas pantallas de LCD tienen luz de fondo para poder leerlas cuando est oscuro. Si
usted tiene esta versin de LCD Serial Parallax (parte # 27977), puede controlar la luz de
fondo con estos valores:
= BASIC Stamp 2
= PBASIC 2.5
Figura 1-10
Desplegado de texto.
Recuerda que 22 enciende la pantalla y que 21 la apaga? Puede usar estos cdigos de
control para hacer que el texto parpadee.
'
'
'
'
'
'
Adems de demostrar que puede desplegar valores de variables en la LCD serial, este
programa tambin muestra qu pasa si el programa manda ms de 16 caracteres a la lnea
0. Los ajusta hacia la lnea 1. Tambin, despus de llenar la lnea 1 con otros 16
caracteres, el texto se vuelve a ajustar hacia la lnea 0.
Byte
= BASIC Stamp 2
= PBASIC 2.5
FOR counter = 0 TO 12
Figura 1-11
Despliegue de nmeros
Los cdigos de control de la LCD son diferentes de los caracteres de control del comando
DEBUG. Por ejemplo, HOME y CRSRXY simplemente no tienen el mismo efecto que tienen
en la Terminal de Depuracin. Sin embargo, hay comandos de cursor para la LCD Serial
Parallax que puede usar para controlar las coordenadas X y Y del cursor. Tambin puede
enviar el cursor a la posicin superior izquierda o posicin de casa. Revise el conjunto
de comandos en la seccin de la documentacin de la LCD al principio de la pgina 312.
Enlista todos los comandos de control vlidos para la LCD; a continuacin se indican
algunos ejemplos de la lista que controlan la posicin del cursor.
8
9
10
128 to 143
148 to 163
Cursor a la izquierda
Cursor a la derecha
Cursor abajo (la linea inferior ajustara en la linea superior)
Posiciona el cursor en la linea 0, caracteres 0 al 15
Posiciona el cursor en la linea 1, caracteres 0 al 15
Los valores 128 to 143 y 148 to 163 son particularmente tiles. La Figura 1-12 muestra
donde cada valor posiciona al cursor. Puede usar valores de 128 to 143 para colocar al
cursor en los caracteres 0 al 15 en la lnea superior de la LCD (lnea 0). De manera
semejante, puede usar valores de 148 to 163 para colocar el cursor en los caracteres 0 al
15 de la lnea inferior (lnea 1).
Figura 1-12
Desplegado de Texto
Luego de colocar el cursor, el siguiente caracter que enve a la LCD ser desplegado en
esa posicin. Por ejemplo, he aqu un comando SEROUT con un argumento Pace opcional
configurado a 200 ms. Este comando mostrar los caracteres "L", "I", "N", "E", "-", y
"0", igualmente espaciados a lo ancho de la lnea superior, un caracter cada 200 ms.
SEROUT 14, 84, 200, [128,
131,
134,
137,
140,
143,
"L",
"I",
"N",
"E",
"-",
"0"]
He aqu un bloque de cdigo que har que el texto "Line 1" resbale abajo a la linea
inferior, de derecha a izquierda.
FOR index = 9 TO 0
' IMPORTANTE: Deje un espacio luego del 1 en "Line 1 "
SEROUT 14, 84, [148 + index, "Line 1 "]
PAUSE 100
NEXT
Borrando Caracteres
Siempre puede barrar un caracter colocando el cursor donde lo desee y enviando el
caracter de espacio " " para sobreescribir lo que sea que all haya. Es por esto que el texto
"Line 1 " tiene un espacio despus del caracter "1", para borrar los caracteres a su derecha
conforme se mueve el texto a la izquierda.
Nib
Byte
Byte
= BASIC Stamp 2
= PBASIC 2.5
' Cambia "Line 1" sobre la linea 1 de derecha a izq, luego izq a derecha.
FOR index = 9 TO 0
' IMPORTANTE: Asegurese de que haya un espacio luego del 1 en "Line 1 ".
SEROUT 14, 84, [148 + index, "Line 1 "]
PAUSE 100
NEXT
FOR index = 0 TO 9
' IMPORTANTE: Asegurese de que haya un espacio entre " y la letra L.
SEROUT 14, 84, [148 + index, " Line 1"]
PAUSE 250
NEXT
PAUSE 1000
' Limpia LCD, luego muestra "ALL DONE" al centro y flashea 5 veces
SEROUT 14, 84, [12]: PAUSE 5
' Limpia la LCD
SEROUT 14, 84, [135, "ALL", 13, 154, "DONE!"]' "ALL" y "DONE" centrados
FOR index = 1 TO 4
SEROUT 14, 84, 500, [21, 22]
NEXT
END
FOR index = 0 TO 3
' secuencia de Caracteres
PAUSE 600
LOOKUP index, ["T", "E", "S", "T"], character
LOOKUP index, [ 1,
5, 9, 13], offset
SEROUT 14, 84, [(148 + offset), character]
NEXT
Intntelo!
He aqu un bloque de cdigo que enciende la LCD, la limpia y coloca algunos caracteres
que no cambiarn. El resto del programa puede entonces desplegar los valores numricos
cambiantes de hora, minuto y segundo junto a los caracteres fijos "h", "m" y "s".
SEROUT 14, 84, [22, 12]
PAUSE 5
Para esta aplicacin, los cdigos de control para colocacin del cursor son
particularmente tiles. Por ejemplo, el cursor puede ser colocado en la lnea 1, caracter 0
antes de enviar el valor decimal de 2 dgitos de las horas. El cursor puede ser movido a la
lnea 1, caracter 5 para desplegar los minutos y luego movido a la lnea 1, caracter 10
para desplegar los segundos.
Un comando SEROUT que mustra los valores de las 3 variables, en posiciones correctas:
SEROUT 14, 84, [ 148, DEC2 hours,
153, DEC2 minutes,
158, DEC2 seconds ]
El siguiente programa ejemplo aplica este concepto con tan solo las habilidades de
tiempo del modulo BASIC Stamp. La precisin no es por mucho la de un reloj de
mueca digital; sin embargo es lo suficientemente Buena para mostrar como el desplegar
la hora puede trabajar con el posicionado de caracteres. Para mayor precisin, intente
incorporar el circuito integrado de tiempo DS1302. Est disponible en
www.parallax.com, solo teclee DS1302 en el campo de bsqueda.
Programa Ejemplo - LcdTimer.bs2
Este programa ejemplo despliega las horas, los minutos y los segundos transcurridos con
la LCD Serial Parallax. Apretando el botn de RESET en la tarjeta Board of Education,
usted puede reiniciar el timer.
Byte
Byte
Byte
DO
PAUSE 991
seconds = seconds + 1
LOOP
Hasta este punto, los cdigos de control de la LCD han tenido valores decimales. Sin
embargo, cuando est escribiendo o leyendo un programa largo, memorizar todos estos
valores de cdigos de control puede ser tedioso. Es mejor declarar una constante para
cada cdigo de control al principio del programa. Luego, usar nombres de constantes en
vez de nmeros. Tambin puede hacer lo mismo con el valor de BaudMode y luego
tambin agregar una directiva PIN para el pin P14 de entrada/salida. He aqu un ejemplo:
LcdPin
PIN
14
T9600
CON
84
LcdCls
LcdCr
LcdOff
CON
CON
CON
12
13
21
LcdOn
Line0
Line1
CON
CON
CON
22
128
148
La LCD Serial Parallax tiene espacio asignado para ocho caracteres mostrados en la
Figura 1-13. Para desplegar el carcter personalizado 0, solo mande a la LCD el valor 0
con el comando SEROUT. De igual manera, para mostrar el caracter Personalizado 1, solo
mande un 1, para mostrar el caracter Personalizado 2, mande un 2, etc. Note que los
Caracteres 0 y 1 estn pre-configurados como la contradiagonal y el tilde. He aqu un
ejemplo de comando SEROUT que muestra ambos - SEROUT 14, 84, [0, 1].
Este ejemplo enva a la LCD serial los dos comandos para desplegar los caracteres
personalizados 0 y 1, la contradiagonal "\"y el tilde"~".
Luego de enviar el cdigo que le dice a la LCD cul caracter personalizado va a definir,
debe enviar 8 bytes que describan al caracter. La LCD usa los 5 bits ms bajos de cada
byte que recibe para describir cada una de las 8 lneas de 5 pixeles de ancho que hay en el
caracter. La Figura 1-15 muestra un ejemplo de la definicin del caracter personalizado 0
para un reloj de arena que acaba de ser volteado.
SEROUT 14, 84, [248,
%00000,
%11111,
%11111,
%01110,
%00100,
%01010,
%10001,
%11111]
Figura 1-15
Redefiniendo el caracter
personalizado 0
Note como cada valor sucesivo en el comando SEROUT corresponde a una lnea de pixeles
en el caracter personalizado. Note tambin como los unos corresponde a pixeles negros y
los ceros corresponden a blancos.
Las definiciones de caracteres personalizados SEROUT no son permanentes. Cada
vez que la LCD es encendida y apagada los caracteres personalizados son borrados.
Puesto que BASIC Stamp y la LCD comparten la misma batera, el programa BASIC Stamp
tambin reinicia cuando la energa es restituida. Es buena prctica definir los caracteres
personalizados que planea usar al principio del programa, de tal forma que BASIC Stamp
pueda definir los caracteres personalizados cada vez que la energa se conecte.
Esta definicin de caracter personalizado de un reloj de arena con sus 4 pixeles de arena
abajo usa 255 para decirle al LCD que lo haga para el Caracter personalizado 7. Tambin
usa una tcnica para dibujar los caracteres con asteriscos en los comentarios a la derecha
del comando SEROUT. Empieza SEROUT con todos los valores binarios colocados en
%00000 y entonces dibuja el caracter con asteriscos en el comentario a la derecha.
Despus de que se ve bien, usa los asteriscos para indicar cules ceros deben ser
cambiados a unos.
SEROUT 14, 84, [255,
%00000,
%11111,
%10001,
%01010,
%00100,
%01110,
%11111,
%11111]
'
'
'
'
'
'
'
'
'
*
*
*
*
Figura 1-16 muestra como los dos comandos SEROUT recin discutidos redefinen los
caracteres personalizados de la LCD.
Figura 1-16: After Defining Caracteres personalizados 0 y 7
Con estas nuevas definiciones puede escribir un ciclo para hacer que el reloj de arena
cambie de vaco a lleno, indicando que el usuario debe esperar. El siguiente bloque
DO...LOOP hace esto primero colocando el cursor en la lnea 0, caracter 5 en la LCD.
Luego muestra el caracter personalizado 0, el reloj de arena recin volteado. Despus de
una breve PAUSE, el programa enva el comando de espacio atrs (8) para que el cursor
regrese al caracter 5. Luego, manda el caracter personalizado 7, el reloj de arena con la
arena ya en su base. Repitiendo esta secuencia parece como si el reloj de arena ha sido
volteado, drenado, volteado otra vez, drenado nuevamente, etc.
DO
SEROUT 14, 84,
SEROUT 14, 84,
PAUSE 1250
SEROUT 14, 84,
SEROUT 14, 84,
PAUSE 1500
[133]
[0]
'
'
'
'
'
'
[8]
[7]
LOOP
Este programa define y muestra los caracteres personalizados del reloj recin discutidos.
'
'
'
'
'
'
'
'
'
'
'
'
'
'
'
'
'
'
* * *
* * *
* *
*
*
*
* * *
* *
* *
*
*
*
* *
* * * *
*
*
*
*
* * *
* * * *
* * * *
*
*
*
*
[133]
[0]
[8]
[7]
'
'
'
'
'
'
LOOP
Su Turno
La Figura 1-17 muestra a los caracteres personalizados describiendo a los granos de arena
en el reloj movindose de arriba hacia abajo.
Figura 1-17: Caracteres personalizados para reloj de arena animado
He aqu una Rutina principal que puede tambin intentar para animar los ocho caracteres
personalizados una vez que los haya dado de alta en la seccin de Inicializacin:
DO
' Coloca el cursor en el caracter 5, y muestra el Caracter personalizado 0.
SEROUT 14, 84, 100, [133, 0]
PAUSE 750
' Retraso de 0.750 segundos
' Espacio atras, Caracter Pers. 1, espacio atrs, Caracter Pers. 2, etc.
' Ritmo opional en el argumento de 100 manda cada valor cada 1/10 segundo.
SEROUT 14, 84, 100, [8, 1, 8, 2, 8, 3, 8, 4, 8, 5, 8, 6, 8, 7, 8]
PAUSE 750
LOOP
Intntelo!
An cuando la LCD solo guarda 8 caracteres personalizados a la vez, su programa
puede guarder tantos como necesite. Recuerde, su programa puede redefinir los
caracteres personalizados en cualquier momento. Si su aplicacin necesita 20 caracteres
personalizados, su programa PBASIC puede guardarlos y redefinirlos en la LCD segn se
requiera.
Usted puede desplegar el reloj de arena con un solo caracter personalizado. La
animacin del reloj de arena completa puede hacerse con un solo caracter personalizado.
El truco est en redefinirlo cada vez que la pantalla es actualizada.
Figura 1-18
Text Avanzando
El cdigo para el avance que se presenta en esta actividad es bastante diferente del
programa ejemplo en la Actividad #2, el cual hizo que la lnea 1 se moviera a lo ancho de
El siguiente programa ejemplo presenta una subrutina que es conveniente para desplegar
una variedad de mensajes con desplazamiento con una cantidad mnima de esfuerzo.
Todo lo que involucra es poner los mensajes en directivas DATA precedidas por nombres
Smbolos, establecer algunas variables y luego llamar la subrutina de desplazamiento.
He aqu algunos ejemplos de directivas DATA.
Message1
Message2
Message3
Message4
El primer mensaje de texto empieza en una direccin EEPROM igual al valor del smbolo
del Message1, el cual ha sido establecido en 2 a travs del argumento opcional @Address
de la directiva DATA. La direccin despus del final del Message1 es la direccin
EEPROM 11. Esto es denotado por la etiqueta Message2, lo cual es tambin el inicio del
Segundo mensaje. Puesto que usted puede establecer variables iguales a los valores de
Message1 a Message4, es un sistema especialmente flexible para una variedad de
mensajes.
El siguiente programa ejemplo tambin tiene variables que usted puede establecer para
configurar diferentes posiciones de ventana, anchos e incrementos. Despus de establecer
estos valores de variables, usted puede entonces hacer una llamada a la subrutina
Scroll_Message, y ella har el resto del trabajo. He aqu un ejemplo de un bloque de
cdigo que hace que la subrutina despliegue todos los caracteres entre las etiquetas
Message1 y Message2 en los cuatro caracteres centrales de la lnea superior de la LCD.
messageStart = Message1:
windowLeft
= 134:
increment
= 1
GOSUB Scroll_Message
messageEnd = message2
windowRight = 137
Las direcciones EEPROM inicial y final son guardadas en las variables messageStart y
messageEnd. Las direcciones de los caracteres de la LCD inicial y final que definen la
ventana son guardadas en windowLeft y windowRight. Finalmente pero no por ltimo,
la variable increment se establece al nmero de caracteres que el texto mueve cada vez
que cambia. Con todos esos valores establecidos, la subrutina Scroll_Message tiene
todo lo que necesita para hacer su trabajo.
Hay tres ejemplos ms en la rutina principal del siguiente programa. No todos los
ejemplos asignan valores a todas las variables. Algunos de los ejemplos solo establecen
algunos valores porque son valores que se reciclan y que fueron asignados antes de la
previa llamada de subrutina. Por ejemplo, el valor de la variable increment fue
establecido en 1 antes de la primera llamada de subrutina. Puesto que la subrutina
Scroll_Message no hace cambios a esa variable, el valor 1 no necesita ser reasignado
antes de llamar a la subrutina Scroll_Message nuevamente.
' Cambia los valores de varias variables de configuracion
' y demuestra el efecto sobre la pantalla con cada cambio.
windowLeft
= 131:
windowRight = 140
GOSUB Scroll_Message
He aqu el ultimo ejemplo en la Rutina Principal. Note que re is the last ejemplo en the
Main Routine. Note que se encarga de buena parte de la segunda linea y avanza dos
caracteres a la vez:
messageStart = Message3:
windowLeft
= 150:
increment
= 2
GOSUB Scroll_Message
messageEnd = message4
windowRight = 161
DATA]----------------------------------------------------
Message1
DATA @ 2, "Message "
Message2
DATA
"again"
Message3
DATA
"Larger message, going faster..."
Message4
DATA
' -----[ Definiciones E/S]---------------------------------------------------LcdPin
PIN
14
CON
CON
CON
CON
CON
CON
CON
84
12
13
21
22
128
148
'
'
'
'
'
'
'
TimeOn
TimeOff
CON
CON
250
0
VAR
VAR
VAR
VAR
VAR
Byte
Byte
Byte
Byte
Byte
'
'
'
'
'
VAR
VAR
Nib
Byte
windowLeft
VAR
Byte
messageStart
messageEnd
VAR
VAR
Byte
Byte
'
'
'
'
'
'
'
messageEnd = message2
windowRight = 137
windowRight = 140
messageStart = Message1:
GOSUB Scroll_Message
messageEnd
messageStart = Message3:
windowLeft
= 150:
increment
= 2
GOSUB Scroll_Message
messageEnd = message4
windowRight = 161
= message3
END
' -----[ Subrutina - Scroll_Message ]---------------------------------------Scroll_Message:
cursorStart = windowRight - increment + 1
head = 0
tail = increment - 1
' ciclo de avance
DO WHILE tail<(MessageEnd-MessageStart)+(windowRight-windowLeft+increment)
SEROUT LcdPin, T9600, [cursorStart]
PAUSE timeOff
La posicin de inicio del cursor tiene que mantenerse en 134 mientras que los
caracteres de head (punta) y tail (cola) continan avanzado: 2 al 5 - "ssag", 3 al 6
- "sage". La ventana se mantiene corriendo y la Figura 1-22 muestra del
penltimo paso de los caracteres 6 al 9 - "e" seguida por tres espacios, y
finalmen te el ltimo paso, 7 al 10 cuatro caracteres de espacio.
RESUMEN
La pantalla de cristal lquido (LCD) es usada en una tremenda variedad de productos.
Una pantalla de caracteres simple como la LCD serial Parallax 2X16 puede substituir las
caractersticas de la Terminal de Depuracin, lo cual es especialmente util cuando la
prueba en campo de su proyecto no est dentro del alcance de un cable serial y una PC.
La LCD Serial Parallax tiene un potencimetro de ajuste de contraste atrs, junto con dos
interruptores que puede usar para seleccionar de entre 3 diferentes velocidades baud y un
modo de auto-prueba. Hay 3 pins en la parte posterior de la LCD Serial Parallax, ya que
se requieren solo 3 conexiones para operarla: Vdd, RX, y Vss.
La LCD Serial Parallax tiene un conjunto extensor de commandos y una lista completa de
estos commandos se incluye en la Documentacin del Producto LCD Serial Parallax
(Apndice B). Este captulo presenta comandos para encender y apagar la pantalla,
limpiarla, colocar el cursor, controlar el encendido de la luz de fondo para el modelo con
luz de fondo y para desplegar caracteres.
La LCD Serial Parallax depende de mensajes seriales emitidos desde BASIC Stamp y
que son programados dentro de ella a travs del comando SEROUT de PBASIC. Muchas
de las caractersticas del comando DEBUG pueden ser usadas con el commando SEROUT,
incluyendo texto entre comillas y formateadotes como DEC, BIN, DIG, etc. Todos estos
tienen resultados en la LCD que son similares a los de la Terminal de Depuracin. Los
cdigos de control de la LCD son diferentes y ms numerosos que los que se usan con la
Terminal de Depuracin. En vez de intentar usar CR, CLS, CRSRXY, etc, use los valores de
cdigos de control listados en el conjunto de commandos de la LCD. Tambin es buena
idea hacer constanes para estos valores, tales como LcdCls CON 12, LcdClr CON 13,
LcdOn CON 22, LcdOff CON 21, y as sucesivamente.
La LCD Serial Parallax tiene 8 caracteres personalizados, del 0 al 7. Usted puede
desplegar cualquiera de ellos al enviar su valor a la LCD. Por ejemplo, SEROUT 14, 84,
[3] hace que la LCD escriba el Caracter personalizado 3. Los comandos para definir los
caracteres personalizados van del 248 al 255. Enviar un 248 instruye a la LCD para
definir el carcter personalizado 0, 249 define el Caracter Personalizado 1, etc., hasta el
255, lo cual define el Caracter personalizado 7. Despus de enviar un comando para
definir un caracter personalizado, los siguientes 8 bytes son valores binarios, cuyos 5 bits
mas bajos definen los pixeles en una determinada lnea de pixeles. Un 1 hace al pxel
negro, un 0 lo hace blanco.
Este captulo tambin presenta una subrutina para que avance texto de derecha a
izquierda dentro de una ventana. Esta subrutina busca direcciones de inicio y paro que
corresponden a etiquetas de direcciones Smbolo que preceden a directivas DATA que
contienen el texto a ser desplegado. La manera en que se despliega el texto de la
subrutina esta definido por 5 variables: messageStart, messageEnd, windowLeft,
windowRight, e increment. Las variables messageStart y messageEnd guardan las
direcciones EEPROM de inicio y fin del texto a ser desplegado. Las variables
windowLeft y windowRight guardan las direcciones de caracteres en la LCD de inicio y
fin que definen la ventana, la variable increment guarda cuntos caracteres a la vez se
cambian de derecha a izquierda.
Preguntas
1. Mencione 3 dispositivos que usa todos los das que despliegan informacin con
la LCD.
2. Qu significan el 2 y el 16 en el trmino 2x16 LCD?
3. Qu comando usa para enviar informacin a la LCD Serial Parallax?
4. De qu manera son diferentes los comandos DEBUG y SEROUT?
5. En qu posicin deben estar los interruptores SW1 y SW2 si necesita escribir
un programa que enve un mensaje a la LCD Serial Parallax a una velocidad de
19,200 bps?
6. Qu componente ajusta para cambiar el contraste de la pantalla LCD?
7. Qu comando SEROUT limpia la pantalla?
8. Qu consideraciones especiales hay que tomar en cuenta al usar los cdigos de
control CR, CLS, y HOME del comando DEBUG con la LCD Serial Parallax?
9. Cules son los 3 argumentos que necesita para un comando SEROUT mnimo?
10. Cmo puede hacer que un texto desplegado en la LCD se encienda y apague
intermitentemente?
11. Qu rangos de valores puede enviar a la LCD para colocar el cursor?
12. Qu carcter reside en el carcter personalizado 1 por definicin?
13. Cmo despliega un caracter personalizado despus de que ha sido definido?
14. Cules son algunas aplicaciones de la ventana corrediza?
Ejercicios
Soluciones
Q1.
Q2.
Q3.
Q4.
E1. Del archivo de ayuda del Editor de BASIC Stamp: Para el Puerto serial interconstruido establezca el argumento Tpin a 16 en el comando SEROUT.
' Sensores Inteligentes y sus Aplicaciones - Ch1_Ex01.bs2
' {$STAMP BS2}
' {$PBASIC 2.5}
DEBUG "Hola, esto es DEBUG", CR
SEROUT 16, 84, ["Hola Esto es SEROUT", CR]
DO
SEROUT 14, 84, [21]
PAUSE 500
SEROUT 14, 84, [22]
PAUSE 500
LOOP
SEROUT
SEROUT
SEROUT
SEROUT
14,
14,
14,
14,
84,
84,
84,
84,
[22, 12]
["Inicio"]
[158]
["Final"]
'
'
'
'
Enciende y
Escribe en
Linea2, 6o
Escribe en
limpia pantalla
Linea 0
caracter de der. a izq.
extremo der de la Linea 1
LcdPin
T9600
PIN
CON
14
84
PAUSE 250
SEROUT 14, 84, [22, 12]
PAUSE 5
SEROUT LcdPin,
SEROUT LcdPin,
PAUSE 1500
SEROUT LcdPin,
SEROUT LcdPin,
PAUSE 1500
SEROUT LcdPin,
SEROUT LcdPin,
"]
"]
T9600, ["obstruyera
T9600, ["mi educacion.
"]
"]
T9600, ["
T9600, ["
-Mark Twain"]
1835-1910 "]
END
Es como magia. A
Line0
Line1
copies
CON
CON
VAR
128
148
Nib
PAUSE 250
SEROUT 14, 84, [22, 12]
PAUSE 5
FOR copies = 1 TO 3
SEROUT 14, 84, [0]
NEXT
PAUSE 1000
' Permite tiempo para verlo
SEROUT 14, 84, [Line1, "now re-defining"]' Despliega mensaje en Linea 1
PAUSE 1000
SEROUT 14, 84, [Line1, "
"]' Limpia mensaje
SEROUT 14, 84, [248,
%00100,
%10011,
%01001,
%00101,
%00001,
%00010,
%00100,
%11000]
END
Figura 2-1
The Sensor Ultrasonico de Distancia
Ping)))
El comando PULSIN del BASIC Stamp usa una variable para guardar cuanto dur la seal
alta del sensor Ping))). El tiempo de esta medicin es lo que le tom al sonido viajar al
objeto de ida y vuelta. Usando esta medicin y el dato de la velocidad del sonido en el
aire, usted puede hacer que su programa calcule la distancia al objeto en centmetrosa,
pulgadas, pies, etc.
El silbido del sensor Ping))) no es audible porque 40 kHz es una frecuencia
ultrasnica.
Lo que consideramos sonido es la habilidad de nuestro odo interno para detectar las
variaciones de la presin del aire causada por una vibracin. El nivel de estas variaciones
determina el timbre del tono. Tonos de alta frecuencia resultan en sonidos de mayor timbre
y tonos de baja frecuencia resultan en tonos de menor timbre.
La mayora de las personas pueden or tonos que van desde los 20 Hz, el cual es un timbre
muy bajo, a 20 kHz, el cual es un timbre muy agudo. Un sonido subsnico es aquel con
frecuencias menores a 20 Hz, y un sonido ultrasnico es aquel con frecuencias por arriba
de 20 kHz. Puesto que los silbidos del sensor Ping))) son a 40 kHz, definitivamente son
ultrasnicos y no audibles.
Construya el circuito.
Como se mencion antes, el sensor Ping))) necesita un pulso de inicio del BASIC Stamp
para iniciar sus mediciones. Un pulso en P15 de 10 s (PULSOUT 15, 5) es fcilmente
detectado por el sensor Ping))), y toma solo una pequea cantidad de tiempo para que el
BASIC Stamp lo mande. Un comando PULSIN que guarda la duracin del pulso de eco
del sensor Ping))) (PULSIN 15, 1, time) tiene que venir inmediatamente despus del
comando PULSOUT. En este ejemplo, el comando PULSIN guarda en la variable tiempo el
tiempo de viaje redondo para que el silbido del sensor Ping))) llegue al objeto, se refleje y
regrese.
Programa Ejemplo - PingTest.bs2
Puede probar este programa midiendo distancias de algunos objetos cercanos. Para
mediciones cercanas, el sensor Ping))) solo necesita estar de 3 a 4 pulgadas (aprox. de 8 a
10 cm) por encima de la superficie de trabajo. Sin embargo, si est midiendo objetos que
estn a mas de medio metro de distancia, podra necesitar elevar su sensor Ping))) para
prevenir ecos del suelo como si fueran objetos detectados.
Coloque su tarjeta Board of Education con el circuito del sensor Ping))) sobre
algo que la mantenga al menos 8 cm por encima de la superficie de la mesa.
Coloque un objeto (como una botella de agua, una caja o una hoja de papel) a 15
cm del frente del sensor Ping))).
Introduzca, salve y corra PingTest.bs2.
La Terminal de Depuracin debe estar reportando un valor entre 400 y 500.
b.
c.
Adicionalmente, como descubri Ken Gracey de Parallax Inc. durante una demostracin
en la escuela de su hijo, algunos objetos con superficies suaves e irregulares (como
animalitos de peluche) en vez de reflejar absorbern el sonido y por lo tanto puede ser
difcil la deteccin para el sensor Ping))). Los objetos con superficies lisas que fcilmente
reflejan el sonido facilitan la deteccin del sensor.
Figura 2-5
Determinando el
Angulo Mnimo de
Deteccin
Intente colgar varios objetos del techo a 1.5 metros de distancia del sensor
Ping))). Qu tan pequeos pueden ser los objetos? Afecta la forma o el
ngulo? Cambia la afectacin por el tamao del objeto a medio metro de
distancia?
Intente detectar objetos de tamao similar pero hechos de diferentes materiales,
como una caja de zapatos de carton o una pantufla suave para ver si tiene un
rango efectivo de deteccin ms corto con objetos que absorben el sonido.
Puede encontrar algn objeto invisible para el sensor Ping))), como un cmulo
de algodn?
La ecuacin para la distancia que el sonido viaja es S = Cair t, where S es la distancia, Cair
es la velocidad del sonido en el aire y t es el tiempo. Puesto que la medicin del tiempo
del sensor Ping))) es el tiempo que le toma al sonido en alcanzar al objeto y regresar, la
distancia real al objeto Sobject es la mitad de la distancia total que viaja el sonido.
S = Cair t
Sobject =
S Cair t
=
2
2
La velocidad del sonido en el aire est comunmente documentada en metros por segundo
(m/s). Sin embargo, ser ms conveniente calcular mediciones de centmetros (cm) con
el BASIC Stamp. Puesto que hay 100 centmetros en un metro, usemos el trmino Sobjectcm lo cual es simplemente 100 veces Sobject. Las unidades de medicin para el valor
Duration de PULSIN en el BASIC Stamp 2 son 2/1,000,000 de segundo (2 s).
Entonces, en vez de t, el cual tiene que ser una medida en segundos, usaremos tPULSIN-BS2.
Cuando se multiplica por 2/1,000,000 tPULSIN-BS2 nos da el nmero de segundos. Hay
entonces un par de nmeros 2, uno en el numerador y otro en el denominador, que se
cancelan, y el 100 en el numerador cancelan un par de ceros en el denominador
1,000,000. El resultado de estas sustituciones y cancelaciones es Sobject-cm = (Cair tPULSINBS2)/10,000.
Sobject-cm =
100 Cair t
2
Sobject-cm =
2
1,000,000
Sobject-cm =
Cair tPULSIN-BS2
10,000
344.8 tPULSIN-BS2
10,000
= 0.03448 tPULSIN-BS2
El BASIC Stamp puede usar el operador ** para multiplicar una variable que guarde la
medicin Duration del comando PULSIN por un valor fraccional menor que 1. Por
ejemplo, si el comando PULSIN guarda la medicin del tiempo de eco en la variable
time, este comando guardar la distancia en centmetros resultante en la variable
cmDistance as:
cmDistance = CmConstant ** time
Con el operador **, CmConstant tendr que ser 2260, el cual es el equivalente ** de
0.03448. En vez de un denominador decimal, como 10,000 (en el caso de 0.03448), el
operador ** necesita un valor que vaya en el numerador de una fraccin con
denominador 65536. Para obtener dicho numerador, multiplique su valor fraccional por
65536.
CmConstant = 0.03448 65536 = 2260
CON
2260
cmDistance
VAR
Word
VAR
VAR
Word
Word
DO
PULSOUT 15, 5
PULSIN 15, 1, time
cmDistance = CmConstant ** time
DEBUG HOME, DEC3 cmDistance, " cm"
PAUSE 100
LOOP
VAR
VAR
VAR
Word
Word
Word
DO
PULSOUT 15, 5
PULSIN 15, 1, time
cmDistance = cmConstant ** time
inDistance = inConstant ** time
DEBUG HOME, DEC3 cmDistance, " cm"
DEBUG CR, DEC3 inDistance, " in"
PAUSE 100
LOOP
Su Turno
A fin de hacer espacio para la LCD Serial Parallax en su tarjeta Board of Education,
conecaremos el sensor Ping))) a la tarjeta con un cable extensin. Entonces podr
sostenerlo y apuntarlo a varios lugares, o usar hardware para montarlo cerca de su tarjeta
Board of Education.
Partes Requeridas
Los esquemticos mostrados en la Figura 2-7 son, hasta este momento, idnticos a los
que us para el sensor Ping))) y la LCD Serial Parallax. Ahora cambiaremos la forma en
que estas conexiones elctricas estn hechas agregando un cable, de tal forma que ambos
dispositivos puedan estar convenientemente conectados a su tarjeta al mismo tiempo.
An cuando los esquemticos son lo mismo, las conexiones reales variarn dependiendo
de qu tarjeta educativa BASIC Stamp est usando.
Figura 2-7
Esquemticos del Sensor
Ping))) y la LCD Serial
Parallax
Esta seccin es para las tarjetas que tienen puertos con un conector jumper Vdd/Vss
enmedio, como las tarjetas Board of Education Rev C y Board of Education USB. Para
todas las dems tarjetas, vaya a Para todas las dems tarjetas educativas BASIC
Stamp en la pgina 54.
La configuracin del jumper Vdd vs. Vin determina qu fuente est conectada a los
puertos X4 y X5. Cuando el Jumper se coloca a Vdd, estos puertos reciben 5 V regulados
desde el regulador de tensin de la tarjeta Board of Education. Si el jumper se coloca a Vin,
el Puerto recibe energa directamente de la betera o de la fuente de poder.
Conecte la LCD Serial Parallax como se indica (igual que el captulo anterior).
Conecte una punta del cable extension en el Puerto 15 del cabezal X4,
asegurndose que las etiquetas "Red" y "Black" que estn en el lado derecho del
puerto X5 coincidan con los cables rojo y negro.
Verifique que su cable est bien conectado asegurndo que el cable blanco es el
ms cercano a la etiqueta 15 y que el negro es el ms cercano a la etiqueta X4.
Figura 2-9
Puerto Servo y
Conexin del
Jumper de energa
para el Sensor
Ping)))
Conecte la otra punta del cable de tal forma que el cable negro est conectado al
pin GND del modulo Ping))), el cable rojo este conectado al pin 5 V y en cable
blanco est conectado al pin RX.
Vuelva a verificar todas las conexiones, incluyendo la posicin del jumper y
asegrese que son correctas.
ATENCION! No conecte la energa a su tarjeta hasta que no est seguro que todas
las conexiones son correctas. Si comete un error con las conexiones de la LCD Serial
Parallax, esta podra ser permanentemente daada.
Esta seccin es para conectar el sensor Ping))) y la LCD Serial Parallax a alguna de las
siguientes tarjetas educativas BASIC Stamp:
Figura 2-10
Cableado en tableta para la
conexin del cable del Sensor
Ping)))
Figura 2-11: Conexiones en la tableta para el Sensor Ping))) y la LCD Serial Parallax
Despus, los comandos DEBUG tienen que sen cambiados por commandos SEROUT. He
aqu los commandos DEBUG para PingMeasureCmAndIn.bs2.
DEBUG HOME, DEC3 cmDistance, " cm"
DEBUG CR, DEC3 inDistance, " in"
Los caracteres de control de la Terminal de Depuracin (HOME y CR) tienen que ser
cambiados por cdigos de control que coloquen el cursor en la LCD.
SEROUT 14, 84, [128, DEC3 cmDistance, " cm"]
SEROUT 14, 84, [148, DEC3 inDistance, " in"]
VAR
Word
inDistance
time
VAR
VAR
Word
Word
PAUSE 200
SEROUT 14, 84, [22, 12]
PAUSE 5
DEBUG CLS, "Program running..."
DO
PULSOUT 15, 5
PULSIN 15, 1, time
cmDistance = cmConstant ** time
inDistance = inConstant ** time
SEROUT 14, 84, [128, DEC3 cmDistance, " cm"]
SEROUT 14, 84, [148, DEC3 inDistance, " in"]
PAUSE 100
LOOP
La velocidad del sonido cambia con la temperatura del aire, humedad y an con la
calidad del aire. Ni la humedad ni la calidad del aire hacen suficiente diferencia para que
figure en los clculos de distancia del sensor Ping))). Pero por otro lado, la temperatura
del aire, puede causa errores medibles en la distancia. La velocidad del sonido se
incrementa 0.6 metros por segundo (m/s) por cada grado Celsius (C) que se incrementa
la temperatura. Puesto que la veloicidad del sonido es aproximadamente 331.5 m/s a 0
C, podemos usar la siguiente ecuacin para calcular la velocidad del sonido a una
temperatura dada.
Cair = 331.5 + (0.6 TC ) m/s
Convirtiendo de F a C y Viceversa
Para converter un grado Fahrenheit a Celsius, reste 32 deTF (la medicin Fahrenheit), luego
divida entre 1.8. El resultado sera TC, el equivalente Celsius. Para convertir de Celsius a
Fahrenheit, multiplique TC por 1.8, luego agregue 32. El resultado ser TF.
TC = (TF - 32) 1.8
TF = 1.8 TC + 32
A continuacin hay unos ejemplos de velocidad del sonido a temperaturas de cuarto que,
an cuando ambas son confortables, son ligeramente diferentes.
Ejemplo 1: Calcule la velocidad del sonido a 22.2 C, que es aproximadamente 72
grados Fahrenheit (F).
Cair (22.2C ) = 331.5 + (0.6 22.2 m/s ) = 344.8 m/s
% error =
real - predicha
100%
predicha
346.5 - 344.8
100%
344.8
= 0.49%
RESUMEN
El BASIC Stamp solicita una medicin al sensor Ping))) enviando un breve pulso, lo que
causa que este emita un silbido a 40 kHz. Luego, el Ping))) escucha un eco de ese
silbido. Reporta el eco enviando un pulso de regreso al BASIC Stamp que equivale al
tiempo que el toma al sensor Ping))) recibir el eco.
Para calcular la distancia basada en la medicin del tiempo de eco, la velocidad del
sonido debe ser convertida en unidades que son convenientes al BASIC Stamp. Esto
involucra convertir metros por segundo a centmegros por unidades de medicin PULSIN.
El valor resultado tambin debe ser convertido a un valor que pueda ser usado con el
operador multiplica-alto ( ** ) multiplicandolo por 65536.
La velocidad del sonido en el aire es cair = 331.5 + (0.6 TC) m/s. Si bien la velocidad
del sonido cambia con la temperatura, el error en la medicin resultante es pequeo,
especialmente a temperatura de cuarto.
Preguntas
Ejercicios
1. Agrege un circuit LED a su tarjeta y programe en BASIC Stamp para hacer que
el LED prenda y apague cuando no hay ningn objeto dentro del rango de
medicin.
2. Use un piezo altavoz para hacer una alarma que indique cuando una persona pasa
por una puerta. El sensor Ping))) debe ser montado cerca de la puerta de salida,
apuntando a travs del camino que la gente usa para entrar o salir.
Soluciones
E1.
E2.
E3.
E4.
LED
LCD
Ping
PIN
PIN
PIN
13
14
15
CmConstant
InConstant
MaxDistance
cmDistance
time
CON
CON
CON
VAR
VAR
2260
890
361
Word
Word
PAUSE 200
SEROUT LCD, 84, [22, 12]
PAUSE 5
DO
LOW LED
' LED off antes de cada medicion
PULSOUT 15, 5
' Inicia Ping)))
PULSIN 15, 1, tiempo
' Lee tiempo de eco
cmDistance = cmConstant ** tiempo ' Calcula distancia con el tiempo
SEROUT LCD, 84, [128, DEC3 cmDistance, " cm"] ' Muestra distancia en
' la pantalla LCD
IF cmDistance >= MaxDistance THEN HIGH LED
' Cambia LED si esta
' fuera de rango
PAUSE 100
LOOP
' Bing
' Bong
Aceleracin
Pendiente y ngulo de pendiente
Inclinacin
Rotacin
Vibracin
Colisin
Gravedad
robots auto-equilibrantes
Mandos de juego con sensado de inclinacin
Pilotos automticos para aeromodelismo
Sistemas de alarmas de autos
Deteccin de colisin / sistemas para despliegue de bolsas de aire
Sistemas para monitoreo de movimiento humano
Herramientas para nivelacin
Hace mucho tiempo, los acelermeros eran instrumentos grandes, estorbozos y caros que
no se prestaban para proyectos de robtica y electrnica. Todo esto cambi gracias a la
llegada de los sistemas-micro-electrnicos-mecnicos (MEMS por sus siglas en ingls).
La tecnologa MEMS es responsable de un nmero siempre creciente de dispositivos
otrora mecnicos y que ahora estn siendo diseados en circuitos integrados de silicn.
Modulo de acelermetro
Chip MX2125
Los dos ejes que usa el MX2125 para sensar gravedad y aceleracin estn marcados x y y
en la Figura 3-4. Le ser de ayuda colocar su tarjeta en una superficie plana y enfrente de
usted como lo indica la figura. De esa manera, los ejes x y y apuntarn a las mismas
direcciones que apuntan en muchos de las grficas xy.
Para una prueba a temperatura de cuarto, obtendr una muy buena indicacin de
inclinacin con tan solo medir el tiempo de nivel alto de los pulsos enviados por los pines
Xout y Yout del MX2125 usando el comando PULSIN. Dependiendo qu tanto inclina la
tarjeta y en qu direccin, las mediciones de tiempo de PULSIN deben ser entre 1875 a
3125. Cuando la tarjeta esta nivelada, el comando PULSIN debe guardar valores cercanos
a 2500.
Asegrese que su tarjeta est sin inclinacin en su mesa, orientada con los ejes x
y y como se muestra en la Figura 3-4.
Introduzca y corra SimpleTilt.bs2.
VAR
VAR
Word
Word
DEBUG CLS
DO
PULSIN 6, 1, x
PULSIN 7, 1, y
DEBUG HOME, DEC4 ? X, DEC4 ? Y
PAUSE 100
LOOP
Figura 3-5
Salida de la
Terminal de
Depuracin
Ambos, el acelermetro Mems y la LCD Serial caben en su tarjeta al mismo tiempo, asi
que no hay necesidad de cables de extensin a no ser que haya escogido montar LCD
Serial Parallax cerca de la tarjeta Board of Education o en una caja de proyecto.
Partes Requeridas
Los esquemticos mostrados en la Figura 3-6 son identicos a los que ha usado para el
acelermetro Mems y la LCD Serial Parallax en actividades anteriores.
Figura 3-6
Esquemticos para el
acelermetro
MX2125 y la LCD
Serial Parallax
Figura 3-7
Alambrado para el
acelermetro 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 carcter de retorno de carro despus.
Recuerda del Captlo 1 que CR es el nico caracter de control que es igual tanto para la
Terminal de Depuracin como para la LCD Serial Parallax? Debido a esto, podemos
dejar la directiva ? en los comandos SEROUT para la LCD. He aqu un comando SEROUT
que ejecuta el desplegado equivalente en la LCD Serial Parallax.
SEROUT 14, 84, [128, DEC4 ? X, DEC4 ? Y]
VAR
VAR
Word
Word
LOOP
El retorno de carro (CR) que est construdo dentro del operador ? hace ms difcil
desplegar la informacin despus de los valores de las variables x o y. Puede reescribir
los comandos DEBUG y SEROUT para ejecutar las mismas operaciones como sigue.
DEBUG HOME, "x = ", DEC4 x, CR, "y = ", DEC4 y
Este comando SEROUT despliega la misma informacin en la LCD Serial Parallax. Note
como el the cdigo de control 128 coloca el cursor en la Linea 0, caracter 0. En vez de
un caracter de control CR, 148 coloca al cursor de la LCD en la Linea 1, caracter 0.
SEROUT 14, 84, [128, "x = ", DEC4 x, 148, "y = ", DEC4 y]
Si bien "us" no es realmente lo mismo que "s" porque estamos usando una u en vez de la
letra griega mu, la mayora de las personas comprendera el significado. Usted tambin
puede hacer un caracter personalizado para mu. Esto involucrar agregar un comando
SEROUT al principio del programa que defina un caracter personalizado. Luego, tendr
que desplegar ese caracter personalizado donde la "u" est siendo desplegada.
En este primer ejemplo, tomaremos un valor de entrada cualquiera entre 1875 y 3125 y lo
escalaremos y compensaremos a un valor de salida correspondiente que caiga entre 127
y 127 (Figura 3-9). La posicin del valor en la escala de salida debe ser proporcional a la
posicin del valor en la escala de entrada. Por ejemplo, si el valor de entrada es 2500 (a la
mitad entre 1875 y 3125) el valor de salida es 0 (a la mitad entre 127 y 127).
Figura 3-9: Ejemplo de escalamiento de entrada y salida
El valor 13369 usado usado para escalar (0 a 1250) a (0 to 254) fue determinada al
sustituir el nmero de elementos en las escalas de entrada y salida en la siguiente
ecuacin. El nmero de elementos en la escala de salida es 255, incluyendo al 0, y el
nmero de elementos en la escala de entrada es 1251, tambin incluyendo el 0. Use esta
ecuacin siempre que necesite ajustar una escala ms grande en una ms pequea con el
operador **.
255
ScaleCons tan t = Int 65536
1251 1
La mejor forma de asegurar que los valores de salida no exceden el rango de salida es
verificar que los valores de entrada no salen del rango de entrada. Por ejemplo, si no
quiere que la salida de este commando salga fuera de 127 a 127, el mtodo ms
conveniente es aseguarse que los valores de entraga no sean menores que 1875 o mayores
que 3125. He aqu una version modificada de value = value - 1875 ** 13369 127 que previene este problema.
value = (value MIN 1875 MAX 3125) - 1875 ** 13369 - 127
Antes de restar 1875 a la variable value, este commando usa dos operadores, MIN 1875
y MAX 3125, para asegurarse que value guarda algo en este rango. Si la variable value
est guardando un nmero en este rango, los operadores MIN y MAX no la alteran. Sin
embargo, si est guardando algo menor que 1875, MIN 1875 cambiar el valor a 1875.
Igualmente, si est guardando algo mayor que 3125, MAX 3125 lo cambiar a 3125.
Programa Ejemplo: TestScaleOffset.bs2
VAR
Word
DO
DEBUG ">"
DEBUGIN DEC value
value = (value MIN 1875 MAX 3125) - 1875 ** 13369 - 127
DEBUG "scaled to ", SDEC value, CR
LOOP
Transmit
Windowpane
Receive
Windowpane
0000000000000001
0111111111111111
1000000000000000
1111111111111111
Decimal con
signed
1
32767
-32768
-1
Visualize una recta numrica (Figura 3-12). Del 0 en adelante, los valores 0 al 32767
estn representados por sus equivalents binarios normales de 16 bits: el valor 1 esta
representado por el binario 1, etc., hasta el 32767. Pero el 1 est representado por el
equivalente binario de 65535, que es el valor con mayor tamao de palabra, que es todo
en 1s. Yendo hacia atrs con estos valores negativos, sus correspondientes nmeros
binarios que los representan se hacen ms pequeos hasta llegar al 32768 representado
por el binario 32768.
(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.
Como en PBASIC solo las variables de palabra completa pueden retener nmeros con
signo, todos los nmeros con signo tienen 16 bits. Viendo el bit ms hacia la izquierda, el
Bit 15, podemos saber si un nmero es positivo o negativo. Puede usar value.BIT15
como una variable que le diga si value es un nmero positivo o negativo. Si
value.BIT15 es igual a 0, el nmero es positivo. Si es igual a 1, es negativo.
Este es un tip importante, porque algunos operadores PBASIC solo trabajan con enteros
positivos, como division "/" y mdulo "//". Cuando se usan estos operadores, es til
Para pequeas entradas y rangos de salida, podemos revisarlos con una calculadora, lpiz
y papel. Tomemos del 0 al 10 como nuestra escala de entrada y del 0 al 2 como nuestra
escala de salida. El primer paso es visualizar cual sera la constante para la operacon **
usando la ecuacin de la constante de escalamiento (ScaleConstant).
3
ScaleCons tan t = Int 65536
11 1
La Table 3-2 muestra algunos ejemplos de clculos del BASIC Stamp para cada valor en
el
rango de entrada para value = value ** 19660. Considere que es
aproximadamente igual a multiplicar value por 0.29999 con una calculadora. Puesto
que el BASIC Stamp es un procesador matemtico de enteros, trunca cualquier resultado
al valor entero, redondendolo entonces hacia abajo. Note como los primeros 4 valores de
entrada resultan en salida cero. Luego, cuando el valor de entrada es 4 el resultado es
1.19996, que se redondea a 1. Al ejecutar el resto de las operaciones en la tabla, note
Complete los calculos en la Table 3-2 para valores de entrada del 5 al 10.
Table 3-2: Tensiones Medidas durante el ciclo de cargae
Valor
Constante de
escalamiento **
x 0.2999 =
x 0.2999 =
0.2999
x 0.2999 =
0.5998
x 0.2999 =
0.8997
x 0.2999 =
1.1996
x 0.2999 =
x 0.2999 =
x 0.2999 =
x 0.2999 =
x 0.2999 =
10
x 0.2999 =
Valor Calculado
Resultado entero
BASIC Stamp
d. x = 0 100
y = 0 100
y = 100 100
b. x = 0 100
y = 10 0 100
c. x = 100 100
y = 0 100
Figura 3-15
Inclinacin en el Plano Vertical
y
tan =
x
Figura 3-16
Tangente y Arcotangente
y
= tan 1
x
La funcin arcotangente puede usarse para determinar the ngulo de rotacin del
acelermetro con sus mediciones x y y. PBASIC tiene un operador llamado ATN que
puede usar para calcular tan1(y/x). Para calcular el arcotangente of y/x y guardarlo en
una variable llamada angle, use el comando angle = x ATN y.
y
= tan 1 angle = x atn y
x
La Figura 3-17 esta tomada del archivo de ayuda del Editor de BASIC Stamp y muestra
como trabaja el operador ATN. Ambas variables x y y deben ser escaladas a valores entre
127 y 127. El resultado del operador ATN es el ngulo en radianes binarios, los cuales se
abrevian brads. Con los brads, un crculo es dividido en 256 segmentos de la misma
manera que los ngulos lo dividen en 360 segmentos.
Figura 3-17
Crculo Unitario en grados y
Radianes Binarios
Recuerde:
El operador ** multiplica por un nmero de 65536avos.
The operador */ multiplies por un nmero de 256avos.
Las reglas matemticas de enteros para escalar de una escala a otra an aplican, an si
convertimos de una escala ms pequea a una ms grande. Lo nico que cambiaremos es
la constante de la escala, el cual es un numerador de 256 por */, en vez de 65536 por **.
360
* / ScaleCons tan t = Int 256
256 1
Este programa ejemplo calcula angulos basado en los valores y y x que introduce en la
ventana de Transmisin de la Terminal de Depuracin.
Figura 3-18
Tangente y Arcotangente
y = h sin
Figura 3-19
Tangente y Arcotangente
x = h cos
Algunos valores sern mas bajos que lo que esperaba. Por ejemplo, cuando h = 100 y
= 30, y = 50 y x = 87. La Terminal de Depuracin mostrar 21 para el ngulo brad, que
es correcto, pero 29 para el ngulo en grados que no es correcto. Debera ser 30. Esto
pasa ocasionalmente al escalar de un rango menor a uno mayor. La medicin de 21 brads
corresponde a 29 y 22 brads corresponden a 31.
VAR
VAR
VAR
Word
Word
Word
DO
DEBUG "Enter
DEBUGIN SDEC
DEBUG "Enter
DEBUGIN SDEC
y: "
y
x: "
x
angle = x ATN y
DEBUG "brad ", SDEC ? angle
angle = angle */ 361
DEBUG "degree ", SDEC ? angle, CR
LOOP
angle
brads
VAR
VAR
Word
Word
*/ 360
*/ 361", CR
Figura 3-20
Rotacin vertical en
sentido antihorario
= tan
AY
A
X
0
tan 1 = 0
1
1
tan
1
2
3
2
= 30
tan 1
2 = 135
1
El caso general
El ngulo de rotacin () es la inversa-tangente o arcotangente de la componente de
gravedad que acta sobre el eje de sensado Y del Mems 2125 (AY) dividida entre la
componente de gravedad que acta sobre el eje de sensado X (AX). La figura abajo
muestra al MX2125 inclinado a un ngulo , lo cual rota a ambos ejes de sensado en el
mismo angulo . Aplicando un par de identidades geomtricas, tambin est dentro de los
dos tringulos que muestran las componentes de gravedad actuando en cada uno de los
ejes de sensado del acelermetro (xm y ym). La componente de gravedad actuando sobre
xm is AX = g cos y la componente actuando sobre ym es AY = g sin. Despus de aplicar las
identidades trigonomtricas mostradas, se demuestra que el ngulo de rotacin es de
hecho el arcotangente of AY/AX.
AY g sin
=
= tan
AX g cos
tan =
AY
AX
A
tan 1 (tan ) = tan 1 Y
AX
A
= tan 1 Y
AX
VAR
VAR
VAR
Word
Word
Word
DO
PULSIN 6, 1, x
PULSIN 7, 1, y
x = (x MIN 1875 MAX 3125) - 1875 ** 13369 - 127
y = (y MIN 1875 MAX 3125) - 1875 ** 13369 - 127
angle = x ATN y
angle = angle */ 361
DEBUG HOME, CLREOL, SDEC ? x,
CLREOL, SDEC ? y,
"angle = ", CLREOL,
DEC angle,
176
PAUSE 100
LOOP
El siguiente comando DEBUG muestra valores con signo de las variables x y y seguidos
por angle y el smbolo de grados (cdigo ASCII 176). La razn por la cual CLREOL viene
antes de cada nmero es para prevenir que los caracteres no desparezcan a la derecha de
algunas mediciones. Por ejemplo, si una medicin es 105 y la siguiente medicin es
076, se desplegara como 0755 si CLREOL no limpiara el valor anterior antes de desplegar
el nuevo. An cuando CLS puede arreglar este problema tambin, el parapdeo resultante
en la Terminal de Depuracin no es agadable para la vista. CLREOL borra a la derecha del
cursor en una linea dada. Si bien an causa un poco de parpadeo con cada valor, es
mucho ms facil de ver que con la versin CLS.
DEBUG HOME, CLREOL, SDEC ? x,
CLREOL, SDEC ? y,
"angle = ", DEC3 angle,
176
' ASCII 176 es el simbolo de grados
Los diagramas que muestran al ngulo de rotacin incrementando conforme el objeto rota
en sentido anti-horario, como la Figura 3-24, son bastante ms comunes que el diagrama
en sentido horario que usamos previamente.
Figura 3-24
Medicin de ngulo con
rotacin en sentido anti-horario
Para invertir el ngulo de rotacin que muestra el programa, solo hay que usar Ay en
vez de Ay (Figura 3-25). Si gira el acelermetro en sentido anti-horario, Ay es 1/2 y el
arcotangente resulta ser 330. Al tomar el arcotangente de Ay/Ax, el resultado es 30.
Figura 3-25: Invirtiendo la direccin de rotacin con -Ay
AY
tan 1
AX
1
= tan
3 = 330
1 Ay
1 2
tan
= tan
= 30
Ax
3
2
Seno y Coseno
La Figura 3-27 muestra la relacin entre los lados de un tringulo rectngulo y las
funciones seno y coseno. El seno de un ngulo es el lado opuesto del tringulo (y)
dividido entre la hipotenusa (h). Si conoce h y y, y quiere conocer el ngulo (), use
arcoseno (sin1). El coseno de un ngulo es el lado adyacente (x) divido entre h. Si
quiere conocer el ngulo conociendo x y h, use arcocoseno (cos1).
y
h
x
cos =
h
sin =
Figura 3-27
Seno y Coseno
Note en las ecuaciones de la Figura 3-27 que el valor x puede ser, a lo mucho, igual a h
cuando = 0. Igualmente, el valor y puede ser, a lo mucho, h cuando = 90. Para
ngulos entre 0 y 90, la relacin de x/h y y/h son ambas menores que 1. No importa que
tan grande es el tringulo, la relacin siempre estar entre 1 y 0.
El crculo unitario es un elemento comun para describir las funciones seno y coseno. La
hipotenusa del triangulo se convierte en el radio del crculo. El crculo unitario es
tambin llamado as porque la longitude de la hipotenusa es 1 (una unidad). Conforme
gira la hipotenusa en sentido anti-horario, el ngulo se hace ms grande, o ms pequeo
si rota en sentido horario. El coseno es determinado dibujando una lnea vertical desde el
punto donde la hipotenusa se cruza con el crculo hasta el eje de las x. Cualquiera que sea
el valor de x all, ese es el coseno. El seno del ngulo es determinado dibujando una linea
horizontal desde el final del radio hasta el eje de las y.
Figura 3-28: Ejemplos de Seno y Coseno en el crculo unitario
a.
b.
c.
COS van de 127 a 127. Los ngulos para los operadores SIN y COS estn en terminos de
brads. Entonces, en vez de 45 use 32 brads. En vez de 90 use 64 brads, etc. Para
convertir de brads a grados con una calculadora, multiplique el nmero de brads por
360/256. Para convertir de grados a brads, use 256/360.
Figura 3-29
Operadores Seno y
Coseno en el
crculo unitario de
BASIC Stamp
Este programa ejemplo despliega los clculos enteros de BASIC Stamp para seno y
coseno. Usted puede dividir estos valores entre 127 para obtener una aproximacin de los
valores reales de seno o coseno. Convierte grados a brads con ** 46733, obtenido con la
ecuacin ScaleConstant de la actividad #3.
Brads
Cosine
Sine", CR
Intente modificar el argumento STEP del ciclo FOR...NEXT para obtener valores
diferentes.
Intente modificar el programa para que it prompts you for a degree value con the
DEBUGIN comando y then displays the result.
Mientras que el seno es una razn de y/h para un ngulo dado, arcoseno (sin1) es la
funcin inversa (Figura 3-30). Dada la razn y/h, arcoseno le dice el ngulo.
Similarmente, el coseno es la razn x/h para un ngulo dado y arcocoseno (cos1) es el
ngulo para una razn x/h dada.
sin =
y
h
= sin 1
y
h
cos =
x
h
= cos 1
x
h
Figura 3-30
Seno, Arcoseno, Cosenoy
Arcocoseno
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
Luego, en IF...THEN cambie 180 a 128 porque ahora usamos un circulo de 256
divisiones:
IF sign = Negative THEN angle = 128 - angle
Igualmente, en la subrutina Arccosine cambie 90 to 64:
angle = 64 - angle
El siguiente programa barre valores de seno desde 127 a 127 y su subrutina Arcsine
convierte estos valores de seno en ngulos en grados. Tenga presente que este es el
inverso de los clculos del programa ejemplo anterior. El programa ejemplo anterior
desplegaba valores de seno para los ngulos dados. Este despliega angulos para valores
de seno dados.
CON
CON
1
0
VAR
VAR
VAR
VAR
Word
Word
Word
Bit
'
'
'
'
"
'
'
'
'
'
'
'
' -----[ Subrutina - Arcsine ]----------------------------------------------' Esta subrutina calcula arcoseno basado en la coordenada y en un circulo
' de radio 127. Establezca la variable side igual a su coordenada y antes
' de llamar a esta subrutina.
Arcsine:
GOSUB Arccosine
angle = 90 - angle
RETURN
' -----[ Subrutina - Arccosine ]--------------------------------------------' Esta subrutina calcula arcocoseno basado en la coordenada x en un circulo
' de radio 127. Establezca la variable side igual a su coordenada x antes
' de llamar a esta subrutina.
Arccosine:
sign = side.BIT15
side = ABS(side)
angle = 63 - (side / 2)
DO
'
'
'
'
'
He aqu algunas modificaciones que puede hacer a TestArcsine.bs2 para hacer que
pruebe la subrutina Arccosine.
"
END
La Figura 3-32 muestra como el arcoseno puede ser usado para determinar el ngulo.
Viendo de lado el Mdulo acelermetro, la componente de gravedad actuando en su eje
xm es la aceleracin en el eje de las x (Ax), que es g sin . Puesto que sin equivale a
Ax / g, x puede ser determinado tomando el arcoseno de Ax / g. En forma de ecuacin :
A
X = sin 1 X
g
AX = g sin
AX
= sin
g
sin =
AX
g
A
sin 1 (sin ) = sin 1 X
g
A
= sin 1 X
g
CON
CON
1
0
VAR
VAR
Word
Word
side
angle
sign
VAR
VAR
VAR
Word
Word
Bit
PULSIN 6, 1, x
PULSIN 7, 1, y
' -----[ Subrutina - Arcsine ]----------------------------------------------' Esta subrutina calcula arcoseno en base a la coordenada y en un circulo
' de radio 127. Establezca la variable side igual a su coordenada y antes
' de llamar a esta subrutina.
Arcsine:
GOSUB Arccosine
angle = 90 - angle
RETURN
' -----[ Subrutina - Arccosine ]--------------------------------------------' Esta subrutina calcula arcocoseno en base a la coordenada x en un circulo
' de radio 127. Establezca la variable side igual a su coordenada x antes
' de llamar a esta subrutina.
Arccosine:
'
sign = side.BIT15
'
side = ABS(side)
'
angle = 63 - (side / 2)
'
DO
'
IF (COS angle <= side) THEN EXIT
'
angle = angle + 1
'
ciclo
angle = angle */ 361
'
IF sign = Negative THEN angle = 180 - angle'
RETURN
Su Turno - Ajustes
RESUMEN
Este captulo se enfoca en sensar la aceleracin debida a la gravedad con el acelermetro
biaxial Mems 2125. Esto hace posible medir tanto inclinacin como rotacin. El
acelermetro Mems transmite pulsos que indican la aceleracin actuando en sus ejes x y
y. A temperatura ambiente, los pulsos varan ente 3750 a 6250 s, lo cual puede ser
usado para medir un rango entre 1 a 1 g con cualquiera de los dos ejes de sensado del
acelermetro. El comando PULSIN se usa para medir estos pulsos y, puesto que mide el
tiempo en unidades de 2 s, el rango que los programas tienen que examinar es 1875 a
3125.
Las mediciones del acelermetro pueden ser desplegadas con la LCD Serial Parallax. Si
el programa ha sido ya probado con la Terminal de Depuracin, desplegar mediciones
con la LCD serial es typicamente un asunto de agregar una rutina de inicializacin de la
LCD al principio del programa y usar comandos SEROUT en lugar de commands DEBUG.
Los caracteres personalizados on tiles para desplegar el smbolo de grados () y la letra
griega mu ().
El acelermetro puede ser usado para medir la rotacin en un plano vertical. Para hacer
esto, BASIC Stamp debe calcular el arcotangente de la medicin del eje y del
acelermetro dividido entre su medicin del eje x. Las mediciones de los ejes x y y
deben ser escaladas y compensadas para ajustarse en un rango de 127 a 127, que es lo
que el operador ATN de PBASIC necesita para regresar un ngulo, medido en radianes
binarios. Mientras qeu los ngulos dividen al crculo en 360 segmentos, los radianes
binarios lo hacen en 256 segmentos. El operator */ de PBASIC puede ser usado para
convertir una medicin dada en radianes binarios a grados.
El acelermetro puede tambin ser usado para medir ngulos de inclinacin. Puesto que
la componente de gravedad que acta en caja eje de sensado del acelermetro es el seno
del ngulo de inclinacin, el seno inverso o arcoseno puede ser usado en un eje de
medicin para determinar el ngulo de inclinacin. Una An subrutina Arcoseno puede ser
usada para calcular el ngulo (en grados) dado un valor que flucta entre 127 a 127.
Este rango corresponde a los valores de seno de 1 a + 1.
Puesto que tanto el operador ATN como la subrutina Arcsine esperan un valor entre
127 y 127, se presentaron tcnicas para escalamiento y compensacin de las mediciones
del acelermetro. El rango de mediciones que obtiene BASIC Stamp del acelermetro
est en una escala de 1875 a 3125. La manera ms eficiente de escalar estos valores a un
rango de 127 a 127 implica restar 1875 para alinear a cero el rango, luego usar el
operator ** para reducir la escala, despus restar 127. La lnea de cdigo resultante es:
value = (value MIN 1875 MAX 3125) - 1875 ** 13369 - 127. El valor 13369
es determinado por la ecuacion de constante de escala ** en la actividad #2.
Preguntas
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Ejercicios
Proyects
Soluciones
E3.
E4.
y VAR Word
PULSIN 10, 1, y
x VAR Word
PULSIN 9, 1, x
x = x * 2
x = x * 2 / 1000
E5.
x = x /500
value = (value MIN 0 MAX 100) ** 8519 + 20
E2.
-O-
VAR
VAR
VAR
VAR
VAR
Word
Word
Word
Word
Word
PAUSE 250
SEROUT 14, 84, [22, 12]
PAUSE 5
PULSIN 6, 1, x
PULSIN 7, 1, y
Figura 4-1
mdulo de brjula Hitachi en la
tarjeta Board of Education con
una pantalla LCD
Figura 4-2
Ejes de sensado del mdulo de brjula
tan =
N sin y
=
N cos
x
y
tan 1 (tan ) = tan 1
x
y
= tan 1
El mdulo de brjula Hitachi HM55B necesita conexiones a Vdd y Vss (tensin y tierra)
y 3 conexiones de linea de comunicacin hacia el BASIC Stamp.
Partes Requeridas
El HM55B puede ser conectado con sus pines Dout y Din pins unidos para transmitir y
recibir seales de y al mismo pin de E/S de BASIC Stamp. Otro pin de E/S de BASIC
Stamp es conectado al pin de reloj del dispositivo. El BASIC Stamp enviar pulsos a este
pin mientras que hace que el chip enve su estado o sus mediciones o reciba comandos.
BASIC tambin enva seales de nivel bajo al pin Enable del mdulo de brjula antes de
intercambiar cualquier dato y para inicializar cada medicin de campo magntico.
Este programa ejemplo hace una prueba para asegurarse que el mdulo de brjula est
bien conectado y trabaja bien. Pueden haber diferencias notables entre el norte magntico
reportado por una brjula mecnica y el reportado por el mdulo brjula. Despus de los
programas de calibracin en las siguientes actividades, todos los errores de medicin
aparentes deben desaparecer.
La Figura 4-4 muestra lo que la brjula debe mostrar cuando detecta que apunta a 35 en
sentido horario respecto al norte. No se preocupe ahora de una direccin exacta, el
programa solo est probando que el modulo trabaja. Hasta ahora y si lo usa para una idea
general de ubicacin del norte, sur, este y oeste, debe estar funcionando.
DinDout
Clk
En
PIN
PIN
PIN
2
0
1
CON
CON
CON
CON
CON
%0000
' comando Reset de HM55B
%1000
' comando de inicio de medicion
%1100
' comando para recibir status/valores de ejes
%1100
' 11 -> Hecho, 00 -> no errores
%1111100000000000
' Para negativos 11-bit a 16-bits
VAR
VAR
VAR
VAR
Word
Word
Nib
Word
'
'
'
'
angle = x ATN -y
angle = angle */ 361
PAUSE 150
LOOP
SHIFTOUT DinDout,clk,MSBFIRST,[Report\4]
SHIFTIN DinDout,clk,MSBPOST,[Status\4] ' Obtiene Status
ciclo UNTIL status = Ready
' Deja ciclo cuando status esta listo
SHIFTIN
HIGH En
DinDout,clk,MSBPOST,[x\11,y\11]
No hay muchos lugares donde el campo magntico de la tierra sea paralelo al suelo. Esto
mas bien ocurre apuntando ya sea hacia arriba o abajo a partir del suelo. El ngulo al cual
el campo magntico de la tierra apunta hacia o desde el suelo es llamado inclinacin.
El mdulo de brjula puede tambin sensar campos magnticos de imanes, pero estos
pueden daar el sensor! TENGA GUIDADO!
No coloque imanes muy poderosos cerca del mdulo brjula!
Mantenga imanes en barra, herradura y electroimanes bastante alejados de su mdulo de
brjula hasta que haya determinado una distancia segura usando el procedimiento
siguiente. Asegrese de nunca acercarlos de tal forma que se produzcan lecturas en los
ejes x y y mayores a 300, porque podra daar el mdulo.
Comience por poner su tarjeta en una mesa y alinear hacia arriba su eje x con el
norte magntico.
Sostenga una barra magntica sobre el mdulo de brjula con su polo S
apuntando al norte y su polo No apuntando al sur como se muestra en la Figura
4-5. Comience por 1 m por encima y bjela hasta que la Terminal de Depuracin
reporte una lectura de 120 en el eje x.
Figura 4-5: Campo magntico de una barra magntica sobre el mdulo brjula
Mantenga la barra magntica horizontal a la misma altura y rtela para que sus
polos N y S no estn alineados con el norte y sur terrestre. Conforme gira, la
rotacin de la barra magntica debe ser fcil de rastrear con la Terminal de
Depuracin.
Note como el campo magntico actuando sobre el mdulo de brjula fu opuesto a lo que
mostraban los poles en la barra magntica. Esto es debido a la forma en que el campo
magntico da la vuelta del polo norte al sur de la barra magntica. La Figura 4-5 ilustra
esto con lineas de campo magntico que muestran el patrn del campo magntico
alrededor de la barra magntica.
Tambin puede sostener la barra magntica al mismo nivel con el module brjula,
directamente enfrente, como se muestra en la Figura 4-6a. Esta vez los polos del imn
estn alineados con el norte y el sur en vez de estar opuestos.
b.
mdulo brjula. Con una brjula mecnica, su barra magntica automticamente se alinea
con el norte, asi es que tendr que mover el mdulo de brjula alrededor de la brjula
mecnica y no al revs.
Intntelo y note cunta distorsin causa una brjula mecnica cercana sobre las
mediciones del mdulo brjula.
Teniendo esta leccin presente, asegrese de mantener brjulas mecnicas muy lejos del
mdulo de brjula al ejecutar y probar las calibraciones en las siguientes 2 actividades.
Imprima o haga una fotocopia de la Figura 4-7. Si est trabajando con una copia
impresa del libro y no tiene una fotocopiadora a su disposicin, solo baje la
version .pdf de este texto de la pgina del producto Sensores Inteligentes y sus
Aplicaciones en www.parallax.com. Luego, haga una impresin.
Figura 4-8
Alineando al Norte
Magntico
Procedimiento
a.
b.
'
'
'
'
'
'
'
'
'
'
'
'
'
CON
CON
0
1
integer
fraction
brads
table
temp
axisOffset
VAR
VAR
VAR
VAR
VAR
VAR
Word
Nib
Byte
Byte(2)
Word(2)
Word
' -----[ Rutina Principal ]--------------------------------------------------DEBUG "Click the Transmit Windowpane, ", CR, ' Espera al usuario.
"then press Enter... ", CR, CR
DEBUGIN character
DO
LOOP
Get_And_Store_Axis_Offsets
Get_And_Store_Interpolation
Get_And_Store_Low_Value_Address
CR, "CALIBRATION COMPLETED...", CR,
"You are now ready to run ", CR,
"TestCalibratedCompass.bs2.", CR
RETURN
' -----[ Subrutina - Get_And_Store_Axis_Offsets ]---------------------------' Esta subrutina pide al usuario apuntar la brjula a norte, luego este, luego
' sur, luego oeste. Luego promedia los valores maximo y minimo para cada
' eje y guarda ese promedio en el area EEPROM reservada por la directiva
' CompassOffsets DATA .
Get_And_Store_Axis_Offsets:
' El ciclo FOR...NEXT repite para 4 mediciones de eje.
FOR counter = 0 TO 3
' Instruye al usuario apuntar brjula a una direccion particular y espera
' por el caracter ENTER.
DEBUG CR, "Point compass to "
LOOKUP counter, [ 0, 90, 180, 270 ], integer
DEBUG DEC integer
DEBUG " degrees", CR, "then press Enter..."
DEBUGIN character
GOSUB Compass_Get_Axes
' Norte
' Este
' Sur
' Oeste
NEXT
RETURN
' -----[ Subrutinea - Get_And_Store_Interpolation ]----------------------
Esta subrutina encuentra y guarda la direccin del mas bajo valor en el area
EEPROM reservada por la directiva CompassCal DATA y la guarda en un byte
reservado por la directiva CompassLowVal DATA. Esto reduce el cdigo
en TestCalibratedCompass.bs2.
Get_And_Store_Low_Value_Address:
index = 8
table(current) = 0: table(previous) = 0
DO
index = index + 1
READ CompassCal + index, table(current)
READ CompassCal + (index - 1 & $F), table(previous)
ciclo UNTIL table(current) < table(previous)
WRITE CompassLowVal, index
RETURN
' -----[ Subrutina - Calibration_Review ]-----------------------------------' Muestra valores EEPROM.
Calibration_Review:
Degree Angle",
Ideal
Actual",
-----------", CR
FOR counter = 0 TO 15
brads = counter * 16
DEBUG CRSRX, 1, DEC3 brads
READ CompassCal + counter, angle
DEBUG CRSRX, 10, DEC3 angle
LOOKUP counter, [0,
22, 45, 67, 90, 112, 135, 157,
180, 202, 225, 247, 270, 292, 315, 337], integer
LOOKUP counter, [ 0,
5,
0,
5,
0,
5,
0,
5,
0,
5,
0,
5,
0,
5,
0,
5 ], fraction
DEBUG CRSRX, 19, DEC3 integer, ".", DEC fraction
angle = angle */ 361
' Convierte brads a grados
DEBUG CRSRX, 28, DEC3 angle, CR
PAUSE 50
' Retardo Debug para alentar PCs
NEXT
DEBUG CR
RETURN
' -----[ Subrutina - Compass_Get_Axes ]-------------------------------------Compass_Get_Axes:
HIGH En: LOW En
SHIFTOUT DinDout,clk,MSBFIRST,[Reset\4]
DinDout,clk,MSBPOST,[x\11,y\11]
RETURN
' -----[ Subrutina - Compass_Correct_Offsets ]------------------------------'
'
'
'
'
Compass_Correct_Offsets:
READ CompassOffsets, Word axisOffset
x = x - axisOffset
READ CompassOffsets + 2, Word axisOffset
y = y - axisOffset
'
'
'
'
Obtiene
corrige
Obtiene
corrige
compensacion eje x
eje x
compensacion eje y
eje y
RETURN
Direccionamiento
'
'
'
'
'
'
'
'
'
'
'
'
'
'
'
PIN
PIN
PIN
2
0
1
CON
CON
CON
CON
CON
CON
CON
%0000
' Comando Reset para el HM55B
%1000
' Comando de inicio de medicion
%1100
' Comando obtener status/valores de eje
%1100
' 11 -> Hecho, 00 -> no errores
%1111100000000000
' De negativo 11-bit a 16-bits
0
' Indice para arreglo tabular
1
' Indice para arreglo tabular
VAR
VAR
VAR
VAR
Status
Byte(2)
x
y
'
'
'
'
Indice EEPROM
Guarda tabla de valores EEPROM
Span entre entradas de tabla
Compensa entre medido y tabla
GOSUB
GOSUB
angle
DEBUG
GOSUB
DEBUG
angle
DEBUG
PAUSE
Compass_Get_Axes
Compass_Correct_Offsets
= x ATN -y
HOME, "x-axis N(-S) = ",SDEC x,
CLREOL, CR, "y-axis W(-E) = ",
SDEC y, CLREOL
Compass_Interpolate
CR, CR, "angle = ",
DEC angle, " brads", CLREOL
= angle */ 361
CR,"angle = ",
DEC angle, " degrees", CLREOL
150
LOOP
'
'
'
'
Obtiene valores x y y
corrige compensacs de ejes
Convierte x y y a brads
Despliega ejes corregidos
' -----[ Subrutina - Compass_Get_Axes ]-------------------------------------' Esta subrutina maneja la communication BASIC Stamp - HM55B y guarda las
' mediciones de fuerza de campo magntico regresadas por el dispositivo en
' las variables de ejes x y y.
Compass_Get_Axes:
DO
DinDout,clk,MSBPOST,[x\11,y\11]
RETURN
' -----[ Subroutine - Compass_Correct_Offsets ]------------------------------'
'
'
'
'
'
'
'
Obtiene
corrige
Obtiene
corrige
compensacion eje x
eje x
compensacion eje y
eje y
RETURN
' -----[ Subrutina - Compass_Interpolate ]----------------------------------'
'
'
'
'
'
'
'
'
'
'
'
'
Compass_Interpolate:
' Empieza con el valor mas bajo en la tabla CompassCal.
READ CompassLowVal, index
' Carga los valores de tabla corriente y previo.
READ CompassCal + index, table(current)
READ (CompassCal + (index - 1 & $F)), table(previous)
'
'
'
'
'
'
'
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, smbolo .
Un modo efectivo para eliminar los efectos del ruido es tomando un promedio de las
mediciones de los ejes x y y de la brjujla. As, si el ruido causa que una medicin sea un
poco ms alta, la siguiente un poco ms baja, y la siguiente correcta, el promedio de todas
las mediciones eliminar los altos y bajos y las establecer en el valor correcto.
Una de las razones de porqu las actividades de calibracin y prueba de calibracin
pueden no entregar los mejores resultados es debido al ruido. Esta actividad demuestra
cmo puede modificar cualquiera de los programs ejemplo en este captulo para tomar
mediciones promediadas y eliminar los efectos del ruido.
Incorporando el Promedio en los Programas de la Brjula
Hay 3 pasos mayores para incorporar el promediado en los programas ejemplo de este
captulo. Primero, agregue un par de directivas CON a la seccin de Constantess:
Negative
Positive
CON
CON
1
0
VAR
VAR
VAR
VAR
Nib
Word
Word
Bit
'
'
'
'
Medicin count
eje x medicin accumulator
eje y medicin accumulator
Sign bit
xSum = 0
ySum = 0
FOR mCount = 1 TO 10
'
'
'
'
'
sign = ySum.BIT15
ySum = ABS(ySum)
y = ySum / 10
IF ySum // 10 >=5 THEN y = y + 1
IF sign = Negative THEN y = - y
'
'
'
'
'
RETURN
Division en PBASIC con nmeros negativos
Los operadores PBASIC para divisin y mdulo (/ y //) son para usarse con numers
positivos. Si el numerador pudiera ser negativo, la mejor estrategia es salvar el signo del
numerador antes de tomar su valor absoluto (sign = numerator.BIT15). Luego,
ejecute la divisin. Optionalmente, puede redondear hacia arriba o abajo dependiendo del
residuo de la divisin. Antes de que termine, revise el signo y si es negativo, haga negativo
al resultado (result = - result).
numerator VAR Word
denominator VAR Word
result VAR Word
sign VAR Bit
Negative CON 1
Positive CON 0
' Rutina de division con un numerador que pudiera ser negativo.
sign = numerator.BIT15
numerator = ABS(numerator)
result = numerator / denominator
IF numerator // denominator >= (denominator / 2) THEN
result = result + 1
ENDIF
IF sign = Negative THEN result = - result
PIN
PIN
PIN
2
0
1
CON
CON
CON
CON
CON
%0000
' comando Reset de HM55B
%1000
' comando de inicio de medicion
%1100
' comando para recibir status/valores de ejes
%1100
' 11 -> Hecho, 00 -> no errores
%1111100000000000
' Para negativos 11-bit a 16-bits
Negative
Positive
CON
CON
1
0
VAR
VAR
VAR
VAR
Word
Word
Nib
Word
'
'
'
'
mCount
xSum
ySum
sign
VAR
VAR
VAR
VAR
Nib
Word
Word
Bit
'
'
'
'
cuenta de medicion
acumulador de medicion de eje x
acumulador de medicion de eje y
bit de signo
DO
angle = x ATN -y
angle = angle */ 361
PAUSE 150
LOOP
xSum = 0
ySum = 0
FOR mCount = 1 TO 10
' Ciclo de
HIGH En: LOW En
'
SHIFTOUT DinDout,clk,MSBFIRST,[Report\4]
SHIFTIN DinDout,clk,MSBPOST,[Status\4] '
ciclo UNTIL status = Ready
' Deja
listo
SHIFTIN
HIGH En
DinDout,clk,MSBPOST,[x\11,y\11]
sign = xSum.BIT15
xSum = ABS(xSum)
x = xSum / 10
IF xSum // 10 >=5 THEN x = x + 1
IF sign = Negative THEN x = - x
'
'
'
'
'
sign = ySum.BIT15
ySum = ABS(ySum)
y = ySum / 10
IF ySum // 10 >=5 THEN y = y + 1
IF sign = Negative THEN y = - y
'
'
'
'
'
RETURN
Siga los pasos en esta actividad para incorporar el promedio en una copia de
CalibrateCompass.bs2. En vez de modificar la subrutina Compass_Get_Axes
del programa solo copie la subrutina modificada de este programa
(TestCompassAveraged.bs2) y pguela sobre la que est en su copia de
CalibrateCompass.bs2.
Corra su copia modificada de CalibrateCompass.bs2 y repita los pasos de la
actividad #2.
Haga una copia de TestCalibratedCompass.bs2, y modifiquela para que ejecute
el promediado.
Repita las pruebas de precisin de la actividad #3. Su brjula digital debe
funcionar realmente bien ahora.
La LCD Serial Parallax es una fuente definitiva de disturbio del campo magntico y
necesita ser operada bien alejada del mdulo brjula. Esto se logra fcilmente con un
cable extensin.
Partes Requeridas
Los esquemticos mostrados en la Figura 4-12 son idnticos a los que han sido usados
para el mdulo de brjula y la LCD Serial Parallax hasta este punto. Lo nico que
cambiar es la forma en que la LCD es conectada a su tarjeta, con un cable extensin. No
deben hacerse cambios al cableado del mdulo brjula.
Figura 4-12
Schematics de la LCD
Serial Parallax y el
mdulo de brjula
Estas instrucciones son para las tarjetas que tienen puertos servo con un jumper Vdd/Vss
enmedio, como los Board of Education Rev C y Board of Education USB. Todas las
dems tarjetas, pasar a Todas las dems tarjetas educativas BASIC Stamp (pg. 151).
Figura 4-13
Colocando el Jumper de los puertos
Servo a Vdd
Configuracin de jumper Vdd vs. Vin Determine qu fuente de energa est conectada a
los puertos X4 y X5. Si el jumper esta en Vdd, estos puertos reciben 5 V regulados del
regulador de tensin del Board of Education. Si est en Vin, el puerto recibe energa
directamente de la batera o de la fuente de energa. ASEGRESE DE QUE SU JUMPER
EST PUESTO CORRECTAMENTE A Vdd O DAAR PERMANENTEMENTE SU LCD!
Conecte una punta del cable extensin en el Puerto 14 del cabezal X4,
asegurndose que las etiquetas "Red" y "Black" en el lado derecho del puerto X5
se alineen con los cables rojo y nego del cable extensin.
Asegrese de que el cable blanco sea el ms cercado a la etiqueta 14 y que el
cable nego es el ms cercano a la etiqueta X4.
Conecte la otra punta del cable para que el cable negro est conectado al pin
GND de la LCD Serial Parallax, el cable rojo est conectado al pin 5 V, y el
cable blanco est conectado al pin RX.
Vuelva a verificar todas sus conexiones y asegrese de que son correctas.
ATENCIN!
No reconecte la energa a su tarjeta hasta que est seguro de que las conexiones
estn correctas. Si comete un error con las conexiones de la LCD, esta ser
permanentemente daada.
Esta seccin es para conectar el mdulo de brjula y la LCD Serial Parallax a una de las
siguientes tarjetas educativas BASIC Stamp:
Figura 4-15
Cableado en tableta
para la conexin de
cable de la LCD Serial
Parallax Cable y el
Mdulo brjula
Figura 4-16: Mdulo de brjula y LCD Serial Parallax Conectados con cable extensin
Partes Requeridas
El siguiente comando SEROUT coloca el cursor de la LCD, luego imprime espacios para
sobreescribir el valor anterior. Entonces coloca el cursor en la misma localidad de inicio
y escribe el nuevo valor. Esto previene la aparicin de caracteres fantasma cuando
cambia el nmero de dgitos en el valor, pero sin los molectos efectos laterales de
pantalla parpadeante que obtendra si de otra forma se limpiara la pantalla entre cada
medicin.
' LCD muestra direccion en grados en la linea superior
' y mediciones x y y en la linea inferior.
SEROUT 14, 84, [139, "
", 139, DEC angle, 7,
151, "
", 151, SDEC X,
160, "
", 160, SDEC y]
PIN
PIN
PIN
2
0
1
CON
CON
CON
CON
CON
%0000
' comando Reset de HM55B
%1000
' comando de inicio de medicion
%1100
' comando para recibir status/valores de ejes
%1100
' 11 -> Hecho, 00 -> no errores
%1111100000000000
' Para negativos 11-bit a 16-bits
VAR
VAR
VAR
VAR
Word
Word
Nib
Word
'
'
'
'
angle = x ATN -y
angle = angle */ 361
LOOP
' Ciclo de
HIGH En: LOW En
'
SHIFTOUT DinDout,clk,MSBFIRST,[Report\4]
SHIFTIN DinDout,clk,MSBPOST,[Status\4] '
ciclo UNTIL status = Ready
' Deja
listo
SHIFTIN
HIGH En
DinDout,clk,MSBPOST,[x\11,y\11]
Su Turno
RESUMEN
El mdulo de brjula Hitachi HM55B es un sensor bi-axial de campo magntico capaz de
detectar variaciones de microteslas en las componentes del campo magntico de la tierra
actuando en sus ejes x y y. El angle del mdulo a partir del norte puede ser determinado
dividiendo la medicin del eje x entre la medicin del eje y, y luego tomando el
arcotangente del resultado. El mdulo de brjula tambin puede ser usado para detectar
campos magnticos de barras magnticas y la inclinacin del campo magntico de la
tierra en su localidad.
El BASIC Stamp puede guardar direcciones medidas en la porcin no utilizada de su
memoria EEPROM de programacin con un programa de calibracin. Luego, un
programa de prueba puede accesar estos valores salvados, y usarlos para ejecutar
correccin de escala e interpolacin lineal a las mediciones. Estas tcnicas de correccin
pueden significativamente mejorar the medicin de la direccin. Promediando las
mediciones de los ejes, la medicin de direccin puede ser refinada con ms
profundidad. La direction puede ser desplegada en formato de texto en la LCD Serial
Parallax agregando una pequea rutina de inicializacin a la seccin de Initializacin del
programa y un comando SEROUT al ciclo principal DO...LOOP del programa.
Preguntas
1. Calcule el ngulo a partir del norte if the x axis lectura is 34 y the eje y lectura is
0.
2. Calcule el ngulo a partir del norte si la lectura del eje x es 16 y la lectura del eje
y is 31.
3. Calcule el nmero de nanoteslas en 1.6 microteslas.
4. Escriba una rutina que convierta de microteslas a nanoteslas.
5. Escriba una rutina que examine una variable y despliegue si es o no negativa.
Proyectos
Soluciones
Q1. Si N es el valor reportado por x cuando est alineado con el norte magntico,
entonces para un ngulo dado theta, x = Ncos.
Q2. Din, Dout, /Enable, y CLK.
Q3. En sentido horario a partir del norte.
Q4. Es la diferencia, en grados, entre el norte magntico y el norte verdadero.
Q5. La direccin del campo parecer ser opuesta a las marcas N y S, debido a la
forma en que el campo magntico da vuelta.
Q6. La brjula mecnica contiene un pequeo imn que puede afectar el mdulo
brjula.
Q7. Con una suma en ejecucin de las 20 mediciones y dividir la suma total entre 20.
Q8. La suma en ejecucin de x y y debe empezar en cero. Una vez que un clculo
termine, las sumas contendrn un valor ms alto. Para hacer un Segundo clculo,
debe regresar la suma a cero.
Q9. El comando es 255, segudio por 8 bytes de datos caracter.
SEROUT pinNumber, baudrate, [255, byte0byte7]
Q10. Primero escriba espacios para sobreescribir (borrar) el valor anterior, luego
coloque el cursor de regreso al punto inicial y escriba el nuevo valor.
E1.
E2.
E3.
E4.
VAR
Word
IF (value.BIT15 = 1) THEN
DEBUG "Negative", CR
ELSE
DEBUG "Positive", CR
ENDIF
PIN
10
speaker
PIN
11
VAR
VAR
VAR
Word
Word
Bit
angle = x ATN -y
angle = angle */ 361
CON
CON
1
0
PIN
PIN
PIN
2
0
1
Reset
Measure
Report
Ready
NegMask
CON
CON
CON
CON
CON
%0000
' comando Reset de HM55B
%1000
' comando de inicio de medicion
%1100
' comando para recibir status/valores de ejes
%1100
' 11 -> Hecho, 00 -> no errores
%1111100000000000
' Para negativos 11-bit a 16-bits
VAR
VAR
Word
Word
side
angleTilt
sign
VAR
VAR
VAR
Word
Word
Bit
xCompass
yCompass
status
angleCompass
VAR
VAR
VAR
VAR
Word
Word
Nib
Word
'
'
'
'
PULSIN 6, 1, xTilt
PULSIN 7, 1, yTilt
' -----[ Subroutine - Arcsine ]----------------------------------------------' Esta subrutina calcula arcoseno en base a la coordenada y en un circulo
' de radio 127. Establezca la variable side igual a su coordenada y antes
' de llamar a esta subrutina.
Arcsine:
GOSUB Arccosine
angleTilt = 90 - angleTilt
RETURN
' -----[ Subrutina - Arccosine ]--------------------------------------------' Esta subrutina calcula arcocoseno en base a la coordenada x en un circulo
' de radio 127. Establezca la variable side igual a su coordenada x antes
' de llamar a esta subrutina.
Arccosine:
sign = side.BIT15
side = ABS(side)
angleTilt = 63 - (side / 2)
DO
'
'
'
'
'
Este captulo tiene 4 actividades que demuestran las varias facetas del uso de inclinacin
para controlar una pantalla. He aqu un resumen de cada actividad:
dentro del MX2125 cuando lo inclina. Tambin establece los fundamentos del
acelermetro para trabajar en conjunto con las tcnicas de la actividad #2.
Actividad #4: Control de Juego Ahora est listo para usar la inclinacin para
empezar a controlar su carcter de juego. Los caracteres de fondo pueden ser
usados para definir si su caracter de juego est dentro o fuera de los lmites.
Divirtase personalizando y expandiendo este video juego por inclinacin.
El caracter de control CRSRXY del comando DEBUG puede ser usado para colocar el cursor
en una posicin especfica en la ventana de Recepcin de la Terminal de Depuracin.
Por ejemplo, DEBUG CRSRXY, 7, 3, "*" coloca el caracter asterisco 7 espacios a la
derecha y 3 caracteres abajo. En vez de usar constantes como 7 y 3, puede usar variables
para hacer la colocacin del cursor ajustable. Digamos que tiene 2 variables llamadas x y
y. Los valores que estas variables guardan pueden controlar la colocacin del asterisco en
el comando DEBUG CRSRXY, x, y, "*".
El siguiente programa ejemplo tambin hace uso del caracter de control CLRDN. DEBUG
CLRDN hace que todas las lineas por debajo de la posicin actual del cursor sean borradas.
Mas caracteres de control
Puede averiguar mas acerca de caracteres de control viendo el comando DEBUG en la
Gua de Sintxis de PBASIC o en el Manual BASIC Stamp. Puede conseguir la primera en
su Editor de BASIC Stamp (v2.0 or ms reciente). Solo haga click en Help y seleccione el
ndice. El Manual BASIC Stamp esta disponible como descarga en www.parallax.com.
Con este programa puede teclear pares de dgitos en la ventana de transmisin (Figura 52), para colocar asteriscos en la ventana de recepcin. Haga click en la ventana de
Transmisin y empiece a escribir. El primer dgito que escribe es el nmero de espacios a
Transmit
Windowpane
Receive
Windowpane
VAR
VAR
VAR
Word
Word
Byte
DEBUG CLS,
"0123456789X",
"1
",
"2
",
"3
",
"4
",
"5
",
"Y
",
CR,
CR,
CR,
CR,
CR,
CR,
CR, CR
DO
DEBUG "Type X coordinate: "
DEBUGIN DEC1 x
DEBUG CR, "Type Y coordinate: "
DEBUGIN DEC1 y
DEBUG CRSRXY, x, y, "*"
DEBUG CRSRXY, 0, 10, "Press any key..."
DEBUGIN temp
DEBUG CRSRXY, 0, 8, CLRDN
LOOP
Escalado y Compensacin
Estos conceptos fueron presentados en el Captulo 3 para manejar valores de entrada del
acelermetro. En el captulo 3, usamos el operador ** para escalar (multiplicar) por
valores fraccionales. En este ejemplo, usaremos el operador * porque una variable en el
siguiente programa ejemplo solo necesita ser multiplicada por el valor entero 2.
En la Figura 5-3 se ha trazado en la Terminal de Depuracin una grfica con ejes positivo
y negativo. La horizontal o eje x tiene un espacio entre cada numeral y la vertical eje y
no. A fin de posicionar el cursor en un punto particular usando el comando CRSRXY,
necesitaremos mapear entre los ejes trazados en la Terminal de Depuracin y los ejes
usados por el comando CRSRXY.
Figura 5-3: Introduciendo y Desplegando Coordenadas
Por ejemplo, donde los ejes de la grfica intersectan en las coordenadas (0, 0) es de hecho
la posicin CRSRXY 6,3 (compare esto con la Figura 5-2 hasta que perciba como es esto).
Para este programa nos gustra poder escribir -3-3 en la Terminal de Depuracin y
hacer que el asterisco aparezca en la coordenada (-3, -3) de la grfica, que sera la
posicin CRSRXY 0,6. Otro ejemplo, cuando escribe 2,2, CRSRXY de hecho debe posicionar
el asterisco en 10,1. Ahora es momento de entender como hacer esta traslacin de mapeo
usando escalado y compensacin.
Para valores entre -3 to 3, el valor X tiene que ser multiplicado por 2 y agregarle 6 para
que CRSRXY coloque el asterisco con el nmero correcto de espacios. Esto es una escala
de 2 y una compensacin de 6. Esta es la lnea de PBASIC para hacer la conversin de
coordenada X a nmero de espacios.
x = (x * 2) + 6
El valor Y tiene que ser multiplicado por -1, luego agregarle 3. Esto es una escala de -1 y
una compensacin de 3. Esta es la lnea de PBASIC para hacer la conversin de
coordenada Y al nmero de retornos de carro.
y = 3 - y
VAR
VAR
VAR
Word
Word
Byte
DEBUG CLS,
"
3|
",
"
2|
",
"
1|
",
"------+------",
"-3-2-1| 1 2 3",
"
-2|
",
"
-3|
",
CR,
CR,
CR,
CR,
CR,
CR,
CR, CR
DO
DEBUG "Type X coordinate: "
DEBUGIN SDEC1 x
DEBUG CR, "Type Y coordinate: "
DEBUGIN SDEC1 y
x = (x * 2) + 6
y = 3 - y
DEBUG CRSRXY, x, y, "*"
DEBUG CRSRXY, 0, 10, "Press any Key..."
DEBUGIN temp
DEBUG CRSRXY, 0, 8, CLRDN
LOOP
Los operadores MAX y MIN fueron presentados anteriormente para prevenir que el
asterisco apareciera fuera del area de trazado. Puede tambin usar lneas IFTHEN para
manejar valores que estn fuera de los lmites. Un ejemplo de cmo puede modificar
PlotXYGraph.bs2 con IFTHEN: en vez de recibir los valores y colocar el asterisco dentro
de los lmites permitidos, este programa espera hasta que un valor correcto es tecleado.
Modifique PlotXYGraph.bs2 reemplazando la instruccin DEBUG CRSRXY, x, y, "*"
con el bloque IF...THEN...ELSE...ENDIF siguiente, y luego corralo.
x = (x * 2) + 6
y = 3 y
IF (x > 12) OR (y > 6) THEN
' <--Agregue cdigo de aqu...
DEBUG CRSRXY, 0, 8, CLRDN,
'
"Enter valores from -3 to 3.", CR, '
"Try again"
'
'
ELSE
'
'
ENDIF
DEBUG CRSRXY, 0, 10, "Press any Key..."
DEBUGIN temp
Verifique que este programa no le permite introducir caracteres fueran del rango
de -3 a 3.
Qu pasa con los nmeros negativos?
Las condiciones para la lnea IF...THEN en su versin modificada de PlotXYGraph.bs2 son
(x > 12) O (y > 6). Esto cubre numeros positivos mayores que 12 o 6, pero tambin todos
los nmeros negativos. Esto es porque BASIC Stamp usa un sistema llamado complemento
a dos para guardar nmeros negativos. En este, la version sin signo de cualquier valor
negativo es mayor que cualquier valor positivo. Por ejemplo, -1 es 65535, -2 es 65534, etc.,
hasta -32768, que de hecho es 32768. Valores positivos con signo solo van de 1 a 32767.
a. Coordenadas Cartesianas
b. Coordenadas de pantalla
Puede usar una tcnica algebrica estandar, resolviendo 2 ecuaciones con 2 incgnitas,
para definir las lneas que necesitar para transformar coordenadas Cartesianas en
coordenadas de pantalla para la Terminal de Depuracin. El siguiente ejemplo muestra
cmo se hizo para las lneas que convierten x y y de Cartesianas a coordenadas de
pantalla en PlotXYGraph.bs2.
Agregando un par de comandos DEBUG a PlotXYGraph.bs2, puede mostrar las versiones
de antes y despus del valor X que haya introducido.
DEBUG "Type X coordinate: "
DEBUGIN SDEC1 x
DEBUG CR, "Type Y coordinate: "
DEBUGIN SDEC1 y
DEBUG CRSRXY, 0, 12, "x before: ", SDEC x
x = (x * 2) + 6
y = 3 - y
DEBUG CRSRXY, 0, 14, "x after:
", SDEC x
Antes
(3, 1)
(-2, -2)
-2
Despus
Figura 5-5
Coordenadas de prueba
Cuando se diesea una pantalla para mostrar coordenadas Cartesianas, ayuda tomar un
par de valores antes y despus como los de la Tabla 5-1. Entonces puede usarlos para
resolver la escala (K) y compensacin (C) usando 2 ecuaciones con 2 incgnitas.
Xafter = (K Xbefore ) + C
(2) De requerirse, multiplique una de las 2 ecuaciones por un trmino que iguale los
nmeros de una de las incgnitas en ambas ecuaciones.
K=
(5) Sustituya el valor que resolvi en el paso 4 en una de las 2 ecuaciones originales.
12 = (2 3) + C
Xafter = (2 Xbefore ) + 6
Modifique su programa para que muestre los valores del eje y antes y despus.
Llene la Table 5-2 para los valores del eje y:
Table 5-2: valores y Antes y Despus
Coordenada
Antes
(3, 1)
(-2, -2)
-2
Despus
Figura 5-6
Coordenadas de prueba
Repita los pasos 1 al 7 para la ecuacin del eje y. La respuesta correcta es:
yafter = ( 1 ybefore ) + 3
Esto no tiene que hacerse con un solo comando DEBUG, especialmente si necesita ser
mantenido como fondo con caracteres pasndole por el frente. Es mejor guardar los
caracteres en la EEPROM y luego desplegarlos con un ciclo FORNEXT que use los
comandos READ y DEBUG para desplegar los caracteres individualmente (Figura 5-7).
Figura 5-7
Fondo a partir de la
directiva DATA
Puede usar la directiva DATA para guardar un fondo en la EEPROM. Note como estas
directivas DATA guardan 100 caracteres (0 al 99). Note tambin que cada rengln es de
14 caracteres de ancho cuando agrega el caracter de control CR. La programacin es ms
fcil si cada rengln es del mismo ancho. De otra forma, encontrar el carcter que desea
se vuelve un problema ms complejo.
DATA CLS,
"
3|
",
"
2|
",
"
1|
",
"------+------",
"-3-2-1| 1 2 3",
"
-2|
",
"
-3|
",
CR,
CR,
CR,
CR,
CR,
CR,
CR, CR
'
'
'
'
'
'
'
'
0
14
28
42
56
70
84
98 + 1 = 99
Para desplegar el fondo completo una vez al principio del programa, puede usar un ciclo
FORNEXT. Recupera y despliega cada caracter guardado en la EEPROM. Recuerde que,
si bien el efecto neto es el mismo que un comando DEBUG largo, la EEPROM es ms
' directivas
VAR
VAR
DATA CLS,
"
3|
",
"
2|
",
"
1|
",
"------+------",
"-3-2-1| 1 2 3",
"
-2|
",
"
-3|
",
CR,
CR,
CR,
CR,
CR,
CR,
CR, CR
Byte
Byte
' Variables
'
'
'
'
'
'
'
'
0
14
28
42
56
70
84
98 + 1 = 99
FOR index = 0 TO 99
READ index, character
DEBUG character
NEXT
END
Este mapa muestra 16 caracteres por rengln en vez de 14. Revise que tiene en
total 100 caracteres (0 a 99) guardados para fines de pantalla en la EEPROM.
VAR
VAR
Word
Word
xOld
yOld
VAR
VAR
Nib
Nib
temp
VAR
Byte
(2) Antes de cargar nuevos valores en las variables x y y, guarde el valor presente de x
en xOld y el valor presente de y en yOld.
DO
xOld = x
yOld = y
Este es un tercer paso que puede usar para probar y verificar que trabaja:
(3) Agregue oraciones DEBUG para desplegar los valores presentes y previos de x, y.
DEBUG CRSRXY, x, y, "*"
DEBUG CRSRXY, 0, 10,
"Current entry: (",
DEC x, ",", DEC y, ")"
DEBUG CRSRXY, 0, 11,
"Previous entry: (",
DEC xOld, ",", DEC yOld, ")"
DEBUG CRSRXY, 0, 12, "Press any Key..."
DEBUGIN temp
Re-Dibujando el Fondo
Hasta este punto, todos nuestros trazados acumularon asteriscos mientras introducamos
ms valores en la ventana de Transmisin. El efecto neto que queremos para control de
juego es hacer desaparecer el asterisco de su vieja posicin y aparecer en su nueva
posicin cuando la redefinamos para dar el aspecto de un asterisco movindose.
Observe la Figura 5-9. Note que 6 pares ordenados fueron introducidos en la Terminal de
Depuracin, pero solo hay un asterisco y corresponde con el ltimo par introducido. Esto
es porque el programa usado aqu hace desaparecer al viejo asterisco tomando las
coordenadas viejas x, y , busca ese caracter de fondo en la EEPROM y luego lo despliega
con DEBUG. Para hacer aparecer el asterisco en su nueva posicin, usa un comando DEBUG
con las coordenadas presentes x, y como en los programas ejemplo previos.
Figura 5-9
Pantalla usando
Refrescado de fondo
EEPROM
El programa usado para crear la Figura 5-9 combina la the tcnica de fondo definida con
DATA de EepromBackgroundDisplay.bs2 con la tcnica de graficado de asterisco y rastreo
de posicin de PlotXYGraphRecall.bs2. Esta combinacin nos permite redibujar el
caracter de fondo sobre el viejo asterisco con este cdigo:
IF (x <> xold) y (y <> yold) THEN
index = (14 * yOld) + xOld + 1
READ index, character
DEBUG CRSRXY, xOld, yOld, character
ENDIF
'
'
'
'
Ve si el asterisco se movio
Direccion de caracter de fondo
Obtiene caracter de fondo
Muestra caracter de fondo
' directivas
Stamp/PBASIC
VAR
VAR
Word
Word
xOld
yOld
VAR
VAR
Nib
Nib
temp
VAR
Byte
index
character
VAR
VAR
Byte
Byte
'
'
'
'
'
'
'
14
28
42
56
70
84
98 + 1 = 99
x = (x * 2) + 6
y = 3 - y
'
'
'
'
DEBUG CRSRXY, 0, 8,
"Type X coordinate: "
DEBUGIN SDEC1 x
DEBUG CR, "Type Y coordinate: "
DEBUGIN SDEC1 y
x = (x * 2) + 6
y = 3 - y
He aqu un ejemplo de algo que puede hacer si usa caracteres individuales, pero no
trabajar si intenta redibujar toda la pantalla con un comando DEBUG.
Asterisk Indicates
Hot Gas Location
La Figura 5-12 muestra una leyenda para las diversas formas que puede inclinar la tarjeta
en sus ejes junto con cada efecto de la inclinacin en la posicin de la bolsa de gas.
Tilt
Level
(0, 0)
Tilt
Right
(-3, 0)
Tilt
Left
(3, 0)
Tilt
Down
(0, -3)
Tilt
Up
(0, 3)
Figura 5-12:
Inclinacin del
Acelermetro y
Posicin del
Cursor
Cada uno de estos pasos es discutido con ms detalle en la seccin que sigue al programa
ejemplo.
Programa ejemplo BubbleGraph.bs2
CR,
CR,
CR,
CR,
CR,
CR,
CR,
CR,
CR,
CR,
CR
'
'
'
'
'
'
'
'
'
'
'
'
0
22
44
66
88
110
132
154
176
198
220
242
VAR
VAR
index
char
VAR
VAR
Word
Word
Word
Byte
' Obtiene Ax y Ay
'
x
y
y
' Obtiene Ax y Ay
Si las mediciones del acelermetro estn ligeramente fuera de la escala de 1875 a 3125,
puede causar sntomas extraos. Los operadores MIN y MAX previenen esto. Tambin se
resta 1875 a cada eje antes de que sea escalado con el operador **. El resultado para el
eje x es que 0 a 1250 es escalado a 0 a 20. Para el eje y, 0 a 1250 es escalado a 0 a 10.
Al disminuir las mediciones de eje e inclinacin, la posicin hacia abajo del cursor tiene
que incrementar. Entonces en vez de ajustar de 1875 a 3125 en 0 a 10, el programa tiene
que ajustar en 10 a 0. La oracin y = 10 - y resuelve esto. Si y es 0, despus de escalar
se vuelve 10. Igualmente, si y es 10 despus de escalar se vuelve 0. Si es 9 despus de
escalar se vuelve 1, si es 8 despus de escalar se vuelve 2, etc.
Los ltimos pasos antes de repetir el ciclo en la rutina principal son desplegar el nuevo
asterisco en sus nuevas coordenadas x y y, luego pausar por otros 50 ms para completar
la porcin on del asterisco parpadeante.
' Despliega el asterisco en la nueva posicion del cursor.
DEBUG CRSRXY, x, y, "*"
PAUSE 50
VAR
Byte
Figura 5-13
Grupo de Asteriscos
con Refrecado de Fondo
'
'
'
'
'{$STAMP BS2}
'{$PBASIC 2.5}
' directivas
Stamp/PBASIC
CR,
CR,
CR,
CR,
CR,
CR,
CR,
CR,
CR,
CR,
CR
CR,
CR,
CR,
CR,
CR,
"########## ##########",
"#####################",
"###
####",
"### YOU LOSE
####",
"###
####",
"#####################",
CR,
CR,
CR,
CR,
CR,
CR
CR,
CR,
CR,
CR,
CR,
CR,
CR,
CR,
CR,
CR,
CR
VAR
VAR
Word
Byte
symbol
points
VAR
VAR
Word
Byte
PAUSE 50
Dos de las caractersticas opcionales de la directiva DATA fueron usadas aqu. A cada uno
de los 3 fondos le fue dado un nombre Smbolo, Maze, YouWin, y YouLose. Estos
nombres Smbolo le hacel fcil al programa seleccionar qu fondo desplegar. El operador
opcional @Address tambin fue usado para establecer la direccin EEPROM inicial de
cada directiva. En el fondo de BubbleGraph.bs2, el primer caracter es CLS para limpiar la
pantalla. El problema con CLS en estas directivas DATA es que borra toda la Terminal de
CR,
CR,
CR,
CR,
CR,
CR,
Dos variables fueron agregadas, symbol para dar seguimiento de qu fondo se recuperan
caracteres y points para dar seguimiento al marcador del jugador.
symbol
points
VAR
VAR
Word
Byte
Los valores iniciales de x y y tienen que empezar enmedio del curso de obstculos.
Puesto que todas las variables inicializan en cero en PBASIC, una falla en su
inicializacin causara que el caracter de juego empezara en la esquina superior izquierda
en vez de a la mitad.
x = 10
y = 5
symbol = Maze
La segunda rutina es crucial; es una linea SELECTCASE que sigue las reglas del juego.
La lnea SELECTCASE ve el caracter de fondo en la posicin presente del asterisco. Si el
asterisco esta sobre un espacio " ", la lnea SELECTCASE no necesita cambiar nada y el
DOLOOP de la Rutina Principal solo se mantiene repitindose, revisndo las mediciones
del acelermetro y actualizando la posicin del asterisco. Si el asterisco se mueve sobre
un "$", el programa tiene que agregar 10 a la variable points, y escribir un caracter "%"
sobre el "$" en la EEPROM. Esto previene que el programa sume 10 points varias veces
por segundo mientras que el asterisco is sostenido sobre "$". Si el asterisco es movido
sobre un "#", el smbolo YouLose es guardado en la variable symbol. Si el asterisco se
mueve sobre cualquiera de las letras "W" "I" o "N", YouWin se guarda en symbol.
' Movi el asterisco sobre un$, W, I, N, o #?
SELECT char
' Checa caracter de fondo
CASE "$"
' Si es "$"
points = points + 10
' Agrega puntos
WRITE index, "%"
' Escribe "%" sobre "$"
CASE "#"
' Si es "#",hace Symbol a YouLose
symbol = YouLose
CASE "W", "I", "N"
' Si W,I,oN, Symbol -> YouWin
symbol = YouWin
ENDSELECT
Al navegar su asterisco sobre " ", "$", or "%", la siguiente rutina es ignorada porque
symbol an guarda Maze. La lnea SELECTCASE solo cambia esto cuando el asterisco es
movido sobre "#", "W", "I", o "N". Siempre que la lnea SELECTCASE cambie symbol
a YouWin o YouLose, esta rutina despliega el fondo correspondiente, luego termina el
juego.
' Esta rutina es ignorada mientras que symbol se mantenga = Maze. Si symbol
' fue cambiada a YouWin o YouLose, despliega el nuevo fondo y fin de juego.
IF (symbol = YouWin) OR (symbol = YouLose) THEN
FOR index = 0 TO 242
' 242 caracteres
READ index + symbol, char
' Obtiene caracter
DEBUG char
' Muestra caracter
NEXT
' Siguiente iteracion del ciclo
END
' Fin de juego
ENDIF
' Fin de bloque symbol-if
El juego no refresca los smbolos "$" cuando se vuelve a correr con el botn de Reset de
la tarjeta Board of Education. Solo trabaja cuando hace click en el botn Run del Editor
BASIC Stamp. Esto es porque la directiva DATA solo escribe a la EEPROM cuando el
programa es bajado. Si el programa es reiniciado con the botn Reset, el Editor del
BASIC Stamp no tiene oportunidad de guarder los espacios, signos de dolar, etc, y los
signos de porciento que fueron escritos en la EEPROM an estn all. Para resolver el
problema, todo lo que tiene que hacer es checar cada caracter que es ledo de la
EEPROM durante la inicializacin. Si ese caracter resulta ser un "%", usa el comando
WRITE para regresarlo a "$".
<--<--<--<---
Agregue
Agregue
Agregue
Agregue
Verifique que tanto el botn Run del Editor BASIC Stamp y el botn Reset de la
tarjeta Board of Education se comportan igual despus de esta modificacin.
VAR
VAR
Word
Word
xOld
yOld
VAR
VAR
Word
Word
=
=
=
=
10
10
5
5
Modifique la rutina principal para que x solo pueda ser mayor que o menor que
xOld por un incremento o decremento de 1. Repita para y y yOld.
y = 10 - y
xOld = x
yOld = y
RESUMEN
La actividad #1 presenta los caracteres de control, tcnicas para mantener los caracteres
dentro de los lmites del trazado y el lgebra para mapear coordenadas a trazado. Los
ejemplos de caracteres de control incluyeron CRSRXY y CLRDN. Los ejemplos de lmites de
trazado incluyeron los operadores MIN y MAX y una tcnica IFTHEN. Las tcnicas de
mapeo incluyeron ecuaciones PBASIC simples para cambiar los valores de las
coordenadas x y y de Cartesianas a sus equivalentes de Terminal de Depuracin.
La actividad #2 present medios para guardar, desplegar y refrescar una imagen
desplegada de un caracter de fondo de la EEPROM. Esto es un ingrediente til para
muchas pantallas de productos, y tambin es de utilidad para pantallas y juegos con
control de inclinacin. Se puede escribir un desplegado completo de un fondo con ciclo
FORNEXT. Un comando READ en el ciclo depende de la variable index del ciclo
FORNEXT para direccionar el siguiente caracter en la secuencia. Despus de que el
comando READ carga el siguiente caracter en la variable, el comando DEBUG puede ser
usado para enviar el caracter a la Terminal de Depuracin. Para borrar las huellas
dejadas por un caracter en movimiento sobre el fondo, la posicin previa del caracter
puede ser guardada en una o ms variables. La informacin de la posicin previa es
entonces usada junto con el comando READ para buscar el caracter que debera
reemplazar el caracter en movimiento despus de que se ha movido a su siguiente
posicin.
La actividad #3 demostr cmo las mediciones del acelermetro del Captulo 3 pueden
ser combinadas con las tcnicas de posicionado de cursor y llamado de caracter de la
actividad #2 para crear una pantalla controlada por inclincacin. Se usaron mediciones
simples PULSIN para medir la inclinacin y los ejes x y y del acelermetro. Los valores
de inclinacin fueron escalados y compensados usando las tcnicas presentadas en el
Captulo 3, actividad #3. Los valores modificados x y y dictaron el posicionado del
cursor para escribir el asterisco en la Terminal de Depuracin. La posicin del asterisco
relativa al plano Cartesiano desplegado en el fondo represent el centro de la bolsa de
aire caliente dentro de la cmara del MX2125. Al moverse el asterisco, el fondo de su
posicin previa fue redibujado usando las tcnicas presentadas en la actividad #2.
La actividad #4 present un control de juego por inclinacin. Las reglas de juegos
simples pueden ser implementadas con lneas SELECT...CASE que usan el caracter en el
fondo en la posicin del caracter de juego para decidir qu accin es la siguiente. Pueden
ser incorporados fondos mltiples en un juego haciendo uso de los operadores opcionales
@Address y nombre Smbolo de las directivas DATA. Puesto que el nombre Smbolo es en
realidad la direccin EEPROM al principio de una directiva DATA determinada, su
programa puede accesar elementos en diferentes fondos agregando el valor de Symbol al
argument de direccin del comando READ.
Preguntas
Exercises
Soluciones
Q1.
Q2.
Q3.
Q4.
Si, tambin puede usar las lneas IFTHEN para checar si los valores estn fuera
de los lmites.
Q5. 60, 70, y 72 Hz.
Q6. Puede usar un ciclo FORNEXT, con lneas para recuperar y desplegar cada
caracter guardado. Las variables de palabra guardan el valor y el signo.
Q7. Las variables de palabra guardan el valor y el signo.
Q8. La burbuja se mueve a la derecha.
Q9. Fue de una posicin inclinada a la derecha a otra inclinada a la izquierda.
Q10. El eje Y, o el ms largo eje de la tarjeta Board of Education.
Q11. Inclinar la tarjeta arriba y abajo repetidamente.
Q12. Direccin 486 de la EEPROM.
Q13. Puede usar el comando DEBUG como lo hara para desplegar el valor de
cualquier otra cantidad numrica, use el modificador DEC.
DEBUG DEC symbol
READ index + symbol, char
CR,
CR,
CR,
CR,
CR, CR
VAR
VAR
Byte
Byte
FOR x = 1 TO 15
FOR y = 1 TO 5
DEBUG CRSRXY, x, y, "*"
NEXT
NEXT
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
Partes Requeridas
Use la lista de partes y circuito del Captulo 3, actividad #2 en la pgina 71 para su lnea
de visin.
Programa Ejemplo
Clculos
Sabemos de captulos previos que equivale al lado opuesto dividido entre el lado
adyacente de un tringulo rectngulo. Multiplicar ambos lados por la distancia adyacente
resulta en una expresin para resolver la altura opuesta. Es la distancia adyacente
multiplicada por la tangente del ngulo.
tan =
opposite
adjacent
Luego de determinar la altura opuesta (mostrada en la Figura 6-1), todo lo que tiene que
hacer es agregarle la altura a la que sostuvo el acelermetro cuando tom la medicin.
object height = opposite + accelerome ter height
object height = adjacent tan + accelerometer height
Ejemplo
= (10 m )(1.804 )
= 18.04
object height = opposite + accelerome ter height
= 18.04 m + 1.5 m
= 19.54 m
DATA
DATA
(10)
00
00
00
00
00
00
00
00
00
00
00
00
Addresses
10
11
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
cada valor antes de ser guardado con el comando WRITE, se resta 100 a la variable value
despus del comando READ para regresar a value en la escala de 100 a 100.
Display_Data:
DEBUG CR, "Index Record",
CR, "----- ------",
CR
FOR eeIndex = Records TO RecordsEnd
READ eeIndex, value
value = value - 100
DEBUG DEC eeIndex, CRSRX, 7, SDEC value, CR
NEXT
DEBUG CR, "Press Enter for menu..."
DEBUGIN char
RETURN
Transmit
Windowpane
Receive
Windowpane
Figura 6-2
Introduciendo valores
para
EepromDataStorage.
bs2
DATA
DATA
(10)
VAR
VAR
VAR
Byte
Word
Word
ENDSELECT
LOOP
' -----[ Subrutina - Clear_Data ]-------------------------------------------Clear_Data:
FOR eeIndex = Records TO RecordsEnd
WRITE eeIndex, 100
NEXT
DEBUG CR, "Records cleared."
PAUSE 1000
RETURN
' -----[ Subrutina - Record_Data ]------------------------------------------Record_Data:
DEBUG CR, "Enter valores from -100 to 100", CR
FOR eeIndex = Records TO RecordsEnd
DEBUG "Record ", DEC eeIndex, " >"
DEBUGIN SDEC value
value = value + 100
WRITE eeIndex, value
NEXT
DEBUG CR, "End of records.",
CR, "Press Enter for menu..."
DEBUGIN char
RETURN
' -----[ Subrutina - Display_Data ]-----------------------------------------Display_Data:
DEBUG CR, "Index Record",
CR, "----- ------",
CR
FOR eeIndex = Records TO RecordsEnd
READ eeIndex, value
value = value - 100
DEBUG DEC eeIndex, CRSRX, 7, SDEC value, CR
NEXT
DEBUG CR, "Press Enter for menu..."
DEBUGIN char
RETURN
EepromDataStorage.bs2 usa Records y RecordsEnd para todos los ciclos que ejecutan
operaciones READ y WRITE. Por ello, puede cambiar el nmero of valores que el
En la actividad #4, usaremos esta caracterstica para cambiar el nmero de registros que
el programa guarda a 1000 con Records DATA (1000). 11
DATA
En este ejemplo, si esa condicin es verdad, el programa termina aqu. La siguiente vez
que presione y libere su botn Reset, value ser impar, la condicin ser falsa y el
bloque de cdigo no detendr el programa antes de que alcance la Rutina Principal. Si el
botn Reset es presionado y liberado nuevamente, el bloque de cdigo detender el
Este programa demuestra cmo usar una direccin en EEPROM para controlar el
comportamiento del programa, dependiendo si el programa ha sido corrido o vuelto a
correr un nmero de veces par o impar. El nmero de veces que el programa ha sido
corrido ser controlado por el botn Reset despus de ser descargado. Si el botn Reset
ha sido presionado/liberado un nmero par de veces, el programa empieza con the menu
de la actividad previa. Si ha sido presionado/liberado un nmero impar de veces, ejecuta
un conteo regresido y luego llama a la subrutina Record_Data.
DATA
DATA
DATA
0
(10)
VAR
VAR
VAR
Byte
Word
Word
DEBUG CLS,
"Press/Release Reset", CR,
"to arm datalogger ", CR, CR,
" - or - ", CR, CR,
"Type C, R or D", CR,
"C - Clear records", CR,
"R - Record records", CR,
"D - Display records", CR,
">"
DEBUGIN char
DEBUG CR
SELECT char
CASE "C", "c"
GOSUB Clear_Data
CASE "R", "r"
GOSUB Record_Data
CASE "D", "d"
GOSUB Display_Data
CASE ELSE
DEBUG CR, "Not a valid entry.",
CR, "Try again."
PAUSE 1500
ENDSELECT
LOOP
' -----[ Subrutina - Clear_Data ]-------------------------------------------Clear_Data:
FOR eeIndex = Records TO RecordsEnd
WRITE eeIndex, 100
NEXT
DEBUG CR, "Records cleared."
PAUSE 1000
RETURN
' -----[ Subrutina - Record_Data ]------------------------------------------Record_Data:
DEBUG CR, "Enter valores from -100 to 100", CR
FOR eeIndex = Records TO RecordsEnd
DEBUG "Record ", DEC eeIndex, " >"
DEBUGIN SDEC value
value = value + 100
WRITE eeIndex, value
NEXT
DEBUG CR, "End of records.",
CR, "Press Enter for menu..."
DEBUGIN char
RETURN
' -----[ Subrutina - Display_Data ]-----------------------------------------Display_Data:
DEBUG CR, "Index Record",
CR, "----- ------",
CR
FOR eeIndex = Records TO RecordsEnd
READ eeIndex, value
value = value - 100
DEBUG DEC eeIndex, CRSRX, 7, SDEC value, CR
NEXT
DEBUG CR, "Press Enter for menu..."
DEBUGIN char
RETURN
Not que cambiaron los nmeros registrados en este programa? En vez de 0 a 10, fueron
1 al 11. Intente mover la directiva Reset DATA despus de las otras dos. Luego, corra el
programa modificado y examine el resultado. Haga tablas similares a la Table 6-1 que
ilustre los valores guardados por Reset, Records, y RecordsEnd. Haga la primera tabla
para ilustrar el programa original, y la segunda para illustrar el programa modificado en
el que cambi el orden de las directivas DATA.
Circuito
Figura 6-3
Acelermetro y Piezo parlante,
esquemtico (Izquierda) y
Diagrama de conexiones (abajo)
Modificaciones al Programa
.
FOR char = 10 TO 0
.
.
.
FREQOUT 4, 50, 3750
PAUSE 950
NEXT
.
.
.
The piezo parlante tambin suena dos veces con un sonido ms alto al principo del
registrado de datos. Una caracterstica importante de este contador regresivo es que puede
detener el registro antes de que inicie solo con presionar y liberar el botn Reset de su
tarjeta. Para reiniciar el conteo regresivo, solo presione y libere el botn Reset otra vez.
Programa Ejemplo: DatalogAcceleration.bs2
Descarga gratis Este programa est disponible como descarga grtis .bs2 en la pgina del
producto de Sensores Inteligentes y sus Aplicaciones en www.parallax.com.
Este programa toma y guarda 500 mediciones de ejes x y y del acelermetro en alrededor
de 15 segundos. Esto equivale a un nivel de muestreo de cerca de 33 mediciones por
segundo. Esto es bueno para una variedad de mediciones. Para medir procesos ms largos
y lentos, la subrutina Record_Data puede ser alentada con un comando PAUSE.
Cuando est listo para empezar a inclinar the acelermetro por 15 segundos, presione y
libere el botn Reset. El registrador sonar durante la cuenta regresiva de 10 segundos,
luego terminar con 2 pitidos ms altos indicando el inicio del registrador. Har un solo
pitido ms alto cuando haya terminado.
DATA
DATA
DATA
0
(1000)
VAR
VAR
VAR
VAR
VAR
Byte
Word
Word
value
Word
angle ",
------",
...con estos 2:
READ eeIndex, value
value = value */ 361
mediciones de aceleracin cubiertas en esta actividad junto con giroscopios que miden la
rotacin del vehculo.
Partes, Equipo y Diagramas de Circuito
La Figura 6-4a muestra un carro RC econmico que puede ser obtenido en muchas
tiendas de pasatiempos y tiendas de electrnica. La Figura 6-4b muestra cmo la tarjeta
fue montada. Se fijaron patitas de goma por debajo de la tarjeta de tal forma que ninguna
de sus conexiones elctricas estuviera en contacto con alguna de las partes metlicas del
carro RC. Otra opcin hubiera sido usar cinta adhesiva de doble cara para fijar la tarjeta
al techo plstico del carro. La tarjeta fue orientada con la tableta hacia el frente del carro.
Figura 6-4: Carro RC con el registrador de aceleracin
a.
b.
Evite corto circuitos accidentales. Asegrese que su tarjeta est montada en el carro de
tal forma que el metal expuesto debajo de la tarjeta no tenga forma de entrar en contacto
con cualquier parte de metal del carro RC o sus conexiones elctricas.
Como Trabaja
La Figura 6-5 muestra una grfica de las mediciones del eje y del acelermetro al acelerar
el carro hacia enfrente, desacelerado para detenerlo y luego acelerado en reversa. Las
Accelerate
Backward
Decelerate
RC Car Forw ard and Backw ard
30
20
gravity/100
10
0
0
50
100
150
200
250
-10
-20
-30
Stop
300
Figura 6-5
Mediciones del eje y del
Acelermetro en el Carro
RC
-40
seconds/30
Accelerate
Forward
Decelerate
La razn de que la aceleracin al frente sea negativa es porque el eje de sensado ym esta
apuntando a la parte posterior del carro RC como se muestra en la Figura 6-6. Entonces,
al ir acelerando el carro al frente, la aceleracin es negativa. Cuando un carro reduce su
velocidad, de hecho est acelerando hacia atrs. Esto se muestra en la Figura 6-5.
Primero, el carro acelera al frente, luego aplic frenos y perdi velocidad (desaceler).
La medicin y fue positiva, luego la aceleracin fu negativa. Despus de un breve paro,
el carro aceler en reversa. Note que y es nuevamente positiva. Entonces, cuando pierde
velocidad (desacelera) de su velocidad en reversa para detenerse nuevamente, el carro
esta, en efecto, acelerando al frente, y la medicin y es negativa otra vez.
Figura 6-6
Aceleracin del Carro RC
vs Ejes de Sensado del
Acelermetro
a.
b.
Si est manejando un carro, cuando el carro acelera al frente puede sentir que el asiento le
empuja al frente. Si da una vuelta sbita a la derecha el lado izquierdo del carro le empuja
a la derecha. Eso es porque est acelerando a la derecha al ir dando la vuelta. Esto se
muestra en la Figura 6-7, que ilustra cmo un objeto puede viajar al frente a una
velocidad constante, y para hacer que d vuelta, siempre tiene que ser acelerado hacia el
centro del crculo en el que est viajando.
Figura 6-7
Viajando en un Crculo
Esto causa aceleracin
continua hacia el centro.
La Figura 6-8 muestra una grfica de las mediciones del eje x del acelermetro al
manejar el carro RC en crculos dando vueltas a la izquierda, luego en crculos dando
vueltas a la derecha. Note como la medicin del eje x muestra aceleracin positiva
cuando el carro RC da vuelta a la izquierda, y aceleracin negativa cuando el carro RC
da vuelta a la derecha.
Left Turn
Circles
Straighten
Out
RC Car Left then Right
60
40
Figura 6-8
Mediciones del
Acelermetro en el Carro
RC mientras se maneja
en crculos
gravity/100
20
0
0
100
200
300
400
500
600
-20
-40
-60
-80
-100
seconds/30
Right Turn
Circles
La Figura 6-9 muestra cmo est orientado el eje x del acelermetro y la aceleracin que
mide. Para una vuelta a la izquierda, el carro est acelerando a la izquierda, lo que para el
acelermetro es una medicin de aceleracin en el eje x positiva. Cuando da vuelta a la
derecha, la aceleracin es en la direccin opuesta del eje x positivo, entonces la medicin
en el eje x es negativa.
Figura 6-9: Sensando la aceleracin durante las vueltas
a.
b.
Procedimiento
El procedimiento para medir y luego graficar la aceleracin 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 clculo diferente, las palabras
clave como espacio delimitado, trazado disperso XY pueden darle pistas de cmo hacerlo
en su software de hoja de clculo particular.
Su hoja de clculo debe ser de 3 columnas (ancho) y como 503 renglones (largo)
El siguiente paso, que tambin se ha documentado para Microsoft Excel 2002, es correr
la herramienta de grfico y decirle qu tipo de grfica y cmo quiere que se vea.
Por ejemplo, la grfica de aceleracin en la Figura 6-10 muestra un trazado para el carro
RC al acelerar adelante y atrs. (La hoja de clculo fu modificada para que los valores
positivos indiquen aceleracin al frente y los valores negativos indiquen aceleracin atrs
o desaceleracin.) Entonces, esta grfica muestra que el carro aceler hacia adelante a un
promedio de unos 0.16 g por poco menos de 2 seconds. Luego, desaceler a un promedio
de unos 1.4 g por poco ms de 2 segundos. Entonces descans como por 1 segundo.
Despus, aceler en reversa y desaceler (aceler en reversa) para un segundo paro.
Figura 6-10: Grfica de aceleracin modificada con valores positivos indicando hacia adelante
Seleccionando Datos a Graficar. Haga click derecho sobre la linea en la grfica con el
ttulo "RC Car acceleration for Forward and Backward. Luego seleccione source data y
haga click en la pestaa Series. Note que la serie que est siendo ploteada es de F229 a
F492. Esta es la segunda de 2 pruebas adelante/atrs que fueron ejecutadas durante la
sesin de registro de datos. Lo mismo aplica a las grficas de velocidad y posicin.
Se agreg una columna con una ecuacin la hoja de clculo que calcula el cambio en la
velocidad para cada medicin de aceleracin. La ecuacin para la velocidad en una linea
recta es v = v0 + at. Esto es, la velocidad inicial (v0) ms el producto de la aceleracin
(a) y la duracin de esa aceleracin (t). Agregar una columna a la hoja de clculo que
recalcula la velocidad entre cada medicin de aceleracin hace posible graficar la
velocidad como se muestra en Figura 6-11. Como se esperaba, cuando el carro acelera al
frente, su velocidad se incrementa. Luego, cuando se va deteniendo, su velocidad
decrece. Al volver a acelerar, su velocidad decrece an ms (incrementa en direccin
negativa). Entonces, al irse deteniendo de su movimiento en reversa, su velocidad regresa
a casi cero.
Figura 6-11: Grfica de velocidad derivada de los datos de posicin inicial y aceleracin
Los clculos para esta grfica se hicieron en la columna F de la hoja de clculo. Si hace
click en la celda F-17 de la hoja de clculo, esta ecuacin debe aparecer en el campo de
funcin:
=F16 + (0.03*9.8*E17/100)
In este caso, F16 is la celda justo arriba F17, y tiene la velocidad previa. Esta velocidad
previa es usada como V0 para el intervalo muestra. 0.03 es t, el tiempo entre muestras, y
9.8 * E17 / 100 toma la medicin E17, que est en centsimas de una g y la convierte a
metros por segundo (m/s2). Al dividir entre 100 se toma el valor de centsimas de g a g y
luego al multiplicar por 9.8 la convierte de g a m/s2. Esto es porque 1 g es
aproximadamente 9.8 m/s2.
Con las columnas en la hoja de clculo para aceleracin y velocidad, ahora es posible
seguir la posicin del carro usando la ecuacin s = s0 + v0t + 1/2 at2. Esto es, la posicin
del carro (s) es igual a la posicin inicial (s0) mas el producto de la velocidad inicial y el
tiempo (v0t), mas el semiproducto de la aceleracin y el cuadrado del tiempo (1/2 at2). La
resultante grfica de posicin mostrada en la Figura 6-12 is sorpresivamente exacta. El
carro de hecho fue hacia al frente unos 3.5 metros antes de parar. Luego, regres y se
par casi a un metro detrs de donde empez.
Como se mencion antes, las hojas de clculo de MS Excel usadas para trazar estas
grficas estn disponibles como descarga en la pgina de Sensores Inteligentes y sus
Aplicaciones en www.parallax.com. Descarge la hoja de clculo y examine las
ecuaciones en las diferentes columnas junto con la configuracin de cada grfica. Luego,
experimente y grafique con los datos obtenidos de su vehculo RC. Calesquiera datos
grafique debera empezar de una posicin conocida con el carro parado. De esta manera
conocer la posicin inicial (s0), y lo ms importante, la velocidad inicial, v0 es 0 m/s.
Figura 6-13: Tarjeta BASIC Stamp HomeWork adherida a la patineta del Autor
El primer ollie documentado fue hecho por Alan (Ollie) Gelfand a finales de los 70s.
Gelfand lo inici en pistas cncavas. La versin en piso evolucion a principios de los
80s. Cuando el patinador hace un ollie, brinca y parece que su patineta est pegada a sus
pies. Sin importar la pista o el estilo, muchos trucos de hoy son variaciones del ollie.
La Mecnica del Ollie
La Figura 6-14 muestra la mecnica de un ollie. Al brincar el ejecutante, (a) sus 2 pies
empujan la patineta hacia abajo. Justo antes de volar en el aire (b), levanta su pie frontal y
al mismo tiempo extiende su pie trasero hasta quedar con la punta del mismo, y la parte
posterior de la patineta golpea el concreto. El momentum del frente de la patineta la
mantiene elevndose (c), el patinador despega su pie trasero y patea con su pie frontal
hacia adelante. Esto causa que se levante la parte posterior de la patineta (d) y se mueva
ligeramente hacia enfrente. Mientras que la cubierta encuentra al pie trasero (e), el
patinador aplica justo la suficiente presin para mantener la patineta contra sus pies al ir
regresando al piso (f). El ms alto ollie a la fecha, ejecutado por Danny Wainwright, fu
superior a los 5 pies de alto.
Figura 6-14: Mecnica del Ollie
La Figura 6-15 muestra una grfica del eje y del acelermetro para los primeros 2 ollies
que fueron registrados con el siguiente programa ejemplo. Cada paso de la Figura 6-14
est marcado en la grfica.
Acceleration vs Tim e for First Ollie
3.5
3
2.5
gravity (g)
2
1.5
1
0.5
0
170
-0.5
190
210
230
250
270
Figura 6-15
Aceleracin durante un
Ollie
-1
-1.5
tim e (m s)
a, b
c, d e
El primer ollie fue un poco deficiente en los pasos b y c de la Figura 6-14, asi que la parte
posterior de la patineta no se encontr con el pie posterior en el paso e. Note que el
impacto de la tarjeta durante el paso f fu 3.5 g. Los puntos altos y bajos que siguen al
paso fse asemejan a las oscilaciones cuando se toca una campana. Esto es partialmente
debido a la vibration de la patineta y parcialmente debido a la turbulencia del gas dentro
del acelermetro causada por el impacto.
La Figura 6-16 muestra los datos para un ollie un poco mejor. Fue un poco ms alto y el
paso e se hizo con gracia. Note que el paso de a a b es ms pronunciado, y llega a -1.25 g
antes de subir por encima de 1 g para los pasos c y d. Estos valores, que son mayores que
los de la grfica anterior, indican un ollie mayor. Note tambin que el impacto fue menor
a 3 g, porque el patinador no estaba intentando de recuperar con la patineta en su camino
hacia abajo.
2.5
gravity, (g)
2
1.5
1
0.5
0
775
-0.5
795
815
835
855
875
Figura 6-16
Grfica de un Ollie
ligeramente mejor
-1
-1.5
tim e (ms)
a, b
c, d
Registrando un Ollie
La Figura 6-17 muestra cmo el eje y de sensado del acelermetro esta alineado para
sensar varias inclinaciones y rotaciones de la patineta. Este es el nico eje que queremos
registrar en el siguiente programa ejemplo.
Figura 6-17
Acelermetros Sensing
Axes on the patineta
El siguiente programa ejemplo fu usado para registrar los datos graficados en las Figura
6-15 yFigura 6-16. Le da unos 10 segundos de registro, suficiente para 2 o 3 ollies. El
traslado de datos a una hoja de clculo y su grafica est basado en el procedimiento de la
actividad #5. La hoja de clculo fue modificada para generar las grficas mostradas en
esta actividad agregando una columna con una frmula que toma los datos del eje y, les
resta 2500 y los divide entre 625. Esto da una medicin en unidades de gravedad (g).
' -----[ Titulo ]------------------------------------------------------------' Sensores Inteligentes y sus Aplicaciones - DatalogYaxisUnscaled.bs2
' Registra 500 mediciones de aceleracion en el eje y de tamao de una palabra.
'{$STAMP BS2}
'{$PBASIC 2.5}
' -----[ Directivas DATA]---------------------------------------------------Reset
Records
RecordsEnd
DATA
DATA
DATA
0
(1000)
VAR
VAR
VAR
VAR
VAR
Byte
Word
Word
value
Word
IF value // 2 = 0 THEN
FOR char = 10 TO 0
DEBUG CLS, "Datalogging starts", CR,
"in ", DEC2 char, " seconds",
CR, CR,
"Press/release Reset", CR,
"for menu..."
FREQOUT 4, 50, 3750
PAUSE 950
NEXT
GOSUB Record_Data
ENDIF
' -----[ Rutina Principal]---------------------------------------------------DO
DEBUG CLS,
"Press/Release Reset", CR,
"to arm datalogger ", CR, CR,
" - or - ", CR, CR,
"Type C, R or D", CR,
"C - Clear records", CR,
"R - Record records", CR,
"D - Display records", CR,
">"
DEBUGIN char
DEBUG CR
SELECT char
CASE "C", "c"
GOSUB Clear_Data
CASE "R", "r"
GOSUB Record_Data
CASE "D", "d"
GOSUB Display_Data
CASE ELSE
DEBUG CR, "Not a valid entry.",
CR, "Try again."
PAUSE 1500
ENDSELECT
LOOP
' -----[ Subrutina - Clear_Data ]-------------------------------------------Clear_Data:
x-axis
------
y-axis",
------",
NEXT
DEBUG CR, "Press Enter for menu..."
DEBUGIN char
RETURN
Figura 6-18
HomeWork Board con el
acelermetro montada en
una rueda de bicicleta
a.
b.
2350 para levantarse nuevamente por encima de 2650 otra vez. Considere que no es
necesariamente la forma optima de medir revoluciones de rueda. Eso lo determinar
usted.
DO
DO UNTIL y > 2650
PULSIN 7, 1, y
ciclo
DO UNTIL y < 2350
PULSIN 7, 1, y
ciclo
counter = counter + 1
FREQOUT 4, 200, 3750
LOOP
Banda muerta (Deadband): El rango entre 2350 y 2650 en el bloque de cdigo anterior es
referido como banda muerta.
Monte su tarjeta dentro de una rueda de bicicleta como se muestra en la Figura 618. Asegrese de mantener un buen aislante entre los rayos y la parte inferior de
la tarjeta.
Introduzca, salve y corra TestWheelCounter.bs2.
Gire la rueda y verifique que alerta una vez por revolucin.
VAR
VAR
VAR
DEBUG CLS
DO
DO UNTIL y > 2650
Word
Word
Word
PULSIN 7, 1, y
ciclo
DO UNTIL y < 2350
PULSIN 7, 1, y
ciclo
counter = counter + 1
FREQOUT 4, 200, 3750
LOOP
En este punto podra parecer que la aplicacin est lista para un cdigo que convierta las
revoluciones en distancia y quiz una pantalla LCD y un par de botones para seleccionar
elementos de menu en LCD. El problema aqu es que solo hemos examinado a la rueda
girando en 2 velocidades. Qu ocurre cuando el ciclista se inclina en vueltas cerradas?
cambia entonces la aceleracin? Qu pasa a temperaturas altas y bajas? causarn
que las mediciones sean diferentes? Ciertamente no servira tener un producto en el
mercado que solo rastreara la distancia de vuelta de bicicleta en parte del tiempo. El
producto obtendra una mala reputacin muy rapidamente.
La Figura 6-19 muestra un estudio de aceleracin registrado para la bicicleta a dos
velocidades ligeramente diferentes. El area alrededor de 400 ms es donde la rueda fue
desacelerada. El hecho importante que hay que notar en esta grfica es la diferencia de las
mediciones de los ejes x y y. A la mayor velocidad, la seal del eje y vari entre 1 y 0.5
g mientras que las mediciones del eje x variaron entre 1.5 y 0.25 g. Despus de reducir
la velocidad de la rueda, la medicin del eje y vari entre 1 y -1 g, mientras que la
medicin del eje x vari entre 0.7 y 1.3 g aproximadamente.
La Figura 6-19 es tan solo una grfica de dos velocidades diferentes. Es cierto, el cdigo
de histresis de TestWheelCounter.bs2 trabaja bajo ambas de estas condiciones, pero
trabaja bajo TODAS las condiciones? Con esta clase de preguntas, los ingenieros
pueden aplicar algunas ecuaciones para predecir las aceleraciones bajo varias condiciones
extremas que ellos anticipan. Un software de simulacin podra tambien ser usado para
verificar los imprevistos. An cuando esta clase de especializacin est disponible, el
producto an tiene que ser probado en una variedad de conditions "de la vida real",
especialmente para eliminar la posibilidad de suposiciones incorrectas de parte de los
ingenieros. Es aqu donde el registro de datos regresa a la escena. El prototipo real an
tiene que ser llevado a travs de las diversas condiciones que pudiera experimentar en la
bicicleta de cualquier persona antes de que sea seguro hacer la inversin en cajas
plsticas y un diseo electrnico ms refinado que presente partes de bajo costo,
produccin en masa y costos de inventarios.
Figura 6-19: Estudio de aceleracin de rueda de bicicleta
Accelerometer
y-axis
Bike Wheel at Tw o Different Speeds
2
1.5
gravity, g
1
0.5
0
-0.5
100
200
300
400
500
600
700
800
900
1000
-1
-1.5
-2
tim e, m s
Accelerometer
x-axis
Con esto en mente, regresamos a ejecutar estudios de aceleracin, bajo tantas situaciones
diferentes como sea posible. He aqu el programa que fue usado para registrar los datos
para la grfica en la Figura 6-19. Note que est registrando valores de tamao de una
palabra para las mediciones de los dos ejes x y y. La hoja de clculo ha tomado el trabajo
de cambiar las mediciones primarias del acelermetro PULSIN a mediciones de gravedad.
Programa Ejemplo: BikeWheelAcceleration.bs2
DATA
DATA
DATA
0
(1000)
VAR
VAR
VAR
VAR
VAR
Byte
Word
Word
value
Word
PULSIN 7, 1, y
WRITE eeIndex, Word x
WRITE eeIndex + 2, Word y
NEXT
FREQOUT 4, 200, 4000
DEBUG CR, "End of records.",
CR, "Press Enter for menu..."
DEBUGIN char
RETURN
' -----[ Subrutina - Display_Data ]-----------------------------------------Display_Data:
DEBUG CR, "Index x-axis y-axis",
CR, "----- ------ ------",
CR
FOR eeIndex = Records TO RecordsEnd STEP 4
READ eeIndex, Word x
READ eeIndex + 2, Word y
DEBUG DEC eeIndex, CRSRX, 7, SDEC x, CRSRX, 14, SDEC y, CR
NEXT
DEBUG CR, "Press Enter for menu..."
DEBUGIN char
RETURN
Su Turno
Otra cosa por examinar es como se ejecutan las mediciones de rotacin en el plano
vertical bajo las diversas condiciones de rueda de bicicleta.
Hay un comportamiento del ngulo medicin para el cual la histresis pueda ser
aplicada bajo todas las condiciones de manejo?
RESUMEN
Este captulo present una variedad de aplicaciones del acelermetro y de las tcnicas de
registro de datos que pueden ser usadas para estudiar las mediciones del acelermetro en
varias condiciones, y en algunos casos, para refinar sus programas. Cuando se observa la
cima de un objeto, las mediciones de rotacin en un plano vertical pueden ser usadas con
la distancia al objeto y algo de trigonometra para determinar la altura del objeto.
Se presentaron directivas DATA con nombres Smbolo opcionales como una forma de
simplificar el mantener los registros en los programas de registro de datos. Pueden ser
usadas para definir rangos de Memoria de programacin EEPROM no usada. Puesto que
los nombres Smbolo guardan la direccin de inicio de las directives DATA, son tiles en
ciclos FOR...NEXT que ejecutan operationes READ/WRITE sobre el rango de los bytes
EEPROM definidos por las directives DATA de inicio y fin.
Tambin se present una tcnica para usar una directiva DATA para apartar un byte para
establecer el modo del programa. Cada vez que el programa inicia, una rutina de
inicializacin lee el byte, le agrega un uno y reemplaza el valor viejo en la EEPROM con
el valor modificado. Cada vez que el programa es reiniciado presionando y liberando el
botn Reset de la tarjeta, el programa puede usar el nuevo valor en EEPROM para
seleccionar entre diferentes modos. Para cambiar el estado on y off de una caracterstica
en el programa, se us una lnea IF...THEN que examina si el residuo del valor dividido
entre 2 es cero. Esto hace posible iniciar y parar el registro de datos sin estar conectado a
la computadora.
Las aplicaciones del acelermetro con registrado de datos incluyen la aceleracin de un
carro RC, mediciones de trucos en patineta y mediciones de rueda de bicicleta. Cada una
de estas emple un programa que fue una variacin del programa de registrado remoto
presentado en la actividad #4. Los datos desplegados en la Terminal de Depuracin
fueron sombreados, copiados y pegados en archivos de texto. Los archivos de texto
fueron entonces importados en un programa de hoja de clculo y graficados. Las grficas
fueron analizadas para examinar las aceleraciones, inclinaciones y ngulos involucrados
en los movimientos del carro RC, la patineta y la bicicleta.
Preguntas
1. Cules son las 3 piezas de informacin que necesita para medir la altura de un
edificio a distancia?
1. Use Google para encontrar el valor de la pendiente por encima de la cual la nieve
fcilmente forma una avalancha. Haga un prototipo de un dispositivo que le
advierta si una pendiente es demasiado pronunciada. Este dispositivo puede ser
usado para reemplazar un dispositivo mecnico comnmente usado en areas de
ski.
2. Disee un prototipo de pedmetro (contador de pasos).
Soluciones
Q1. (1) La altura a partir de la cual la medicin es tomada, (2) la distancia a partir de
la base del edificio, y (3) el ngulo a partir de la horizontal al cual se divisa la
cima del edificio.
Q2. DATA (100) reserva 100 bytes en EEPROM; mientras que, DATA 20
(100)guarda el valor 20 en cada uno de los 100 bytes.
Q3. Los comandos WRITE guardan valores byte. Para arreglar este comando, tendra
que insertar el modificador Word antes del valor 1000. Considere que tendr que
incrementar eeIndex en 2 antes de guardar el siguiente valor.
Q4. Necesitara: Reset DATA 0; value VAR Word; READ Reset, value, value
= value + 1; WRITE Reset, value
Q5. Le permite al usuario saber en qu modo esta operando el dispositivo emitiendo
chirridos (tonos de cierta duracin y frecuencia). El conteo antes de registrar
datos involucra 11 tonos de 50 ms y 3.75 kHz seguidos por 2 tonos ms
pronunciados y agudos (75 ms y 4 kHz). Despus de registrar datos, el piezo
parlante emite un chirrido ms largo (200 ms y 4 kHz) para decirle al usuario
que el registrado de datos esta completo.
Q6. Incrementa el valor entre parntesis que sigue la palabra clave DATA.
Q7. Si est viajando hacia al frente y desacelera es lo mismo que acelerar en reversa,
que es acelerar en la direccin opuesta a adelante.
Q8. Hacia el centro de un crculo.
Q9. Esta es una comparacin de 2 programas ejemplo, DatalogAcceleration.bs2
contra DatalogYaxisUnscaled.bs2. DatalogAcceleration.bs2 guarda valores x y
y que son proporcionalmente divididos a 0 a 200 con 100 como 0 g.
DatalogYaxisUnscaled.bs2 no solo guarda la version sin escalar, no aplica
ninguna compensacin tampoco. Es solo la medicin primaria del eje y, que va
de 1875 a 3125. En ambos programas se requiere un valor de una palabra para
guardar cada medicin. En DatalogAcceleration.bs2, es una palabra (2 bytes) la
que guarda las mediciones de los ejes x y y escaladas y compensadas. En
DatalogYaxisUnscaled.bs2, cada valor del eje y toma una palabra entera. An
cuando el tiempo que toma guarder los bytes es el mismo en ambos programas,
se salva algo de tiempo entre mediciones con DatalogYaxisUnscaled.bs2 porque
no toma ningn tiempo para un comando PULSIN que hubiera de otra manera
leido el eje x.
E1. Altura del objeto = opuesto + altura del acelermetro
= (adyacente tan (75)) m + 1 m
= (15 3.73) m + 1 m
= 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
16 31 46 61 76 91 106 121 136 151 166 181 196 211 226 241
DO
PULSIN 7, 1, y
IF (y <= 2900 y yOld >= 3300) OR (y >= 3300 y yOld <= 2900) THEN
yOld = y
stepCnt = stepCnt + 1
ENDIF
SEROUT 14, 84, [128, DEC5 stepCnt / 2]
LOOP
como un punto de referencia para leer los bytes de la EEPROM. Despus de leer cada
byte de la EEPROM, la subrutina lo manda a la LCD serial.
Char4
DATA
Char9
DATA
.
.
.
%11111,
%00011,
%11011,
%11011,
%11111,
%11111,
%11111,
%11111
.
.
.
%11111,
%11111,
%11111,
%11111,
%11011,
%11011,
%11000,
%11111
.
.
.
'
'
'
'
'
'
'
'
*
0
*
*
*
*
*
*
*
0
*
*
*
*
*
*
*
0
0
0
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
'
'
'
'
'
'
'
'
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
0
0
0
*
*
*
*
*
*
*
0
*
*
*
*
*
*
*
0
*
DO
counter = counter + 1
counter = counter // 3
' Define caracter personalizado.
custChar = 5
LOOKUP counter,
[Char0, Char1, Char2],
charBase
GOSUB Def_Cust_Char
.
.
.
LOOP
Como hacer que counter cuente 0, 1, 2, 0, 1, 2, ... sin FOR...NEXT
El bloque de cdigo arriba est en un DO...LOOP, y por ello se repite indefinidamente. La
variable del contador se incrementa en 1 cada vez que pasa por el ciclo. El comando
counter = counter // 3 usa el operador mdulo // de PBASIC para calcular el
residuo de counter 3. Al hacer counter igual al residuo de counter 3, counter solo
cuenta hasta 2 antes de regresar a 0. La secuencia resultante de valores guardados por
counter es 0, 1, 2, 0, 1, 2, 0, 1, 2, ...
Puesto que el siguiente programa ejemplo est slo animando un caracter, puede usarse
un ciclo FOR...NEXT para accesar cada una de las directivas DATA del caracter
personalizado. La direccin de inicio de cada directiva DATA ser 8 bytes despus de la
siguiente. Se puede actualizar la LCD con cada definicin de caracter en la secuencia de
directivas DATA con un ciclo FOR...NEXT que d pasos de 8, que comience en Char0 y
termine en Char14.
DO
FOR charBase = Char0 TO Char14 STEP 8
GOSUB Def_Cust_Char
cursor = 7
GOSUB Disp_Cust_Char
PAUSE 200 '- charBase
NEXT
PAUSE 1000
LOOP
= BASIC Stamp 2
= PBASIC 2.5
DATA
%11111,
%01111,
%11111,
%11111,
%11111,
%11111,
%11111,
'
'
'
'
'
'
'
*
0
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
%11111
' * * * * *
Char1
DATA
%11111,
%00111,
%11111,
%11111,
%11111,
%11111,
%11111,
%11111
'
'
'
'
'
'
'
'
*
0
*
*
*
*
*
*
*
0
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Char2
DATA
%11111,
%00011,
%11111,
%11111,
%11111,
%11111,
%11111,
%11111
'
'
'
'
'
'
'
'
*
0
*
*
*
*
*
*
*
0
*
*
*
*
*
*
*
0
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Char3
DATA
%11111,
%00011,
%11011,
%11111,
%11111,
%11111,
%11111,
%11111
'
'
'
'
'
'
'
'
*
0
*
*
*
*
*
*
*
0
*
*
*
*
*
*
*
0
0
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Char4
DATA
%11111,
%00011,
%11011,
%11011,
%11111,
%11111,
%11111,
%11111
'
'
'
'
'
'
'
'
*
0
*
*
*
*
*
*
*
0
*
*
*
*
*
*
*
0
0
0
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Char5
DATA
%11111,
%10011,
%11011,
%11011,
%11011,
%11111,
%11111,
%11111
'
'
'
'
'
'
'
'
*
*
*
*
*
*
*
*
*
0
*
*
*
*
*
*
*
0
0
0
0
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Char6
DATA
%11111,
%11011,
%11011,
%11011,
'
'
'
'
*
*
*
*
*
*
*
*
*
0
0
0
*
*
*
*
*
*
*
*
%11011,
%11011,
%11111,
%11111
'
'
'
'
*
*
*
*
*
*
*
*
0
0
*
*
*
*
*
*
*
*
*
*
Char7
DATA
%11111,
%11111,
%11011,
%11011,
%11011,
%11011,
%11011,
%11111
'
'
'
'
'
'
'
'
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
0
0
0
0
0
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Char8
DATA
%11111,
%11111,
%11111,
%11011,
%11011,
%11011,
%11001,
%11111
'
'
'
'
'
'
'
'
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
0
0
0
0
*
*
*
*
*
*
*
0
*
*
*
*
*
*
*
*
*
Char9
DATA
%11111,
%11111,
%11111,
%11111,
%11011,
%11011,
%11000,
%11111
'
'
'
'
'
'
'
'
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
0
0
0
*
*
*
*
*
*
*
0
*
*
*
*
*
*
*
0
*
Char10
DATA
%11111,
%11111,
%11111,
%11111,
%11111,
%11011,
%11000,
%11111
'
'
'
'
'
'
'
'
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
0
0
*
*
*
*
*
*
*
0
*
*
*
*
*
*
*
0
*
Char11
DATA
%11111,
%11111,
%11111,
%11111,
%11111,
%11111,
%11000,
%11111
'
'
'
'
'
'
'
'
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
0
*
*
*
*
*
*
*
0
*
*
*
*
*
*
*
0
*
Char12
DATA
%11111,
' * * * * *
%11111,
%11111,
%11111,
%11111,
%11111,
%11100,
%11111
'
'
'
'
'
'
'
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
0
*
*
*
*
*
*
0
*
Char13
DATA
%11111,
%11111,
%11111,
%11111,
%11111,
%11111,
%11110,
%11111
'
'
'
'
'
'
'
'
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
0
*
Char14
DATA
%11111,
%11111,
%11111,
%11111,
%11111,
%11111,
%11111,
%11111
'
'
'
'
'
'
'
'
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
PIN
14
CON
CON
CON
CON
CON
CON
CON
CON
84
'
'
'
'
'
'
'
VAR
VAR
VAR
VAR
VAR
VAR
VAR
Nib
Nib
Byte
Byte
Nib
Nib
Byte
'
'
'
'
'
'
PAUSE 1000
LOOP
Def_Cust_Char:
SEROUT LcdPin, T9600,
[Define + custChar]
FOR index = 0 TO 7
READ charBase + index, dotLine
SEROUT LcdPin, T9600, [dotLine]
NEXT
RETURN
' -----[ Subrutinas - Disp_Cust_Char ]--------------------------------------'
'
'
'
Disp_Cust_Char:
SEROUT LcdPin, T9600,
2
[Define + custChar]
FOR index = 0 TO 7
' 7 bytes, define 7 lineas punteadas
READ charBase + index, dotLine ' Obtiene byte para linea punteada
SEROUT LcdPin, T9600, [dotLine]
' Lo manda a la LCD
NEXT
RETURN
Despus de que la LCD recibe un valor entre 248 y 255 espera recibir 8 bytes mas, cada
uno conteniendo una de las 8 lneas punteadas que hacen la definicin de un caracter
personalizado. El FOR...NEXT en Def_Cust_Char lee cada byte en la EEPROM,
empezando en charBase. Considere que la rutina principal establece a charBase en el
nombre Smbolo de una de las directives DATA, que es una constante igual a la direccin
de inicio de los datos. READ charBase + index, dotLine lee un byte de la definicin
de caracter y lo guarda en la variable dotLine. La primera vez al pasar por el ciclo
FOR...NEXT, index es 0, entonces el primer byte en la definicin de caracter es trada de la
EEPROM y guardada en la variable dotLine. Luego, el valor guardado por dotLine es
enviado a la LCD con el comando SEROUT LcdPin, T9600, [dotLine]. La segunda
vez el pasar por el ciclo FOR...NEXT, index es ahora 1, y entonces el segundo byte es
ledo de la EEPROM y enviado a la LCD. La tercera vez, el tercer byte en la definicin
de caracter es trada y enviada, etc., hasta el octavo byte cuando index llega a 7.
La subrutina Disp_Cust_Char tiene solo un comando, SEROUT LcdPin, T9600,
[line + cursor, custChar]. Enva 2 valores a la LCD. El primero es line +
cursor, que coloca el cursor donde el caracter personalizado va a ser escrito. line
contiene ya sea Line0 o Line1. Line0 es el valor constante 128, que apunta a caracter 0
Lnea 0. Line1 es el valor constante 148, que apunta a caracter 0 Lnea 1. Al sumar
cursor (un valor entre 0 y 15) le da control sobre en qu lnea y caracter es colocado el
cursor. La variable custChar, que contiene un valor entre 0 y 7, causar que el caracter
personalizado sea escrito donde el cursor ha sido puesto. El segundo valor que enva el
comando SEROUT es custChar, que contiene un valor entre 0 y 7. Este valor hace que la
LCD escriba un caracter personalizado donde el cursor fue puesto.
Disp_Cust_Char:
SEROUT LcdPin, T9600,
[line + cursor, custChar]
RETURN
Si tiene muchos caracteres personalizados diferentes, pero solo quiere desplegar uno en
cierto momento, solo necesita una de las definiciones de caracter personalizado de la
LCD. Sin embargo, si quiere que ms de un caracter personalizado diferente sea
desplegado por la LCD al mismo tiempo, use ms de una de las diferentes definiciones de
caracter personalizado en la memoria de caracteres de la LCD.
El DO...LOOP principal esta solo actualizando la Lnea 0, caracter 8, pero las otras 3
instancias del caracter personalizado 5 tambin estn cambiando! Porqu? Cuando la
definicin del caracter personalizado 5 cambia, todos los caracteres personalizados 5s
en la pantalla son automaticamente actualizados.
En algunos casos, esto es deseable. Por ejemplo, puede lograr algunos efectos visuales
interesantes al hacer 32 copias de un caracter personalizado y luego repetidamente
actualizar la definicin del caracter. Para situaciones donde desee desplegar ms de un
caracter personalizado al mismo tiempo, simplemente use ms de un caracter
personalizado. En otros casos, cuando quiera que la LCD despliegue ms de un caracter
personalizado diferente al mismo tiempo, use diferentes definiciones de caracteres
personalizados.
Resumen del desplegado de caracteres personalizados:
Para probar la grfica de barra horizontal del programa del siguiente ejemplo , introducir
valores en la Ventana de Transmisin de la Terminal de Depuracin, y la LCD
desplegar el resultado en formato de grfica de barra como se muestra en la Figura 7-1.
Cada rengln en la LCD tiene 80 columnas de lneas puntueadas verticales. Si introduce
un 1, la columna en la izquierda extrema del character ms a la izquierda se obscurecer.
Si introduce un 2 causar que 2 columns se obscurezcan. Con un 29 se obscurecern 29
columnas. Puesto que cada caracter es de 5 columnas de ancho, el valor 29 se muestra
como5 caracteres obscurecidos y the sexto caracter con 4 columnas obscurecidas.
Transmit
Windowpane
Receive
Windowpane
LCD
Bar Displays
El siguiente programa ejemplo usa las 2 reglas para desplegar caracteres personalizados
que discutimos en la seccin Su Turno de la actividad previa. Dependiendo del valor que
es desplegado, el programa guarda una de las 5 diferentes definiciones de caracter en el
caracter personalizado 2. Sin embargo, a diferencia de CustomEepromCharacters.bs2,
este programa no guarda definiciones de caracteres personalizados en la EEPROM del
BASIC Stamp. En vez de ello, las definiciones son derivadas durante la ejecucin del
programa, segn el valor de la variable que est siendo expresada por la grfica de barra.
La Figura 7-2 muestra cmo las definiciones van de vaco (Char0) a 4 columnas
verticales negras (Char4). Estas definiciones sern guardadas en la EEPROM y usadas
una por una para redefinir el caracter 2, puesto que solo una es necesaria en un momento
dado. Pero el programa puede necesitar desplegar copias mltiples de un caracter todo de
negro para nmeros mayores a 10; para esto se usa el caracter personalizado 3.
Figura 7-2
Libreria de Definiciones
para el caracter
personalizado 2
'
'
'
'
= BASIC Stamp 2
= PBASIC 2.5
PIN
14
CON
CON
CON
CON
CON
CON
CON
CON
84
'
'
'
'
'
'
'
VAR
VAR
VAR
VAR
VAR
VAR
VAR
Nib
Nib
Byte
Nib
Byte
Byte
Byte
LOOP
Disp_Cust_Char:
SEROUT LcdPin, T9600,
[line + cursor, custChar]
RETURN
line = Line0
LOOP
Def_Horiz_Bar_Char:
SEROUT LcdPin, T9600,
' Define caracter personalizado
[Define + custChar]
FOR index = 0 TO 7
' 7 bytes, define 7 lineas punteadas
SEROUT LcdPin, T9600, [dotLine] ' Manda a la LCD
NEXT
RETURN
Es sencillo desplegar una grfica de barra horizontal que indique hasta 80 cm con el
sensor Ping))) y la LCD Serial Parallax. El truco es tomar componentes de
PingMeasureCm.bs2 e incorporarlos en una copia de HorizBarGraph.bs2 de esta
actividad.
Siga las instrucciones para conectar el sensor Ping))) y la LCD Serial a su tarjeta
(Captulo 2, actividad #4, pgina 51).
PAUSE 100
LOOP
Tambin puede reemplazar el comando DEBUG con un comando SEROUT que despliegue
las mediciones en la lnea inferior. Recuerde que tendr que enviar a la LCD un cdigo
de control para colocar el cursor en la Lnea 1 caracter-0, en vez de usar HOME.
Intntelo!
Figura 7-3
Valores de grfica de
barra vertical con
Caracteres
Las definiciones de caracteres personalizados (Figura 7-3) siguen una secuencia que se
relaciona directamente a los valores que representan, entonces las definiciones pueden ser
calculadas segn se requiera en vez de ser guardadas en la EEPROM. Puesto que cada
definicin de caracter personalizado toma 8 bytes, eliminar 16 definiciones salvar 128
bytes de memoria de programacin.
La subrutina Def_Vert_Bar_Char define los caracteres de la Figura 7-3. La variable
value define cual de los 0 a 15 caracteres ser desplegado. Cada bit en la variable
rowMap determina si uno de los renglones en el caracter personalizado es blanco o negro.
Def_Vert_Bar_Char:
SEROUT LcdPin, T9600,
[Define + custChar]
El comando rowMap = %1111111100000000 >> (value & %1111) recorre los ocho
bits 1 de %1111111100000000 hacia la derecha tantos lugares como lo indique la
variable value. El trmino (value & %1111) es llamado una mascara de bits y hace
posible usar valores de 16 a 31 para darle los mismos resultados que de 0 a 15. Si value
es 3, el comando rowMap = %1111111100000000 >> (value & %1111) guarda
%0001111111100000 en la variable rowMap. Puesto que rowMap es una variable de solo
un byte, solo guarda los 8 bits ms bajos del trmino, o sea %11100000. Comparelo con
el caracter personalizado para 3 en la Figura 7-3. Si value es 4, el resultado del byte
bajo de la variable rowMap es %11110000. Ahora, observe el caracter 4 en la Figura 7-3.
Intntelo para cada valor (0 al 15) y ver que el patron de bits en el byte rowMap coincide
con el patrn de los renglones con pixeles negros en la Figura 7-3.
Definir un caracter personalizado involucra enviar 8 bytes. Los valores binarios en cada
byte sucesivo define cada uno de los 8 renglones en el caracter, de arriba a abajo. El ciclo
FOR...NEXT en la subrutina Def_Vert_Bar_Char tiene un bloque de cdigo IF...THEN que
usa el operator.LOWBIT para revisar cada bit en la variable rowMap y lo usa para definir
un rengln de 5 pixeles blancos o negros en el caracter personalizado. Digamos que
value es 3, entonces rowMap es %11100000. La primera vez en el ciclo FOR...NEXT,
index es 0 y entonces la lnea IF...THEN examina rowMap.LOWBIT(0), el bit ms a la
derecha. Puesto que es 0, la lnea IF...THEN manda un byte que contiene %00000 a la
LCD, que hace que todos los pixeles sean blancos. La sexta vez en el ciclo FOR...NEXT,
rowMap.LOWBIT(5) = 1, entonces la lnea IF...THEN manda un comando SEROUT con un
byte conteniendo %11111. Entonces, los renglones sexto, sptimo y octavo sern negros,
que resulta en el caracter mostrado en la Figura 7-3.
SEROUT 14, 84, [%11111] de hecho manda el byte %00011111, y los 5 bits ms
bajos son los que usa la LCD para definir sus renglones de 5 pixeles de ancho.
'
'
'
'
= BASIC Stamp 2
= PBASIC 2.5
PIN
14
CON
84
LcdCls
LcdOn
Line0
Line1
Define
CON
CON
CON
CON
CON
12
22
128
148
248
'
'
'
'
'
VAR
VAR
VAR
VAR
VAR
VAR
Byte
Nib
Byte
Byte
Byte
Byte
LOOP
' -----[ Subrutina - Def_Vert_Bar_Char ]------------------------------------' Define un caracter de grafica de barra vertical basado en la variable value
' (0 to 15) y la variable custChar, que selecciona los caracteres
' personalizados de la LCD Serial Parallax entre 0 y 7.
Def_Vert_Bar_Char:
' Inicia definicion de caracter personalizado
SEROUT LcdPin, T9600,
[Define + custChar]
' Selecciona un mapa de renglon para el caracter personalizado segun value.
rowMap = %1111111100000000 >> (value & %1111)
' Manda 8 bytes, cada uno definiendo un rengln punteado en el caracter
' personalizado. Cada renglon es definido examinando un bit en la variable
' rowMap y luego enviando %11111 si el bit es 1 o %00000 si el bit es 0.
FOR index = 0 TO 7
' Repite 7 veces, index cuenta
IF rowMap.LOWBIT(index) = 1 THEN
' Examina siguiente bit en rowMap
SEROUT LcdPin, T9600, [%11111]
' Si 1, envia %11111
ELSE
SEROUT LcdPin, T9600, [%00000]
' De lo contrario, envia %00000
ENDIF
NEXT
' Regresa de la subrutina.
RETURN
Disp_Cust_Char:
SEROUT LcdPin, T9600,
[line + cursor, custChar]
RETURN
line = Line1
ELSE
line = Line0
ENDIF
DEBUG ? value
GOSUB Def_Vert_Bar_Char
GOSUB Disp_Cust_Char
PAUSE 50
NEXT
DEBUG CR, CR
PAUSE 500
LOOP
Puede tambin anidar el ciclo FOR value = 1 TO 31...NEXT dentro de un ciclo FOR
cursor = 0 TO 15...NEXT y causar que la grfica de barra se mueva a travs de la
pantalla cada vez que se repite. Controlando asi la compensacin del cursor, la grfica de
barra puede desplegar 2 ejes con valores verticales de 1 a 31 y valores horizontales de 0 a
15.
Intntelo!
Si bien la anterior seccin Su Turno demostr como desplegar caracteres en 2 ejes, una
pantalla completamente en blanco no comunica realmente que el valor est a la mitad de
su rango. Una mejor forma de hacer llegar el mensaje es haciendo que aparezcan 2
caracteres personalizados uno junto al otro. La Figura 7-4 muestra cmo trabaja esto. Los
primeros 2 ejemplos de pantalla no estn a la mitad ni del rango horizontal ni del vertical
y entonces se despliegan caracteres simples. El tercer ejemplo est a la mitad del rango
horizontal (8), y entonces la medicin vertical se despliega con dos caracteres adyacentes.
El cuarto ejemplo muestra que la medicin est a la mitad de su rango vertical, y
entonces los renglones en el carcter de arriba y abajo del valor tienen pixeles negros.
Cuando the medicin est centrada en ambas la horizontal y la vertical el quinto ejemplo
muestra cmo se debera ver. Estas caractersticas son especialmente importantes para
graficamente indicar cuando uno o los dos ejes del acelermetro estn nivelados.
Figura 7-4
Puntos trazados en la
grfica de barra de dos
ejes
Si bien las caractersticas mostradas en la Figura 7-4 hacen que la pantalla est un poco
menos cifrada, el programa tiene que tomar muchas ms decisiones. En el siguiente
programa ejemplo, las subrutinas Bar_Graph_H_V y Horizontal_Placement se encarga
de todas las decisiones que apoyan estas caractersticas adicionales.
Programa Ejemplo: TwoAxisBarDisplay.bs2
Descarga gratis Este programa est disponible como descarga grtis .bs2 en la pgina del
producto de Sensores Inteligentes y sus Aplicaciones en www.parallax.com.
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.
= BASIC Stamp 2
= PBASIC 2.5
PIN
14
CON
CON
CON
CON
CON
CON
CON
CON
84
'
'
'
'
'
'
'
VAR
VAR
VAR
VAR
VAR
VAR
Byte
Nib
Byte
Byte
Byte
Byte
LOOP
' -----[ Subrutinas - Bar_Graph_H_V ]--------------------------------------' Define y despliega caracteres de grfica de barra de 2 ejes segun valor de
' cursor (0 to 16) y value (1 to 31). Llama a Def_Vert_Bar_Char y a
' Horizontal_Placement.
Bar_Graph_H_V:
SEROUT 14, 84, [LcdCls]
PAUSE 5
IF value = 16 THEN
value = 1
custChar = 2
GOSUB Def_Vert_Bar_Char
line = Line0
GOSUB Horizontal_Placement
value = 15
custChar = 3
GOSUB Def_Vert_Bar_Char
line = Line1
GOSUB Horizontal_Placement
value = 16
ENDIF
RETURN
' -----[ Subroutine - Def_Vert_Bar_Char ]------------------------------------' Define un caracter de grfica vertical de barra segun la variable value (0 a
' 15) y la variable custChar, la cual selecciona los caracteres personalizados
' entre 0 y 7 de la LCD Serial Parallax.
Def_Vert_Bar_Char:
' Inicia definicion de caracter personalizado
SEROUT LcdPin, T9600,
[Define + custChar]
' Selecciona un mapa de renglon para el caracter personalizado segn value.
rowMap = %1111111100000000 >> (value & %1111)
' Manda 8 bytes, cada uno definiendo un rengln punteado en el caracter
' personalizado. Cada renglon es definido examinando un bit en la variable
' rowMap y luego enviando %11111 si el bit es 1 o %00000 si el bit es 0.
FOR index = 0 TO 7
' Repite 7 veces, index cuenta
IF rowMap.LOWBIT(index) = 1 THEN
' Examina siguiente bit en rowMap
SEROUT 14, 84, [%11111]
' Si 1, envia %11111
ELSE
SEROUT 14, 84, [%00000]
' De lo contrario, envia %00000
ENDIF
NEXT
' Regresa de la subrutina.
RETURN
' -----[ Subrutinas - Horizontal_Placement ]--------------------------------' Coloca la grfica de barra vertical en una de las 16 columnas verticales de
' la LCD 2X16 de Parallax. La variable cursor puede poner la posicion
' horizontal en valores entre 0 y 16 (centro en 8). Llama a Disp_Custom_Char.
Horizontal_Placement:
SELECT cursor
CASE 0 TO 7
GOSUB Disp_Cust_Char
CASE 8
cursor = 7
GOSUB Disp_Cust_Char
cursor = 8
GOSUB Disp_Cust_Char
CASE 9 TO 16
cursor = cursor - 1
GOSUB Disp_Cust_Char
cursor = cursor + 1
ENDSELECT
RETURN
' -----[ Subrutinas - Disp_Cust_Char ]--------------------------------------'
'
'
'
Disp_Cust_Char:
SEROUT LcdPin, T9600,
[line + cursor, custChar]
RETURN
VAR
VAR
Word
Word
DO
LOOP
RESUMEN
La mediciones de distancia e inclinacin se prestan para desplegarlas en grficas de barra.
La mayora de las grficas de barra pueden hacerse usando solo uno o dos de los 8
espacios de memoria para caracteres personalizados de la LCD Serial Parallax. Las
definiciones de caracter personalizado para las grficas de barra pueden ser guardadas en
la EEPROM del BASIC Stamp, o definidas por cdigo que relacione el valor que est
siendo graficado al nmero de lineas o columnas de pixeles que necesitan ser
desplegados.
Guardar caracteres personalizados en la EEPROM involucra directivas DATA que
contengan 8 bytes cada una. Los 5 bits ms bajos de cada byte guardan el patron de bits
para cada una de las 8 lineas (de 5 pixeles de ancho) que componen un caracter.
Nombres Smbolo precediendo directivas DATA hacen posible copiar la direccin inicial
de los bytes de una directiva DATA determinada en una variable. Una subrutina puede usar
la variable que guarda la direccin de inicio para operaciones READ que secuencialmente
copia bytes a una variable, luego enva el contenido de esa variable a la LCD.
Desplegar grficas de barra es tpicamente mas eficiente con la memoria si los caracteres
pueden ser generados en base al valor. Cuando la grfica de barra es horizontal, un
comando LOOKUP es til para guardar valores binarios que correspondan con el nmero
de columnas que tendrn pixeles negros en un caracter personalizado determinado. Para
grficas verticales, los bits pueden ser cambiados en una variable. En cualquier caso, las
subrutinas pueden examinar los bits en una variable, luego oscurecer pixeles en un cierto
nmero of renglones o columnas en un caracter.
Preguntas
un caracter
1 THEN... do
un caracter
1 THEN... do
Ejercicios
1. Escriba una directiva DATA para caracter personalizado para un caracter con
todas las lneas horizontales.
2. Derive el valor 1625 en el comando value = (x MIN 1875 MAX 3125) 1875 ** 1625 + 1.
Proyectos
Soluciones
Stripes
DATA
%11111,
%00000,
%11111,
%00000,
%11111,
%00000,
%11111,
%00000
'
'
'
'
'
'
'
'
* * * * *
* * * * *
* * * * *
* * * * *
PAUSE 100
LOOP
P2. Solution Ejemplo Vea los comentarios en la seccin Titulo par aver cmo fue
construdo este programa a partir de programas ejemplo previos y clculos
explicados en el texto:
'
'
'
'
'
'
'
'
'
'
= BASIC Stamp 2
= PBASIC 2.5
PIN
14
CON
CON
CON
CON
CON
CON
CON
CON
CON
CON
84
'
'
'
'
'
'
'
VAR
VAR
VAR
VAR
VAR
VAR
VAR
VAR
VAR
VAR
VAR
VAR
Byte
Nib
Byte
Byte
Byte
Byte
Word
Word
Word
Word
Word
Bit
'
'
'
'
GOSUB Bar_Graph_H_V
LOOP
' -----[ Subrutinas - Bar_Graph_H_V ]--------------------------------------' Define y despliega caracteres de grfica de barra de 2 ejes segn el valor
' de cursor (0 to 16) y value (1 to 31). Llama Def_Vert_Bar_Char y
' Horizontal_Placement.
Bar_Graph_H_V:
SEROUT 14, 84, [LcdCls]
PAUSE 5
IF value = 16 THEN
value = 1
custChar = 2
GOSUB Def_Vert_Bar_Char
line = Line0
GOSUB Horizontal_Placement
value = 15
custChar = 3
GOSUB Def_Vert_Bar_Char
line = Line1
GOSUB Horizontal_Placement
value = 16
ENDIF
RETURN
' -----[ Subrutina - Def_Vert_Bar_Char ]------------------------------------' Define un caracter de grfica vertical de barra segun la variable value (0 a
' 15) y la variable custChar, la cual selecciona los caracteres personalizados
' entre 0 y 7 de la LCD Serial Parallax.
Def_Vert_Bar_Char:
' Inicia definicion de caracter personalizado
SEROUT LcdPin, T9600,
[Define + custChar]
' Selecciona un mapa de renglon para el caracter personalizado segn value.
rowMap = %1111111100000000 >> (value & %1111)
' Manda 8 bytes, cada uno definiendo un rengln punteado en el caracter
' personalizado. Cada renglon es definido examinando un bit en la variable
' rowMap y luego enviando %11111 si el bit es 1 o %00000 si el bit es 0.
FOR index = 0 TO 7
' Repite 7 veces, index cuenta
IF rowMap.LOWBIT(index) = 1 THEN
' Examina siguiente bit en rowMap
SEROUT 14, 84, [%11111]
' Si 1, envia %11111
ELSE
SEROUT 14, 84, [%00000]
' De lo contrario, envia %00000
ENDIF
NEXT
' Regresa de la subrutina.
RETURN
' -----[ Subrutinas - Horizontal_Placement ]--------------------------------' Coloca la grfica de barra vertical en una de las 16 columnas verticales de
' la LCD 2X16 de Parallax. La variable cursor puede poner la posicion
' horizontal en valores entre 0 y 16 (centro en 8). Llama a Disp_Custom_Char.
Horizontal_Placement:
SELECT cursor
CASE 0 TO 7
GOSUB Disp_Cust_Char
CASE 8
cursor = 7
GOSUB Disp_Cust_Char
cursor = 8
GOSUB Disp_Cust_Char
CASE 9 TO 16
cursor = cursor - 1
GOSUB Disp_Cust_Char
cursor = cursor + 1
ENDSELECT
RETURN
' -----[ Subrutinas - Disp_Cust_Char ]--------------------------------------'
'
'
'
Disp_Cust_Char:
SEROUT LcdPin, T9600,
[line + cursor, custChar]
RETURN
' -----[ Subrutina - Arcsine ]----------------------------------------------' Esta subrutina calcula el arcoseno segun la coordenada y en un circulo de
' radio 127. Establezca la variable side igual a su coordenada y antes de
' llamar a esta subrutina.
Arcsine:
GOSUB Arccosine
angle = 90 - angle
RETURN
' -----[ Subrutina - Arccosine ]--------------------------------------------' Esta subrutina calcula arcocoseno basado en la coordenada x en un circulo
' de radio 127. Establezca la variable side igual a su coordenada x antes
' de llamar a esta subrutina.
Arccosine:
sign = side.BIT15
side = ABS(side)
'
angle = 63 - (side / 2)
'
DO
'
IF (COS angle <= side) THEN EXIT
'
angle = angle + 1
'
LOOP
angle = angle */ 361
'
IF sign = Negative THEN angle = 180 - angle'
RETURN
Hex
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
Char
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
HT
LF
VT
FF
CR
SO
SI
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US
Nombre / Funcin
Null
Start Of Heading
Start Of Text
End Of Text
End Of Transmit
Enquiry
Acknowledge
Bell
Backspace
Horizontal Tab
Line Feed
Vertical Tab
Form Feed
Carriage Return
Shift Out
Shift In
Data Line Escape
Device Control 1
Device Control 2
Device Control 3
Device Control 4
Non Acknowledge
Synchronous Idle
End Transmit Block
Cancel
End Of Medium
Substitute
Escape
File Separator
Group Separator
Record Separator
Unit Separator
Dec
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Hex
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F
Char
space
!
"
#
$
%
&
'
(
)
*
+
,
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
Dec
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
Hex
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
50
51
52
53
54
55
56
57
58
59
5A
5B
5C
5D
5E
5F
Char
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
Dec
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Hex
60
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
70
71
72
73
74
75
76
77
78
79
7A
7B
7C
7D
7E
7F
Char
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
delete
Note que los cdigos de control (los 32 caracteres ASCII ms bajos) no tienen smbolos
de pantalla estandarizados. Los caracteres listados para ellos son solo nombres usados en
referencia a estos cdigos. Por ejemplo, para mover el cursor al principio de la siguiente
lnea de una impresora o terminal frecuentemente se requiere enviar los cdigos line feed
y carriage return. Este par es comnmente referido como "LF/CR."
General: info@parallax.com
Tcnico: support@parallax.com
Web Site: www.parallax.com
Educacional: www.stampsinclass.com
Version 2.0
Las pantallas LCDs Seriales Parallax son muy funcionales y de bajo costo y pueden ser
fcilmente controladas por un microcontrolador BASIC Stamp. Las LCD son de 2 o de
4 renglones por 16 caracteres y proveen ajuste bsico del texto para que su texto est
completo en pantalla. Tambin le dan control completo sobre todas sus caractersticas
avanzadas, permitindole mover el cursor a cualquier parte de la pantalla con una sola
instruccin y apagarla y encenderla en cualquier configuracin. Soportan los mismos
caracteres visibles que la Terminal de Depuracin del Editor de BASIC Stamp (ASCII
Dec 32-127). Adems, puede definir hasta 8 caracteres personalizados para desplegar en
cualquier lugar de la LCD.
Ideas de Aplicaciones
Qu puede hacer una una LCD Serial Parallax? Si bien hay muchas posibilidades, esta
es una pequea lista de ideas con una LCD Serial y el BASIC Stamp de Parallax:
Una muy profesional interface de texto con el usuario en cualquier aplicacin de
microcontrolador
Una forma fcil de implementar la depuracin de programas via serie sin una PC
Datos de salida en tiempo real en aplicaciones robticas autnomas (Boe-Bot,
Toddler, SumoBot)
Las LCDs Seriales Parallax son compatible con nuestros cables Extension para LCD de
14-pulgadas, parte #805-00012, en venta por separado en www.parallax.com. Este cable
de 3 pines hembra-hembra viene con un conector de 3 pines y fcilmente lo puede
conectar su LCD a su tableta de proyectos.
Cdigo Muestra
Conectar la LCD Serial al BASIC Stamp es una operation directa, requiere solo 3 pines
de E/S. Va la figura B-1 y B-2 para detalles de conexiones electricas. Vea las Figuras
B-3 y B-4 en las siguienes pginas para etalles de tamao y montaje mecnico.
Figura B-1
Conexiones de la
LCD Serial para la
Rev D y
anteriores.
Figura B-2
Conexiones de la
LCD Serial para la
Rev E y
posteriores.
La tabla abajo lista los requerimientos de voltaje y corriente de la LCD Serial, con la luz
de fondo encendida y apagada. Puesto que en cada caso la corriente que toma excede la
capacidad de todos los mdulos BASIC Stamp, debe energizar la LCD Serial de una
fuente externa de 5 V. Asegrese de que la fuente tiene un nivel de corriente adecuado
para energizar la LCD Serial y el BASIC Stamp.
Estado de la LCD Serial
Todos los modelos, luz de fondo apagada
Luz de fondo encendida 27977 / 27979
Voltaje
5 VDC
5 VDC
Corriente
20 mA
80 mA
Figura B-3 Especificaciones de Tamao y Montaje para los modelos 27976, 27977.
Precaucion: Las dimensiones pueden variar.
Figura B-4 Especificaciones de Tamao y Montaje para el modelo 27979. Precaucion: Las
dimensiones pueden variar.
Notas Tcnicas
Caracterstica
Tipo de pantalla LCD
Direccin de observacin
Luz de fondo
Temperatura de Operacin
Temperatura de almacenaje
Tolerancia dimensional
Descripcin
STN, YG, positive, transflective
6H
YG LED
-4F~158F (-20C~70C)
-22F~176F (-30C~80C)
.02 (.5mm)
MODE
Test
2,400
9,600
19.200
SW1
OFF
ON
OFF
ON
SW2
OFF
OFF
ON
ON
Como puede ver, hay una cuarta opcin llamada Test. Ya que conect la energa, use este
modo para confirmar que estn correctamente conectados la energa y tierra a la LCD
antes de que enve algn dato. Mueva los interruptores a Test y encienda la energa. La
pantalla LCD se debe encender con la luz de fondo encendida (modelos 27977, 27979) y
desplegando el siguiente texto:
Parallax, Inc.
www.parallax.com
Ahora que la LCD est configurada, es hora de empesar a enviar texto a la pantalla. Para
desplegar un caracter de texto en la LCD Serial, simplemente enve el cdigo ASCII de
ese caracter a la LCD Serial por el puerto serial a la velcidad baud correcta.
Cuando un caracter es recibido, la LCD Serial despliega ese caracter en la posicin actual
del cursor y luego mueve el cursor una posicin a la derecha. Cuando enciende la LCD,
el cursor esta en la posicin extrema izquierda de la lnea superior, como podra esperar.
La pequea barra en la parte baja del caracter muestra dnde est posicionado el cursor.
Una vez que ha enviado una lnea completa de caracteres a la LCD, notar que el cursor
automticamente ajusta a la posicin extrema izquierda de la segunda lnea, como el texto
en un libro. El texto se ajustar as al final de cada lnea, con el final de la lnea inferior
ajustndose a la lnea superior de la LCD. El texto nunca saldr de la pantalla; siempre
ver todos los caracteres que enve.
Intente el siguiente cdigo en su BASIC Stamp 2 para enviar una cadena de texto a la
pantalla LCD. Primero, configure la velocidad baud en su LCD Serial a 19,200. Luego,
cargue el cdigo siguiente en su BASIC Stamp 2 y crralo. Ver la cadena de texto
aparecer y ajustarse a la segunda lnea de la pantalla.
En todo su cdigo para la LCD Serial, debe hacer una pausa de 100 ms al inicio para
darle tiempo para initializar. Tambin debe configurar el pin de Puerto serie en el BASIC
Stamp a ALTO antes del retraso de 100 ms para arranque, dado que este es el estado
normal de un puerto serie cuando no est enviando ningn dato.
' {$STAMP BS2}
TxPin
Baud19200
CON
CON
0
32
HIGH TxPin
' Establece pin alto para ser Puerto serie
PAUSE 100
' Pause para inicializar la LCD Serial
SEROUT TxPin, Baud19200, ["Hello, this text will wrap."]
Moviendo el Cursor
Cuando enva un caracter a la LCD Serial, siempre se despliega en la posicin acual del
cursor. Hay algunos modos diferentes para mover el cursor en la pantalla LCD Serial.
Despus de cada caracter que enva, el cursor automticamente se mueve una posicin.
Junto con esto, hay un juego estndar de comandos para movimiento de que incluye
Backspace, Carriage Return, y Line Feed.
El comando Backspace/Left (Dec 8) mueve el cursor una posicin a la izquierda y el
comando Right (Dec 9) mueve el cursor una posicin a la derecha. Esto puede ser til
para mover el cursor para sobreescribir texto existente. Estos comandos ajustan a la
siguiente line de la pantalla si es necesario. El comando Line Feed (Dec 10) mueve el
cursor a la siguiente lnea de la pantalla sin cambiar la posicin horizontal del cursor. El
comando Carriage Return (Dec 13) tambin mueve el cursor a la siguiente lnea, pero
tambin mueve el cursor a la posicin extrema izquierda en esa lnea. El comando Form
Feed (Dec 12) limpia toda la pantalla y mueve el cursor a la posicin extrema izquierda
en la Lnea 0, como cuando enciende la pantalla. Necesitar hacer una pausa de 5mS en
su cdigo despus de enviar el comando Form Feed, para darle a la LCD Serial tiempo
para limpiar la pantalla. A excepcin de Form Feed, ninguno de estos de comandos
movimiento afecta los caracteres en la pantalla.
Tambin hay comandos de movimiento directo que puede usar para mover el cursor a
cualquier posicin en la pantalla con un solo comando. Los comandos en el rango Dec
128 a 143 y Dec 148 a 163 mueven el cursor a las 16 diferentes posiciones en cada una
de las 2 lneas de los modelos 27976 y 27977. Los comandos en el rango Dec 128 a 207
mueven el cursor a las 20 diferentes posiciones en cada una de las 4 lneas del modelo
27979 LCD.
Controlando la Pantalla
Tambin tiene control sobre los diversos modos de pantalla de la LCD Serial. El
comando display-off (Dec 21) apaga la pantalla y todos los caracteres desaparecen. Los
caracteres no son borrados de la pantalla, e incluso puede escribir nuevos caracteres a la
pantalla cuando est apagada. Un truco para hacer que mucho texto aparezca de golpe,
an a una baja velocidad baud rate, es apagar la pantalla y enviar todo su texto. Entonces,
cuando la encienda de nuevo, todo el texto aparece instantaneamente.
Los comandos display-on (DEC 22 to 25) encienden nuevamente la pantalla y tambin
controlan si desea o no desplegar el cursor y/o hacer que el caracter del cursor parpadee.
El cursor es la pequea barra que se muestra abajo del caracter en la at posicin actual del
cursor. La opcin de parpadeo hace que ese caracter encienda y apague repetidamente.
Puede encender o apagar el cursor o su parpadeo en cualquier combinacin como se lista
en la tabla de juego de comandos. Puede cambiar el modo de cursor y parpadeo an si la
pantalla ya est encendida; no necesita apagarla y volverla a encender.
Con los modelos 27977 y 27979, puede tambin controlar la luz de fondo de la pantalla.
Esta ilumina la pantalla para facilitar su lectura en la oscuridad. Hay comandos para
encenderla (Dec 17) y apagarla (Dec 18).
Caracteres personalizados
CON
CON
0
32
HIGH TxPin
PAUSE 100
TxPin,
TxPin,
TxPin,
TxPin,
TxPin,
TxPin,
TxPin,
TxPin,
TxPin,
Baud19200,
Baud19200,
Baud19200,
Baud19200,
Baud19200,
Baud19200,
Baud19200,
Baud19200,
Baud19200,
[0]
[4]
[14]
[31]
[14]
[4]
[0]
[0]
[2]
'
'
'
'
'
'
'
'
'
'
Conjunto de Comandos
Las tablas a continuacin listan todos los comandos vlidos de la LCD Serial. Los
comandos marcados como N/A son invalidos y son ignorados. Las lineas de la pantalla
LCD estn numeradas desde 0, siendo la Linea 0 la de hasta arriba. Las posiciones de
caracter en cada lnea estn numeradas empezando desde 0, siendo la posicin 0 la de la
extrema izquierda en la lnea.
Dec
Hex
Accin
00
01
02
03
04
05
06
07
08
09
10
0A
11
0B
12
0C
13
0D
14 - 16
0E - 10
17
11
18
12
19 - 20
13 - 14
N/A
21
15
Apaga la pantalla
22
16
23
17
24
18
25
19
Turn the display on, con cursor encendido y con parpaedo de caracter
26 - 31
1A - 1F
N/A
32 - 127
20 - 7F
128
80
129
81
130
82
131
83
132
84
133
85
134
86
Dec
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
Hex
87
88
89
8A
8B
8C
8D
8E
8F
90
91
92
93
94
95
96
97
98
99
9A
9B
9C
9D
9E
9F
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
AA
AB
AC
AD
AE
AF
B0
B1
B2
B3
B4
Action
Mueve el cursor a la lnea 0, posicin 7
Mueve el cursor a la lnea 0, posicin 8
Mueve el cursor a la lnea 0, posicin 9
Mueve el cursor a la lnea 0, posicin 10
Mueve el cursor a la lnea 0, posicin 11
Mueve el cursor a la lnea 0, posicin 12
Mueve el cursor a la lnea 0, posicin 13
Mueve el cursor a la lnea 0, posicin 14
Mueve el cursor a la lnea 0, posicin 15
Mueve el cursor a la lnea 0, posicin 16 (solo el modelo 27979)
Mueve el cursor a la lnea 0, posicin 17 (solo el modelo 27979)
Mueve el cursor a la lnea 0, posicin 18 (solo el modelo 27979)
Mueve el cursor a la lnea 0, posicin 19 (solo el modelo 27979)
Mueve el cursor a la lnea 1, posicin 0
Mueve el cursor a la lnea 1, posicin 1
Mueve el cursor a la lnea 1, posicin 2
Mueve el cursor a la lnea 1, posicin 3
Mueve el cursor a la lnea 1, posicin 4
Mueve el cursor a la lnea 1, posicin 5
Mueve el cursor a la lnea 1, posicin 6
Mueve el cursor a la lnea 1, posicin 7
Mueve el cursor a la lnea 1, posicin 8
Mueve el cursor a la lnea 1, posicin 9
Mueve el cursor a la lnea 1, posicin 10
Mueve el cursor a la lnea 1, posicin 11
Mueve el cursor a la lnea 1, posicin 12
Mueve el cursor a la lnea 1, posicin 13
Mueve el cursor a la lnea 1, posicin 14
Mueve el cursor a la lnea 1, posicin 15
Mueve el cursor a la lnea 1, posicin 16 (solo el modelo 27979)
Mueve el cursor a la lnea 1, posicin 17 (solo el modelo 27979)
Mueve el cursor a la lnea 1, posicin 18 (solo el modelo 27979)
Mueve el cursor a la lnea 1, posicin 19 (solo el modelo 27979)
Mueve el cursor a la lnea 2, posicin 0 (solo el modelo 27979)
Mueve el cursor a la lnea 2, posicin 1 (solo el modelo 27979)
Mueve el cursor a la lnea 2, posicin 2 (solo el modelo 27979)
Mueve el cursor a la lnea 2, posicin 3 (solo el modelo 27979)
Mueve el cursor a la lnea 2, posicin 4 (solo el modelo 27979)
Mueve el cursor a la lnea 2, posicin 5 (solo el modelo 27979)
Mueve el cursor a la lnea 2, posicin 6 (solo el modelo 27979)
Mueve el cursor a la lnea 2, posicin 7 (solo el modelo 27979)
Mueve el cursor a la lnea 2, posicin 8 (solo el modelo 27979)
Mueve el cursor a la lnea 2, posicin 9 (solo el modelo 27979)
Mueve el cursor a la lnea 2, posicin 10 (solo el modelo 27979)
Mueve el cursor a la lnea 2, posicin 11 (solo el modelo 27979)
Mueve el cursor a la lnea 2, posicin 12 (solo el modelo 27979)
Dec
Hex
Action
181
B5
182
B6
183
B7
184
B8
185
B9
186
BA
187
BB
188
BC
189
BD
190
BE
191
BF
192
C0
193
C1
194
C2
195
C3
196
C4
197
C5
198
C6
199
C7
200
C8
201
C9
202
CA
203
CB
204
CC
205
CD
206
CE
207
CF
208 - 247
D0 F7
N/A
248
F8
249
F9
250
FA
251
FB
252
FC
253
FD
254
FE
255
FF
La siguiente tabla muestra todos los caracteres ASCII como se despliegan en la LCD
Serial. Todos los caracteres ASCII (Dec 32 to 127) son caracteres ASCII estandar,
excepto por la contradiagonal \ (Dec 92) y el tilde ~ (Dec 126). Para su facilidad, la
LCD Serial viene pre-programada con estos caracteres en los primeros 2 caracteres
personalizados. Entonces, para desplegar una contradiagonal, use el comando Dec 0 y
para desplegar un tilde, use el comando Dec 1. Por supuesto, siempre puede sobreescribir
estos caracteres con sus propios caracteres personalizados.
No todos los lenguajes de programacin para controladores soportan este uso nativo de
caracteres escribibles. En algunos casos, sobre todo en lenguaje ensamblador, se usa el
cdigo ASCII para el signo de exclamacin. El cdigo ASCII para este signo es 33, y an
en PBASIC, el comando SEROUT 14, 84, [33] realiza la misma tarea. En lenguaje
ensamblador, los valores hexadecimales son algunas veces el nmero base preferido
porque hace ciertas tareas ms fciles. Debido a esto, mucha documentacin para LCD
lista sus comandos LCD como valores hexadecimales.
The equivalente hexadecimal de decimal-33 es hexadecimal-21. Esto es (2 16) + 1.
Puede usar el operator $ para especificar que un valor es hexadecimal, lo que hara que el
comando para desplegar un signo de exclamacin fuera: SEROUT 14, 84, [$21].
He aqu un ejemplo de un comando SEROUT que define una barra en una grfica de barra.
Llena la parte de abajo del caracter con pixeles negros y deja la parte mitad superior en
blanco:
SEROUT 14, 84, [250,
%00000,
%00000,
%00000,
%00000,
%11111,
%11111,
%11111,
%11111]
'
'
'
'
'
'
'
'
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
10
11
12
13
14
15
00
00
00
01
00
10
00
11
01
00
01
01
01
10
01
11
10
00
10
01
10
10
10
11
11
00
11
01
11
10
11
11
8
1000
F
1111
E
6
1110 0110
$8FE6 = %1000111111100110
Ejemplo: Convierta %1100011000001001 a hexadecimal.
Solucin: Arregle el nmero binario en grupos de 4 dgitos, luego use la Table 7-1:
Binario
Hexadecimal
1100
C
0110
6
0000 1001
0
9
%1100011000001001 = $C609
Programa Ejemplo: ConvertBinaryToHexadecimal.bs2
Por supuesto, puede tambin hacer que el BASIC Stamp lo haga por usted. Simplemente
use el operador % para definir el nmero binario y entonces usar el formateador HEX en
un comando SEROUT para desplegar el valor.
Sensores Inteligentes y sus Aplicaciones, Partes y Texto #28029 (Sin libro, #130-28029)
Partes y cantidades sujetas a cambio sin previo aviso
Parallax Parte #
Descripcin
Cantidad
122-28029
150-01020
27976
28015
28017
29123
451-00303
700-00003
700-00028
710-00006
713-00005
720-00011
800-00016
805-00002
900-00001
Piezo parlante
Puede encontrar algunos componentes electrnicos extra en su kit que no se usan en el libro
Sensores Inteligentes y sus Aplicaciones. Si quiere usar estas para construir sus propios
circuitos, aprenda acerca los capacitores electrolticos y sus requerimientos de seguridad
antes de proceder PRECAUCIN: El uso incorrecto de capacitores electrolticos puede
causar que exploten. Siga las siguienes reglas de seguridad para evitar cualquier dao
Los capacitores electrolticos tienen una terminal positiva (+) y una
negativa (-). El voltaje en la terminal (+) del capacitor debe ser siempre mayor
que el voltaje en su terminal (-). Use la imagen (derecha) para identificar las
terminales (+) y (-). Siempre asegrese de conectar estas terminales
exactamente como se muestra en diagramas confiables. Conectar uno de
estos capacitores incorrectamente puede daarlo. En algunos circuitos
conectar este tipo de capacitor incorrectamente y luego energizar puede
causar su ruptura e incluso explotar. Vss es el voltaje ms bajo (0 V) en las
tarjetas Board of Education y BASIC Stamp HomeWork. Al conectar la
terminal negativa del capacitor a Vss asegurar que la polaridad a travs de
las terminales del capacitor siempre ser correcta.
Smbolo del
Capacitor
10 F
SEGURIDAD
Siempre apague la energa antes de construir o modificar los circuitos.
Siempre observe la polaridad cuando conecte capacitores electrolticos.
Nunca invierta la polaridad de la fuente en cualquier capacitor polar.
Use lentes de seguridad cuando use estos capacitores.
Mantenga sus manos y cara lejos de estos capacitores al energizarlos.
ndice
-A-
acceleration, 65
on a circular path, 233
RC car study, 230
skateboard trick study, 240
accelerometer
and LCD tilt bubble graph, 188
measuring height, 211
MX2125 design (picture), 67
schematic and wiring diagram, 68
three-axis, 66
animation
-C-
flashing text, 11
arccosine, 99
arcsine, 99
arctangent, 92
ATN, 85, 127
-B-
bar graph
horizontal, 271
two-axis, 291
vertical, 281
-L-
hourglass animation, 24
pixel worm animation, 264
LCD
swapping, 261
-D-
EEPROM, 262
-F-
inclination, 124
incline, 65
input range clamping, 78
-M-
MIN, 196
-N-
-O-
ollie, 241
oscillations, 242
-P-
LcdTimer.bs2, 17
PingLcdCmAndIn.bs2, 57
PingMeasureCm.bs2, 48
PingMeasureCmAndIn.bs2, 50
PingTest.bs2, 43
PlotXYGraph.bs2, 172
PredfinedCustomCharacters.bs2, 20
SignedNumbers.bs2, 81
SimpleTilt.bs2, 70
SimpleTiltLcd.bs2, 74
SineCosine.bs2, 101
TestArcsine.bs2, 103
TestAtn.bs2, 89
TestCalibratedCompass.bs2, 139
TestCompass.bs2, 122
TestCompassAveraged.bs2, 146
TestScaleOffset.bs2, 78
TestScrollingSubroutine.bs2, 28
TestVerticalBars.bs2, 283
TestWheelCounter.bs2, 249
TiltObstacleGame.bs2, 198
TwoAxisBarDisplay.bs2, 287
VertWheelRotation.bs2, 95
PULSIN, 69
-R-
-S-
scaling constant, 77
scaling input values, 76
SEROUT, 8, 317
servo port jumper, 150
signed numbers and PBASIC, 174
signed numbers in PBASIC, 80
division, 145
SIN, 100
sine, 99
software requirements, 321
-T-