Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Universidad Nacional de la Facultad de Ingeniería de Amazonia Peruana Sistemas e Informática 1 UNIVERSIDAD NACIONAL DE LA AMAZONIA PERUANA FACULTAD DE INGENIERIA DE SISTEMAS E INFORMATICA LABORATORIO DE ELECTRONICA DIGITAL GUIA - INFORME Nº 13 CURSO : ELECTRONICA DIGITAL TEMA : Sensores Básicos de Luz y Temperatura PROFESOR : GRUPO : ALUMNO : CODIGO : NOTA: FECHA EXPE.: SEMEST. ACADÉ. 2020 - I Universidad Nacional de la Facultad de Ingeniería de Amazonia Peruana Sistemas e Informática 2 13avo LABORATORIO Tema: Sensores Básicos de Luz y Temperatura Objetivo: Hacer que el alumno adquiera practica en el manejo de las entradas analógicas con diferentes tipos de sensores como los de luz y temperatura con cuenta el Arduino. Material y Equipo: Diodos LED Resistencias Un Protoboard Cablecitos de Conexión Una Tarjeta Arduino Uno Cable USB EXPERIENCIA No 1: Variando el Parpadeo de un LED con una LDR Una LDR (Light Dependent Resistor) es una resistencia que varía su valor en función de la luz recibida, cuanta más luz recibe, menor es su resistencia. Una LDR está fabricada con un semiconductor de alta resistencia como puede ser el sulfuro de cadmio. Si la luz que incide en el dispositivo es de alta frecuencia, los fotones son absorbidos por la elasticidad del semiconductor dando a los electrones la suficiente energía para saltar la banda de conducción Figura 1.- LDR El electrón libre que resulta (y su hueco asociado) conduce electricidad, de tal modo que disminuye la resistencia. Las células de sulfuro del cadmio se basan en la capacidad del cadmio de variar su resistencia según la cantidad de luz que incide en la célula. Cuanta más luz incide, más baja es la Universidad Nacional de la Facultad de Ingeniería de Amazonia Peruana Sistemas e Informática 3 resistencia. Las células son también capaces de reaccionar a una amplia gama de frecuencias, incluyendo infrarrojo (IR), luz visible y ultravioleta. El rango de resistencia que nos puede dar un LDR desde la total oscuridad hasta la plena luz, nos va a variar de un modelo a otro, pero en general oscila entre unos 50 Ώ a 1000 Ώ cuando están completamente iluminadas y entre 50 KΏ y varios MΏ cuando está completamente a oscuras. Desarrollaremos el circuito mostrado en la Figura 2, veremos como el sensor hará variar el parpadeo de un LED conectado al pin 7 del Arduino. Según haya más o menos luz sobre ella, el LED parpadeara con más o menos frecuencia. La LDR la conectamos a la entrada analógica A0. Al tener la LDR en la parte superior del divisor de tensión, tendremos la tensión máxima cuando esté completamente iluminada, ya que se comportará prácticamente como una resistencia de 50 Ώ o 100 Ώ. Si está a oscuras, no dejara pasar corriente, comportándose como un circuito abierto. El valor de la resistencia que acompaña a la LDR no es crítico. Cualquier valor de 1 K a 10 K se puede utilizar. El nivel de luz en la LDR (LDR GL5528) cambiará el nivel de tensión en el pin análogo A0. La función analogRead() proporciona un valor que oscila entre 500 (cuando el LDR está en la oscuridad ) y 350 (cuando hay mucha luz), lo cual determina la duración de encendido y apagado del LED, por lo que la frecuencia de parpadeo aumenta con la intensidad de la luz. Si desea visualizar el valor de la variable de parpadeo en la pc, puede utilizar el monitor serie del IDE. En cuanto al hardware que se necesita es: Un diodo LED UNA Resistencia DE 10 KΩ Una LDR GL5528 (Resistencia con luz ~ 1 KΏ) (Resistencia con Oscuridad ~ 10 KΏ) Un Protoboard. Cablecitos de conexión Un Arduino Un cable USB Programa: Variando el Parpadeo de un LED con una LDR const int maxDuracion = 1000; void setup() Universidad Nacional de la Facultad de Ingeniería de Amazonia Peruana Sistemas e Informática 4 // put your setup code here, to run once: { pinMode (ledPin, OUTPUT); Serial.begin (9600); } void loop() // put your main code here, to run repeatedly: { int rango = analogRead(SensorPin); rango = map(rango,500,950,minDuracion, maxDuracion); Serial.println (rango); digitalWrite (ledPin, HIGH); delay (rango); digitalWrite (ledPin, LOW); delay (rango); } Figura 2.- Diagrama del Circuito con el Sensor de Luz Universidad Nacional de la Facultad de Ingeniería de Amazonia Peruana Sistemas e Informática 5 En este sketch nos aparece una función nueva que utilizaremos a menudo con las entradas analógicas del Arduino. Se trata de la función de ajuste de escala denominada map(). TIP 1: • Map(valor, desde_bajo, desde_alto, hasta_bajo, hasta_alto).”Re-mapea” un numero desde un rango hacia otro. Esto significa que un valor con respecto al rango desde_bajo- desde_alto, será mapeado al rango hasta_bajo-hasta_alto. • valor: el numero(valor) a mapear. • desde_bajo: el límite inferior del rango actual del valor. • desde_alto: el límite superior del rango actual del valor. • hasta_bajo: el límite inferior del rango deseado • hasta_alto: el límite superior del rango deseado. • En nuestro caso, cuando llegue un valor de 500 se le escalará el valor a minDuracion y cuando tengamos 950 lo “remapearemos” a maxDuracion. Todos los valores intermedios se ajustarán por interpolación. Básicamente, lo que estamos haciendo es igualar escalas de rango de valores. De ahí que establezcamos una duración mínima y una máxima para el retardo implicado en el parpadeo del LED. TRABAJO ENCARGADO: Diseñe un circuito que avise mediante un zumbador cuando la luz que incide sobre una LDR caiga por debajo de un valor determinado. Por ejemplo, cuando se haga la oscuridad. Universidad Nacional de la Facultad de Ingeniería de Amazonia Peruana Sistemas e Informática 6 EXPERIENCIA 2: FUNCIONAMIENTO DEL SENSOR DE TEMPERATURA Realizaremos mediciones de temperatura con el Arduino y el sensor LM35. Dicho sensor es un sensor analógico de Texas Instruments. Nos permite realizar medidas de temperatura de una forma bastante precisa a través de las entradas analógicas del Arduino (pines A0-A5) sin necesidad de emplear ninguna librería específica para su programación. Figura 3.- Sensor de Temperatura LM35 Como se puede ver en las figuras 6.3, 6.4 y 6.5, es un sensor que presenta únicamente 3 pines (VCC, GND y Data). Por ello su conexión es muy sencilla. Este sensor tiene una salida analógica proporcional a la temperatura que registra (pin del centro). Para conectarlo al Arduino, el pin +Vs debe conectarse al pin 5V de la placa. El pin VOUT, a cualquier pin de entradas analógicas y el pin GND, al conector GND de nuestro Arduino. Además, presenta las siguientes características eléctricas: Esta calibrado en grados Celsius Rango de medición de -55 °C a 150 °C La tensión de salida es proporcional a la temperatura (1 °C = 10 mV) Presenta una precisión de 0.5 °C Rango de Alimentación entre 4 y 30 V Presenta baja impedancia de salida Presenta baja corriente de alimentación Este circuito en particular funcionara únicamente con temperaturas por encima de 0°C, por lo que sirve para proyectos en un interior (o en exterior de zonas cálidas). Si quieres medir temperaturas Universidad Nacional de la Facultadde Ingeniería de Amazonia Peruana Sistemas e Informática 7 por debajo de 0°C hay que variar el circuito tal y como se muestra en la hoja de características del LM35 proporcionado por el fabricante. La práctica que vamos a realizar consiste en medir la temperatura ambiente constantemente e ir mostrándola en el monitor serie del IDE de nuestro ordenador. En la figura 4 observamos el montaje em Proteus. En cuanto al Hardware que necesitamos: Un LM35 o TMP36 Un Protoboard Cablecitos de Conexión Un Arduino y un Cable USB. Hoy en día el sensor de temperatura TMP36 es muy popular, sustituye perfectamente al clásico LM35 y es totalmente compatible con él para la mayoría de las aplicaciones. Figura 4.- Sensor de Temperatura Programa: Midiendo Temperatura con el Sensor LM35 /* Experiencia 2: Midiendo Temperaturas */ /*Medidas de temperatura con el LM35 y visualización en el monitor serie */ float temperatura; Universidad Nacional de la Facultad de Ingeniería de Amazonia Peruana Sistemas e Informática 8 int tempPin = 0; /*Definimos la temperatura como una variable de tipo float*/ void setup() // put your setup code here, to run once: { Serial.begin(9600); } void loop() // put your main code here, to run repeatedly: { temperatura = analogRead (tempPin); temperatura = temperatura*0.48828125; Serial.print("TEMPERATURA = "); Serial.print(temperatura); Serial.print("*C"); Serial.println(); delay (3000); } Como se observará en el Terminal Virtual del Proteus mostrará los valores de temperaturas constantemente. Más adelante veremos la forma de visualizar estos datos en un LCD para independizar el Arduino del PC, y también para no pasar frío y poder verlos a distancia desde dentro de casa utilizando una comunicación de datos inalámbrica muy sencilla. Pero vamos al grano y expliquemos el código del sketch anterior. Viene con cosas nuevas que merecen nuestra atención ya que van a ser habituales en los programas que utilicen algún tipo de sensor de tipo analógico. Para leer las temperaturas tenemos una orden muy simple: analogRead(tempPin). Nos devolverá un valor digital entre O y 1024 directamente proporcional a la tensión recibida. Mirando la hoja de datos del sensor, vemos que por cada °C, la tensión en el pin Vout aumenta 10 mV, por lo que para dar los 5 V máximos (que corresponderían a una lectura de 1024) necesitaríamos 500 °C. Universidad Nacional de la Facultad de Ingeniería de Amazonia Peruana Sistemas e Informática 9 Esta temperatura no la vamos a alcanzar nunca (el sensor se fundiría antes). Por tanto, mediante una regla de 3, calculamos la operación de conversión desde el valor que leemos en el pin hasta la temperatura real: temperatura = lectura * 500/1024. temperatura = lectura * 0.48828125. Pero ahora nos sale un número con decimales (flotante) como resultado de la primera división; por tanto, no podemos utilizar un tipo de variable entero (int) para la temperatura. Es necesario usar otro tipo de variable denominado float. TIP 2: • float (nombre variable). Este tipo variable se usa para los números en coma flotante (número decimal). Estos números son usados habitualmente para aproximar valores analógicos debido a que ofrecen una mayor resolución que los enteros. Las variables tipo float tienen el valor máximo 3.4028235E+38 y como mínimo pueden alcanzar el - 3.4028235E+38. Ocupan 4 bytes (32 bits). Tienen una precisión de 6 o 7 dígitos decimales. Esto abarca el número total de dígitos, no el número a la derecha de la coma decimal. En nuestro programa hemos definido la variable temperatura como de tipo ftoot, • Si quisiéramos conseguir mayor precisión podríamos utilizar voltajes de referencia, lo que nos ayudaría a tener un rango de temperatura menor ganando en calidad o resolución de lectura. Por ejemplo, podríamos usar la salida de 3.3 V del Arduino para alimentar el LM35. En este caso la parte de código implicada sería: temperatura = lectura * 330/1024. temperatura= lectura * 0.322265625. • Pero para una aplicación usual no es necesario tanto. Con el método utilizado tenemos una precisión aproximada de 0.5 °C. Por último, enviamos o «imprimimos» en el monitor serie tanto las temperaturas medidas, como el texto formateado para darle un poco de alegría a nuestro código. TRABAJO ENCARGADO: Diseña un circuito que produzca una señal de alarma sonora que se active cuando la temperatura ambiente suba por encima de 35 °C. Utiliza un LM35 (TMP36), un pequeño zumbador o altavoz y un mechero para, con cuidado, acercar al sensor y simular una subida de temperatura. LABORATORIO DE ELECTRONICA DIGITAL
Compartir