11
Como se indica en el anteproyecto, se va a utilizar una placa Arduino Duemilanove . El módulo Ethernet lo emplearemos en una etapa posterior, cuando las lecturas de medidas se hayan resuelto por completo. Respecto a las sondas de temperatura y humedad, tenemos el circuto 808H5V5 para la sonda de humedad, y los circuitos MCP9700A y LM35 para las sondas de temperatura. Se van a realizar pruebas con ambos circuitos, para evaluar cual es el más adecuado para nuestro proyecto. Además, se buscará la forma de mejorar la precisión de las lecturas. A continuación vamos a explicar todos estos puntos, junto al diseño inicial de la conexión en la placa de prototipos. Licenciado bajo Creative Commons CC-BY 3.0 . Entradas analógicas en Arduino, nivel de referencia y conversión A/D Para empezar, vamos a describir brevemente el sistema de entradas analógicas de Arduino y la conversion A/D. Como podemos comprobar por la descripción de la placa , disponemos de 6 de estas entradas, con una resolución de 10 bits (esto es, que miden 1024 niveles diferentes en la señal recibida) y que admiten valores entre 0V y 5V (por defecto). Podemos ajustar este rango de entrada mediante la selección de la señal de referencia analógica. En la versión de Arduino que estamos empleando (con un ATMega 328) disponemos de las siguientes referencias: 5V (la que viene por defecto) 1.1V (generada de manera interna por la placa Arduino) Externa, que la recibe por medio del pin AREF, y podemos usar para establecer una referencia propia. Estos valores serán de gran importancia en la precisión de las medidas, dado que nuestros sensores (tanto de temperatura como de humedad) entregan un voltaje de salida concreto para cada medición, que dependerá del modelo de circuito empleado. En el mejor de los casos, nuestros sensores nos entregarían una señal entre 0V y 5V, que nos permitiera aprovechar todo el margen disponible, pero ahora veremos que esto no sucede así, y deberemos escoger adecuadamente la referencia para poder obtener la precisión adecuada. Veamos esto con más detalle para intentar entenderlo: Si escogemos el rango de 0V a 5V, con 10 bits de precisión (los 1024 niveles mencionados) tenemos que cada 4.88mV de incremento de la señal (aproximadamente, 5000/1024) suponen una diferencia de 1 bit. Esto quiere decir que una señal que tuviera 2.3V nos daría como nivel 471 [(2,5*1024)/5] (se obtiene 471.04, pero se redondea al entero más cercano. De igual forma, una señal con 4.85V nos daría el nivel 993 [(4.85*1024)/5]. Cualquier señal negativa o igual a cero nos dará nivel 0. Cualquier señal de 5V o superior nos dará como nivel 1023. Si empleáramos la referencia de 1.1V, cada bit representaría 1.07mV. Esto nos permite medir con mucha más precisión señales muy pequeñas, pero como veremos más adelante, ya no podemos superar los 1.1V (cualquier señal superior daría como nivel 1023). Por lo tanto, vemos como la selección de la señal de referencia impone restricciones a la amplitud de los niveles de entrada posibles. Descripción de los sensores Comenzaremos describiendo la primera de las sondas de temperatura. La MCP9700A de la casa Microchip tienen un rango entre -40ºCy 125ºC y un error típico de +-1ºC. Puede alimentarse con cualquier tensión entre 2.3V y 5.5V, y entrega 10mV por ºC, con valores de salida entre 100mV (a -40ºC) y 1,75V (a 125ºC). Debido a la relación que presenta entre temperatura y voltaje, habrá que hacer un sencillo cálculo para traducir las lecturas de mV a los grados que representa (lo veremos

74147498 Arduino y Sensores

Embed Size (px)

Citation preview

Page 1: 74147498 Arduino y Sensores

Como se indica en el anteproyecto, se va a utilizar una placa Arduino Duemilanove. El módulo Ethernet lo emplearemos en una etapa posterior, cuando las lecturas de medidas se hayan resuelto por completo.

Respecto a las sondas de temperatura y humedad, tenemos el circuto 808H5V5 para la sonda de humedad, y los circuitos MCP9700A y LM35 para las sondas de temperatura. Se van a realizar pruebas con ambos circuitos, para evaluar cual es el más adecuado para nuestro proyecto. Además, se buscará la forma de mejorar la precisión de las lecturas. A continuación vamos a explicar todos estos puntos, junto al diseño inicial de la conexión en la placa de prototipos.

Licenciado bajo Creative Commons CC-BY 3.0.

Entradas analógicas en Arduino, nivel de referencia y conversión A/D

Para empezar, vamos a describir brevemente el sistema de entradas analógicas de Arduino y la conversion A/D. Como podemos comprobar por la descripción de la placa, disponemos de 6 de estas entradas, con una resolución de 10 bits (esto es, que miden 1024 niveles diferentes en la señal recibida) y que admiten valores entre 0V y 5V (por defecto). Podemos ajustar este rango de entrada mediante la selección de la señal de referencia analógica. En la versión de Arduino que estamos empleando (con un ATMega 328) disponemos de las siguientes referencias:

5V (la que viene por defecto) 1.1V (generada de manera interna por la placa Arduino) Externa, que la recibe por medio del pin AREF, y podemos usar para establecer una

referencia propia.

Estos valores serán de gran importancia en la precisión de las medidas, dado que nuestros sensores (tanto de temperatura como de humedad) entregan un voltaje de salida concreto para cada medición, que dependerá del modelo de circuito empleado. En el mejor de los casos, nuestros sensores nos entregarían una señal entre 0V y 5V, que nos permitiera aprovechar todo el margen disponible, pero ahora veremos que esto no sucede así, y deberemos escoger adecuadamente la referencia para poder obtener la precisión adecuada. Veamos esto con más detalle para intentar entenderlo:

Si escogemos el rango de 0V a 5V, con 10 bits de precisión (los 1024 niveles mencionados) tenemos que cada 4.88mV de incremento de la señal (aproximadamente, 5000/1024) suponen una diferencia de 1 bit. Esto quiere decir que una señal que tuviera 2.3V nos daría como nivel 471 [(2,5*1024)/5] (se obtiene 471.04, pero se redondea al entero más cercano. De igual forma, una señal con 4.85V nos daría el nivel 993 [(4.85*1024)/5]. Cualquier señal negativa o igual a cero nos dará nivel 0. Cualquier señal de 5V o superior nos dará como nivel 1023.

Si empleáramos la referencia de 1.1V, cada bit representaría 1.07mV. Esto nos permite medir con mucha más precisión señales muy pequeñas, pero como veremos más adelante, ya no podemos superar los 1.1V (cualquier señal superior daría como nivel 1023).

Por lo tanto, vemos como la selección de la señal de referencia impone restricciones a la amplitud de los niveles de entrada posibles.

Descripción de los sensoresComenzaremos describiendo la primera de las sondas de temperatura. La MCP9700A de la casa Microchip tienen un rango entre -40ºCy 125ºC y un error típico de +-1ºC. Puede alimentarse con cualquier tensión entre 2.3V y 5.5V, y entrega 10mV por ºC, con valores de salida entre 100mV (a -40ºC) y 1,75V (a 125ºC). Debido a la relación que presenta entre temperatura y voltaje, habrá que hacer un sencillo cálculo para traducir las lecturas de mV a los grados que representa (lo veremos

Page 2: 74147498 Arduino y Sensores

más adelante, en la parte del código). El cálculo concreto se puede obtener en la hoja de características del dispositivo.

El segundo sensor de temperatura, el LM35 de la casa National, tiene un rango entre -55ºC a 150ºC, con un error típico de 0.75ºC. La alimentación oscila entre los 4 y los 30 voltios, y entrega 10mV por ºC, con valores de 0mV (0ºC) hasta 1500mV (150ºC). Notar que decimos que mide desde -50ºC, y sin embargo entrega 0mV a 0ºC. Esto se debe a que se trata de un sensor de grados centígrados que, sin añadirle ningún componente, entrega valores de mV directamente proporcionales a la temperatura positiva en grados centígrados, por ejemplo 170mV para una temperatura de 17º, y 1V para una temperatura de 100ºC. Esto facilita enormemente la utilización en aquellos entornos que no necesitan de lecturas de temperatura negativas (como es nuestro caso). En caso de necesitar valores negativos, es necesario añadir a la salida una resitencia conectada a la tensión de alimentación en negativo, pero esta aplicación queda fuera de nuestro proyecto actual.

Respecto a la sonda de humedad, modelo 808H5V5 de Sencera, mide entre el 0% y el 100% de humedad relativa, teniendo la mayor precisión entre el 30% y el 80% (medida a 25ºC de temperatura). El error típico en la medida es del +-4% durante el primer año de uso, a partir del cual pierde en torno a 1% adicional por cada año. La sonda puede operar entre -40ºC y 85ºC, y tiene un tiempo de respuesta de 15s como máximo. La alimentación es exclusivamente a 5V, y los valores de salida son 0,8V para un 0% de humedad relativa, y 3,9V para un 100%.

Nivel de referencia y mejora de la precisiónComo vemos, los componentes que tenemos no entregan valores entre 0 y 5 voltios, sino que el rango de salida es mucho menor. Esto nos hace perder mucha precisión en la medida, y denemos solucionarlo. Lo primero que podemos hacer es modificar la referencia de la entrada analógica, para lo cual como hemos visto tenemos varias posibilidades de ajuste, interna a 1,1V o externa. Dado que buscamos la mayor simplicidad en nuestro circuito, vamos a optar por la referencia interna.

Usando la referencia de 1,1V

Con respecto a los sensores de temperatura, y dado que la máxima salida está en torno a los 1,5V y 1,75V según el modelo, podemos emplear la referencia de 1,1V. Esto va a tener como contrapartida una limitación en la máxima temperatura a medir, dado que cuando se superen los 1,1V en la salida del sensor siempre se leerán como 1,1V. En la sonda MCP9700A, el valor máximo que corresponde a los 1100mV son 60º, temperatura más que suficiente para nuestro proyecto, manteniendo la lectura de la mímina temperatura en -40ºC, correspondiente a 100mV. Con respecto al sensor LM35, los 1100mV corresponden a 110ºC, y la mínima temperatura se sigue manteniendo en 0ºC a 0mV.

Sin embargo, esta referencia de 1,1V nos impide usar directamente el sensor de temperatura, dado que la salida correspondiente al 100% de humedad relativa se sitúa en 3,9V. Por lo tanto, para poder usar los dos sensores de temperatura y el de humedad de forma simultánea con esta referencia, debemos reducir la salida del sensor de humedad, escalándola al nivel adecuado.

Para escalar la salida de 3,9V y convertirla en 1,1V, el mecanismo más sencillo que tenemos es un divisor de tensión. Si hacemos que nuestra señal sea 0.28 veces la señal original (1.1/3.9=0.28), la salida máxima del sensor es 1,1V, y la mínima de 0,8V se convierte en 0,224V. Para hacer esto, necesitamos un divisor de tensión:

Page 3: 74147498 Arduino y Sensores

Y la relación que debemos cumplir es:

Para implementarlo, usaremos una resistencia fija para R2, de un valor comercial común (1kΩ), y para R1 usaremos un potenciómetro que nos permita un ajuste preciso. Con los valores que tenemos para los voltajes de entrada y salida, y el valor indicador para R2, el valor de R1 que debemos ajustar con el potenciómetro es de 2571,43Ω, por lo tanto usaremos un potenciómetro de 4,7kΩ, valor comercial facilmente disponible. Dado que las resistencias comerciales tiene una cierta tolerancia, el valor final real en el potenciómetro variará un poco respecto a este cálculo. Para el ajuste preciso, alimentaremos el divisor con 5V, y ajustaremos el potenciómetro hasta obtener 1,4V exactos.

Con esta modificación, ya podemos emplear los tres sensores de forma simultánea con la referencia de 1,1V.

Conexionado de los componentesA la hora de conectar los componentes, vamos a utilizar condensadores de desacoplo entre las patillas de alimentación y tierra de cada elemento, para filtrar el ruido en la señal. Estos condensadores son de un valor muy reducido (1μf) y no afectan al funcionamiento del circuito. Los componentes se alimentarán a partir del pin de 5V de Arduino, y la tierra irá conectada al pin GND. La salida de cada componente se conectará a una entrada analógica (0, 1 y 2). Es importante respetar correctamente los pines positivos y negativos de cada componente. Por ejemplo, en nuestro sensor de temperatura, tal y como se ha representado aquí, el pin positivo es el de la izquierda, mientras que en el de humedad es el de la derecha.

Si empleamos la referencia de 5V, la conexion es muy sencilla y directa, como vemos a continuación. Recordar que los 3 condesnadores (C1, C2 y C3) son de 1μf:

Page 4: 74147498 Arduino y Sensores

Si por el contrario vamos a utilizar la referencia de 1,1V, con el divisor de tensión, la conexión será la que mostramos a continuación. De nuevo los condensadores son de 1μf, la resistencia es de 1kΩ y el potenciómetro de 4,7kΩ. Recordar que el potenciómetro debe estar correctamente ajustado para permitir una lectura precisa (si lo alimentamos con 5V debemos obtener 1,4V de salida).

La conexión de la patilla central del sensor de humedad va a una de las patillas del potenciómetro (aquí se ha representado con el pequeño cable amarillo). Recordar que a pesar de emplear otra referencia, los circuitos se siguen alimentando a 5V.

Siguiendo con el proyecto, vamos a ver el código necesario para leer los datos de los sensores, y mostrarlos por la salida serie.

En esta primera versión no empleamos el módulo Ethernet, y nos centraremos en realizar las lecturas de las entradas analógicas. Tal y como se vió en el anterior post, podemos utilizar dos referencias para los voltajes de entrada (5V y 1,1V), el código de ambas versiones es prácticamente idéntico a excepción del ajuste de la señal de referenvia (5V ó 1,1V) y el consiguiente cálculo para convertir la señal leída en la entrada al valor en mV.

Comenzamos por la versión más sencilla, la de 5V, y después indicaremos las modificaciones necesarias para la versión a 1,1V. Veremos las ecucaciones que necesitamos para convertir los datos recibidos de las entradas analógicas en valores de temperatura y humedad relativa, ecuaciones que obtenemos de las hojas de características de los dispositivos. Dado que disponemos de dos tipos distintos de sensores de temperatura, necesitaremos dos ecuaciones diferentes en función del dispositivo utilizado.

Licenciado bajo Creative Commons CC-BY 3.0.

Conversión de la señal de entrada a mVLa entrada analógica entrega un valor entre 0 y 1023, que necesitamos convertir en mV. Esta conversión depende de la señal de referencia escogida. Para la versión a 5V, esto se hace mediante

Page 5: 74147498 Arduino y Sensores

la ecuación:

Para la versión a 1,1V, usamos una ecuacion parecida, teniendo en cuenta la nueva referencia:

Conversión de la señal en mV a los valores realesDebemos convertir estos valores en mV a sus correspondientes valores físicos (ºC y % de humedad relativa). En todos los casos, debemos obtener las ecucaciones para la conversión de las hojas de características de cada dispositivo.

Sensores de temperatura

En el caso de las sondas de temperatura MCP9700A, vemos que la señal que entregan a 0ºC es de 500mV, así pues al valor recibido en mV desde la entrada analógica le restaremos esta cantidad. Además, el valor que se obtiene habrá que dividrlo por 10, dado que cada grado de temperatura supone un incremento de 10mV en la señal de salida. Por lo tanto, la ecuación es:

En el caso de los sensores LM35, ya están calibrados para grados centígrados. Por lo tanto, la salida en mV es directamente proporcional a la temperatura, y sólo deberemos dividir el valor por 10 (cada grado supone un incremento de 10mV en la salida):

Estas ecuaciones son las mismas tanto para la señal de referencia de 5V como para la señal de 1,1V.

Sensor de humedad

En el caso del sesor de humedad 808H5V5, la ecuación sufrirá modificaciones en función de la señal de referencia, dado que en uno de los casos utilizamos un divisor de tensión. En la versión a 5V, comprobando las hojas de características vemos que el sensor entrega 0,8V para un 0% de HR y 3,9V para el 100%. Por lo tanto, a la señal medida en mV le restamos 800mV, y para obtener el dato en porcentaje, dividimos el resultado entre 31 (3900 - 800=3100):

Si empleamos la referencia de 1,1V, deberemos hacer los cálculos para adaptar estos valores. Con el divisor de tensión empleado, las señales de salida normales, 0,8V a 3,9V, se convierten en 0,224V a 1,092V. Esto supone que al valor medido en mV deberemos restarle 224mV, y para convertir el resultado a porcentaje, dividimos por 8,68 (1092-224=868):

Page 6: 74147498 Arduino y Sensores

Código ArduinoPara descargar los ficheros con los programas, ve al final del post.

Versión con referencia de 5V

Comenzamos con el código para la referencia de 5V. Lo que vamos a llevar a cabo en esta primera versión es una lectura simple que nos muestre los datos por el puerto serie. Este código servirá como primera aproximación, y veremos que tiene algunos problemas que se solucionarán en posteriores versiones. Está completamente comentado (incluyendo las explicaciones de las ecuaciones anteriores). Por defecto se supone el uso de las sondas de temperatura MCP9700A, pero también se incluye el código para las LM35 (comentado).

Versión con referencia de 1,1V

El código para la versión a 1,1V tiene algunas variaciones. La primera es el cambio de la tensión de referencia con la instrucción analogReference(INTERNAL), y además tendremos que adaptar las ecuaciones empleadas para hacer la conversión de las lecturas, tal y como se explica en las ecuaciones anteriores.

Ejecución y resultados

Mediante el entorno de desarrollo de Arduino, se ha compilado el código y se ha subido a la placa, donde comienza a ejecutarse inmediatamente. Si nos conectamos al monitor serie incluido en el entorno, obtenemos las lecturas de los sensores. Tal y como se comenta en el código, esta primera versión tiene algunos problemas que se observan en el resultado:

Baja estabilidad de las medidas: las lecturas de las tensiones en las entradas analógicas varían mucho entre cada ejecución (esto es especialmente notable en las lecturas del sensor de humedad).

Diferencia de temperatura entre los dos sensores: cada sensor entrega una temperatura diferente, debido al error interno que presenta cada componente.

Resultados sin calibrar: los valores mostrados difieren del valor real de temperatura y humedad en la habitación, dado que no se han calibrado los componentes.

En la versión a 5V, debido a la pérdida de precisión, los saltos entre diferentes medidas son bastante grandes.

El primero de estos problemas se puede solucionar de forma sencilla en las siguientes versiones del código. Los dos problemas referidos a la calibración de los sensores se dejan para una etapa posterior, con el montaje final ya realizado en la placa definitva, dado que es posible que el montaje actual (en una placa de prototipado) introduzca ruido en las señales que afecte a las medidas. Con respecto al problema de precisión, se soluciona empleando la referencia de 1,1V.

Un ejemplo de la salida del programa (en concreto, de la versión a 1,1V usando sensores LM35) es el siguiente:

Page 7: 74147498 Arduino y Sensores

Programa inicial, referencia 1,1V

Se puede observar la elevada variabilidad del sensor de humedad, y la precisión en las medidas: la variación mínima que pueden detectar los sensores de temperatura está en torno a los 0,11ºC, mientras que el salto mínimo en la versión de 5V está en torno a los 0,51ºC (como vemos, directamente relacionado con la señal de referencia escogida).

Capítulo 6: Usando los pines analógicos

Como se mencionó anteriormente en este libro, el mundo real no es digital y, a veces, no puedes traducir los cambios en el entorno en lecturas digitales. Por ejemplo, la temperatura no cambia sólo de frío a caliente, cambia en un rango valores distintos y, normalmente, estos cambios ocurren muy lentamente. Éste es el motivo por el cual, a menudo, utilizamos sensores analógicos para leer los parámetros del entorno tales como, la temperatura, la luz, o el movimiento. Esta información resultante es almacenada como datos digitales secuenciales. Dado que Arduino no puede manejar la información como los humanos, necesitamos traducir los datos analógicos para que Arduino pueda entenderlos.

Los sensores analógicos pueden transformar los datos del entorno en un valor de voltaje comprendido entre 0V y 5V. Estos valores son distintos de los HIGH o LOW que utilizan los sensores digitales. Para los pines digitales, HIGH y LOW significan 5V y 0V respectivamente, y nada más. Sin embargo los pines analógicos pueden diferenciar cualquier valor intermedio.

La resolución entre los valores máximos y mínimos difieren de un microprocesador a otro. Arduino únicamente puede distinguir 1024 niveles en rango de 0V a 5V.

Page 8: 74147498 Arduino y Sensores

1: La cremallera analógica

La cremallera analógica es diferente a la cremallera digital del capítulo anterior. La cremallera digital sólo podía estar HIGH o LOW (5V o 0V). sin embargo, la cremallera analógica, puede darte un rango de valores entre 0V y 5V.

Para hacer una cremallera analógica necesitas una cremallera normal, algo de hilo conductor y una resistencia de 10kΩ. Comience cosiendo la resistencia en su lugar. Después cose un cable rojo en uno de los terminales de la resistencia, y un cable azul en el otro terminal. Los colores de los cables son para que recuerdes dónde va cada cable. Desde donde empieza el cable azul, cóselo entre cada diente de la cremallera. Cuando llegues al final de un lado de la cremallera, haz lo mismo en el otro lado y baja de nuevo.

Asegurate de que el hilo está intacto a lo largo de la cremallera o no funcionará. Una vez hayas llegado al final de la cremallera por el otro lado, une un cable negro y coselo en su lugar. Ahora la cremallera está lista y podemos empezar a escribir nuestro código para leer qué valores nos proporciona la cremallera. Para poder mostrar qué valores nos da la cremallera, necesitamos usar la comunicación serie, de modo que Arduino pueda conectarse al equipo y mostrarnos los datos en el monitor:

int analogPin = 2; /* Aquí declaramos que queremos usar el pin analógico 2, y lo llamaremos analogPin */

int myZipper=0; /* Aquí declaramos un entero que actuará como variable temporal, donde podremos almacenar los valores que nos proporcione la cremallera */

void setup(){ Serial.begin(9600); /* Esto configurará tu comunicación y la fijará a 9600 baudios (9600 bits por segundo) */}

void loop(){ myZipper = analogRead(analogPin); /* Aquí hacemos una lectura analógica de analogPin y guardamos el valor en la variable myZipper */ Serial.println(myZipper); /* Este comando enviará el valor almacenado en myZipper a través del puerto serie y después hace una pausa de 200 milisegundos */ delay(200); //pausa de 200 milisegundos}[Get Code]Lo primero que hacemos en void loop() es una lectura analógica del pin analógico 2. El valor es almacenado en la variable myZipper. Después imprimimos este valor por el puerto serie y, cualquier aparato conectado a Arduino (por ejemplo, un PC) recibirá el valor almacenado en la variable. Lo ultimo que hacemos es añadir una pausa en nuestro programa, ya que, aunque Arduino es pequeño, todavía se comunica más rapidamente que un ordenador normal, así que la pausa permite sincronizarse con Arduino. Ahora podemos subir nuestro código a la placa Arduino. Una vez que el código está subido, conecta el cable rojo en el puerto que indica 5V, el cable negro a uno de los puertos de GND, y el último cable al pin analógico 2. Si declaras tu analogPin en tu programa como cualquiero otro pin que no sea el 2, tendrás que colocar el cable azul en ese pin analógico:

Una vez que hayas subido el código y conectado los cables, abre el monitor serie, que es el botón más a la derecha de tu IDE de Arduino. Ahora aparecerán los valores en el monitor y, si abres y

Page 9: 74147498 Arduino y Sensores

cierras la cremallera, los valores irán cambiando. Si no puedes ver ningún número en tu monitor, asegurate que la velocidad de comunicación fijada en el IDE de Arduino es la misma que en tu programa (9600 en el ejemplo). Cada cremallera te dará unos valores diferentes, puesto que no es algo exacto; pequeñas diferencias afectarán en los resultados. Este tipo de sensor analógico casero es lo suficientemente bueno como para ser usado en la mayoría de prototipos que necesiten un dispositivo de entrada oculto.

2: Usando un sensor de luz LDR

El siguiente esquema muestra como coser una LDR y una resistencia en un trozo de tela y dónde deben conectarse los cables en el Arduino: '###################################### The resistor used in the example is what is called a “pull up resistor”. We sometimes use pull up resistors to ensure we won’t get 5V straight back in the Arduino. A pull up resistor is the same as a normal resistor but is used to lower the output voltage from a power source. The combination of a resistor with the LDR is also necessary for another reason: without it we wouldn’t be able to get analog values from the LDR. This configuration is called a voltage divider and it changes the voltage on the Arduino input depending on the changes in the LDR. '#######################################

La resistencia usada en el ejemplo es lo que llamamos una resistencia "Pull up". A veces usamos resistencias pull-up para asegurarnos que no recibe los 5V en sentido contrario el Arduino. Una resistencia Pull up es una resistencia normal pero usada para reducir el voltaje de salida de una fuente de tensión. La combinación de una resistencia con la LDR es necesaria por otra razón: sin ella no seríamos capaces de obtener valores analógicos de la LDR. Ésta configuración se conoce con el nombre de divisor de tensión y cambia el voltaje a la entrada del Arduino dependiendo de los cambios en la LDR. Conecta un cable rojo a una de las patillas de la resistencia y a los 5V de Arduino. Entre la resistencia y la LDR ponemos un cable que conecte a nuestro pin analógico. La misma conexión va a una patilla de la LDR. No importa que patilla conectes. De la otra patilla de la LDR cose un cable que conecte con el puerto GND del Arduino. Cuando hayas conectado todo prueba el siguiente código y observa los valores que proporciona la LDR:

int analogPin = 2; /* el pin analógico que usaremos en Arduino */int myLDR = 0; /* variable temporal para almacenar los valores de la LDR */

void setup(){ Serial.begin(9600); /* configurando la conexión y la velocidad */}

void loop(){ myLDR = analogRead(analogPin); /* leemos el valor de la LDR y lo almacenamos */ Serial.println(myLDR); /* mostramos el valor almacenado en myLDR */ delay(200);}[Get Code]En el ejemplo anterior leemos el valor, lo almacenamos y lo mostramos en el ordenador. No olvides abrir tu monitor serie en el IDE de Arduino y configurarlo a 9600 baudios para poder ver los valores captados por Arduino. Una vez que todo funcione, prueba a tapar la LDR con tu mano y comprueba que el valor que devuelve Arduino. Recuerda este valor y prueba el siguiente código de ejemplo.

Page 10: 74147498 Arduino y Sensores

int analogPin = 2; /* el pin analógico que usaremos en Arduino */int myLDR = 0; /* variable temporal para almacenar el valor de la LDR */int myDarkNumber = 100; /* el umbral de oscuridad, sustituir por el valor obtenido tapando la LDR con la mano */int ledPin = 13;

void setup(){ Serial.begin(9600); /* configurando la conexión y la velocidad */ pinMode(ledPin,OUTPUT); /* declaramos ledPin como Salida */}

void loop(){ myLDR = analogRead(analogPin); /* leemos el valor de la LDR y lo almacenamos */ if (myLDR <= myDarkNumber){ digitalWrite(ledPin,HIGH); }else{ digitalWrite(ledPin,LOW);}}[Get Code]En este ejemplo la variable "myDarkNumber" es el valor que obtuviste al tapar la LDR con la mano en el ejemplo anterior. En mi caso es 100, pero tú debes cambiarlo por tu valor. Este programa leerá el valor de la LDR y lo comparará con la variable del umbral (myDarkNumber) y si la LDR es menor o igual al umbral el LED interno de la placa Arduino se ecenderá, de no ser así permanecerá apagado. 3: Usando un sensor de temperatura NTC

El código siguiente, para leer un termómetro, es el mismo que para la LDR. Ambos funcionan bien por tratarse de sensores analógicos:

int analogPin = 2; /* el pin analógico que usaremos en Arduino */

int myNTC= 0; /* variable temporal para guardar los valores del termómetro */

void setup(){ Serial.begin(9600); /* configurando la comunicación y la velocidad */}

void loop(){ myNTC = analogRead(analogPin); /* lee el valor del NTC y lo almacena */ Serial.print(myNTC); /* muestra el valor almacenado en myNTC */ delay(200);}[Get Code]

Page 11: 74147498 Arduino y Sensores

Ahora conecta todo como muestra la siguiente ilustración y carga el código en tu placa Arduino. Una vez que todo esté en su lugar, abre tu monitor serie e intenta calentar tu termómetro con las manos. Debes poder observar variaciones frente al valor original, cuando comenzó el programa. Aunque los termistores no sean los mejores sensores para obtener la temperatura exacta, son una manera fácil y barata de diferenciar entre frío y caliente. Si estás usando altas corrientes en tus prendas, o materiales que se calienten como "muscle wires", los termistores son una manera de comprobar si tu prenda está demasiado caliente (antes de que empiece a arder).

analogReference (type)

Descripción

Configura el voltaje de referencia utilizado para la entrada analógica (es decir, el valor utilizado como tope de gama de entrada). Las opciones son: DEFAULT (Por defecto): la referencia por defecto analógica de 5 voltios (5 V en la placa

Arduino) o 3,3 voltios (3,3 en la placa Arduino). INTERNOS: un built-in de referencia, igual a 1,1 voltios en el ATmega168 o ATmega328 y

2.56 voltios en el ATmega8 (no disponible en la placa Arduino Mega). INTERNAL1V1: una referencia integrada 1.1V (Mega Arduino solamente). INTERNAL2V56: un built-in de referencia 2.56V (Mega Arduino solamente). EXTERNO: el voltaje aplicado al pin AREF (0 a 5 V sólo) se utiliza como referencia.

Parámetros

Tipo (type): el tipo de referencia (por defecto, INTERNA, INTERNAL1V1, INTERNAL2V56, o externo).DevolucionesNinguno.notaDespués de cambiar la referencia analógica, las primeras lecturas de algunos analogRead () puede no ser exacta.advertenciaNo use nada menos que 0 V o más de 5 V para el voltaje de referencia externo en el pin AREF! Si está utilizando una referencia externa en el pin AREF, debe establecer la referencia analógica a EXTERNAL antes de llamar a analogRead (). De lo contrario, se corta la tensión de referencia, junto activa (generados internamente) y el pin AREF, la posibilidad de dañar el microcontrolador en la placa Arduino.Como alternativa, puede conectar la tensión de referencia externa al pin AREF través de una resistencia de 5 km, lo que le permite cambiar entre las tensiones de referencia externos e internos. Tenga en cuenta que la resistencia va a alterar el voltaje que se usa como referencia porque hay una resistencia interna de 32K en el pin AREF. El segundo acto como un divisor de tensión, por lo que, por ejemplo, 2,5 V aplicada a través de la resistencia dará 2,5 * 32 / (32 + 5) = ~ 2.2V en el pin AREF.