Felix Maocho

Para quien le interese lo que a nosotros nos interesa

Curso de Arduino – Entradas analógicas. 1º Las puertas de los sensores

Por Félix Maocho
7/3/2017

.

Objetivo de este capítulo

Identificar en una Tarjeta Arduino cuales son las entradas analóguicas. Comprender en qué consisten y para qué valen. Entender el funcionamiento de los sensores, qué es su rango de funcionamiento, la precision que ofrecen y el tiempo preciso mínimo para efectuar dos lecturas consecutivas de un sensor.

Material necesario

Excepcionalmente este capítulo no precisa material, porque es únicamente teórico. Únicamente conviene tener a mano la Trrjeta Arduino para identificar físicamente los Pines analógicos de entrada.

Conocimientos previos necesarios

Saber que son los pines digitales y como funcionan tanto en OUPUT como en Input, Saber que son los pimes PWM o pines “analogicos” de salida Tener nocion de los que supone una entrada analógica..

Al igual que hay salidas analógicas, mediante los pin PWM, tiene que haber entradas analógicas y en efecto, hay en un Arduino UNO seis entradas analógicas, marcadas de A0 a A5, se encuentran situadas en el lado puesto a los pines digitales de 0 a 13 que hemos estado utilizando habitualmente, junto las salidas de fuerza o POWER que también hemos utilizado el pin V5 los pines GND etc.

Las entradas analógicas son pues entradas que admiten recibir voltajes comprendidos entre los 0 voltios y los 5 voltios y se utilizan principalmente para leer las medidas que diferentes sensores realizan sobre la realidad física.

¿Qué tipo de sensores hay?,

Pues todos los que puedas pensar que existan. En una lista que no pretende ser exclusiva tengo localizados los siguientes.

  • Pulsadores o sensores de contacto que suelen ser no analógicos sino digitales, hay contacto o no
  • Sensor de sonido, que miden el nivel de ruido audible
  • Sensor de ultrasonidos, que miden el nivel de ruido no audible
  • Sensor de Temperatura, o termómetros
  • Sensores de humedad o higrómetros
  • Sensores barométricos o de presión
  • Sensores de lluvia
  • Sensor de gas y de humo
  • Inclinómetro o sensor de inclinación
  • Giroscopios y acelerómetros Miden cambios de dirección y de velocidad
  • Sensores de magnetismo o magnetómetros
  • Sensores RFID o de etiquetas
  • Sensor de impacto
  • Sensor laser y fotosensores
  • Sensores de campo magnético
  • Sensor de distancia
  • Sensor de voz
  • GPS

Y como digo, no es mas que una lista de sensores que se venden en el mercado a precios reducidos y por tanto al alcance de los aficionados de Arduino, pero no es ni mucho menos exhaustiva. Por ejemplo, hoy mismo me he enterado de un sensor de chispas eléctricas que puede detectar rayos que caen a 20 km de distancia.

Cómo funcionan los sensores

En casi todos e los casos, los sensores tiene tres cables uno que le alimenta con energía a un voltaje alto, lo habitual si se han pensado para Arduino, es es a 5 voltios, a veces es a 3,3 voltios, y otras veces a otros el voltajes, como 9 o 12 voltios. Otro cable se conecta tierra, (GND), es decir a 0 voltios. y un tercer cable que acaba en alguno de los pines analógicos de entrada, que porta un voltaje proporcional a la medida que obtiene el sensor. Si por ejemplo, el sensor es un termómetro médico, 43ºC dará una señal de 5 voltios y 34ºC dará una señal de 0 volts mientras que un voltaje de 3 voltios se corresponderá con algo de fiebre y uno de 4 voltios con mucha fiebre.

El montaje tradicional de un sensor es como indica la imagen

Si el sensor funciona con 3,3 voltios el montaje  será igual pero alimentando a el sensor a 3,3 voltios en vez que a 5 voltios y muy probablemente la salida analógica no sera superior a 3,3 voltios,por lo que si no hacemos nada, funcionará bien, pero estamos desperdiciando la parte de los voltajes entre 3,5 u 5 voltios, por lo que en la practica perdemos precisión en la lectura.

Lo que están viendo es el montaje tradicional de cualquier sensor, el cable rojo une la salida de 5 voltios, (o de 3,3 v, según convenga), a una pata del sensor. El cable azul conecta otra de las patas con tierra (GND) y por último, el cable amarillo va a parar a una entrada analógica, (en este caso a la entrada A0), que que es la que, analizando el voltaje leído, nos permite saber el valor que ha medido el sensor. En este caso concreto se representa el sensor de temperatura, M35 que vale más o menos 1 euro, y que es un sensor con una precisión de 0.5 ºC y una sensibilidad de 10 mV/ºC. Es decir que por cada ºC de temperatura de diferencia produce un cambio de voltaje de 10 micro voltios.

Como ven en el esquema del sensor viene claramente marcada la pata que va a 5V, la pata que va a GND (tierra) y la pata de salida (OUT).  Este sensor es muy sufrido, pues su manual indica que puede ser alimentado entre 4 y 20 Voltios, algo que viene muy bien, porque las baterías tienen un voltaje decreciente a medida que se van descargando y por tanto, podemos alimentar este sensor con una batería de 9 voltios, e incluso despistarnos y dejar que baje hasta 4 voltios. Lo ideal es alimentar un sensor de este tipo a los 5 voltios y no obligar al sensor a rectificar la alimentación, pero no siempre es posible.

Ee intervalo de lectura, dice el manual que va de los 2ºC a los 150ºC, eso indica que no es sensor adecuado para un invernadero, donde podemos medir en las noches de invierno hasta -10ºC,pero que en cambio si es muy adecuado para controlar la destilación de vino, pues el alcohol destila a hacia los 70ºC y el agua a los 100ºC. Con esto quiero resaltar, que no hay un sensor universal que valga para todo, sino que para cada proyecto, tendremos que buscar el más adecuado de acuerdo con lo que queremos controlar, lo que si puedo (casi) asegurar es que le encotyrarán en el mercado y se asombrarán de lo poco que vale  (salvo excepciones) .

Este sensor indica que cada grado se corresponde a 0,01 voltios, y como lo máximo que leemos es 1023 y eso se corresponde a 5 voltios por una regla de tres compuesta podemos saber que

O lo que es lo mismo

Valor leído = t x 0,01 x 1023 / 5

0ºC, (si los midiera, que no puede pues su rango termina en 2), corresponderá a una lectura de 0 voltios, 2ºC corresponde a un valor leído de 4,092 pero como solo leemos números enteros sera lo que leemos 4 y 150ºC, lo mas que registra el termómetro, será de 306,9, o sea 307.

Como ven, con Arduino UNO perdemos bastante de la precisión que podíamos obtener del aparato, pues no podemos aprovechar lecturas por debajo de 4 y superiores a 307, o sea lo mas que podemos apreciar en el rango que funciona el sensor son diferencias de 0,5º aproximadamente, algo que puede ser suficiente para la mayoría de las cosas que deseemos hacer, pero no para todas.

Por ejemplo, el M35 es un sensor mas que suficiente, para vigilar una incubadora de huevos de gallina, pues en este caso, andamos por el entorno de los 40 ºC y donde una diferencia menor que medio grado, no tiene especial significado, pero si queremos estudiar la variación del punto de congelación del agua, en función de la salinidad, no nos valdrá por dos motivos, hablamos de temperaturas que rondan los 0º. algo que se sale de el intervalo de este sensor, pero ademas donde una diferencia mínima apreciable de 0,5ºC es inadmisible en experimentos de ese tipo donde por fuerza necesitamos poder medir hasta las centésimas de grado.
.
Montaje para un sensor de mayor voltaje de salida

Si el sensor genera voltajes de más de cinco voltios, (para Arduino UNO), por ejemplo puede dar salida a voltajes de 0 a 12 voltios haremos un montaje tal como se indica a continuación.

.

Dividiremos el voltaje de la señal mediante dos resistencias. Eligiéndolas convenientemente, podemos rebajar siempre la señal que se lleva al pin analógico, por debajo de 5 voltios que es lo mas que se puede leer. En este caso como el voltaje pasa de un máximo de 12 a 0V de GND,  con dos resistencias donde una es aproximadamente el doble que la otra, tendremos que el voltaje un voltaje en la unión de ambas, es aproximadamente 1/3 de el voltaje máximo es decir 4 voltios. La resistencia de 10 KΩ rebaja la tension 2/3 de 12 Voltios a 4 voltios (mas o menos)..

El problema, es que con ello cerramos en parte el abanico de posibilidades de medición y la finura que se obtiene con este tipo de sensores se pierde por la incapacidad de Arduino de recibir esos voltajes tan altos.

Repito estamos en una descripción general de las lecturas analógicas, no se preocupen mucho si no entienden todo al detalle, pues tendremos tiempo de volver a ello, dentro de poco todo serán sensores y actuadores en nuestro sketch.

Parecido a esto que hemos contado para las temperaturas, se aplica a las señales de sensores que miden si hay mucha o poco luz, (fotómetros), o poca o mucha distancia, (telémetros). Arduino recibirá por una entrada analógica, (entre las pin A0 a la A5), un voltaje que tendremos por programa que identificar que significa y una vez “traducido”, según suponga o no un riesgo para nuestro invento, establecer que medidas hay que tomar en los actuadores para realizar las acciones correctoras correspondientes.

Un sketch de Ardunio, en la inmensa mayoría de los casos, consiste simplemente en observar mediante los sensores que es lo que ocurre en las proximidades de la tarjeta, analizar la información recibida de los sensores y en función de ella, ordenar a los actuadores hacer las operaciones pertinentes.

Esto es en esencia lo que consiste y caracteriza la automática y la robótica. A diferencia de los autómatas, como el faro que construimos o los semáforos, que sólo hacen una única cosa, y de forma invariable, aunque la puedan hacer con toda perfección, como lo hace por ejemplo un reloj, o una caja de música, la automática y la robótica puede actuar de maneras diferente, (aunque con frecuencia de forma rupestre, porque nosotros como ingenieros no damos para más), adaptando su forma de actuar a las circunstancias del entorno.

Los sueños

Por ejemplo, puedes hacer un reloj flexible, como el que ideó Dalí, que con sus sensores analicen tu tensión arterial, y cuando te aburres y la tensión baja, hagan que el reloj adelante, de forma que las horas de aburrimiento pasan mas deprisa, pero cuando los sensores detectan que la tensión sube y estas mas activo, por ejemplo porque estas con la persona amada, frene las agujas y las horas pasen mucho más despacio. ¿A quien no le apetecería tener un reloj así?

Espero que con este ejemplo te hayas dado cuenta del potencial que tiene Arduino, y de por qué sólo nuestra falta de imaginación, puede hacer que no hagamos aparatos prodigiosos, que realizan cosas que sólo podíamos pensar que existieran en los sueños.

La realidad

Bien, después de haber elucubrado un poco, volvamos a la realidad garbancera.

Qué es una entrada analógica

La lectura de una entrada analógico nos permite obtener una magnitud que puede variar dentro de dos valores una máximo y otro mínimo que llamamos intervalo. Por ejemplo, si leemos 75 en el caso anterior, el sensor ha medido es un valor que mas o menos anda por 36,5ºC es decir no tenemos fiebre pero si le 82 tenemos aproximadamente 40ºC es decir una fiebre apreciable y habrá que tomar medidas como rociarnos con agua fresca o llamar a una ambulancia, lo que decidamos.

Observen la diferencia fundamental con las entradas digitales, un voltaje, tanto 75 como 80 corresponde a voltajes que no llegan a 3,5 voltios por tanto en un caso como en otro un pin digital nos habría dado de respuesta “LOW” y habríamos pensado que la temperatura era normal.

En muchos casos, las medidas son, si o no, por ejemplo. ¿Está encendida la luz? Basta con contestar si o no y estaremos perfectamente informados de la realidad exterior, pero en la mayoría de los casos ese nivel es excesivamente grueso y no nos vale, , Si pregunto, ¿qué tal día hace?, no me basta que digan hace frío o calor, quiero que me digan hace 18 ºC a la sombra. Esto solo lo hace una entrada analógica.

Sin embargo, solo hemos variado el grueso de la contestación, porque si yo quiero saber el frío que voy a pasar en la calle para decidir si llevo abrigo o no, saber que hace 18ºC es suficiente. Pero si estoy tratando de obtener el cultivo de una bacteria, la respuesta que necesito es no solo los grados de temperatura, sino las décima, No me vale una respuesta que diga 36º o 37º, sino que necesito una precisión mayor, por ejemplo 36,54ºC.

Esto hace que el número de sensores sea inagotable, porque en función de lo que queramos saber, tanto el intervalo en donde empieza y acaba de leer como el número de divisiones que tiene internamente el intervalo varía muchísimo. Como hemos visto Arduino UNO da un intervalo dividido en 1024 peldaños, que en la mayoría de los casos son mas que suficientes, (aunque rara vez aprovechemos todos), pero hay quien necesita que el intervalo esté dividido en más peldaños.

Así que a la hora elegir sensor, deberemos tener claro cual es el intervalo de medidas que necesitamos y la “finura de grano” que necesitamos en la lectura. Volviendo a los termómetros, no es lo mismo un termómetro clínico, que uno meteorológico, o un termómetro para controlar la fundición del acero. Igual pasa con cualquier otro sensor, las medida de distancia que precisas para un automóvil en carretera, nada tiene que ver con las medidas que necesitamos en cristalografía microscópica, ni por supuesto, con las distancias que medimos para saber a cuanto están las estrellas, donde unos cuantos días luz de más o menos, pierden absolutamente la importancia, cuando el Sol está a solo 20 minutos luz.

Tranquilos, no se pongan nerviosos porque de estos conceptos volverán a vernos una y otra vez, y nos vamos a tropezar con ellos constantemente, tan solo recuerden que hay unas cosas que caracterizan a los sensores que utilicen, los voltajes máximos a los que trabajan, le medida máxima y mínima que calculan, que marca el intervalo de trabajo, la “finura de medida” que podemos obtener con ese sensor. Y en muchos caso la separación de tiempo entre dos lecturas consecutivas

Sin embargo visto desde Arduino, mida el sensor lo que mida, siempre se ve igual, a cuanto voltaje lleva la medida que me da el sensor y que “peldaño” adjudico a ese voltaje el traducir eso a valores habituales y el realizar las acciones consecuencia de esas lecturas, es trabajo tuyo como programador.

Es importante entender que lo real, es siempre analógico, pero la medida que damos, es siempre digital, con mas o menos precisión. Un metro de costurera de tela mide como mínimo milímetros, si comparamos la longitud de la circunferencia con el diámetro utilizando el metro, nos saldrá que π es 3,14 aunque sabemos perfectamente que π tiene un número inconmensurable de decimales. Por tanto siempre que damos una medida, por precisa que sea, es siempre una abstracción matemática y digital de algo que es analógico y que por fuerza, se diga o no se diga, tiene una determinada precisión. π es real y por tanto analógico, cualquier valor que demos de π es digital y esta por fuerza sujeto a un cierto margen de error,

Por tanto otra característica de cualquier sensor es su margen de error, Cada modelo de sensor tiene su margen de error y nos valdrá o no para nuestro objetivo si el margen de error es suficientemente pequeños como que dos valores contiguos, no genere como consecuencia acciones diferentes de los actuadores.

Sin embargo la precisión viene marcada por dos factores, lo “fino” de la lectura del sensor y el número de niveles que puede dar la Tarjeta Arduino. La tarjetas mas habituales como Arduino Uno, Mini Pro, y Mega, se dispone de 10 bites en las entradas analógicas lo que proporciona 1024 niveles digitales, es decir un numero diferente por cada 2,44 mili voltio. Arduino Due tiene una resolución de 12bits, 4096 niveles digitales, lo que supone una precisión de 0,61 mV

Sin embargo esto dice poco porque ¿Cuantos grados de temperatura supone una lectura de 625 y cuantos grados de temperatura supone una lectura de 626?

Pues dependerá primero del intervalo, si el termómetro mide entre 44ºC y 35ºC o sea 9 grados de temperatura y la maquina produce 1024 peldaños podemos obtener la temperatura con milésimas de grado sin gran dificultad, (siempre que el termómetro sea capaz de medir con milésimas de precisión), pero si el termómetro solo mide con décimas, que es lo normal, aunque teóricamente las lecturas de 625 y 626 sea diferentes, están dando la misma temperatura porque nuestro sensor no da más de si.

Hay otro concepto que es también muy importante y hay que tener en cuenta, y es lo que tarda un sensor en dar una nueva lectura. Si no acordamos del termómetro clínico de mercurio, para tomar dos lecturas seguidos, había que agitar el termómetro en el aire con dos intenciones, dejar que el aire enfrié de nuevo el termómetro y hacer bajar la columna de mercurio a su primitiva posición. Solo cuando eso se ha conseguido se puede hacer una nueva lectura. En los termómetros digitales actuales, el proceso es mas rápido pero aun así, el termómetro se ha de preparar de alguna forma antes de hacer la dos lecturas consecutivas, pues si no la lectura  anterior puede interferir en la siguiente. Eso pasa en todo los sensores, cada lectura provoca una cierta inercia que influye en la siguiente y solo dos lecturas consecutivas, si son validadas si entre ellas hay un cierto tiempo de separación,

Si en un sketch de Arduino mandamos hacer dos lecturas mas rápidas que el tiempo de preparación entre ellas obtendremos lecturas no fiables, conviene que esté especificado en el sensor a la frecuencia mínima de lecturas y que en el sketch separemos las lecturas como mínimo lo que diga esa cifra.

Por hoy creo que ya hemos dado bastante teoría. Dejamos para el siguiente capitulo el manejo de los pines analógicos de INPUT.

Repaso

Como repaso final te diré lo que has aprendido hoy

  • Cuales son los pines analógicos de entrada y donde están situados en la Tarjeta Arduino UNO
  • Qué son y para qué se usan las entradas analógicas
  • Que son los sensores, que hacen y como se comunican con la Tarjeta Arduino.
  • Cómo funciona los sensores y cfomo se montan los circuitos con sensores
  • Cómo se deduce el valor de la medida realizada por el sensor de la lectura de la entrada analógica.
  • Qué es el intervalo de un sensor y que es la precisión de un sensor
  • Cómo influye en la precisión de un sensor las limitaciones de la Tarjeta Arduino.
  • Cómo se realiza el montaje de un sensor con salida superior a 5 voltios.
  • Que es lo que hacen el 90% de los sketch de Arduino
  • Cual es la diferencia entre automática y robóticas y los automatas
  • Diferencias y semejanzas entre lecturas difitales y ·analogicas, la importancia de la precision y la “finura” de la lectura·
  • Razón por la que existen miles de sensores diferentes.
  • Cómo se arregla Arduino para tratar igual a sensores tan diferentes
  • Intervalo de separacion entre dos lecturas consecutivas

Félix Maocho

indice

Anuncios

7 marzo 2017 - Posted by | Curso de Arduino, Robotica | ,

1 comentario »

  1. Sebatià Atserias,es un compañero que construyó un almacén robotizado combinando Meccano y Arduino, utilizando el entorno de desarrollo Scratch, ya que su dominio del lenguaje C es mínimo. Escribió un artículo de iniciación al Scratch que está en nuestra web y le ha valido varias peticiones de mas información. Te gustará saber que Sebastià está respondiendo a esas consultas con un enlace a este excelente curso!

    Comentario por Club Meccano de Catalunya | 15 marzo 2017 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: