Saltar al contenido

Como usar las Entradas Digitales en ARDUINO

En el dia de hoy vas a aprender a Usar las ENTRADAS DIGITALES en ARDUINO y vas a entender de diferentes formas, como puedes programarlas usando el Arduino IDE.

También podrás ver como acoplar los voltajes para conectar señales a los pines digitales del arduino y asi evitar que quemes tu placa y al final de este post vas a encontrar un código ejemplo de implementación para que lo reproduzcas en tu casa.

Antes que nada si todavia no has visto todo el contenido de nuestro maravilloso curso de ARDUINO aquí te dejo el link para que lo veas: 👉 CURSO GRATUITO DE ARDUINO

También te puedes suscribir al canal de YouTube si deseas seguir aprendiendo más de estos temas.

Entradas Digitales de Arduino

Las entradas digitales en Arduino son una característica clave de esta popular tarjeta de desarrollo. En el siguiente video, mostramos el contenido referente a las entradas digitales en arduino:

¿Qué es una Entrada Digital o un Pin Digital en Arduino?

Una entrada digital es un pin en el Arduino que puede leer valores binarios, es decir, valores de 0 o 1. Las entradas digitales en arduino son los pines en los cuales podemos conectar sensores o dispositivos que detecten algún cambio o una variación del mundo real.

Al igual como lo habíamos visto en la entrada anterior de Salidas Digitales en Arduino, en las entradas digitales de arduino vamos a recibir una señal digital, que esta compuesto de dos valores 0V (GND) y 5V, que como ya lo dijimos puede ser nombrados como:

  • 0V – Falso – Cero Lógico – LOW
  • 5V (3.3V) – Verdadero – Uno Lógico – HIGH
Señal Digital

Sin embargo, en el mundo real cuando una entrada digital hace la lectura de una señal, esta lo hace a través de un umbral de referencia de 2.5V aproximadamente, donde si el valor leido por la entrada digital de arduino es superior a ese umbral, arduino lo considera como HIGH y si es inferior lo considera como LOW.

Suscríbete a este sitio WEB para estar enterado de las nuevas entradas!

Pines Digitales de Arduino UNO

Como ejemplo vamos a ver donde se ubican los pines digitales de arduino uno como ilustración, pero esto es aplicable para cualquier otra placa de arduino que poseas:

Pines Digitales de Arduino
Pines Digitales de Arduino

De la imagen de ejemplo anterior podemos notar que los pines digitales en el Arduino Uno son numerados de 0 a 13 y pueden ser utilizados para recibir señales digitales de diferentes sensores y dispositivos externos.

Como fue detallado en la introducción a Arduino, la placa Arduino Uno tiene un total de 14 pines digitales, y también cuenta con 6 pines analógicos. Además, es importante tener en cuenta que el Arduino Uno tiene un voltaje de entrada de 5V. Es importante definir los pines en Arduino antes de utilizarlos, especificando si son entradas o salidas.

Es importante entender qué es un pin digital y cómo funciona para poder utilizarlo de manera eficiente en un proyecto. Por eso vamos a detallarlo a continuación.

Conexiones de una Entrada Digital en Arduino

La tensión que pueden recibir las entradas digitales es de 5V (para la mayoría de los arduinos) y hay excepciones de algunos arduinos que trabajan a 3.3V como el Mini o el Nano. Entonces asegúrate primero en conocer cual es el voltaje de tensión de tu placa de arduino.

NUCA vayas a entregar un voltaje mayor al de alimentación (5V o 3.3V) porque vas a quemar tu placa.

Si por alguna razón, la señal que deseas conectar a tu arduino es mayor a 5 V debes hacer algún circuito para disminuir el valor de tensión que le está entrando al Arduino. Un circuito practico es hacer un divisor de voltaje con dos resistencias.

Divisor de Voltaje

Donde el voltaje de salida (V_{out}) va a depender de los valores de resistencia y el valor de alimentación de entrada.

V_{out}=V_{in}\dfrac{R_2}{R_1+R_2}

Supongamos que quieres medir una señal de 12V proveniente de algún relé, entonces deberás calcular el divisor de voltaje, suponiendo una de las resistencias. Si suponemos que la Resistencia 1 es de 10 KiloOhms (R1=10K) entonces para obtener 5 voltios a la salida del divisor de voltaje, deberemos despejar de la ecuación la resistencia 2 para saber su valor.

R_2=\dfrac{R_1V_{out}}{V_{in}-V_{out}}

R_2=\dfrac{10K(5V)}{12V-5V}=7.14K\Omega

Entonces para garantizar un voltaje de 5V necesitamos una resistencia de 7.14K, solo que como esa resistencia no es comercial, debemos tomar una resistencia menor y próxima a 7.14K, en este caso tomamos la resistencia comercial de 6.8K que nos da un voltaje dentro del umbral de las entradas digitales del arduino.

V_{out}=12V\dfrac{6.8K}{10K+6.8K}=4.85V

No utilices este circuito para voltajes de corriente alternada o para voltajes superiores a 35VDC. En el caso de usar algún sensor en la entrada de Digital, es bueno llevar en consideración la impedancia del sensor.

Veamos como seria el esquemático en caso de tener un pulsador, que está conectado a 12VDC

Arduino a Pulsador 12VDC

Quizas te interese algunos productos de Arduino en Amazon a un mu buen precio.

Como Configurar las Entradas Digitales de Arduino

Para configurar las entradas digitales de Arduino vamos a utilizar el mismo comando visto en la entrada anterior dentro de void setup, conocido como pinMode.

pinMode(PIN Digital,INPUT);

Donde dice «Pin Digital» debemos sustituirlo por el PIN del Arduino que nosotros queremos que sea una ENTRADA.

Ejemplo

Vamos a suponer que queremos configurar el PIN 3 del Arduino como Entrada. Debemos utilizar la instrucción pinMode dentro del void setup de la siguiente forma:

void setup() {
    pinMode(3,INPUT); //Configura el PIN 3 como ENTRADA DIGITAL
}

Otra forma de programar la Entrada Digital de Arduino es declarando un Nombre para el PIN, en este caso el PIN 3. Es decir podemos bautizar nuestro PIN con el nombre que nosotros queramos, veamos como se hace:
pinMode dentro del void setup de la siguiente forma:

byte Terminal_3 = 3; //Bautizo el PIN 3 con el nombre "Terminal_3"
void setup() {
    pinMode(Terminal_3,INPUT); //Configura el PIN 3 como ENTRADA DIGITAL
}

Lectura de ENTRADAS Digitales en Arduino

Una vez hemos configurado los pines que queremos establecer como entradas, es hora de utilizar estas entradas, para realizar la lectura de entradas digitales en arduino vamos a utilizar una segunda función, la cual deberemos llamar dentro del «void loop».

Como leer entradas digitales en arduino

La función digitalRead() en Arduino es esencial para leer los valores de una entrada digital. Esta función devuelve el valor de un pin específico, ya sea 0 o 1, y puede ser utilizada en una variedad de proyectos para determinar el estado de un dispositivo o sensor. Es importante declarar los pines en Arduino antes de utilizarlos, especificando si son entradas o salidas.

Para leer un pin digital o una entrada digital en arduino procedemos a utilizar la siguiente instrucción:

Estado = digitalRead(PIN_DIGITAL);

Donde Estado se almacena un 0 o 1 (TRUE o FALSE) dependiendo de la lectura realizada en el pin digital del arduino.

Un ejemplo de la utilización de la lectura del pin digital de arduino puede ser visto a continuación:

byte valor=0; //Variable que recibe el dato leido en la entrada
byte Terminal_3 = 3; //Bautizo el PIN 3 con el nombre "Terminal_3"
void loop() {
    valor = digitalRead(Terminal_3);
}

Aqui la variable utilizamos el nombre del PIN 3 «Terminal_3» y una variable llamada valor, que va a almacenar el uno lógico (5V) o el cero lógico (0V) que el arduino está leyendo desde la entrada digital.

Como regla general, todos los pines digitales del arduino UNO o cualquier otro arduino vienen configurados por defecto como entradas.

Sin embargo, las entradas digitales, generalmente las usamos en condicionales para saber si algún evento ha ocurrido. Por lo tanto es bastante común usar el digitalRead dentro de condicionales como el IF. Sabemos que un IF es una instrucción en programación que pregunta si esta sucediendo algún evento.

Supongamos que tenemos conectado un BOTON en la entrada digital 7 del Arduino.

Boton Arduino

Si queremos preguntar si el botón esta pulsado o no, podemos hacerlo directamente dentro de la instrucción IF.

if(digitalRead(7)){
}

dentro de las llaves «{}» va el programa que deseemos que el arduino haga al momento de que el botón fue pulsado.

En esa instrucción, si el botón no es pulsado, la función digitalRead va entregar para el if un cero logico o un falso «if(0)» y asi no se ejecuta lo que hay dentro de las llaves.

Cuando el botón es pulsado, la función digitalRead va entregar para el if un uno logico o un verdadero «if(1)» y asi se ejecuta lo que hay dentro de las llaves.

if(!digitalRead(7)){
}

También es posible invertir este orden si agregamos al comienzo del digitalRead el simbolo de negación «!»

Leer varias entradas digitales en Arduino

No importa el numero de entradas que desees leer con tu arduino, vas a utilizar la instrucción readWrite para leerlas todas:

byte v1=0; //valor 1
byte v2=0; //valor 2
byte v3=0; //valor 3
byte v4=0; //valor 4
void loop() {
    v1 = digitalRead(2); //Lee la entrada del PIN 2 y lo guarda en v1
    v2 = digitalRead(3); //Lee la entrada del PIN 3 y lo guarda en v2
    v3 = digitalRead(4); //Lee la entrada del PIN 4 y lo guarda en v3
    v4 = digitalRead(5); //Lee la entrada del PIN 5 y lo guarda en v4
}

Tambien podrías pensar en guardar los datos en un vector para leer varias entradas digitales en arduino. En este ejemplo seria un vector de 4 posiciones que se llame valvec (Valor en Vector).

Recuerda que para capturar los valores debes llamar la posición del vector donde se encuentra el dato. En este caso el primer dato esta en la posición cero del vector, el segundo dato en la posición uno del vector, el tercer dato en la posición dos del vector y el cuarto dato en la posición tres del vector.

La forma más compacta de leer varias entradas digitales en arduino es usando un ciclo FOR como se muestra a continuación:

byte valvec[4]; //Vector de 4 posiciones

void loop() {
    for(int i=0;i<=3;i++){
     valvec[i]=digitalRead(i+2); //Lee la entrada desde el pin2 hasta el pin 5 y lo guarda en un vector
    }
}

Ejemplo de Entradas Digitales

Vamos a tomar el ejemplo de la secuencia de leds con arduino visto en la entrada anterior y vamos a adicionarle 2 pulsadores (botones) para practicar con las entradas digitales de arduino.

La secuencia de leds va a encender hacia la derecha y cuando pulse el pulsador del PIN 11, la secuencia de leds cambia de dirección hacia la izquierda, y si pulsa el pulsador del PIN 10, la secuencia de leds nuevamente cambia de dirección hacia la derecha.

Recordemos que en este curso estamos usando el Arduino UNO, pero si tu tienes cualquier otro Arduino, también puedes hacerlo sin ningún problema, esa es una facilidad que nos da Arduino.

Si todavía no sabes cuales son los pines digitales de arduino uno, dale un vistazo a este post: Puertos digitales Arduino Uno

Entradas Digitales en Arduino
Entradas Digitales en Arduino

Lista de Materiales

  • Cualquier Placa de ARDUINO
  • 8 leds de cualquier color
  • 10 Resistencias de 220ohms para los leds
  • 2 pulsadores
  • 1 Protoboard
  • Cables de conexión

Código y Simulación

Pudes ver la simulación de este circuito en Tinkercad si lo deseas Dando CLICK AQUÍ. Debes tener una cuenta en tinkercad para poder ver los esquemas.

el código de implementación puedes descargarlo a continuación

//Delcaración de Los Pines de los LED
byte led1=2;
byte led2=3;
byte led3=4;
byte led4=5;
byte led5=6;
byte led6=7;
byte led7=8;
byte led8=9;
byte Pizq=10; //Pulzador Izquierda
byte Pder=11; //Pulzador Derecha

int i; //Variable del Contador del FOR
long vel=40; //Velocidad de las Luces
byte valor=1; //Almacena el dato de los pulsadores

void setup() {
  // put your setup code here, to run once:
  //Configura los 8 Pines digitales como SALIDAS
  for(i=led1;i<=led8;i++){
    pinMode(i,OUTPUT);
  }
  // Configura los PINES 10 y 11 Como Entradas
  pinMode(Pizq,INPUT); 
  pinMode(Pder,INPUT);
}

void loop() {
  //Si "valor" es Cero gire a la DERECHA
  if(valor==0){
   //Enciende los LED de Izquierda a Derecha
    for(i=led1;i<=led8+3;i++){
      if(i<=led8){
        digitalWrite(i,HIGH); //Enciende el LED
      }
      
      if(i>led3){
        digitalWrite(i-3,LOW); //Apaga el LED
      }
      delay(vel);           //Retardo (Espera el valor de vel)
      
      //Lee los dos pulsadores
      if(digitalRead(Pizq)){
        valor=1;i=led8+3; //Cambia el valor y sale del FOR
      }
      if(digitalRead(Pder)){
        valor=0;i=led8+3; //Cambia el valor y sale del FOR
      }
    }  
  }

  //Si "valor" es uno gire a la IZQUIERDA
  if(valor==1){
   //Enciende los LED de Izquierda a Derecha
    for(i=led8;i>=led1-3;i--){
      if(i>=led1){
        digitalWrite(i,HIGH); //Enciende el LED
      }
      
      if(i<led6){
        digitalWrite(i+3,LOW); //Apaga el LED
      }
      delay(vel);           //Retardo (Espera el valor de vel)

      //Lee los dos pulsadores
      if(digitalRead(Pizq)){
        valor=1;i=led1-3; //Cambia el valor y sale del FOR
      }
      if(digitalRead(Pder)){
        valor=0;i=led1-3; //Cambia el valor y sale del FOR
      }
    }  
  }
}

Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Comentarios (9)

Hola, muchas gracias por el curso. Me está siendo muy útil.
He intentado simular con Proteus y me da error:
ISIS Release 8.15.00 (Build 33980) (C) Labcenter Electronics 1990- 2022.
Compiling design ‘C:\Program Files (x86)\Labcenter Electronics\Proteus 8 Demonstration\BIN\UNTITLED.pdsprj’.
Netlist compilation completed OK.
Netlist linking completed OK.
Partition analysis completed OK.
Simulating partition 1
PROSPICE 8.13.00 (Build 32709) (C) Labcenter Electronics 1993-2022.
mixed model AVR2.DLL failed to authorize – Missing or invalid Customer Key.. [SIM2]
Loaded netlist ‘C:\Users\salgo\AppData\Local\Temp\LISA3971.SDF’ for design ‘UNTITLED.pdsprj’
Real Time Simulation failed to start.
Simulation FAILED due to fatal simulator errors.

No sé qué habré hecho mal.

Saludos,

Responder

Hola, puedo conectar un Sensor DS18B20 a dos puertas o pines digitales?

con esto las puertas quedarían conectadas entre si, temo conflicto eléctrico entre las puertas.

Gracias por el soporte

Responder

Ese sensor posee tres pines, los extremos van a los pines de GND y +5v del Arduino, el pin del medio va a una entrada digital del arduino, es necesario colocar una resistencia de 4.7K entre el pin del medio y +5v.

Responder

Buenas Sergio
En el tutorial de entradas digitales creo que en la breadboard las dos resistencias antes del pulsador no están conectadas a tierra (esquema). En la foto de este sitio web creo que tampoco están a tierra. https://controlautomaticoeducacion.com/arduino/entradas-digitales/

Responder

Ahora está corregido. Gracias Luis por la observación. Saludos!!

Responder

Un curso realmente bien hecho.
Gracias por el esfuerzo.
Estoy tratando de seguirlo.

Responder

Gracias Daniel por el comentario, realmente han sido horas preparando el curso y me alegra que esté siendo de utilidad a la comunidad. Saludos.

Responder

NO PUEDO ACCEDER AL PROGRAMA DE ARDUINO

Responder

No entiendo porque Leonardo? Compartiste el post con los botones?

Responder