Entradas Digitales en ARDUINO



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.

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.


Conexiones en las Entradas Digitales del 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

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, pra realizar la lectura de entradas digitales en arduino vamos a utilizar una segunda función, la cual deberemos llamar dentro del “void loop”

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 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.
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
}
}
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
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
}
}  
}
}















No hay comentarios:

Publicar un comentario