1. El Octavo Bit
  2. / Arduino
  3. / Proyectos para Arduino
  4. / Las entradas digitales en Arduino. Los pulsadores.

Las entradas digitales en Arduino. Los pulsadores.

| Actualizado:
Comentarios: 0

Las entradas digitales en Arduino. Los pulsadores.
Las entradas digitales en Arduino. Los pulsadores.

En muchos de los proyectos con Arduino nos encontraremos un pulsador o botón. Aquí veremos cómo hacer para utilizar correctamente sus señales. Primero, explicaremos qué son las resistencias pull-up y pull-down, montaremos un circuito eléctrico con un pulsador y una resistencia pull-down y otro pulsador con una resistencia pull-up, veremos cómo mantener un led encendido mientras se pulsa un botón, y por último, programaremos un cronómetro con dos pulsadores y un led.

Como ya sabemos las entradas digitales son aquellas que pueden tener dos valores LOW y HIGH. Lo que realmente recibimos es un voltaje de 0V (LOW) o de 5V (HIGH). La dos funciones que se utilizan para las entradas digitales básicamente son:

  • pinMode(pin, INPUT): sirve para configurar el pin digital, bien de salida o bien de entrada. INPUT, nos indica que es de entrada.
  • digitalRead(pin): lee el valor de entrada del pin digital indicado. Devuelve un valor HIGH o LOW, en función del voltaje recibido.

Resistencias de pull-up y pull-down.

Configuracion de las resistencias en pull-up o pull-down.

Sabemos entonces que estamos trabajando con 2 estados: HIGH, 5V, o LOW, 0V. Puede ocurrir que debido al ruido, a variaciones en la fuente de alimentación, la señal sea indeterminada. Para solucionar esto emplearemos las resistencias. En la siguiente imagen se pueden ver las configuraciones según donde esté colocada la resistencia:

La resistencia pull-down tiende hacia cero. La resistencia se conecta a tierra. Si el interruptor está abierto, la corriente se dirige hacia la resistencia, garantizando un valor LOW. Mientras que si el interruptor está cerrado, la corriente se dirige hacia el pin dando un valor HIGH.

La resistencia pull-up tiende a 5V. La resistencia se conecta a la fuente de alimentación. Si el interruptor está abierto, la corriente va hacia el pin y nos da un valor HIGH. Pero si el interruptor está cerrado, la corriente va a tierra, provocando un valor LOW de salida hacia el pin.

Circuito eléctrico con un pulsador y resistencia pull-down.

Vamos a realizar un circuito que es capaz de monitorizar el estado de un pulsador utilizando una resistencia Pull Down.

Material necesario:

  • Arduino Uno o similar.
  • Protoboard.
  • Cables.
  • Un pulsador.
  • Resistencia de 10 KΩ

Esquema del circuito:

Esquema para el proyecto pulsador con resistencia Pull Down

Las conexiones del pulsador son, por un lado, directa a la fuente de alimentación y por otro, a tierra a través de la resistencia pul-down (10KΩ). Existe un tercer cable, conectado entre el pulsador y la placa de Arduino, que va a parar al pin digital de la placa Arduino (en este caso particular, el nº 8). Este pin digital deberá configurarse como pin de entrada porque allí será donde se reciba la señal que indique el estado del pulsador.

Código:

int estadoBoton=0;  //Guardará el estado del botón (HIGH ó LOW)
void setup(){
  pinMode(8,INPUT); //Pin donde está conectado el pulsador
  Serial.begin(9600);
}
void loop() {
  estadoBoton=digitalRead(8);
  Serial.println(estadoBoton);
  delay (50);   //Para mayor estabilidad entre lecturas
}

Circuito eléctrico con un pulsador y resistencia pull-up

En este ejemplo vamos a crear un circuito para monitorizar el estado de un pulsador usando una resistencia pull-up.

Material necesario:

  • Arduino Uno o similar.
  • Protoboard.
  • Cables.
  • Un pulsador.
  • Resistencia de 10 KΩ
Esquema para el circuito pulsador con resistencia Pull Up, para Arduino

Aquí podemos comprobar cómo las conexiones del pulsador son, por un lado, hacia la fuente de alimentación, pero a través de la resistencia pull-up (10 KΩ) y por otro lado, la conexión es directa a tierra. Existe un tercer cable, conectado entre el pulsador y la resistencia que va a parar a un pin digital de la placa Arduino (en este caso particular, el nº 8). Este pin digital deberá configurarse como pin de entrada porque allí será donde se reciba la señal que indique el estado del pulsador.

El código que pusimos para monitorizar el pulsador en el circuito con resistencia pull-down sigue siendo válido ahora también con el circuito de resistencia pull-up; pero veremos que los valores 0 y 1 están invertidos. Si con una resistencia pull-down nos daba HIGH sin presionar el pulsador, con una resistencia pull-up nos dará un valor LOW.

int estadoBoton=0;  //Guardará el estado del botón (HIGH ó LOW)
void setup(){
  pinMode(8,INPUT); //Pin donde está conectado el pulsador
  Serial.begin(9600);
}
void loop() {
  estadoBoton=digitalRead(8);
  Serial.println(estadoBoton);
  delay (50);   //Para mayor estabilidad entre lecturas
}

Encendido de un led mientras se mantiene pulsado un botón.

En este ejemplo trataremos de hacer que un led se encienda mientras pulsamos un botón, el led se apagará en el momento que soltemos el botón.

Material necesario:

  • Arduino Uno o similar.
  • Protoboard.
  • Cables.
  • Un pulsador.
  • Un led.
  • Resistencia de 10 KΩ y otra de 220 Ω

Diseñamos dos circuitos independientes: uno para el manejo del pulsador con configuración pull-down, y otro, para el encendido del led.

Esquema para el proyecto encendido de un led mientras se pulsa un botón
int estadoBoton=0;     //Guardará el estado del botón (HIGH ó LOW)
void setup(){
    pinMode(4,OUTPUT);     //Donde está conectado el LED
    pinMode(8,INPUT);     //Donde está conectado el pulsador
}
void loop() {
    estadoBoton=digitalRead(8);
    //Si se detecta que el botón está pulsado, se enciende el LED
    if (estadoBoton == HIGH) {
        digitalWrite(4,HIGH);
    } else {
        digitalWrite(4,LOW);
    }
}

Ahora con el mismo esquema de conexión vamos a programar un botón de apagado y encendido, es decir, cuando se pulse el botón se mantendrá encendido el led y cuando se le vuelva a pulsar, se apagará.

int estadoActual=0;     //Guarda el estado actual del botón
int estadoUltimo=0;     //Guarda el último estado del botón
int contador=0;     //Guarda las veces que se pulsa el botón
void setup(){
  pinMode(4,OUTPUT);     //Donde está conectado el LED
  pinMode(8,INPUT);    //Donde está conectado el pulsador
  Serial.begin(9600);
}
void loop(){
  //Leo el nuevo estado actual del botón
  estadoActual=digitalRead(8);
  //Si éste cambia respecto el estado justo anterior…
  if (estadoActual != estadoUltimo){
    /* lo notifico. Ojo, tengo que comprobar que el cambio sea una
    pulsación y no una liberación. Si hubiéramos usado una resistencia
    pull-up, el valor a comprobar de "estadoActual" sería LOW */
    if (estadoActual == HIGH) {
      contador = contador + 1;
      Serial.print ("Ésta es la pulsación nº ");
      Serial.println(contador);
    }
  }
  //Guardo el estado actual para la siguiente comprobación
  estadoUltimo= estadoActual;
  /*Cambiamos el estado del LED contando las veces que se ha pulsado el
  botón, de forma alternativa (número par = LED apagado, número impar =
  LED encendido) ¡Ojo, no contamos cuando se suelta!)*/
  if (contador % 2 == 0 ) {
    digitalWrite(4, LOW);
  } else {
    digitalWrite(4, HIGH);
  }
}

¿Cómo hacer un cronómetro con Arduino? Dos pulsadores y un led.

En este ejemplo trabajaremos con dos pulsadores: uno de ellos para comenzar a contar, y otro para parar. Añadiremos un led que se iluminará mientras cuenta.

Material necesario:

  • Arduino Uno o similar.
  • Protoboard.
  • Cables.
  • Dos pulsadores.
  • Un led.
  • Dos resistencia de 10 KΩ y otra de 220 Ω
Esquema para el proyecto de un cronómetro con dos pulsadores

El esquema consta de dos pulsadores independientes con resistencias pull-up. El pulsador uno lo conectaremos en el pin digital 2, y el pulsador dos en el pin digital 3. También montaremos un led que estará conectado al pin digital 4.

unsigned long inicio, fin, tiempo;
boolean contando;

void setup() {
  Serial.begin(9600);
  pinMode(4,OUTPUT); // Led que nos indica si esta contando
  pinMode(2, INPUT); // Boton de cominezo
  digitalWrite(2, HIGH); // se activa la resistencia de pull up
  pinMode(3, INPUT); // boton de finalización
  digitalWrite(3, HIGH); // se activa la resistencia de pull up
  Serial.println ("Botón 1 para iniciar y 2 para terminar");
  contando = false;
}

void resultados(){
  float h, m, s, ms;
  unsigned long over;
  tiempo = fin - inicio;
  h = int(tiempo / 3600000);
  over = tiempo % 360000;
  m = int(over / 60000);
  over = over % 60000;
  s = int(over / 1000);
  ms = over % 1000;
  Serial.print("Tiempo trancurrido en lilis: ");
  Serial.println(tiempo);
  Serial.print("Tiempo transcurrido: ");
  Serial.print(h, 0);
  Serial.print("h ");
  Serial.print(m, 0);
  Serial.print("m ");
  Serial.print(s, 0);
  Serial.print("s ");
  Serial.print(ms, 0);
  Serial.println("ms ");
  Serial.println();
}

void loop() {
  if(digitalRead(2) == LOW){  // ESTAMOS EN PULL-UP
    if(contando){
      Serial.println("Ya hemos comenzado ");
      digitalWrite(4,HIGH);
    }else{
      contando = true;
      inicio = millis();
      delay(200); // por seguridad
      Serial.println("Empezamos...");
    }
  }
  if(digitalRead(3) == LOW){  // ESTAMOS EN PULL-UP
    if(contando){
      digitalWrite(4,LOW);
      contando = false;
      fin = millis();
      delay(200); // por seguridad
      resultados();  
    }else{
      Serial.println("Pulse comenzar antes de finalizar...");
    }
  }
}

Artículos que te pueden interesar

Robot controlado por bluetooth con Arduino
¿Cómo hacer un coche controlado por bluetooth con Arduino?

¿Cómo hacer un coche controlado por bluetooth con Arduino?

| Actualizado:
Comentarios: 4

En este tutorial construiremos un robot móvil controlado por Bluetooth desde nuestro móvil a través de una aplicación de Android. El montaje y la puesta en funcionamiento de este pequeño coche es sencillo puesto que es el resultado de la…

Medir la inclinación con Arduino
Medir la inclinación con Arduino y el sensor SW-520D

Medir la inclinación con Arduino y el sensor SW-520D

| Actualizado:
Comentarios: 0

Realizamos un ejemplo básico, donde se puede apreciar que la lectura hecha por el sensor se recibe en un pin de entrada digital de la placa (hemos usado el nº 7). Material necesario: Arduino Uno o similar. Protoboard. Cables Sensor…

Conectar un display de 7 segmentos
Conexión de display de 7 segmentos al Arduino.

Conexión de display de 7 segmentos al Arduino.

| Actualizado:
Comentarios: 0

En este artículo te vamos a contar como utilizar un display de 7 segmentos con Arduino, haremos un pequeño contador de 0 a 9 y programaremos un dado con la pequeña pantalla y un pulsador. Los display de un solo…

Módulo bluetooth HC-06 con Arduino
Tutorial básico de uso del módulo bluetooth HC-06 en Arduino

Tutorial básico de uso del módulo bluetooth HC-06 en Arduino

| Actualizado:
Comentarios: 0

El objetivo de este tutorial es poder añadir un módulo bluetooth a nuestra placa de Arduino y poder comunicarnos con un teléfono móvil Android a través de una aplicación. Primero veremos cómo conectarlo al móvil y después, cómo configurar el…

Comentarios - 0

Deja un comentario

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