Página 196 · ¿Qué es un Microcontrolador?
Capítulo 7: Midiendo Luz DISPOSITIVOS QUE CONTIENEN SENSORES DE LUZ En los capitulos anteriores introdujimos botones push como sensores de contacto/presión y potenciometros como sensores de rotación/posición. Estos dos sensores son comunes en los productos electrónicos, solamente piense cuantos aparatos con botones y perillas usa diariamente. Otro sensor que se encuentra comunmente en muchos productos es el sensor de luz. Estos son unos ejemplos de dispositivos que necesitan sensores de luz para funcionar correctamente. • • • • • •
Luces de carros que automáticamente se enciende cuando obscurece. Luces de calles que automáticamente se enciende cuando obscurece Luces de seguridad de puertas externas que se encienden cuando alguien camina (pero solamente en la noche) Pantallas de Laptops que se hacen más brillantes en áreas bien iluminadas y menos brillantes en áreas con poca iluminación. Cámaras que automáticamente dependiendo de la luz existente. El sensor interno de TVs, Reproductores DVD y otros sistemas de entretenimiento detecta la luz infraroja de control remoto.
Los tres primeros ejemplos de la lista de iluminacion automática dependen de sensores ambientales de luz que distinguen el día de la noche. La electrónica dentro de estos dispositivos solamente necesita conocer si hay luz u obscuridad, entonces pueden considerarse sensores con salida binaria como los botones push. Las pantallas de las Laptops y los sistemas automáticos de exposición de las cámaras se ajustan las condiciones luminosas del área obteniendo información de sus sensores de luz de la cantidad de brillo u obscuridad existentes. Estos tienen que tratar sus sensores de luz como salidas analógicas que suministran un número que indica la cantidad de brillo u obscuridad, parecido a los ejemplos del potenciometro del Capítulo 5 donde los numeros indicaban la posición de la perilla. Los sensores de luz dentro de TVs y otros sistemas de entretenimiento detectan el infrarojo (IR) que es una luz invisible al ojo humano, pero que pueden detectar muchos dispositivos electrónicos. Por ejemplo, si usted ve el frente de su control remoto que apunta al TV o otros dispositivos de entretenimiento, usted encontrará un LED claro infrarojo. Cuando usted presiona un boton del control, este manda señales codificadas al sistema de entretenimiento y el LED infrarojo parpadea. Como usted no puede ver la luz infraroja parece que el LED no hace nada cuando presiona el botón. Sin embargo, si hace
Midiendo Luz · Página 197
esto a través de la lente de una cámara digital, el LED parecera blanco. La luz blanca contiene todos los colores del espectro. Los sensores, rojo, verde y azul dentro del chip de la cámara reportan que detectan luz en respuesta a la luz blanca. Esto sucede porque los sensores rojo/verde/azul todos detectan la luz infraroja del LED IR del control. Entoces la cámara tambien interpreta la luz de un LED infrarojo como blanca. Más respecto a LEDs infrarojos y Detectores La Robótica con el Boe-Bot tiene ejemplos con el BASIC Stamp controlando el robot BoeBot e internamente tiene LEDs IR como los del control remoto del TV, y el Receptor IR dentro del TV para detectar objetos enfrente de él. El Boe-Bot usa LEDs IR como luz, y el receptor IR dentro de los TVs para detectar las reflexiones luz de objetos lejanos enfrente de él. El libro IR Remote for theBoe-Bot explica con los controles de TV remotos codifican el mensaje que al TV, también tiene ejemplos de cómo programar el microcontrolador del BASIC Stamp para decodificar mensajes del control remoto para que pueda mandar mensajes al Boe-Bot e incluso controlarlo alrededor, todo con un control remoto.
El tipo de luz, que un dispositivo sensa depende como fue diseñado. Por ejemplo, los sensores de luz de dispositivos que se ajustan a las condiciones de luz ambiental necesitan sensar luz visible. Los sensores de pixeles rojo, verde y azul internos de las cámaras digitales están sensando los niveles de los colores específicos de una imagen digital. El sensor IR dentro del TV está buscando luz infraroja que parpadee cerca de 40 kHz.Estos son solamente unos ejemplos de lo que requiere una aplicación para diferentes clases de sensores de luz. La Figura 7-1 muestra unos ejemplos de sensores de luz disponible para varios requerimientos de sensores de luz. De izquierda a derecha, se muestra un fototransistor, un fotoresistor de sulfuro de cadmio, un sensor lineal de luz, un fotodiodo fortalecido para el color azul, un convertidor de luz a frecuencia, un fototransistor infrarojo y un receptor remotor infrarojo de TV.
Página 198 · ¿Qué es un Microcontrolador?
Figura 7-1: Ejemplo de Sensores de Luz
Datos de la Celda de Sulfuro de Cadmio o Fotoresistor La celda de sulfuro de cadmio o fotoresistor fue uno de los sensores de luz ambiente más comunes de alumbrado automático. Con la llegada de las restricciones de la Union Europea de la ley respecto al uso de ciertas sustancias peligrosas (RoH) los fotoresistores de sulfuro de cadmio ya no se integraron a los aparatos importados hacia o fabricados en Europa. Esto ha incrementado el uso de un número de productos que reemplazan el fotoresistor, incluyendo al fototransistor y el sensor lineal de luz. Como resultado de estos cambios, esta edición ahora incluye un fototransistor para detectar niveles de luz lo que antes hacia el fotoresistor de sulfuro de cadmio.
Los documentos de cada sensor de luz describen el tipo de luz que detecta en términos de la longitud de onda. La longitud de onda de la distancia entre las formas o ciclos repetidos. Por ejemplo, imagine una onda viajando en el oceano, subiendo y bajando, La longitud de tal onda deberá ser la distancia entre cada pico (pico de espuma) del ciclo de la onda. La longitud de onda de la luz se puede medir en forma similar, en lugar de que midamos la distancia entre dos picos de las oscilaciones electromagnéticas de luz. Cada color de luz tiene su propia longitud de onda y se considera que es luz visible, esto significa que el ojo humano puede detectarla. La Figura 7-2 muestra longitudes de onda de luz visible y también algunos tipos de luz que el ojo humano no puede detectar, incluyendo la ultravioleta y el infrarojo. Estas longitudes de onda se miden en nanometros, que se abrevia nm. Un nanometro es la billonésima parte de un metro.
Midiendo Luz · Página 199
Figura 7-2 Longitudes de onda y sus Correspondientes Colores
Wavelength (nm) 10…380 Color
Ultraviolet
450 Violet
495
570 590 620 Green
Blue
Orange Yellow
750…100,000 Infrared Red
Nota: Si usted esta viendo esta imagen en un libro impreso en escala de gris, usted puede bajarlo a todo color del PDF en www.parallax.com/go/WAM.
CONOCIENDO EL FOTOTRANSISTOR Un transistor es como una válvula que permite que pase cierta cantidad de corriente a través de dos de sus terminales. La tercera terminal del transistor controla la cantidad de corriente que pasa a través de las otras dos terminales. Dependiendo del tipo de transistor, el flujo de corriente puede controlarse por voltaje, corriente o en caso del fototransistor por luz. La Figura 7-3 muestra el esquemático y el dibujo del fototransistor de su kit ¿Qué es un Microcontrolador?. A mayor cantidad de luz que llega a la terminal de la base del fototransistor conduce mayor corriente la terminal del colector. la cual sale de la terminal del emisor. En forma inversa, si llega menor cantida de luz a la terminal de la base hay menor conducción de corriente. B
Figura 7-3 Símbolo esquemático y dibujo del Fototransistor
C
B E E C
La sensibilidad pico de este fototransistor está en 850 nm, y de acuerdo con la Figura 7-2 en la escala infraroja. También responde a la luz visible, aunque es menos sensitivo especialmente a longituedes de onda debajo de 450 nm, que están a la izquierda del azul en la Figura 7-2. La luz de lámparas de halogeno e incandescentes, y especialmente la luz del sol, son fuentes muy fuertes de infrarojo comparado con las lámparas fluorescetes. El
Página 200 · ¿Qué es un Microcontrolador?
transistor infrarojo responde bien a todas estas fuentes de luz, pero es más sensible a la luz del sol, un poco menos a lámparas de halogeno e incandescentes y mucho menor a lámparas fluorescentes. El diseño de circuito que usan el transistor puede ajustarse para que trabaje mejor en ciertos tipos de condiciones luminosas., y los circuitos de fototransistor de este capítulo se diseñan para el interior. Hay una aplicación sensor de luz externa, pero se usará un dispositivo diferente que al principio parecería que no es candidato a ser sensor de luz: el diodo emisor de luz.
ACTIVIDAD #1: CONSTRUYENDO Y VERIFICANDO EL MEDIDOR DE LUZ El capítulo 5 introdujo la medición de del tiempo de descarga de RC con las instrucción RCTIME para medir el tiempo que le toma a un capacitor perder su carga a través de un resistor variable dentro del potenciometro. Con mayor resistencia (a el flujo de la corrinete eléctrica), el potenciometro disminuye la razón para perder su carga, y resistencias más pequeñas acelerán esa razón. La medición del tiempo de descarga dio una indicación de la resistencia del potenciometro a cual a su vez hizo posible que el BASIC Stamp conozca la posición de la perilla del potenciometro. Cuando se coloca en un circuito de descarga RC, un fototransistor, el cual conduce más o menos corriente cuando incide más o menos luz en él, se comporta como el potenciometro. Cuando más luz incide en el fototransistor, conduce más corriente y el capacitor pierde su carga más rápidamente. Con menos luz, el fototransistor conduce menos corriente, y el capacitor pierde su carga menos rápido. Entonces la misma medición que dio RCTIME nos da una indicación de la posición de la perilla de un potenciometro del capítulo 5 y que ahora se usará para medir niveles de luz con un fototransistor. En esta actividad, usted construirá y verificará un circuito de descarga RC que mide el tiempo que le toma la carga del capacitor para descargarse a través de un fototransistor. La medición de descarga de RC le dará a usted una idea de los niveles de luz sensados por la superficie colectora de luz de un fototransistor. Igual que como las pruebas con el potenciometro, los valores de tiempo medidos por la instrucción RCTIME se mostraran en la Terminal Debug. Partes del Detector de Luz
Un Fototransistor Un Resistor de 220 Ω (rojo-rojo-café)
Midiendo Luz · Página 201
Dos Capacitores de 0.01 μF (identificados con 103) Un Capacitor de 0.1 μF (identificado con 104) Un alambra para puente Construyendo el Circuito de Tiempo RC con un Fototransistor
La Figura 7-4 el diagrama esquemático y de alambrado del circuito de tiempo RC que usted usará en este capítulo. Este circuito es diferente del circuito del potenciometro del Capítulo 5 Actividad #3, en dos formas. Primero, el pin E/S usado para medir el tiempo de descarga es diferente (P2). Segundo, el potenciometro se ha reemplazado con el fototransistor. Sugerencia Deje su circuito del LED 7 segementos y agregue el circuito del fototransistor en su tablilla. Usaremos el LED 7 segmentos con el fotoresistor en la Actividad #4.
9 Construya el circuito mostrado en la Figura 7-4. 9 Asegúrese que las que las terminales colector y emisor (C y E) están conectadas como lo muestra el diagrama de alambrado. Figura 7-4 Circuito Esquematico y diagrama de alambrado del Fototransistor y el RC
Empiece con el capacitor
Página 202 · ¿Qué es un Microcontrolador?
Vdd
Vin
0.01 μF marcado con 103. .
Vss
X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Longer pin (C) terminal
Flat spot (E) terminal
Programando el Circuito de Prueba del Fototransistor
El primer Programa Ejemplo (TestPhototransistor.bs2) es en verdad una ligera versión modificada del programa ReadPotWithRcTimebs.2 del Capítulo 5, Actividad #3. El circuito del potenciometro del capítulo 5 se conectó al pin E/S P7. El circuito en esta actividad se conecta a P2. Debido a esta diferencia, el Programa Ejemplo ha actualizado dos instrucciones para hacerlo que trabaje. La instrucción HIGH 7 del programa ejemplo anterior es ahora HIGH 2 ya que el circuito del fototransistor se conectó en P2 y no en P7. Por la misma razón, la instrucción RCTIME 7, 1, time cambia a RCTIME 2, 1, time. Programa Ejemplo: TestPhototransistor.bs2
La luz que colecta la superficie del fototransistor en la parte superior de un domo de plástico transparente, es la terminal de la base (B) que muestra la Figura 7-3. Debe ser visible a través del domo una pequeña área negrea. El área negra es en realidad el fototransistor, una pequeña pieza de silicio. El resto del dispositivo es el empaque, incluyendo el casco de plástico, el soporte de la terminales y las terminales. En lugar de girar la perilla del potenciometro como lo hizo en el Capítulo 5, este circuito se verifica exponiendo la superficie colectora de luz del fototransistor a diferentes niveles de luz. Cuando se está ejecutando el Programa Ejemplo, la Terminal Debug deberá mostrar valores pequeños para condiciones de luz brillantes y valores grandes para condiciones de poca luz.
Midiendo Luz · Página 203
Evite luz solar directa. El circuito y programa que usted está diseñando para detectar variaciones de luz en interiores y no trabaja para luz solar incidiendo directamente. Deje la luz interior pero cierre las cortinas si los rayos del sol atraviezan una ventana cercana.
9 Meta y ejecute el programa TestPhototransistor.bs2 9 Anote los valores de la variable “time” de la Terminal Debug bajo condiciones normales de iluminación. 9 Haga sombra con su mano sobre el circuito y verifque nuevamente la variable “time”. Deberá mostrar un número mayor. 9 Haga un sombrero con su mano y póngala sobre el circuito para hacer más sombra, la Terminal Debug deberá mostrar un valor significativamente mayor para “time”. ' ¿Que es un Microcontrolador? - TestPhototransistor.bs2 ' Lee el fototransistor del circuito de tiempo RC usando la instrucción RCTIME. ' {$STAMP BS2} ' {$PBASIC 2.5} time PAUSE 1000
VAR
Word
DO HIGH 2 PAUSE 100 RCTIME 2, 1, time DEBUG HOME, "time = LOOP
", DEC5 time
Su Turno – Usando un diferente capacitor para diferentes condiciones de luz
Las mediciones de tiempo con un capacitor de 0.1μF serán diez veces mayores que un capacitor de 0.01μF, esto significa que el valor de la variable “time” que muestre la Terminal Debug deberán ser 10 veces más grandes. Al reeplazar el capacitor de 0.01μF por uno de 0.1μF será más útil en condiciones de luz más brillantes, donde usted típicamente veía mediciones pequeñas usando el capacitor de 0.01μF. Por ejemplo, digamos que las condiciones de luz son muy brillantes y las mediciones están en el rango de 1 a 13 con el capacitor de 0.01 μF. Al reemplazarlo con uno de 0.1μF sus mediciones estarán en el rango de 10 a 130, y su aplicación será mas sensible a variaciones de luz dentro de la habitación.
Página 204 · ¿Qué es un Microcontrolador?
9 Modifique el circuito reemplazando el capacitor de 0.01μF por uno de 0.1 μF (marcado como 104) 9 Vuelva a ejecutar el programa TestPhototransistor.bs2 y verifique que las mediciones de tiempo de RC son aproximadamente diez veces su valor anterior. Los intervalosde tiempo más grandes que la instrucción RCTIME puede medir es 65535 unidades de 2 us cada una que corresponde a un tiempo de descarga de 65535x2 us = 131 ms = 0.131 s. Si el tiempo de descarga excede 0.131 segundos, la instrucción RCTIME regresa a 0 indicando que se excedió la máxima medición de tiempo. 9 Puede puede hacer mucha sombra sobre el fototransistor para exceder la medición máxima de 65535 y hacer que la instrucción RCTIME regrese a 0. La siguiente actividad se realiza con el menor de los dos capacitores. 9 Antes de pasar a la siguiente actividad, regrese el circuito a la versión original que muestra la Figura 7-4 quitando el capacitor de 0.1μF y reemplazandolo con el capacitor de 0.01μF.
ACTIVIDAD #2: AJUSTANDO LOS EVENTOS DE LUZ Una de las características más útiles de la memoria de programa del BASIC Stamp es que usted puede desconectar la alimentación de la Tablilla sin perder el programa. Tan pronto como se conecta la alimentación el programa se ejecutará nuevamente desde el principio. Como el código de su aplicación típicamente no llena la memoria del módulo BASIC Stamp, cualquier porción que no se use para el programase puede usar para almacenar datos. Esta memoria es especialmente adecuado para almacenar datos que usted no desea que el BASIC Stamp olvide. Mientras los valores almacenados por las variables se borran cuando se desconecta la energía, el BASIC Stamp recordara todos los valores almacenados en su memoria de programa cuando se vuelva a conectar la alimentación. ¿Qué es Adquisición de Datos? Datalogging es lo que un microcontrolador hace cuando registra y almacena mediciones períodicas de sensores durante cierta cantidad de tiempo. Los dispositivos de Adquisición de Datos o dataloggers, son especialmente útiles en investigación científica. Por ejemplo, en lugar de poner una persona en una localidad remota para que tome mediciones del ambiente, se puede colocar una estación datalogging de ambiente. Esta registra mediciones períodicas y los científicos visitan la estación muy frecuentemente para colectar los datos, o en algunos caos, actualiza sus mediciones a una computadora por medio de teléfono celular , radio o satélite.
Midiendo Luz · Página 205
El chip del BASIC Stamp que almacena la memoria de programa y los datos se muestran en la Figura 7-5. Este chip se llama EEPROM que significa memoria de Solo Lectura Programable y Borrable Electricamente. Esto esta muy largo y pronunciar cada una de sus letras es todavía un montón de trabajo. Entonces, cuando las personas hablan de una EEPROM, generalmente dicen E-E-Prom. 2 KB EEPROM stores your PBASIC source code.
Figura 7-5 Chip de EEPROM del módulo BASIC Stamp Esta EEPROM almacena su código de programa y cualquier otros datos que su programa coloca ahí, incluso cuando la alimentación se desconecta.
La Figura 7-6 la ventana del Mapa de Memoria del Editor del BASIC Stamp. Usted puede ver esta ventana haciendo click en el menú RUN del Editor de BASIC Stamp y seleccionar Memory Map. El Mapa de Memoria usa diferentes colores para mostrar los módulos RAM (variables en random access memory ) y EEPROM (program memory) que se utilizan. El cuadro rojo en la barra en la parte izquierda indica que porción de la EEPROM es visible en el Mapa de EEPROM. Usted puede dar click y jalar este cuadro hacia arriba y abajo para ver varias porciones de la memoria EEPROM. Al jalar el cuadro rojo de arriba abajo, usted puede ver cuanto espacio de memoria EEPROM usa el programa TestPhototransistor.bs2 de la Actividad #1. Los bytes que contienen los Símbolos del programa están resaltados en azul, y solamente 35 bytes fuera de la EEPROM de 2048 se usan para el programa. Los 2013 bytes restantes están libres para almacenar datos.
Página 206 · ¿Qué es un Microcontrolador?
Figura 7-6 Mapa de Memoria Para ver esta ventana haga click en RUN y seleccione Memory Map
El mapa EEPROM muestra las direcciones en valores hexadecimales, que se discutieron brevemente en el recuadro Decimal vs Hexadecimal en la página 185, los valores a lo largo del lado izquierdo muestran las direcciones iniciales de cada fila de bytes. Los números en la parte superior muestran el número de byte dentro de esa fila, desde 0 hasta F en Hexadecimal, que equivale 0 a 15 en decimal. Por ejemplo, en la Figura 7-6 el valor decimal C1 se almacenó en la dirección 7E0. CC se almacenó en la dirección 7E1, 6D se almacenó en la dirección 7E2, y así sucesivamente hasta E8, que se almacenó en la dirección 7EF. Si usted busca hacia arriba y abajo con la barra, usted verá que la dirección de memoria mayor está en la parte más baja del Mapa EEPROM, y la dirección menor está hasta arriba, con la fila superior empezando en 000. En PBASIC los progamas siempre se almacenan en las direcciones mayores de la EEPROM, que están abajo del Mapa EEPROM. Entonces, si su programa va a almacenar datos en EEPROM, deberá empezar con la menor dirección , empezando con la dirección 0. Esto ayuda a asegurar que sus datos almacenados no se sobreescribiran en su programa PBASIC, lo que generaría un programa defectuoso. En el caso del Mapa EEPROM mostrado en la Figura 7-6 el programa PBASIC reside en las direcciones 7FF hasta 7DD, empezando con la dirección mayor y construyendose hasta la menor dirección Entonces, su aplicación puede almacenar datos desde la dirección 000 hasta 7DC, construyendose desde el menor hasta el mayor, en decimal la dirección es desde 0 hasta 2012. Si usted planea almacenar datos en EEPROM, es importante que sea capaz de convertir de hexadecimal a decimal para calcular la dirección de escritura más grande. Abajo están las matemáticas para convertir el número 7DC hexadecimal a decimal. Hexadecimal es un sistema numérico con base 16, eso significa que usa 16 diferentes dígits para
Midiendo Luz · Página 207
representar sus valores. Los dígitos 0 a 9 representan los primeros 10 valores, y las letras A a F representan los valores 10 a 15. Cuando se convierte de hexadecimal a decimal cada digito de la derecha la potencia mayor de dieciseis. El dígito más a la derecha es el número de unos, el cual es el número 16. El siguiente digito de la derecha es el número de 16, el cual es el número 16. El tercer dígito es el número de 256s, el cual es el número 16. Hexadecimal 7DC
= = = = =
(7 × 162) + (D × 161) + (C × 160) (7 × 162) + (13 × 161) + (12 × 160) (7 × 256) + (13 × 16) + (12 × 1) 1792 + 208 + 12 2012 (valor decimal)
Esta aproximación de conversión trabaja de igual manera con otras bases, incluyendo la base 10 de valores decimales. Por ejemplo: 2102 = (2 × 103) + (1 × 102) + (0 × 101) + (2 × 100) = (2 × 1000) + (1 × 100) + (0 × 10) + (2 × 1) 2048 Bytes = 2 KB Aunque la letra “K” y la letra “k” se llaman “kilo” son ligeramente diferentes. En electrónica y computación la “K” se usa para indicar un kilobyte binario que es 1x2 = 1024. Cuando nos referimos con exactitud a 1000 bytes, usamos la letra “k” que se usa como kilo y es 1x10 = 1000 en el sistema métricoñ Tambien, la letra “B” significa bytes, mientras que la letra “b” significa bits. Esto puede hacer una gran diferencia por 2Kb significa 2048 bits, que is 2048 numeros diferentes donde cada número está limitado a un valor de 0 o 1. En contraste 2KB significa 2048 bytes cada uno de los bytes puede almacenar un valor en el rango de 0 a 255.
Usando la EEPROM para almacenar datos puede ser muy útil en aplicaciones remotas. Un ejemplo de una aplicación remota podría ser un monitor de temperatura colocado en un camión que contiene comida refrigerada. El podría fijar la temperatura durante todo el viaje para ver si siempre está lo suficientemente fria para asegurar que ninguno de los embarques cambie de congelado a líquido. Un segundo ejemplo es una estación de monitoreo del clima. Una de las piezas de la estación de datos del clima podría almacenar para que despues obtener sus niveles de luz. Esto puede dar una indicación de nubes que cubren los tiempos de un día. Y algunos estudios la usan para monitorear los efectos de contaminación y condensación de trails en aviones, con altos niveles que llegan a la superficie de la tierra.
Página 208 · ¿Qué es un Microcontrolador?
Teniendo en mente el el ajuste de niveles de luz, esta actividad introduce una técnica para almacenar los niveles de luz medidos en la EEPROM y después analizarlos. En esta actividad, usted ejecutará un Programa Ejemplo PBASIC que almacena una serie de mediciones de luz en el módulo EEPROM del BASIC Stamp. Después que se termine el programa, usted ejecutará un segundo programa que retira los valores de la EEPROM y los muestra en la Terminal Debug. Programando Almacenamiento de Datos en Terminos Grandes
La instrucción WRITE se usa para almacenar valores en la EEPROM, y la instrucción READ se usa para extraer esos valores. La sintaxis para la instrucción WRITE es: WRITE Location, {WORD} Value
Por ejemplo, si usted quiere escribir el valor 195 en la dirección 7 en la EEPROM, usted podría usar la instrucción WRITE 7, 195
Los valores “WORD” pueden ser cualesquiera desde 0 hasta 65565, mientras que los valores “byte” solamente pueden contener números de 0 a 255. Un valor “word” toma el espacio de dos bytes. Si usted quiere escribir un valor en EEPROM, usted tiene que usar el modificador opcional “Word.” Sea cuidadoso. Como “word” ocupa dos bytes usted tiene que brincar una de las direcciones tamaño byte en la EEPROM antes de que usted pueda escribir otro “word”. Digamos que usted necesita guardar dos valores “word” en EEPROM: 659 y 50012. Si usted desea almacenar el primer valor en la dirección 8, usted tendrá que escribir el segundo valor en la dirección 10WRITE 8, Word 659 WRITE 10, Word 50012
Midiendo Luz · Página 209
¿Es posible escribir sobre su programa? Sí, y si usted lo hace, el programa se pararece a que empieza a comportarse extrañamente o que deja de ejecutarse. Como los símbolos del programa PBASIC residen en las direcciones mayores de EEPROM, es mejor usar los valores más pequeños de localidades “Location” para almacenar números con la instrucción WRITE. ¿Como puedo saber si la Location que estoy usando es muy grande? Usted puede usar el mapa de memoria para calcular el valor más grande no usado por su programa PBASIC. La explicación después de la Figura 7-6 describe la manera de calcular cuantas direcciones de memoria están disponibles. De manera sencilla usted puede convertir de hexadecimal a decimal usando el formato decimal “DEC” en la instrucción DEBUG y el formato hexadecimal $ hexadecimal formato de esta forma: DEBUG DEC $7BC Su programa mostrará el valor decimal del hexadecimal 7DC porque el signo “$” de formato hexadecimal le indica a la instrucción DEBUG que el 7DC es un número hexadecimal. Entonces, el formato DEC (decimal) hace que la instrucción DEBUG muestre el valor en un formato decimal.
Programa Ejemplo: StoreLightMeasurementsinEeprom.bs2
Este Programa Ejemplo muestra con usar la instrucción WRITE tomando mediciones de luz cada 5 segundos durante 2 ½ minutos y almacenandolos en la EEPROM. Como el Programa Ejemplo de la actividad anterior muestra las mediciones en la Terminal Debug, pero tambien las almacena en la EEPROM para su posterior retiro con un programa diferente que usa la instrucción READ. 9 Meta y ejecute StoreLightMeasurementsinEeprom.bs2 9 Registre las mediciones mostradas por la Terminal Debug para que usted pueda verificar las mediciones de lectura cuando se obtengan de la EEPROM. 9 Gradualmente incremente la sombra sobre el fototransistor durante 2 ½ minutes de período de prueba para tener datos significativos. Especialmente si usted tiene una Tablilla USB, su reconexión en la computadora podría Resetear el BASIC Stamp y resetear el programa, en cuyo caso, podría empezar a tomar un nuevo conjunto de mediciones. 9 Después que el programa StoreLightMeasurementsinEeprom.bs2 haya concluido, desconecte la alimentación y déjela desconectada hasta que usted este listo para ejecutar el siguiente programa ejemplo: ReadLightMeasurementsFromEeprom.bs2.
Página 210 · ¿Qué es un Microcontrolador?
Usted puede cambiar las pausas en el bucle FOR...NEXT. Este Programa Ejemplo tiene pausas de 5 segundos, las cuales resaltan las mediciones períodicas que toman las tarjetas de adquisición de datos. Esto podría parecer muy largo, entonces usted puede reducir PAUSE 5000 a PAUSE 500 para hacer que el programa ejecute diez veces más rápidamente la prueba.
' ¿Que es un Microcontrolador - StoreLightMeasurementsInEeprom.bs2 ' Escriba mediciones de luz a la EEPROM. ' {$STAMP BS2} ' {$PBASIC 2.5} time eepromAddress
VAR VAR
Word Byte
PAUSE 1000 DEBUG "Iniciando mediciones...", CR, CR "Medicion Valor", CR, "---------------", CR FOR eepromAddress = 0 TO 58 STEP 2 HIGH 2 PAUSE 5000 RCTIME 2, 1, time DEBUG DEC2 eepromAddress, " ", DEC time, CR WRITE eepromAddress, Word time NEXT DEBUG "Todo hecho. Ahora, ejecutelo:", CR, "ReadLightMeasurementsFromEeprom.bs2" END
Como funciona StoreLightMeasurementsinEeprom.bs2
El bucle FOR...NEXT que mide los valores de tiempo RC y los almacena en la EEPROM tiene que contar en pasos de 2 porque los valores “word” se escriben en la EEPROM. FOR eepromAddress = 0 to 58 STEP 2
La instrucción RCTIME carga las mediciones de tiempo de descarga en la variable “time” que es de tamaño “word” RCTIME 2,
1, time
El valor que almacena la variable “time” se copia en la dirección de la EEPROM dada por el valor actual de la variable “eepromAddress” todas las veces a través del bucle.
Midiendo Luz · Página 211
Recuerde, que la dirección para la instrucción WRITE siempre está en términos de bytes. Entonces, la variable “eepromAddress” se incrementa por dos cada vez en el bucle porque la variable Word toma dos bytes. WRITE eepromAddress, Word time NEXT
Programando la Extracción de Datos
Para extraer los valores que usted grabó en la EEPROM, usted puede usar la instrucción “READ”. La sintaxis de la instrucción es: READ Location, {WORD} Variable
Mientras que la instrucción WRITE puede copiar una de una constante o una variable a la EEPROM, la instrucción READ tiene que copiar el valor almacenado en una dirección de la EEPROM a una variable, entonces como su nombre lo sugiere , el argumento “Variable” tiene que ser una “variable”. Recuerde que las variables se almacenan el módula RAM de el BASIC Stamp. De manera diferente a la EEPROM, los valores RAM pueden borrarse cuando se desconecta la alimentación y también cuando se presiona el botón RESET de su Tablilla. El BASIC Stamp 2 tiene 26 bytes de RAM, mostrados en el lado derecho del Mapa de Memoria en la Figura 7-6. Si usted declara una variable “word” usted está usando dos bytes. La declaración de una variable byte usa un byte, un nible usa la mitad de un byte y un bit usa 1/8 de byte.
Digamos que eepromValueA u eepromValueB son variables “Word”, y littleEE es una variable Byte. Estas variables deberán estar definidas en el inicio del programa con la declaraciónes de variables “VAR”. Estas son algunas instrucciones para extraer los valores que se almacenaron en ciertas direcciones de la EEPROM con anterioridad usando la instrucción WRITE, quizá incluso en un programa diferente. READ 7, littleEE READ 8, Word eepromValueA READ 10, Word eepromValueB
La primera instrucción retira un valor byte de la dirección 7 de la EEPROM y lo copia en la variable llamada littleEE. La siguiente instrucción copia la “word” que ocupan las direcciones 8 y 9 de la EEPROM y la almacena en la variable “word” eepromValueA. La
Página 212 · ¿Qué es un Microcontrolador?
última de las tres instrucciones copia una “word” que ocupan las direcciónes 10 y 11de la EEPROM y la almacena en la variable eepromValueB. Programa Ejemplo: ReadLighMeasurementsFromEeprom.bs2
Este Programa Ejemplo demuestra como usar la instrucción READ para extraer las mediciones de luz que fueron almacenadas en la EEPROM con el programa StoreLightMeasurementsInEeprom.bs2. 9 Conecta la energía a su Tablilla. 9 Meta el programa ReadLighMeasurementsFromEeprom.bs2 en el Editor de BASIC Stamp. 9 Si usted tenía desconectada la alimentación de su tablilla, cuando la reconectó, inmediatamente haga click en el botón “Run” del Editor del BASIC Stamp para bajar el programa en el BASIC Stamp. No espere más de 6 segundos entre reconectar la alimentación y bajar el programa ReadLighMeasurementsFromEeprom.bs2 en el BASIC Stamp, porque el programaque todavía está en la mememori de programa (StoreLightMeasurementsInEeprom.bs2.) empezará a grabar sobre la mediciones anteriores. Entonces, si usted reduce “Duration” de la instrucción PAUSE de 5000 a 500 usted solamente tendra 1.5 segundos.
Compare la Tabla de la Terminal Debug que muestra este programa con la Tabla que mostro el programa StoreLightMeasurementsInEeprom.bs2, y verifique que los valores son los mismos. ' ¿Que es un Microcontrolador - ReadLightMeasurementsFromEeprom.bs2 ' Lectura de mediciones de luz de la EEPROM. ' {$STAMP BS2} ' {$PBASIC 2.5} time eepromAddress
VAR VAR
Word Byte
PAUSE 1000 DEBUG "Extrayendo mediciones", CR, CR, "Mediciones Valores", CR, "--------------", CR FOR eepromAddress = 0 TO 58 STEP 2 READ eepromAddress, Word time DEBUG DEC2 eepromAddress, "
", DEC time, CR
Midiendo Luz · Página 213
NEXT END
Funcionamiento del programa ReadLighMeasurementsFromEeprom.bs2
La instrucción WRITE y la instrucción READ dependen de direcciones byte. Y como deseamos leer valores “word” de la EEPROM, la variable eepromAddress tiene que tener 2 agregado a ella cada vez que se ejecuta el bucle FOR...NEXT. FOR eepromAddress = 0 to 58 STEP 2
La instrucción READ obtiene el valor tamaño “word” de eepromAddress, y obtiene el valor copiado en la variable time READ eepromAddress, Word time
Los valores de la variables time y eepromAddress se muestran en columnas adyacentes en una tabla en la Terminal Debug. DEBUG DEC2 eepromAddress, " NEXT
", DEC time, CR
Su Turno – Más Mediciones
9 Modifique el programa StoreLightMeasurementsInEeprom.bs2. para que tome y registre dos veces las muchas mediciones en la misma cantidad de tiempo. 9 Modifique el programa ReadLighMeasurementsFromEeprom.bs2 para que muestre todas las mediciones del programa modificado StoreLightMeasurementsInEeprom.bs2.
ACTIVIDAD #3: GRAFICANDO MEDICIONES DE LUZ (OPCIONAL) Las listas de mediciones como las de la Actividad #2 pueden ser tediosas para analizarse. Imagine que lee cientos de estos números recolectados en la puesta del sol. O quizá buscando un evento particuar, como cuando su cubrió brevemente el sensor de luz. Esta información podría ser útil si el sensor de luz se coloca en un área donde camina sobre él una persona o un animal, o un objeto pasando sobre una banda transportadora necesita registrarse y analizarse. Sin importar la apliación, si usted tiene que trabajar con una larga lista de números, para encontrar aquellos eventos y patrones que pueden ser tareas difíciles y que consumen mucho tiempo.
Página 214 · ¿Qué es un Microcontrolador?
En cambio si usted hace una gráfica de la lista de mediciones, encontrar eventos y patrones se hace mucho más fácil. La persona, animal u objeto que pase por el sensor de luz mostrará un punto alto o pico en la mediciones. La Figura 7-7 muestra un ejemplo de una gráfica que podría indicar la razón a la cual los objetos de una banda transportadora están pasando sobre el sensor. Los picos en la gráfica ocurren cuando los tiempo de las mediciones son grandes. En el caso de una banda transportadora, esto indicaría que un objeto pasa sobre el sensor reflejando una sombra. Esta gráfica facilita ver de un vistaso que un objeto pasa sobre el sensor aproximadamente cada 7 segundo, y qu el objeto que esperabamos en 28 segundo no estaba ahí. Gráfica 7-7 Gráfica de Mediciones de Luz con el Fototransistor Decay Time Vs. Time for Phototransistor RC Circuit 9000 8000
Decay Time (2 us)
7000 6000 5000 4000 3000 2000 1000 0 0 "Decay Time"
10
20
30
40
50
60
Tim e (s)
La Gráfica en la Figura 7-7 se generó copiando y pegando valores en la Terminal Debug a un archivo de texto y luego se importo a una hoja de trabajo Excel de Microsoft. Algunas utilerias de graficación pueden tomar el lugar de la Terminal Debug y graficar los valores directamente en lugar de mostrarlos como un lista de números. La Figura 7-8 muestra un ejemplo de una de estas utilerias, llamada StampPlot LITE.
Midiendo Luz · Página 215
Figura 7-8 StampPlotLITE
En esta actividad opcional, usted puede ir a www.parallax.com/go/WAM y seguir la liga de Data Plotting y realizar un número de actividades que demuestran como graficar valores usando varias hojas de calculo y paquetes de software de utilerias de graficación.
ACTIVIDAD #4: MEDIDOR SENCILLO DE LUZ La información de los sensores de luz puede comunicarse de muchas formas. El medidor de luz con el que trabajará en esta actividad cambia la rapidez en que el indicador parpadea dependiendo de la intensidad de luz que detecta. Partes del Medidor de Luz
Un Fototransistor Un Resistor de 220 Ω (rojo-rojo-café)
Página 216 · ¿Qué es un Microcontrolador?
Dos Capacitores de 0.01 μF (marcados con 103) Un Capacitor de 0.1 μF (marcado con 104) Un Indicador LED de 7 segmentos Ocho Resistores de 1 KΩ (café-negro-rojo) Seis alambres para puentes Construyendo el Circuito Medidor de Luz
La Figura 7-9 muestra el esquemático del indicador LED de 7 segmentos y el Fototransistor que se usará para construir el Medidor de Luz, y la Figura 7-10 muestra el diagrama de alambrado de los circuitos. El circuito fototransistor es el mismo que ha estado usando en las dos últimas actividades y el circuito del indicador LED de 7 segmentos es el mismo de la Figura 6-11. 9 Construya el circuito mostrado en la Figura 7-9 y la Figura 7-10. 9 Verifique el indicador LED de 7 segmentos para asegurarse que está conectado correctamente usando el programa SegmentTestWithHighLow.bs2 del capítulo 6 Actividad #2, que empieza en la página 179.
Midiendo Luz · Página 217
Figura 7-9 Circuito esquemático del Medidor de Luz
Figura 7-10 Diagrama de Alambrado para la Figura 7-9
Página 218 · ¿Qué es un Microcontrolador?
Usando Subrutinas
La mayoría de los programas que usted ha escrito hasta ahora trabajan dentro de un bucle DO...LOOP. Como toda la actividad principal del programa sucede dentro de DO...LOOP, a esta usualmente se le llama rutina principal. Conforme usted agrega más circuitos y más funciones útiles a su programa, puede tener un poco de dificultad para tener el control de todo el código en la rutina principal. Su programa trabajará con mayor facilidd si usted lo organiza en pequeños segmentos de código que hagan ciertas tareas. PBASIC tiene algunas instrucciones que usted puede usar para hacer que el programa brinque de la rutina principal, haga una tarea, y luego regrese al mismo punto de la rutina principal. Esto le permitira que usted mantenga cada segmento de código haciendo un trabajo particular sin estar en la rutina principal. Cada vez que usted necesite el programa para hacer uno de esos trabajos, usted puede escribir una instrucción dentro de la rutina principal que le diga al programa que brinque a tal trabajo, lo haga, y regrese cuando el trabajo esté hecho. Los trabajos se llaman subrutinas y a este proceso se le llama “llamado de subrutinas” La Figura 7-11 muestra un ejemplo de una subrutina y como se usa. La instrucción GOSUB Subroutine_Name hace que el programa brinque a la etiqueta Subroutine_Name. Cuando el programa va a esa etiqueta, corriendo y ejecutando las instrucciones hasta que llega a la instrucción (retorna) RETURN. Y ahora el programa regresa a la instrucción que viene despues de la instrucci´´on GOSUB. En el caso del ejemplo de la Figura 7-11, la siguiente instrucción es: DEBUG “Next command” DO GOSUB Subroutine_Name DEBUG "Next command" LOOP
Figura 7-11 Subroutine_Name: DEBUG "This is a subroutine..." PAUSE 3000 RETURN
Funcionamiento Subrutina
de
la
Midiendo Luz · Página 219
¿Qué es un Etiqueta? Una etiqueta es un nombre que puede usarse en un lugar de su programa. GOSUB es una de las instrucciones que usted puede usar para brincar a un etiqueta. Otras instrucciones son GOTO, ON GOTO y ON GOSUB. Una etiqueta debe termina con el signo dos puntos (:), y por la forma de estilo, separe palabras con el carácter de subrayado para que sean fáciles de reconocer. Cuando escoga un nombre para una etiqueta, asegurese de no usar una palabra reservada o un nombre que esté usando una variable o una constante. El resto de reglas para el nombre de una etiqueta son las mismas que las usadas para nombrar variables, que están enumeradas en el recuadro de información de la página 43.
Programa Ejemplo: SimpleSubroutines.bs2
Este Programa Ejemplo muestran como funcionan las subrutinas mandando mensajes a la Terminal Debug. 9 Examine el programa SimpleSubroutines.bs2 y trate de adivinar el orden en el cual se ejecutarán las instrucciones DEBUG. 9 Meta y ejecute el programa. 9 Compare el comportamiento del programa real con sus predicciones. ' ¿Que es un Microcontrolador - SimpleSubroutines.bs2 ' Demostración del funcionamiento de la subrutina. ' {$STAMP BS2} ' {$PBASIC 2.5} PAUSE 1000 DO DEBUG PAUSE GOSUB DEBUG PAUSE GOSUB DEBUG PAUSE
CLS, "Inicia la rutina principal.", CR 2000 First_Subroutine "Regresa a la principal.", CR 2000 Second_Subroutine "Repite la principal...", CR 2000
LOOP First_Subroutine: DEBUG " Primera Ejecución " DEBUG "subroutine.", CR PAUSE 3000 RETURN
Página 220 · ¿Qué es un Microcontrolador?
Segunda_Subrutina: DEBUG " Executing second " DEBUG "subroutine.", CR PAUSE 3000 RETURN
Funcionamiento de SimpleSubroutines.bs2
La figura 7-12 muestra como funciona la llamada de “First_Subroutine” en la rutina principal (en bucle DO...LOOP). La instrucción GOSUB First:Subroutine manda el programa a la etiqueta First_Subroutine. Luego, se ejecutan las tres instrucciones dentro de esa subrutina. Cuando el programa llega a la instrucción RETURN, brinca de regreso al comando que viene inmediatamente después de GOSUB First_Subroutine, y es DEBUG “Back in Main.”, CR ¿Qué es una llamada a subrutina? Cuando usted usa la instrucción GOSUB para hacer que el programa brinque a una subrutina, a esto se llama “llamada a subrutina”.
PAUSE 2000 GOSUB First_Subroutine DEBUG "Back in main.", CR
First_Subroutine: DEBUG "
Executing first "
Figura 7-12 Llamada a la Primera Subrutina.
DEBUG "subroutine.", CR PAUSE 3000 RETURN
La Figura 7-13 muestra un segundo ejemplo del mismo proceso con llamada a la segunda subrutina (GOSUB Second_Subrutine).
Midiendo Luz · Página 221
PAUSE 2000 GOSUB Second_Subroutine DEBUG "Repeat main...", CR
Second_Subroutine: DEBUG "
Executing second "
Figura 7-13 Llamada a segunda subrutina
DEBUG "subroutine", CR PAUSE 3000 RETURN
Su Turno – Agregando y Anidando Subrutinas
Usted puede agregar subrutinas además de las dos que están en el programa y llamarlas de la rutina principal. 9 Agregue la subrutina mostrada en la Figura 7-11 al programa SimpleSubroutines.bs2. 9 Haga los ajustes necesarios a la instrucción DEBUG para que muestre correctamente las tres subrutinas. Usted también puede llamar una subrutina dentro de otra subrutina. A esto se le llama subrutinas anidadas. 9 Intente mover la instrucción GOSUB para que llame a la subrutina Subroutine_Name hacia otra de las subrutinas, y vea como funciona. Cuando anidar subroutines. La regla es no más de cuatro profundidades. Vea el Manual BASIC Stamp o la Ayuda del BASIC Stamp Editor para más información Vea GOSUB y RETURN
Medidor de Luz Usando Subrutinas
El siguiente programa LightMeter.bs2 usa subrutinas para controlar el indicador LED de 7 segmentos dependiendo del nivel de luz detectado por el fototransistor. El ciclo apagado y encendido de los segmentos del indicador LED en un patrón circular se hace más rápido cuando el fototransistor recibe más luz. Cuando la luz disminuye el patrón se hace más lento.
Página 222 · ¿Qué es un Microcontrolador?
El Programa Ejemplo LightMeter.bs2 usa una subrutina llamada Update_Display para controlar el orden de avance de los segmentos del medidor de luz. El programa que ejecuta el medidor de luz trata con tres diferentes operaciones. 1. Leer el Fototransistor. 2. Calcular el tiempo de espera antes de actualizar el indicador LED de 7 segmentos. 3. Actualizar el indicador LED de 7 segmentos. Cada operación está contenida dentro de su propia subrutina, y la rutina principal DO...LOOP llamará en secuencia a cada una de elllas una vez y otra y otra vez. Programa Ejemplo: LightMeter.bs2 El Control de las condiciones de luz hace la gran diferencia. Para mejores resultados, realice esta prueba en una habitación iluminada con luz fluorescente con poca o sin luz directa del sol. (cierre las cortinas). Para información de la calibración de este medidor a otras condiciones de luz, vea la sección Su Turno.
9 -Meta y corra el programa LightMeter.bs2 9 -Verifique de la velocidad de repetición del patron circular mostrado por el indicador LED de 7 segmentos esta controlado por las condiciones de luz que el fototransistor está sensando. Haga esto haciendo sombre con su mano o un pedazo de papel y verifique que la rapidez de cambio del patron circula del indicador se mueve lentamente. ' ¿Que es un Microcontrolador - LightMeter.bs2 ' Indica los niveles de luz usando un indicador LED de 7 segmentos. ' {$STAMP BS2} ' {$PBASIC 2.5} PAUSE 1000 DEBUG "Programa en Ejecución !" index time
VAR VAR
OUTH = %00000000 DIRH = %11111111
Nib Word
' Declaración de Variables .
' Inicializa el indicador de 7-segment.
Midiendo Luz · Página 223
DO
' Rutine Principal. GOSUB Get_Rc_Time GOSUB Delay GOSUB Update_Display
LOOP ' Subrutinas Get_Rc_Time:
' Subrutina de tiempo RC
HIGH 2 PAUSE 3 RCTIME 2, 1, time RETURN Delay:
' Subrutina de Retardo.
PAUSE time / 3 RETURN Update_Display:
' Muestra actualización de subrutinas.
IF index = 6 THEN index = 0 ' BAFG.CDE LOOKUP index, [ %01000000, %10000000, %00000100, %00000010, %00000001, %00100000 ], OUTH index = index + 1 RETURN
Funcionamiento del programa LightMeter.bs2
Las primeras dos líneas del programa declaran variables. No importa donde se usen estan variables en la subrutinas o en la rutina principal, siempre es mejor declarar variables (y constantes) al principio de su programa. Como esto es práctica común, esta sección de código tiene un nombre “Variable declarations” (“Declaración de Variables”). Este nombre se muestra como comentario a la derecha la la primera declaración de variable. index time
VAR Nib VAR Word
‘Declaración de Variables.
Algunos programas tambien tiene procedimientos que necesitan hacerse de una vez al inicio del programa. Por ejemplo: Ajustar todos los pines de los 7 segmentos en low y
Página 224 · ¿Qué es un Microcontrolador?
direccionarlos como salidas. Este sección de programa PBASIC también tiene un nombre “Inicialización” OUTH = %00000000 DIRH = %11111111
' Inicializa el indicador 7-segmentos.
El siguiente segmento de código se llama rutina principal. La rutina principal primero llama a la subrutina Get-Rc-Time. Luego, esta llama a la subrutina Delay, y después de esto esta llama al subrutina Update_Display. Recuerde que el programa va a través de las tres subrutinas tan rápido como puede, una vez y otra y otra vez. DO GOSUB Get_Rc_Time GOSUB Delay GOSUB Update_Display LOOP
' Rutina Principal.
Generalmente todas las subrutinas se colocan después de la rutina principal. El nombre de la primera subrutina es Get_Rc_Time; y ella toma la medición del tiempo RC con el circuito fototransistor. Esta subrutina tiene una instrucción PAUSE que permite que el capacitor se cargue. La Duracion de esta instrucción es pequeña y solamente necesita una pausa con el tiempo suficiente para asegurarse que el capacitor se carge. Observe que la instrucción RCTIME fija el valor de la variable “time”. Esta variable la usará la segunda subrutina. Get_Rc_Time: HIGH 2 PAUSE 3 RCTIME 2, 1, time RETURN
' Subrutina de tiempo RC
El nombre de la segunda subrutina es “Delay”, y todo lo que contiene es PAUSE time / 3. La instrucción PAUSE permite la medición del tiempo de descarga (cuanto se ilumina el LED) para controlar el retardo entre el giro en cada segmento iluminado del indicador de 7 segmentos. El valor a la derecha del operador división “/” puede hacerse mayor para rotaciones más rápidas en condiciones de poca iluminación o puede hacerse pequeño para hacerlo menos rápido en condiciones de mucha iluminación. Usted también podría usar “*” para multiplicar la variable time por un valor en lugar de dividirlo para hacer que el indicador vaya lento y para controlar con mayor precisión la velocidad, no olvide el operador “*/”. Mayor información de este operador está en la sección Su Turno. Delay: PAUSE time / 3 RETURN
Midiendo Luz · Página 225
La tercera subrutina se llama Update_Display. La instrucción LOOKUP en esta subrutina contiene una tabla con seis patrones de bits que se usan para crear el patron circular alrededor del exterior del indicador LED de 7 segementos. Agregando un 1 a la variable “index” cada vez que se llama la subrutina, esta genera el siguiente patrón de bits en la secuencia para obtener la colocación en OUTH. Hay solamente seis entrada en la tabla LOOKUP para valores del “index” que van de 0 a 5. ¿Qué sucede cuando el valor de index llega a seis? La instrucción LOOKUP no conoce automáticamente como regresar a la primera entrada, pero usted puede usar una frase IF...THEN para resolver este problema. La instrucción IF indez = 6 THEN index = 0 resetea el valor de index a 0 cada vez que llega a 6. También hace que la secuencia de los patrones de bits colocados en OUTH se repitan en si mismos una y otra y otra vez. Estos, a su vez, hace que el indicador LED de 7 segmentos repita su patrón circular una y otra y otra vez. Update_Display: IF index = 6 THEN index = 0 ' BAFG.CDE LOOKUP index, [ %01000000, %10000000, %00000100, %00000010, %00000001, %00100000 ], OUTH index = index + 1 RETURN
Su Turno – Ajustando el Medidor en Hardware y Software
Hay dos formas para cambiar la sensibilidad del medidor. Primero por software: el programa en PBASIC puede cambiarse para ajustar la velocidad. Anteriormente mencionamos que dividiendo la variable time de la subrutina Delay con la instrución PAUSE time /3 con números mayores que 3 acelerarán el indicador y con números menores a 3 los desacelerarán. Para verdaderamente desacelararlo también puede multiplicarlo por valores con el operador de multiplicación * , y para ajustes finos existe el operador */. Cuando usted conecta capacitores en paralelo, su valor aumenta. Entonces, colocando un segundo capacitor de 0.01 μF en seguida del primero como lo muestra la Figura 7-14 y 715, la capacitancia sera 0.02 μF. Al tener dos veces al capacitancia, las mediciones de descarga serán dos veces mayores para el mismo nivel de luz.
Página 226 · ¿Qué es un Microcontrolador?
9 Conecte el segundo capacitor a la derecha del primero en la porción del sensor de luz del circuito medidor de luz de la Figura 7-14 y 7-15. 9 Ejecute el programa LightMeter.bs2 y observe los resultados. Como las mediciones de tiempo serán dos veces mayores, el patrón circular de los LEDs del indicador de 7 segmentos deberá girar a la mitad de velocidad.
Figura 7-14 Dos capacitores de 0.01 μF en paralelo.
Figura 7-15 Circuitos del Medidor de Luz con dos capacitores de 0.01 μF en paralelo.
En lugar de la mitad de velocidad de un capacitor de 0.01 μF, ¿por qué no un décimo de velocidad? Usted puede reemplazar los dos capacitores de 0.01 μF con un capacitor de 0.1 μF. Este trabajará correctamente en habitaciones muy iluminadas, y bajará su velocidad en condiciones normales de iluminación. Recuerde que cuando usted usa un capacitor que es diez veces mayor entonces la medición de luz del tiempo RC requerirá diez veces más tiempo. 9 Reemplace los capacitores de 0.01 μF con un capacitor de 0.1 μF. 9 Ejecute el programa y vea si el efectro predicho ocurre.
Midiendo Luz · Página 227
9 Antes de continuar restaure el circuito con un capacitor de 0.01 μF en paralelo con el fototransistor como se muestra en la Figrua 7-9 y 7-10. 9 Verifique su circuito restaurado y compruebe que funciona antes de continuar. ¿Qué es mejor ajustar el software o el hardware? Trate usted de usar siempre lo mejor de ambos mundos. Escoga un capacitor que le de a usted la mediciones más exactas sobre el ramgo más amplio de niveles de luz. Después que su hardware es lo mejor que puede usarse, use el software para ajustar automáticamente el medidor de luz de manera que trabaje bien para el usuario bajo el rango más amplio de condiciones. Esto toma una cantidad considerable de pruebas y refinamiento pero todo esto es parte del proceso de diseño de productos.
ACTIVIDAD #5: SALIDA CONMUTADA (ON/OFF) DEL FOTOTRANSISTOR Antes que los microcontroladores fueran comunes en los productos, los fotoresistores se usaban en circuitos que variaban en su salida de voltaje. Cuando el voltaje pasaba debajo de una valor umbral indicando tiempo de noche, otros circuitos en el dispositivo encendian las lámparas. Cuando el voltaja pasaba arriba del umbral, indicando tiempo de día, los circuitos del dispositivo apagaban las lámparas. El comportamiento binario de conmutación de la luz puede ser emulado con el mismo BASIC Stamp y el circuito RC modificando simplemente el programa. Alternativamente, el circuito se puede modificar para que mande un 1 o un 0 a un pin E/S dependiendo de la cantidad de voltaje suministrado a el pin, en forma similar como lo hace un botón push. En esta actividad, ustes trabajará con estos dos enfoques. Ajustando el Programa de Estados On/Off
El programa PhototransistorAnalogToBinary.bs2 toma el rango de mediciones del fototransistor y las compara en el punto medion entre las mediciones mayor y menor. Si la medición está arriba del punto medio, muestra “Enciende las Luces”, si no lo está, muestra “Apaga las Luces”. El programa usa directivas de constantes para definir las mediciones mayor y menor que el programa espera del circuito fototransistor. valMax valMin
CON CON
4000 100
Página 228 · ¿Qué es un Microcontrolador?
El programa también usa los operadores MIN y MAX para asegurarse que los valores permanecen dentro de estos límites antes de usarlos para tomar decisiones. Si time es mayor que valMax (4000 en este Programa Ejemplo), la frase fija time to valMax =4000 De forma semejante si time es menor que valMin (100 en el Programa Ejemplo), la frase fija time to valMin= 100 time = time MAX valMax MIN valMin
La instrucción IF...THEN...ELSE convierte el rango de valores analógicos digitalizados en una salida binaria que toma la forma de mensajes luz encendica o luz apagada. IF time > (valMax - valMin) / 2 THEN DEBUG CR, "Enciende la luces " ELSE DEBUG CR, "Apaga las luces" ENDIF
Antes de que este programa trabaje correctamente, usted tiene que calibrar sus condiciones de luz como sigue: 9 Verique su circuito fototransistor para asegurarse que solo tiene un capacitor de 0.01 μF (marcado con 103) 9 Meta el programa PhototransistorAnalogToBinary.bs2 en el Editor de BASIC Stamp. Asegurese de agregar un espacio extra despues de “s” in el mensaje “Encienda la luces “ 9 Cargue el programaen el BASIC Stamp. 9 Observe al Terminal Debug cuando ustes aplica las condiciones de luz penunbra y brillo que usted desea verificar, y escriba los valores de tiempo resultantes de máximo y mínimo. 9 Meta estos valores en el programa con las directivas valMax y valMIn. 9 Ahora, su programa está listo para ejecutarse y verificarse. 9 Cargue el programa modificado en el BASIC Stamp. 9 Verifique para comprobar que las condiciones de luz en penumbra generan el mensaje “Encienda las luces” y en condiciones de brillo genera el mensaje “Apague las luces”.
Midiendo Luz · Página 229
' ¿Que es un Microcontrolador - PhototransistorAnalogToBinary.bs2 ' Cambia las mediciones analogicas del fototransistor en resultado binario. ' {$STAMP BS2} ' {$PBASIC 2.5} valMax valMin
CON CON
4000 100
time
VAR
Word
PAUSE 1000 DO HIGH 2 PAUSE 100 RCTIME 2, 1, time time = time MAX valMax MIN valMin DEBUG HOME, "time = ", DEC5 time IF time > (valMax - valMin) / 2 THEN DEBUG CR, "Ecienda las luces " ELSE DEBUG CR, "Apague las luces" ENDIF LOOP
Su Turno – Diferentes umbrales para Brillo y Obscuridad
Si usted trata de incorporar el programa PhototransistorAnalogToBinary.bs2 en un sistema automático de luz, tiene un defecto potencial. Digamos que hay suficiente obscuridad en el exterior que hace que la medicion de time sobrepase (valMax – valMin) / 2, que hace que se enciendan las luces, y al encenderse las luces el sensor las detecta, entonces esto haría que se apagaan. ¡Este ciclo, enciende las luces/apaga las luces podía repetirse rapidamente toda la noche! La Figura 7-16 muestra en una gráfica como funciona el ciclo encendido apagado. Cuando el nivel de luz cae, se incrementa el valor de la variable time, y cuando este cruza el umbral, la lampara automáticamente se enciende. Entonces, como el fototransitor sensa la lampara que se ha encendido disminuye la medición de la variable time y entonces la lámpara se apaga. Entoces, se incrementa nuevamente el valor de la variable time y sobrepasa el umbral, y como consecuencia nuevamente la lámpara se enciende, y baja el valor de la variable time del nivel de umbral y etcetera, etcetera...
Página 230 · ¿Qué es un Microcontrolador?
valMax "Turn light on " (valMax - valMin) / 2
"Turn light off"
Figura 7-16 Oscilaciones Arriba/Debajo del Umbral.
valMin
Un remedio para este problema es agregar un segundo umbral, como lo muestra la Figura 7-17. El umbral “Enciende la lámpara” solamente enciende la lámpara después tener mucha obscuridad, y “Apaga la lámpara” despues que hay mucho brillo. Con este sistema, la lámpara se enciende despues que “time” pasó del rango de “Enciende la lámpara. La lampara encendida genera brilla, entonces “time” disminuyó ligeramente, pero como no bajó hasta el umbral de “Apaga la lámpara” nada ha cambiado y la lámpara sigue encendida. El término HISTERESIS se usa para describir este tipo de sistemas, que tiene dos umbrales de entrada diferentes que afectan su salida junto con una zona de notransición entre ellas. valMax "Turn light on " (valMax - valMin) / 4 * 3 No transition (valMax - valMin) / 4 "Turn light off" valMin
Figura 7-17 Usando Diferentes Umbrales Alto y Bajo para Prevenir Oscilaciones.
Usted puede realizar este sistema de dos umbrales en su código PBASIC modificado la instrucción IF...THEN..ELSEIF del programa PhototransistorAnalogToBinary.bs2 . Este es un ejemplo: IF time > (valMax - valMin) / 4 * 3 THEN DEBUG CR, "Enciende las lámparas " ELSEIF time < (valMax - valMin ) / 4 THEN DEBUG CR, "Apaga las lámparas" ENDIF
Midiendo Luz · Página 231
El primer bloque IF...THEN muestra “Enciende las lámparas” cuando la variable time almacena un valor que es mayor a ¾ del valor del tiempo más alto (el menor brillo). El bloque de códigos ELSEIF sólo muestra “Apaga las lámparas” cuando la variable tiempo almacena un valor que es menor a ¼ del menor valor de tiempo (máximo brillo). 9 Guarde el programa PhototransistorAnalogToBinary.bs2 con el nombre PhototransistorHysteresis.bs2. 9 Antes de modificar el programa PhototransistorHysteresis.bs2 verifiquelo para asegurarse que funciona el umbral. Si la iluminación ha cambiado, repita los pasos de calibración (del programa PhototransistorAnalogToBinary.bs2) de valMin y valMax. 9 Reemplace la instrucción IF...ELSE...ENDIF del programa PhototransistorAnalogToBinary.bs2 que acaba,ps de analizar. 9 Cargue el programa PhototransistorHysteresis.bs2 en el BASIC Stamp. 9 Verifique y compruebe que es obscuro el umbral “Enciende las lámparas2” y que es luminoso el umbral “Apague las lámparas” Si usted agrega un circuito LED y modifica el código para que encienda y apague el LED, pueden suceder algunas situaciones interesantes. Especialmente si usted pone el LED cerca del fototransistor, usted podría todavía ver el comportamiento enc/apag cuando hay obscuridad incluso con la histeresis programada. ¿Qué tan lejos del fototransistor debe estár el LED para hacer que los dos umbrales prevengan el comportamiento enc/apag? Considerando que los valores de valMin y valMax son iguales en ambos programas, ¿qué tan lejos debe estar el LED para que trabaje correctamente el programa PhototransistorAnalogToBinary.bs2 que no se ha modificado?
Página 232 · ¿Qué es un Microcontrolador?
TTL vs Disparador Schmitt Los pines de E/S de su BASIC Stamp mandan y reciben señales usando lógica de transistor- transistor o TTL ) Como salida, el pin de E/S manda una señal high igual a 5 V o una señal low igual a 0 V. El lado izquierdo de la Figura 7-18 muestra como el pin de E/S se comporta como entrada. El registo IN de los pines de E/S (IN0, IN1, IN2, etc) almacena un 1 si el voltaje aplicado esta arriba de 1.4 V, o un 0 si está debajo de 1.4 V. Esto se muestra 1 Lógico o 0 Lógico en la figura. Un disparados Schmitt es un circuito representado por el símbolo en el centro de la Figura 7-18. El lado derecho de la Figura 7-18 muestra como se comportaría un pin de E/S direccionado como entrada si tuviera un circuito disparador Schmitt interconstruido. Semejante al código PBASIC con dos umbrales el disparado Schmitt tiene histeresis. El valor de entrada almacenado por el registro IN del pin de E/S no cambia de 1 a 0 hasta que el voltaje de entrada pasa debajo de 0.75 V. El BASIC Stamp 2px tiene una instrucción PBASIC que permite que usted configura sus pines de entrada como Disparadores Schmitt. Figura 7-18 Umbrales y símbolos de TTL vs Disparador Schmitt. TTL Threshold
Schmitt Trigger Symbol
5V Logic 1
Schmitt Trigger Threshold 5V ≈4.25 V
Logic 1
No Change ≈1.4 V Logic 0 0V
≈0.75 V 0V
Logic 0
Ajustando el Circuito para Estados Enc/Apag
En la Actividad #2 del Capítulo 5 se mencionó que el voltaje de umbran para un pin E/S del BASIC Stampa es 1.4 V. Cuando un pin de E/S se direcciona como entrada, los voltajes arriba de 1.4 V aplicados a un pin de E/S resulta en un 1 binario, y los voltajes debajo de 1.4 V resultan en un 0 binario. El nudo Vo en el circuito que muestra la Figura 7-19 cambia su voltaje en función de la luz. El circuito puede conectarse a el pin E/S del BASIC Stamp, y con poca iluminación el voltaje pasará abajo del umbral de BASIC Stamp de 1.4 V, y el registro de entrada del pin de E/S almacenará un 0. En condiciones de mucha iluminación, Vo sube arriba de 1.4 V, y el registro de entrada del pin de E/S almacenará un 1.
Midiendo Luz · Página 233
Figura 7-19 Circuito del Voltaje de Salida en Función de la Luz.
+ V
–
=R I
La razón de los cambios del voltaje en Vo con niveles de luz lo explica la ley de Ohm . Que establece que el voltaje en los extremos de un resistor (V en la Figura 7-19) es iual a la corriente que pasa por el resistor (I), multiplicado por la resistencia del resistor (R). V=IxR Recuerde que un fototransistor permite que pase más corriente a través de él cuando recibe más iluminación, y menos corriente cuando recibe menos iluminación. Pongamosle atención al ejemplo del circuito de la Figura 7-19 y calculemos cuanta corriente podría pasar a través del resistor para crear una caída de voltaje de 1.4 V. Primero, sabemos que el valor del resistor es 10 K Ω, o 10000 Ω. Tambien sabemos que la diferencia de potencial sea igual a 1.4 V, entonces necesitamos modificar la ley de Ohm para encontrar I. Para hacer esto, dividimos ambos miembros de la ecuación V = I x R por R, y obtenemos I = V/R. Entonces sustituimos los valores conocidos (V = 1.4 V y R = 10 K Ω) y resolvemos para I. I
= = = = = =
V÷R 1.4 V ÷ 10 kΩ 1.4 V ÷ 10,000 Ω 0.00014 V/Ω 0.00014 A 0.14 mA
Ahora, si por el transistor circula el doble de corriente, porque hay más iluminación, ¿ cual es la diferencia de potencial en el resistor? Con el doble de corriente, I = 0.28 mA, y la resistencia es 10 K Ω, aplicando la ley de ohm tenemos:
Página 234 · ¿Qué es un Microcontrolador?
V
= = = = =
I×R 0.28 mA × 10 kΩ 0.00028 A × 10,000 Ω 2.8 AΩ 2.8 V
Con 2.8 V aplicados a un pin E/S, su registro de entrada deberá almacenar un 1 ya que 2.8 V está arriba del voltaje de umbral del pin E/S que es 1.4 V. Su Turno – Más cálculos
¿Qué sucede si el fototransistor solo permite la mitad del voltaje de umbral, la corriente que fluye en el circuito es (0.07 mA), cual sería el voltaje en los extremos del resistor? ¿Qué almacenaría el registro de entrada del pin E/S? Verificando el Sensor Binario de Luz
Verificar el circuito del sensor binario de luz es parecido a verificar el circuito de los botones push del capítulo 3. Cuando el circuito se conecta a un pin E/S, el voltaje puede estar arriba o debajo de voltaje de umbral de 1.4 V del BASIC Stamp, lo cual resulta en un 1 o 0 y este lo mostrará la Terminal Debug. Partes para el Circuito Analógico y el Sensor Binario de Luz
Un fototransistor Un Resistor de 220 Ω (rojo-rojo-café) Un Resistor de 10 K Ω (café-negro-naranja) Un Resistor de 2 K Ω (rojo-negro-rojo) Un Resistor de 4.7 K Ω (amarillo-violeta-rojo) Un Resistor de 100 K Ω (café-negro-amarillo) Dos alambres para puentes Circuito Analógico y Sensor Binario de Luz
El circuito que muestra la figura 7 se comporta como un botón push controlado por sombra. La obscuridad hace que in2 = 0, y la iluminación hace que in2 = 1. Recuerde que un pin de E/S direccionado como entrada no afecta al circuito que monitorea porque no proporciona ni consume corriente. Esto hace al pin E/S y al resitor de 220 Ω esencialmente invisible al circuito. Entonces, el voltaje resultante de los cálculos de
Midiendo Luz · Página 235
nuestro circuito de la sección anterior será el mismo con o sin el resistor de 220 Ω y el pin E/S conectados. 9 Construya el circuito que muestra la Figura 7-20 Figrua 7-20 Diagrama Esquemático y de Alambrado del Circuito Analógico y Sensor Binario de Luz.
Código de Prueba del Circuito Analógico y Sensor Binario de Luz
El Programa TestBinaryPhototransistor.bs2 es una versión modificada del programa ReadPushButtonState.bs2 del Capítulo 3, Actividad # 2. Además del ajustar los comentarios, un cambio al programa real es la línea DEBUG ? IN2 que antes era DEBUG ? IN3 en el Programa Ejemplo porque el botón push estaba conectado al P3 en lugar de P2. 9 Revise Capítulo 3, Actividad #2 (página 65). 9 Use el programa TestBinaryPhototransistor.bs2 de abajo para verificar que con iluminación sobre el fototransistor genera un 1 con obscuridad y genera un 0. Usted podría necesitar mucha iluminación. Si su habitación está iluminada y genera un 0, inténtelo con luz solar o con una lámpara cerca. Un remedio alternativo para poca iluminación es reemplazar el resistor de 10 K Ω por uno de 100 K Ω.
Página 236 · ¿Qué es un Microcontrolador?
' ¿Que es un Microcontrolador? - TestBinaryPhototransistor.bs2 ' Verifique cada ¼ de segundo el circuito fototransistor estados de salida binarios. ' {$STAMP BS2} ' {$PBASIC 2.5} DO DEBUG ? IN2 PAUSE 250 LOOP
Verificando la Resistencia en Serie
Vea los calculos de V = I x R al principio de esta actividad. Si el resistor en serie es1/5 del valor, el voltaje en el resistor será 1/5 del valor para las mismas condiciones de luz. De igual manera, un resistor 10 veces mayor originará que el voltaje sea diez veces mayor. ¿Qué hace esto en su circuito? Un resistor de 100 K Ω en lugar de un resistor de 10 K Ω significa que el fototransistor sólo tiene que conducir un 1/10 de la corriente para que llegue al voltaje de umbral del pin E/S del BASIC Stamp que es de 1.4 V y esto significa que necesita menos luz para obtener un 1 binario en el registro de entrada del pin E/S. Esto trabajaría como un sensor en un ambiente que se supone en obscuridad ya que será más sensitivo a pequeñas cantidades de luz. En contraste, un resistor con 1/5 de su valor significa que el fototransistor tiene que conducir 6 veces más corriente para obtener el voltaje en el resistor para que cruce el voltaje de umbras de 1.4 V y esto significa que requiere más luz para obtener un 1 binario en el registro de entrada del pin E/S. Entonces, este circuito sería más adecuado para detectar luz más brillante. 9 Experimente con resistores de 2 K Ω, 4.7 K Ω, 10 K Ω y 100 K Ω, y compare los cambios en sensitividad a la luz con cada resistor. Su Turno – Indicador de Nivel de Baja Iluminación
9 Escoja un resistor con la mejor respuesta a los cambios 1/0 con niveles de baja iluminación en su área de trabajo. 9 Agregue la característica del LED del Capítulo 3, Actividad #3 para el circuito de umbral del fototransistor. 9 Ponga algo entre el LED y el fototransistor para que el fototransistor no pueda “ver” el LED. Esto elimina la posibilidad de cruce entre los dos dispositivos.
Midiendo Luz · Página 237
Modifique el programa para que haga que la luz parpadee cuando una sombre se proyecta sobre el fototransistor.
ACTIVIDAD #6: POR DIVERSION – MIDA LUZ EXTERIOR CON UN LED Anteriormente dijimos, el circuito presentado en la Actividad #1 se diseñó para mediciones de luz en interiores. ¿Qué sucede si su aplicación necesita necesita tomar mediones del exterior? Una opción pudiera ser encontrar un fototransistor que genere menos corriente para la misma cantidad de luz. Otra opción pudiera ser encontrar uno de los otros sensores de luz en el kit de ¿Qué es un Microcontrolador? son de forma diferente a los LED y se compartan particularmente bien para mediciones de luz brillante. Cuando una corriente eléctrica circula por el LED, este emite luz, ¿entonces, que piensas, que sucede cuando la luz incide sobre el LED? Sí, así es, puede hacer que la corriente eléctrica fluya a través de un circuito. La Figura 7-21, muestra un circuito LED para detectar niveles de luz del exterior, y en otras áres muy brillantes. Mientras que el fototransistor permite que la corriente circule porque se le aplicó una presión eléctrica (voltaje), el LED se parece a un pequeño panel solar y crea su propio voltaje para suministrar la corriente. Respecto al circuito de descarga RC, el resultado con un LED es casi el mismo. El LED conduce más corriente y drena la carga del capacitor más rápidamente cuando hay más luz, y conduce menos corriente y drena la carga del capacitor menos rápidamente cuando hay menos luz.
Yellow
Figura 7-21 Esquemático del LED en un Circuito de tiempo RC Sensible a la Luz
Página 238 · ¿Qué es un Microcontrolador?
¿Por qué se conecta el LED en sentido inverso? En el Capítulo 2, el ánodo del LED se conecto al resistor de 220 Ω y el cátodo se conectó a tierra. El circuito hace que el LED emita luz como resultado de la corriente que circula en el LED cuando el voltaje se aplica al circuito. Cuando la luz incide sobre el LED, este creará un pequeño voltaje que genera una pequeña corriente en la dirección opuesta. Entonces, el LED tiene que conectarse en sentido inverso para que la corriente que conduzca permita que el capacitor lo drene para las mediciones de descarga de RC.
Partes para el Sensor de Luz LED
Un LED amarilla Un LED verde Un LED rojo Un Resistor de 220 Ω (rojo-rojo-café) Un alambre para puente Circuito del Sensor de Luz LED
Una diferencia muy grande entre el LED y el fototransistor es que el LED conduce mucho menos corriente para la misma cantidad de luz, esto hace que con luz muy brillante el LED conduce suficiente corriente para descargar el capacitor rápidamente pero lo suficiente para la medicón de RCTIME. Recuerde que el máximo tiempo de medición que RCTIME puede medir es 65535 x 2 us = 131 ms. Entonces para mediciones buenas de descarga de RC con el BASIC Stamp se requiere un capacitor mucho muy pequeño. De hecho, el circuito trabaja mejor sin capacitor externo. El LED tiene una capacitancia interna muy pequeña, llamada “capacitancia de unión”, y los clips de metal en los que coloca componentes en su tablilla también tienen capacitancia. Pensando, un capacitor son dos placas separadas por aislante llamado dieléctrico. Entonces las placas de metal dentro de su tablilla separadas por plástico y aire forman un capacitor. La combinación de la capacitancia de unión del LED, y la capacitancia de los clips de su tablilla hacen que usted pueda usar el LED sin ningún capacitor externo, como lo muestra la Figura 7-22. Construya el circuito mostrado en la Figura 7-22 y 7-23, usando el LED amarillo. ¡Asegúrese de observar la polaridad mostrada en la figuras!
Midiendo Luz · Página 239
Figura 7-22 Esquemático del Circuito LED RCTIME
Flat spot and shorter cathode pin
Figura 7-23 Diagrama de alambrado del Circuito LED RC TIME
Longer anode pin
Verificando el Sensor de Luz LED con Código
El circuito LED que sensa la luz puede verificarse en una habitación bien iluminada o en exteriores durante el día. En habitaciones con poca iluminación los tiempos medidos no exceden a 65535 y en este caso RCTIME almacenará cero en la variable “result”. Para la mayoría de situaciones, el código es the mismo de la Actividad #1, del programa TestPhototransistor.bs2. Si está en una habitación bien iluminada trate esto: 9 Ejecute el programama TestPhototransistor.bs2 de la Actividad #1. 9 Dirija el LED a la fuente de luz más brillante volteando su tablilla hacia la luz. 9 Gradualmente gire la tablilla de la fuente de luz más brillante de la habitación, el valor que muestra la Terminal Debug deberá ser mayor conforme la luz disminuye.
Página 240 · ¿Qué es un Microcontrolador?
Si tiene una lámpara brillante trate esto: 9 Ejecute el programa TestPhototransistor.bs2.de la Actividad #1. 9 Elimine las fuentes de luz más brillantes como la luz del sol de la ventana. 9 Encienda la lámpara y apúntela hacia la parte superior del LED a una distancia de 10 cm. Si es posible, apague algunas de las lámparas fluorescentes para disminuir los niveles de luz ambiente. 9 Observe las mediciones que muestra la Terminal Debug conforme usted gradualmente incrementa la distancia de la lámpara de la parte superior del LED. Esto le permitirá que usted determina la distancia de la lámpara del LED. Si usted está en una habitación que tiene sólo lámparas fluorescentes sin fuentes de luz brillantes: Ejecute el programa TestPhototransistor.bs2 de la Actividad #1. Elimina la mayoría de las fuentes brillantes de luz como rayos que entran por la ventana. Si es posible, apague algunas de las lámparas fluorescentes para que los niveles de luz sean bajos. Apunte el LED hacia el monitor de su computadora hasta que casi toque el monitor y vea si la mediones le permiten distinguir entre varios colores del monitor. Pruebas en el Exterior 9 Ejecute el programa StoreLightMeasurements InEeprom.bs2 de la Actividad #2. 9 Desconecte el cable de programación y lleve su tablilla al exterior. 9 Dirija su tablilla para el LED apunte directamente al sol. 9 Presione y suelte el botón de Reset para reiniciar el programa de Adquisición de Datos. 9 Gire gradualmente su tablilla respecto al sol durante 2 ½ minutos. 9 Regrese su tablilla al interior y reconectela a la PC. 9 Ejecute el programa ReadLightMeasurementsFromEeprom.bs2 y examine las mediciones de luz. Como usted giró gradualmente el LED respecto al sol, las mediciones sucesivas deberán ser mas grandes. Su Turno - ¿Puede el BASIC Stamp indicarle si la luz es Verde o Roja?
En la Figura 7-2, el verde esta en la mitad del espectro y el rojo a la derecha. Si usted baja la versión PDF a color de este libro de www.parallax.com usted puede colocar el verde y el rojo en su pantalla y registrar las mediciones de luz del espectro de colores. Entonces,
Midiendo Luz · Página 241
al comparar las mediones más pequeñas de cada LED, y usted puede detectar si el LED está enfrente del color verde o rojo de la pantalla. 9 Empiece con el circuito detector de luz con el LED verde de la Figura 7-22 y la Figura 7-23. 9 Descargue la versión PDF de ¿Qué es un Microcontrolador? de www.parallax.com/go/WAM. 9 Coloque el espectro de colores de la Figura 7-2 en su monitor y agrande la imagen. 9 Con el programa TestPhototransistor.bse muestre las mediciones en la Terminal Debug sostenga su tablilla para que el domo del LED verde apunte directamente en el monitor sobre el espectro de colores. Para mejores resultados el domo del LED casi debe tocar el monitor, y los niveles de luz de su habitación deben ser mínimos. 9 Dislice el LED verde lentamente a lo largo de la barra del espectro que muestra el monitor.y anote que color reporta las mediciones más pequeñas. 9 Repite esto con el LED rojo. ¿Reporto el LED rojo los valores de medición más bajos cuando estaba sobre el color rojo del monitor, y el LED verde reportó sus mediciones más bajas cuando estaba sobre el color verde del monitor? Las mediciones más bajas del LED rojo deben ocurrir cuando está sobre el color rojo del monitor, y las mediciones más bajas del LED verde deben ocurrir cuando estén sobre el color verde del monitor.
RESUMEN Este capítulo introdujo los sensores de luz y describió como se usan en una variedad de productos. Diferentes sensores de luz detectan diferentes clases de luz, y sus hojas de datos describen su sensibilidad en términos de longitud de onda. Este capítulo se enfocó en el fototransistor, un dispositivo que controla la corriente de colector a emisor por la cantidad de luz que incide en su base. Un fototransistor conduce porque luz puede controlar la cantidad de corriente, la técnica para medir la posición de una perilla de un potenciometro del capítulo 5 del circuito RC, también trabaja para medir la luz que incide sobre el fototransistor. El tiempo que requiere un capacitor para perder su carga a través del fototransistor resulta en la medición RCTIME que proporciona un número que corresponde a la brillantez de la luz incidente en el fototransistor. La Adquisición de Datos por almacenamiento de mediciones de luz en el módulo de la memoria de programa EEPROM del BASIC Stamp, se introdujo con las instrucciones WRITE y READ que se usaron para almacenar valores y retirar valores del módulo
Página 242 · ¿Qué es un Microcontrolador?
EEPROM del BASIC Stamp. El volumen de números involucrados en la Adquisición de Datos puede ser dificil de analizar, pero al graficar los datos es más fácil ver patrones, tendencias y eventos. Los datos adquiridos pueden transferirse a hojas de cálculo y graficarse, y ciertas utilerias de graficación puede mostrarlas la Terminal Debug y graficar los valores que el BASIC Stamp manda en vez de mostrarlos como texto. También se desarrollón un ejemplo de aplicación de un Medidor de Luz y éste demostró como se pueden usar las mediciones de luz para controlar otros procesos, en este caso, la velocidad de un patrón circular de un indicador LED de 7 segmentos. Esta aplicación usó subrutinas para realizar tres trabajos diferentes para la aplicación del medidor de luz. El BASIC Stamp puede programarse para convertir la medición del tiempo de descarga de un circuito RC a valores binarios usando instrucciones IF...THEN. Adicionalmente, el programa puede tomar un rango de mediciones del tiempo de descarga de RC y aplicarle histeresis al umbral “luces encendidas” en el rango de mediciones de obscuridad, y un “luces apagadas” en el rango con mayor luz. Esto puede ayudar a prevenir oscilaciones encendido/apagado que de otra forma podrían ocurrir cuando el sensor reporta obscuridad y el dispositivo prede las luces en un área con luminosidad. Sin histeresis, el dispositivo podría sensar la luz y apagar nuevamente las luces y repetir este ciclo en form indefinida. Una aproximación de hardware para sensar los estados de luz encendido/apagado es aplicarle energía al fototransistor con un resistor en serie. Al estudiar la ley de Ohm vimos que la cantidad de corriente que el fototransistor conduce afecta el voltaje del resistor. Este voltaje variable puede conectarse a un pin E/S y generar un 1 binario si el voltaje está arriba de 1.4 V que es el umbral de un pin E/S, o un 0 binario si el voltaje está debajo del voltaje de umbral. El LED (diodo emisor de luz) que emite luz cuando circula por él una corriente también se comporta como un pequeño panel solar cuando le llega luz, y esto genera un pequeño voltaje que a su vez puede hacer circular corriente en los circuitos. Las corrientes que generan los LEDs son pequeñas pero suficientes para una combinación de la propia capacitancia del LED y la capacitanci propia de los clips de la tablilla de experimentos proporcionan suficiente capacitancia para la descarga de un circuito RC sin capacitor externo. Mientras que el fototransistor del kit ¿Qué es un Microcontrolador? se comporta mejor en ambientes interiores, el LED es grandioso para los ambientes exteriores y con mediciones de luz brillante.
Midiendo Luz · Página 243
Preguntas
1. ¿Cuáles son algunos ejemplos de aplicaciones de alumbrado automático que dependen de sensores de luz ambiente? 2. ¿Cuáles son algunos ejemplos de productos que responden a cambios en la brillantes de luz ambiente? 3. ¿Qué rango de longitud de ondas tiene el espectro de luz visible? 4. ¿Cuáles son los nombres de las terminales del fototransistor, y cual de ellas controla la cantidad de corriente que puede circular por el dispositivo? 5. ¿Qué significan las letras de EEPROM? 6. ¿Cuántos bytes puede almacenar el módulo EEPROM del BASIC Stamp? ¿Cuántos bits puede almacenar? 7. ¿Qué instrucción usa usted para almacenar un valor en EEPROM? ¿Qué instrucción usar usted para retirar un valor de EEPROM? ¿Cuál de ellos requiere una variable? 8. ¿Qué es una etiqueta? 9. ¿Qué es una subrutina? 10. ¿Qué instrucción se usa para llamar un subrutina? ¿Qué instrucción se usa para terminar una subrutina? Ejercicios
1. Dibuje el esquemático de un circuito de tiempo RC con fototransistor conectadoa P5. 2. Modifique el programa TestPhototransistor.bs2 para que funciones en un circuito conectado a P5 en lugar de P2. 3. Explique como debería modifica el programa LightMeter.bs2 para que el patrón circular mostrado por el indicador LED de 7 segmentos giren en la dirección opuesta. Proyectos
1. Haga un pequeño prototipo de un sistema que automáticamente ciere las cortinas cuando haya mucha luz y nuevamente las abra cuando disminuya la luz. Use el servo como actuador mecánico. Sugerencia: Para el código usted puede agregar dos instrucciones de control de servo al programa PhototransistorAnalogToBinary.bs2, y cambiar la instrucción PAUSE 100 a PAUSE 1. Asegúres que sigue las instrucciones en el texto para calibrar el área de condiciones de luz antes de hacer la prueba. 2. Para un crédito adicional, refuerce su solución al Proyecto 1 incorporandole las modificaciones de histéresis analizadas en la Actividad #5.
Página 244 · ¿Qué es un Microcontrolador?
Soluciones
Q1. Luces de carros, alumbrado de calles y luces de seguridad externa que automáticamente se iluminan cuando hay obscuridad. Q2. Pantallas de Laptops y cámaras con autoenfoque. Q3. De 380 nm a 750 nm de acuerdo con la fígura 7-2. Q4. Colector, base y emisor. La base controla la cantidad de corriente de emisor a colector. Q5. Memoria de Solo Lectura Electricamente Programable y Borrable. Q6. 2048 bytes. 2048x8 = 16, 384 bits Q7. WRITE para almacenar un valor; READ para retirar un valor. La instrucción READ necesita una variable. Q8. Etiqueta es un nombre que puede usarse para referirese a un lugar en un programa con PBASIC. Q9. Una subrutina es un pequeño segmento de código que hace cierto trabajo. Q10.Se llama con GOSUB y se termina con RETURN E1. Esquemático de la Figura 7-4 con el cambio de P2 a P5.
E2. Los cambios requeridos son muy similares a los que explicamos en la página 202. DO HIGH 5 PAUSE 100 RCTIME 5, 1, time DEBUG HOME, "time = LOOP
", DEC5 time
E3. Para ir en la dirección opuesta, los patrones deben mostrarse en orden inverso. Esto puede hacerse conmutando los patrones dentro de la instrucción LOOKUP, o invirtiendo el orden de obtenerlos de look up. Estas son dos soluciones hechas con subrutinas alternadas Update-Display.
Midiendo Luz · Página 245
Solucion 1
Solucion 2
Update_Display: IF index = 6 THEN index = 0 ' BAFG.CDE LOOKUP index, [ %01000000, %10000000, %00000100, %00000010, %00000001, %00100000 ], OUTH index = index + 1 RETURN
Index = 5 '<<Add after Index variable Update_Display: ' BAFG.CDE LOOKUP index, [ %01000000, %10000000, %00000100, %00000010, %00000001, %00100000 ], OUTH IF (index = 0) THEN index = 5 ELSE index = index - 1 ENDIF RETURN
P1. El fototransistor de la Figura 7-4, el esquemático del servo para su tablilla del Capítulo 4, Actividad #1. ' ¿Que es un Microcontrolador - Ch07Prj01_Blinds_Control.bs2 ' Control de la Posicion del servo con luz. ' {$STAMP BS2} ' {$PBASIC 2.5} valMax valMin time
CON CON VAR
4000 100 Word
PAUSE 1000 DO HIGH 2 PAUSE 1 RCTIME 2, 1, time DEBUG HOME, "time =
' PAUSA 100 -> PAUSA 1 ", DEC5 time
time = time MAX valMax MIN valMin IF time > (valMax - valMin) / 2 THEN DEBUG CR, "Abre las cortinas " PULSOUT 14, 500 ELSE DEBUG CR, "Cierra las cortinas" PULSOUT 14, 1000 ENDIF LOOP
' Modifica ' Agrega ' Modifica ' Agrega
Página 246 · ¿Qué es un Microcontrolador?
P2. Agregando la Funcion Histeresis para el crédito adicional: ' ¿Que es un Microcontrolador? - Ch07Prj02_Blinds_Control_Extra.bs2 ' Control de posición del servo con luz incluyendo histeresis. ' {$STAMP BS2} ' {$PBASIC 2.5} valMax valMin
CON CON
4000 100
time
VAR
Word
PAUSE 1000 DO HIGH 2 PAUSE 1 RCTIME 2, 1, time DEBUG HOME, "time =
' PAUSA 100 -> PAUSA 1 ", DEC5 time
time = time MAX valMax MIN valMin IF time > (valMax - valMin) / 4 * 3 THEN DEBUG CR, "Abre las cortinas " PULSOUT 14, 500 ELSEIF time < (valMax - valMin ) / 4 THEN DEBUG CR, "Cierra las cortinas" PULSOUT 14, 1000 ENDIF LOOP
' Modifica ' Agrega ' Modifica ' Agrega
Midiendo Luz 路 P谩gina 247