Está en la página 1de 8

Unidad 4

Programar en Arduino
Entradas y salidas digitales

Síntesis
En esta unidad veremos cómo interactuar con las entradas y salidas digitales
presentes en la placa Arduino, como leer pulsadores y que son los circuitos pull-up y
pull-down y cómo usarlos.

Señales Analógicas y Digitales


Es muy importante distinguir la diferencia entre ambas, ya que nos permitirá saber
que pines usar en el Arduino y qué componentes debemos utilizar en nuestros
circuitos.

Si tomamos un intervalo de la señal observaremos que posee infinitos valores dentro


de ese intervalo. Podemos reconocer como señales analógicas por ejemplo la tensión
eléctrica de nuestros hogares, la misma se puede verificar que por momentos
tenemos 220V o 215V o incluso 200V. Otro ejemplo es la temperatura, la cual varía
continuamente en el tiempo y por ejemplo para pasar de 23°C a 24°C recorrer todos
los valores intermedios.

[https://commons.wikimedia.org/wiki/File:Señal_analógica.jpg]

Una señal Digital se diferencia de una analógica porque la Digital sólo puede tener
dos valores posibles en cualquier intervalo que tomemos. Un ejemplo de señal digital
es el estado de una lámpara en el tiempo. La lámpara sólo puede estar encendida o
apagada

En la siguiente imagen podemos ver ambas señales juntas y ver las diferencias.

Programar en Arduino| 1
[https://commons.wikimedia.org/wiki/File:Señales_analogica-digital.png]

En el siguiente video podemos ver una explicación de este tema:


[https://www.youtube.com/watch?v=hQ0BJi7cba0]

Entradas/Salidas Digitales en Arduino


En Arduino las entradas y salidas digitales comparten pin, 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.

Para esto utilizamos el comando pinMode() en el bloque de setup de nuestro código, con
el cual indicaremos si el pin en cuestión es de entrada o de salida. La sintaxis de este
comando es la siguiente:

pinMode(pin, Modo);

pin: debemos indicar el número de pin que queremos configurar como entrada. Puede
ser un valor numérico, una variable o una constante.
Modo: indicamos el modo que va a tener el pin. Puede ser INPUT para entradas o
OUTPUT para salidas.

En Arduino los valores de alimentación habituales son 0V y 5V. Por lo que los valores
entre 0 a 2,5V Arduino devolverá una lectura de 0 o LOW, y si medimos un valor en,re
2,5V y 5V, devolverá un 1 o HIGH.

Supongamos que queremos emplear Arduino para conectarlo con un led en una salida,
por ejemplo, la 8, y queremos realizar un parpadeo (Blink).
Para esta tarea necesitamos utilizar el comando digitalWrite(), que nos permitirá indicar
el estado que queremos para una salida.
La sintaxis de este comando es:
digitalWrite(pin, estado);
pin: es el pin que queremos definir un estado.
estado: Es el estado que queremos definir en pin. Puede ser HIGH (1) o LOW(0)

Programar en Arduino| 2
El circuito a usar sería el siguiente:

y el código sería el siguiente:

int led = 13;

void setup()
{
pinMode(led, OUTPUT);//Configuramos el pin 8 como salida
}
void loop()
{
digitalWrite(led, HIGH);//Ponemos el pin 8 en HIGH
delay(1000); // Esperamos 1 segundo
digitalWrite(led, LOW);//Ponemos el pin 8 en LOW
delay(1000); // Esperamos 1 segundo
}

Intenten armar el circuito en sus cuentas de Tinkercad y realizar modificaciones tanto


en el conexionado del pin del arduino como en el código, como por ejemplo modificar
el tiempo de encendido.

Las entradas digitales nos permiten leer estados de sensores o circuitos que tengan
estados definidos (“0” o “1”). Debemos tener en cuenta que cuando definimos estos
pines como entradas están en estado de alta impedancia, es decir, se comportan como
resistencias de muy elevado valor (del orden de 100 Megaohms). Por tanto, por ellos
circula una intensidad despreciable. Otro dato importante para tener en cuenta es que
el comando digitalRead hace una lectura instantánea, es decir que al momento de hacer
la lectura obtenemos el valor de ese instante y lo almacenamos, pero no podemos
asegurar que ese valor sea igual cuando queramos hacer una nueva lectura.

Programar en Arduino| 3
Para poder leer el dato de un pin, debemos utilizar el comando digitalRead(), el cual
devuelve un estado “0” o”1”. Su sintaxis es:

lectura = digitalRead(pin):
lectura: variable en donde se almacena el estado de lectura del pin.
pin: pin seleccionado para hacer la lectura. Debemos estar seguros que en el bloque
setup lo definimos como entrada.

Como ejemplo, ampliaremos el circuito que realizamos con la salida digital. Lo que
buscaremos es que el led encienda cuando presionamos un pulsador y lo mantengan
prendido hasta que volvamos a presionarlo para que se apague.

El circuito sería el siguiente:

Y el código sería el siguiente:

int led = 8;
int pulsador = 7;
int estadoPulsador = 0;
void setup()
{
pinMode(led, OUTPUT);//Configuramos el pin 8 como salida
pinMode(pulsador, INPUT);//Configuramos el pin 7 como entrada
}
void loop()
{
estadoPulsador=digitalRead(pulsador);
if(estadoPulsador != 1){
digitalWrite(led, HIGH);
}else{
digitalWrite(led,LOW);

Programar en Arduino| 4
}
delay(1000);
}

Del ejemplo anterior incorporamos un par de conceptos nuevos, el uso de un pulsador,


y en este caso de un circuito pull-up, pero agregaremos también el concepto de pull-
down y pull-up interno.

El pulsador
Este componente funciona como una “llave sin retención”, esto implicaría que mientras
esté presionado la llave está cerrada y cuando la soltamos, su estado pasaría a abierto.
Se usa para poder interactuar con el usuario. En los circuitos esquemáticos se lo puede
reconocer con las siguientes imágenes:

[https://snappygoat.com/s/?q=bestof%3ASPDT-
Switch.svg%20Diagram%20of%20a%20SPDT%20switch%20own%202006-07-
04%20Iainf%2022%2001%203%20July%202006%20UTC%20my%20own%20work%20Relay%2
0symbols%20svg%20--
%20SVG%20electrical%20symbols%20Switch%20diagrams#e6cfbcf81c8bee9171e58749b
cd6e8b8af8fc4d1,0,82.]

Programar en Arduino| 5
[https://pixabay.com/illustrations/circuit-diagram-electronic-science-928225/]

Circuito pull-up
También se puede encontrar en bibliografía como resistencia pull-up.
Una resistencia pull-up, básicamente es una resistencia que se conecta a 5V se utiliza
para tener una referencia de “default”, en este caso sería un “1”.

Para entender mejor su funcionalidad, recordemos que las entradas digitales


cuando se las definen como entrada tienen un estado de alta impedancia y esto
significa que, si queremos leer un valor y este no está conectado ni a GND ni a 5V,
la lectura que obtendremos no es definida. Y como vimos anteriormente, tanto las
entradas como las salidas sólo tienen 2 valores posibles “HIGH” o “LOW”.

El circuito es el siguiente:

[https://openclipart.org/detail/287741/pullup-resistor-circuit-schematic]

Programar en Arduino| 6
La manera de interpretar este circuito es que mientras el pulsador S1 esté sin ser
presionado, el valor que obtendremos de una lectura en INPUT, va a ser de 5V o “1”.
Cuando presionemos S1, el valor que obtendremos en la lectura de INPUT es GND o “0”.
De esta manera resolvemos la indeterminación que se produce si sólo conectamos el
pulsador S1 y queremos hacer una lectura de INPUT cuando no esté presionado.

En el circuito del ejemplo anterior podemos ver que la resistencia se encuentra


conectado a 5V. Con esto logramos que cuando hacemos una lectura del estado del
pulsador solo podamos leer “0” si en pulsador está presionado o “1” si no lo está.

Pull-up interno
Tal como vimos en la explicación anterior, el microcontrolador de la placa Arduino posee
un circuito de pull-up interno, el cual nos permite tener el circuito sin necesidad de
tenerlo físicamente.

Como vimos anteriormente, con el comando pinMode(). tenemos 2 tipos de


configuraciones, INPUT y OUTPUT.

En realidad, tenemos una tercera que es INPUT_PULLUP, esta configuración indica que
el pin es de entrada y que queremos hacer uso del pull-up interno que posee el
microcontrolador.

La sintaxis es:

pinMode(pin, INPUT_PULLUP);

La lectura se hace a través de digitalWrite como se explicó anteriormente.

Resistencia pull-down
Semejante a lo explicado anteriormente, la resistencia de pull-down nos permite fijar
nuestro valor de default a “0” y de esta manera evitar la indeterminación. A diferencia
del pull-up, no tenemos un circuito de pull-down interno dentro del microcontrolador,
por lo que sí o sí debe estar presente físicamente que queremos hacer uso de este.
El circuito de pull-down es el siguiente:

Programar en Arduino| 7
[https://commons.wikimedia.org/wiki/File:Pullup_Pulldown_resistor.svg]

La interpretación del circuito es que mientras el pulsador no esté presionado, en la


entrada D tenemos un “0” cuando realizamos su lectura y cuando presionamos el
pulsador tenemos un “1”

¿Para qué se usan estos circuitos?


La utilidad de estos circuitos es poder eliminar indeterminaciones y existen estas 2
configuraciones ya que dependiendo la solución que tengamos que encarar debemos
utilizar uno u otro. Un ejemplo de uso real es una alarma.
La manera que tenemos de saber que no nos deshabilitaron los sensores de puerta es
tener resistencias de pull-up en las entradas de los sensores. Esto nos permite saber que
por default tenemos un estado “HIGH” o “1”. Esto nos indica que en circuito tiene 5V,
que en el caso de que nos desconecten, la entrada quedará en un estado de alta
impedancia generando indeterminación.

Lo que aprendimos en esta unidad


En esta unidad pudimos ver como leer una entrada y fijar una salida.
Conocimos los circuitos pull-up y pull-down y los usamos en circuitos.
Realizamos circuitos en Tinkercad para probar lo aprendido.

Programar en Arduino| 8

También podría gustarte