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 esquiva obstáculos con Arduino
Robot esquiva obstáculos con Arduino y un sensor de ultrasonidos

Robot esquiva obstáculos con Arduino y un sensor de ultrasonidos

| Actualizado:
Comentarios: 2

En este proyecto nos marcamos el objetivo de desarrollar un robot capaz de esquivar objetos. Un robot que avanzará en línea recta mientras que no detecte ningún obstáculo; en caso de detectar algún estorbo, girará sobre sí mismo hasta que…

Robot Arduino controlado por un mando a distancia de infrarrojos
Robot Arduino dirigido con un mando infrarrojo

Robot Arduino controlado por un mando a distancia de infrarrojos

| Actualizado:
Comentarios: 0

El objetivo de este proyecto es controlar el movimiento de un robot Arduino con un mando a distancia, a través de una señal de infrarrojo.

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

Las entradas digitales en Arduino. Los pulsadores.

| Actualizado:
Comentarios: 0

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…

Joystick analógico y Arduino
¿Cómo utilizar un joystick analógico con Arduino?

¿Cómo utilizar un joystick analógico con Arduino?

| Actualizado:
Comentarios: 0

En este post veremos la conexión de un joystick a la placa Arduino. Primero se comprobara hacia donde se mueve sacando los datos por el serial monitor y en un segundo proyecto, según el movimiento del joystick encenderá un led.…

Comentarios - 0

Deja un comentario

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