Entradas digitales en Arduino (2024)

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ónde 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.

Entradas digitales en Arduino (1)

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().

int pin = 2;int value = 0;void setup() { Serial.begin(9600); //iniciar puerto serie pinMode(pin, INPUT); //definir pin como entrada}void loop(){ value = digitalRead(pin); //lectura digital de pin //mandar mensaje a puerto serie en función del valor leido if (value == HIGH) { Serial.println("Encendido"); } else { Serial.println("Apagado"); } delay(1000);}

Pruébalo online

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.

Entradas digitales en Arduino (2)

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.

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. Entradas digitales en Arduino (3)

Entradas digitales en Arduino (2024)
Top Articles
Latest Posts
Article information

Author: Duncan Muller

Last Updated:

Views: 6071

Rating: 4.9 / 5 (59 voted)

Reviews: 82% of readers found this page helpful

Author information

Name: Duncan Muller

Birthday: 1997-01-13

Address: Apt. 505 914 Phillip Crossroad, O'Konborough, NV 62411

Phone: +8555305800947

Job: Construction Agent

Hobby: Shopping, Table tennis, Snowboarding, Rafting, Motor sports, Homebrewing, Taxidermy

Introduction: My name is Duncan Muller, I am a enchanting, good, gentle, modern, tasty, nice, elegant person who loves writing and wants to share my knowledge and understanding with you.