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 refer encia 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 ajust ar este rango de entrada mediante la selección de la señal de r eferencia 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 describi endo 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

arduino y sensores

Embed Size (px)

Citation preview

Page 1: arduino y sensores

5/11/2018 arduino y sensores - slidepdf.com

http://slidepdf.com/reader/full/arduino-y-sensores 1/11

Como se indica en el anteproyecto, se va a utilizar una placa Arduino Duemilanove. El móduloEthernet 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 dehumedad, 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 todosestos 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 laconversion 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ñalrecibida) y que admiten valores entre 0V y 5V (por defecto). Podemos ajustar este rango de entradamediante la selección de la señal de referencia analógica. En la versión de Arduino que estamosempleando (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 nosentregarían una señal entre 0V y 5V, que nos permitiera aprovechar todo el margen disponible, peroahora 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 unadiferencia 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, unaseñal con 4.85V nos daría el nivel 993 [(4.85*1024)/5]. Cualquier señal negativa o igual a cero nosdará 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 conmucha más precisión señales muy pequeñas, pero como veremos más adelante, ya no podemossuperar 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 amplitudde los niveles de entrada posibles.

Descripción de los sensores

Comenzaremos describiendo la primera de las sondas de temperatura. La MCP9700A de la casaMicrochip 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á quehacer un sencillo cálculo para traducir las lecturas de mV a los grados que representa (lo veremos

Page 2: arduino y sensores

5/11/2018 arduino y sensores - slidepdf.com

http://slidepdf.com/reader/full/arduino-y-sensores 2/11

más adelante, en la parte del código). El cálculo concreto se puede obtener en la hoja decaracterí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 gradoscentí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 unatemperatura de 17º, y 1V para una temperatura de 100ºC. Esto facilita enormemente la utilizaciónen 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 latensió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% dehumedad relativa, teniendo la mayor precisión entre el 30% y el 80% (medida a 25ºC detemperatura). 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 desalida son 0,8V para un 0% de humedad relativa, y 3,9V para un 100%.

Nivel de referencia y mejora de la precisión

Como vemos, los componentes que tenemos no entregan valores entre 0 y 5 voltios, sino que elrango de salida es mucho menor. Esto nos hace perder mucha precisión en la medida, y denemossolucionarlo. Lo primero que podemos hacer es modificar la referencia de la entrada analógica, paralo cual como hemos visto tenemos varias posibilidades de ajuste, interna a 1,1V o externa. Dadoque 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 y1,75V según el modelo, podemos emplear la referencia de 1,1V. Esto va a tener como contrapartidauna limitación en la máxima temperatura a medir, dado que cuando se superen los 1,1V en la salidadel sensor siempre se leerán como 1,1V. En la sonda MCP9700A, el valor máximo que correspondea los 1100mV son 60º, temperatura más que suficiente para nuestro proyecto, manteniendo lalectura 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 a0mV.

Sin embargo, esta referencia de 1,1V nos impide usar directamente el sensor de temperatura, dadoque 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 undivisor de tensión. Si hacemos que nuestra señal sea 0.28 veces la señal original (1.1/3.9=0.28), lasalida 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: arduino y sensores

5/11/2018 arduino y sensores - slidepdf.com

http://slidepdf.com/reader/full/arduino-y-sensores 3/11

Y la relación que debemos cumplir es:

 

Para implementarlo, usaremos una resistencia fija para R 2, de un valor comercial común (1kΩ), y para R 1 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 R 2, el valor de R 1 que debemosajustar 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 ciertatolerancia, el valor final real en el potenciómetro variará un poco respecto a este cálculo. Para elajuste preciso, alimentaremos el divisor con 5V, y ajustaremos el potenciómetro hasta obtener 1,4Vexactos.

Con esta modificación, ya podemos emplear los tres sensores de forma simultánea con la referenciade 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. Estoscondensadores son de un valor muy reducido (1μf ) y no afectan al funcionamiento del circuito. Loscomponentes 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 importanterespetar correctamente los pines positivos y negativos de cada componente. Por ejemplo, en nuestrosensor 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: arduino y sensores

5/11/2018 arduino y sensores - slidepdf.com

http://slidepdf.com/reader/full/arduino-y-sensores 4/11

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 otrareferencia, 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 laslecturas de las entradas analógicas. Tal y como se vió en el anterior post, podemos utilizar dosreferencias para los voltajes de entrada (5V y 1,1V), el código de ambas versiones es prácticamenteidé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 modificacionesnecesarias para la versión a 1,1V. Veremos las ecucaciones que necesitamos para convertir los datosrecibidos de las entradas analógicas en valores de temperatura y humedad relativa, ecuaciones queobtenemos de las hojas de características de los dispositivos. Dado que disponemos de dos tiposdistintos de sensores de temperatura, necesitaremos dos ecuaciones diferentes en función deldispositivo 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. Estaconversión depende de la señal de referencia escogida. Para la versión a 5V, esto se hace mediante

Page 5: arduino y sensores

5/11/2018 arduino y sensores - slidepdf.com

http://slidepdf.com/reader/full/arduino-y-sensores 5/11

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 reales

Debemos convertir estos valores en mV a sus correspondientes valores físicos (ºC y % de humedadrelativa). En todos los casos, debemos obtener las ecucaciones para la conversión de las hojas decaracterí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 de500mV, 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 temperaturasupone 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 salidaen 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 laseñal de referencia, dado que en uno de los casos utilizamos un divisor de tensión. En la versión a5V, comprobando las hojas de características vemos que el sensor entrega 0,8V para un 0% de HR y3,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 eldivisor de tensión empleado, las señales de salida normales, 0,8V a 3,9V, se convierten en 0,224V a1,092V. Esto supone que al valor medido en mV deberemos restarle 224mV, y para convertir elresultado a porcentaje, dividimos por 8,68 (1092-224=868):

 

Page 6: arduino y sensores

5/11/2018 arduino y sensores - slidepdf.com

http://slidepdf.com/reader/full/arduino-y-sensores 6/11

Código Arduino

Para 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 primeraversió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 lasecuaciones anteriores). Por defecto se supone el uso de las sondas de temperatura MCP9700A, perotambié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 dereferencia 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 lasecuaciones 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 elentorno, obtenemos las lecturas de los sensores. Tal y como se comenta en el código, esta primeraversió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 delcó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 montajeactual (en una placa de prototipado) introduzca ruido en las señales que afecte a las medidas. Conrespecto 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) esel siguiente:

Page 7: arduino y sensores

5/11/2018 arduino y sensores - slidepdf.com

http://slidepdf.com/reader/full/arduino-y-sensores 7/11

 

Programa inicial, referencia 1,1V

Se puede observar la elevada variabilidad del sensor de humedad, y la precisión en las medidas: lavariació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 puedestraducir los cambios en el entorno en lecturas digitales. Por ejemplo, la temperatura no cambia sólode frío a caliente, cambia en un rango valores distintos y, normalmente, estos cambios ocurren muylentamente. É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ónresultante es almacenada como datos digitales secuenciales. Dado que Arduino no puede manejar lainformación como los humanos, necesitamos traducir los datos analógicos para que Arduino puedaentenderlos.

Los sensores analógicos pueden transformar los datos del entorno en un valor de voltajecomprendido entre 0V y 5V. Estos valores son distintos de los HIGH o LOW que utilizan lossensores digitales. Para los pines digitales, HIGH y LOW significan 5V y 0V respectivamente, ynada 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: arduino y sensores

5/11/2018 arduino y sensores - slidepdf.com

http://slidepdf.com/reader/full/arduino-y-sensores 8/11

1: La cremallera analógica

La cremallera analógica es diferente a la cremallera digital del capítulo anterior. La cremalleradigital sólo podía estar HIGH o LOW (5V o 0V). sin embargo, la cremallera analógica, puede darteun 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 enuno de los terminales de la resistencia, y un cable azul en el otro terminal. Los colores de los cablesson para que recuerdes dónde va cada cable. Desde donde empieza el cable azul, cóselo entre cadadiente de la cremallera. Cuando llegues al final de un lado de la cremallera, haz lo mismo en el otrolado y baja de nuevo.

Asegurate de que el hilo está intacto a lo largo de la cremallera o no funcionará. Una vez hayasllegado al final de la cremallera por el otro lado, une un cable negro y coselo en su lugar. Ahora lacremallera 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 lacomunicació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 variablemyZipper */ 

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 esalmacenado 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. Loultimo 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 permitesincronizarse con Arduino. Ahora podemos subir nuestro código a la placa Arduino. Una vez que elcó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ónmás a la derecha de tu IDE de Arduino. Ahora aparecerán los valores en el monitor y, si abres y

Page 9: arduino y sensores

5/11/2018 arduino y sensores - slidepdf.com

http://slidepdf.com/reader/full/arduino-y-sensores 9/11

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 esalgo exacto; pequeñas diferencias afectarán en los resultados. Este tipo de sensor analógico caseroes lo suficientemente bueno como para ser usado en la mayoría de prototipos que necesiten undispositivo 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óndedeben conectarse los cables en el Arduino: '###################################### Theresistor used in the example is what is called a “pull up resistor”. We sometimes use pull upresistors to ensure we won’t get 5V straight back in the Arduino. A pull up resistor is the same as anormal resistor but is used to lower the output voltage from a power source. The combination of aresistor with the LDR is also necessary for another reason: without it we wouldn’t be able to getanalog values from the LDR. This configuration is called a voltage divider and it changes thevoltage 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 usamosresistencias pull-up para asegurarnos que no recibe los 5V en sentido contrario el Arduino. Unaresistencia Pull up es una resistencia normal pero usada para reducir el voltaje de salida de unafuente de tensión. La combinación de una resistencia con la LDR es necesaria por otra razón: sinella no seríamos capaces de obtener valores analógicos de la LDR. Ésta configuración se conocecon el nombre de divisor de tensión y cambia el voltaje a la entrada del Arduino dependiendo de loscambios en la LDR. Conecta un cable rojo a una de las patillas de la resistencia y a los 5V deArduino. Entre la resistencia y la LDR ponemos un cable que conecte a nuestro pin analógico. Lamisma 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 valorescaptados por Arduino. Una vez que todo funcione, prueba a tapar la LDR con tu mano y compruebaque el valor que devuelve Arduino. Recuerda este valor y prueba el siguiente código de ejemplo.

Page 10: arduino y sensores

5/11/2018 arduino y sensores - slidepdf.com

http://slidepdf.com/reader/full/arduino-y-sensores 10/11

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 manoen 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 esmenor 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: arduino y sensores

5/11/2018 arduino y sensores - slidepdf.com

http://slidepdf.com/reader/full/arduino-y-sensores 11/11

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 lasmanos. 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 unamanera 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 utilizadocomo 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 y2.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, oexterno).Devoluciones

 Ninguno.notaDespués de cambiar la referencia analógica, las primeras lecturas de algunos analogRead () puedeno ser exacta.advertencia

 No use nada menos que 0 V o más de 5 V para el voltaje de referencia externo en el pin AREF! Siestá utilizando una referencia externa en el pin AREF, debe establecer la referencia analógica aEXTERNAL 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 enla 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 unaresistencia 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 pinAREF.