Entradas digitales en Arduino


arduino-entradas-digitales

Una de las funciones más interesantes (si no la más) de Arduino y en general de todos los autómatas es su capacidad de interacción con el mundo físico. Podemos, por ejemplo, realizar mediciones de tensión, obtener lecturas de gran variedad de sensores, encender dispositivos o controlar motores y actuadores. Esta interacción se lleva a cabo en gran parte mediante el uso de las entradas y salidas tanto digitales como analógicas.

En las siguientes entradas de la sección tutoriales de Arduino aprenderemos a usar estas funciones, que resultan una parte fundamental en la mayor parte de proyectos. Empezaremos en esta entrada por las entradas digitales por ser las más sencillas, aunque en su momento veremos que el resto de funciones no resultan mucho más complicadas.

Aunque estamos empleando Arduino como plataforma es importante remarcar que la mayoría de conceptos son aplicables a cualquier autómata general. Al final veremos el código y montaje en Arduino, pero antes veremos brevemente un poco de teoría general.

¿Qué es una entrada digital?

Una señal digital es una variación de voltaje entre -Vcc a +Vcc sin pasar por los valores intermedios. Por lo tanto, una señal digital dispone solo de dos estados. Al valor inferior de tensión -Vcc le asociamos un valor lógico LOW o ‘0’, mientras que al valor superior +Vcc le asociamos HIGH o ‘1’ lógico.

Sin embargo en el mundo físico las referencias de tensión realmente son continuas. El proceso de lectura digital es un proceso de discretización de una señal analógica, el valor de la tensión, en un valor digital que representamos mediante dos estados, LOW y HIGH.

En realidad una entrada digital realiza una comparación de la medición con un valor de tensión umbral. Si el valor medido es superior a la tensión umbral se devuelve HIGH, y si es inferior LOW. El valor de la tensión umbral varía de un autómata a otro, e incluso no tiene porque permanecer constante a lo largo del tiempo.

En general es razonable suponer que la tensión umbral es cercana al punto medio entre -Vcc y +Vcc. No obstante debemos evitar medir tensiones cerca de la tensión umbral porque pueden provocar mediciones incorrectas.

Conexión de entradas digitales en Arduino

En Arduino las entradas y salidas digitales comparten pin, motivo por el que se denominan I/O digitales. Esto significa que el mismo pin puede ejecutar funciones tanto de entrada como de salida aunque, lógicamente, no de forma simultánea. Es necesario configurar un pin I/O como entrada o salida en el código.

Arduino dispone de un número diferente de I/O digitales en función del modelo, cómo vimos en la entrada ¿Qué es Arduino? ¿Qué modelo comprar?. Por ejemplo, Arduino UNO dispone de 16 I/O digitales y Arduino MEGA de 54.

En Arduino los valores de alimentación habituales son 0V y 5V. En este caso la tensión umbral será muy cercana a 2’5V. Por tanto si medimos una tensión con un valor intermedio entre 0 a 2’5V Arduino devolverá una lectura LOW, y si medimos un valor entre 2’5V y 5V, devolvera HIGH.

Nunca introducir una tensión fuera del rango 0V a 5V en una entrada digital o analógica o podemos dañar el pin correspondiente y dejarlo permanentemente inutilizado.

Supongamos que queremos emplear Arduino para conectarlo con un sensor, o cualquier otro dispositivo, que dispone de una salida de tensión ininterrumpida entre 0V a 5V. De momento no consideramos la posibilidad de que la entrada digital quede totalmente desconectada, algo que trataremos en la siguiente entrada “Lectura de un pulsador con Arduino”.

Podemos realizar la lectura del valor de tensión en el sensor con un esquema como el siguiente.

entrada-digital-arduino

La lectura dará un valor “HIGH” si el valor de tensión medido es superior a una tensión umbral, y “LOW” si el valor de tensión es inferior.

Código en Arduino

El código para realizar la lectura es realmente sencillo. Simplemente tenemos que configurar un I/O digital como entrada con pinMode() y realizar la lectura con digitalRead().

Los pines configurados como entradas están en estado de alta impedancia, es decir, se comportan como resistencias de muy elevado valor (del orden de 100 megaohmnios). Por tanto, por ellos circula una intensidad despreciable.

En realidad los pines de Arduino (Atmega) se inician por defecto como entrada, por lo que no sería estrictamente necesario configurarlos como entrada, aunque resulta una práctica conveniente.

Lectura de valores mayores de 5V

Hemos comentado que bajo ningún concepto debemos introducir un voltaje fuera del rango 0 a 5V en un pin de Arduino o nos arriesgamos a dañarlo permanentemente. Si queremos medir un nivel de tensión superior a los límites de alimentación la forma más conveniente es emplear un simple divisor de tensión.

Por ejemplo, para leer una señal digital entre 0 a 12V podemos emplear un esquema como el siguiente.

entrada-digital-divisor-tension-arduino

No empleéis este sistema para leer tensiones superiores a 35V, o para dispositivos de corriente alterna sin estar muy seguros de lo que estáis haciendo. Es muy posible que las resistencias no aguanten.

Con esta configuración el pin digital de Arduino recibirá una tensión que varía entre 0 a 3,84V, suficiente para hacer disparar la tensión umbral, y por debajo del límite de alimentación.

Los valores de las resistencias a emplear dependen del voltaje que queremos leer, y de la impedancia del sensor. En general, deben cumplir las siguientes condiciones

  • Deben proporcionar un voltaje superior a la tensión umbral
  • Deben ser muy superiores a la impedancia equivalente del dispositivo a medir.
  • Deben ser despreciables respecto a la impedancia de la entrada Arduino.
  • Deben limitar la corriente que circula por ellas para minimizar pérdidas.
  • Deben ser capaces de disipar la potencia que van a soportar.

Podéis ayudaros de la calculadora de divisores de tensión para calcular valores de resistencia que cumplan estos requisitos.

En la siguiente entrada veremos cómo emplear la entrada digital para leer el estado de un pulsador.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección Tutoriales de Arduino
Previous Nueva sección, calculadoras de electrónica
Next ¡Estamos de reformas!
  • Ricardo

    Hola Buenas tardes, este articulo esta excelnete para los que apenas empezamos con arduino, una pregunta con referente al circuito para bajar la tension de 12 volt a 3.5v .

    En caso de que fuera 25volts en vez de 12, me seriviria el mismo valores de resitencias? Muchas gracias

  • Ramón González

    Empiezo ahora a ver esto y lo encuentro interesantísimo, pero mi placa solo da errores porque ya lo intenté antes con un libro y no fuí capaz. Alguien me podría decir como resetear la placa, Gracias

    • luisllamas

      La placa se reinicia cada vez que la desconectas, o pulsas el botón de Reset, o cuando el IDE sube un programa. Es decir, no es posible que se te haya quedado con errores. Lo que es posible es que hayas hecho una conexión mal, y la hayas estropeado algún componente. También deberías comprobar si simplemente tienes el baud rate mal ajustado.

  • Pingback: Mejora gestión reciclaje ciudad de Oviedo – roboticaiespando()