X

Al usar esta página web, aceptas nuestro uso de cookies. Usamos cookies para ofrecerte una mejor experiencia y para ayudar a que tu página funcione de manera efectiva.

D0/RXD1/TXD2D3 PWMD4D5 PWMD6 PWMD7D8D9 PWMD10 PWM/SSD11 PWM/MOSID12/MISOD13/SCKRESETRESET2AREFiorefA0A1A2A3A4/SDAA5/SCLN/CGND3V35VVINArduino Uno(Rev3) RSR RS R A5A4A3A2A1A0VINGNDGND5V3V3RESETIOREFRX0 0TX0 12- 34- 5- 678- 9- 10- 111213GNDAREF "
MecatrónicaLATAM

ARDUINO PULSADOR

En este tutorial se tratan conceptos básicos de programación y la forma correcta de conectar un pulsador a una tarjeta, en este caso Arduino, pero es posible emplear otras tarjetas.

Para entender la importancia de la forma en que debemos de conectar un pulsador y el valor de la resistencia correcta para una configuración Pull Up o Pull Down es importante entender el funcionamiento de un botón pulsador.


LECTURA DE UN PULSADOR CON ARDUINO

Primeramente se debe considerar una configuración con una resistencia Pull Up o Pull Down teniendo en consideración que en la configuración con resistencia Pull Up se forzará un estado “ALTO” cuando el pulsador se encuentre abierto y en el caso contrario en la configuración con resistencia Pull Down se forzará un estado “bajo” cuando el interruptor se encuentre abierto.

MATERIAL
  • 1x Arduino.
  • 1x LED.
  • 1x Protoboard.
  • 1x Resistor(Para el pulsador).
  • 1x Resistor(Para el LED).

Esquema de montaje

A continuación, se presenta el montaje para las dos configuraciones con una tarjeta Arduino y una placa Protoboard.

Montaje de Resistencia Pull Up

Montaje de Resistencia Pull Down

Circuito esquemático

Resistencia Pull Up

Resistencia Pull Down

Nota: Se va a utilizar la configuración Pull Down.

Código

Se puede observar en el circuito un pulsador en el pin 2 y un LED en el pin 3, en la programación definimos un alias para cada uno respectivamente usando #define, además al led lo ponemos como salida usando pinMode() , al pulsador como entrada ya que leeremos lo que mande, este pulsador lo hemos conectado en modo de pull-down, esto nos quiere decir que siempre enviará un estado lógico de BAJO estando en reposo y cuando pulsemos enviará un ALTO, este valor se almacenará en la variable Push_lee, pero para leer la señal que el pulsador manda usamos la función digitalRead(), ese valor se almacena en la variable anteriormente mencionada, todo esto dentro de loop ya que es nuestro programa de ejecución, después con el uso de una condicional if tendremos la lógica “Si presionamos el pulsador este enviará un valor lógico ALTO o 1, entonces prende el LED si no se pulsa, entonces apaga el LED”, por eso el if si tenemos un valor ALTO o 1 en nuestra variable Push_lee y hacemos la comparación. Entonces entra dentro del if y envía un alto al LED y este prenderá, si no entra en el else ya que no se tiene un uno de lectura sino un cero, entonces envía un bajo al LED y este permanece apagado únicamente si no se pulsa el pulsador. Y es así es como leemos valores digitales.

  • #define Push 2 //Damos el alias a nuestro pin 2.
  • #define LED 3 //Damos el alias a nuestro pin 3.
  • byte Push_lee = 0;
  • void setup()
  • {
    • pinMode(LED,OUTPUT); //Definimos el pin LED como salida.
    • pinMode(Push,INPUT); //Definimos el pin Push como entrada.
    }
  • void loop() //Definimos nuestra secuencia.
  • {
    • Push_lee = digitalRead(Push); //Almacenamos en la variable la lectura del pulsador.
    • if(Push_lee == 1)//Condición que si tenemos el valor de 1 entra en el.
    • {
      • digitalWrite(LED,HIGH); //Se manda un ALTO al LED.
      }
    • else //Condición que se cumple si no se cumple el if.
    • {
      • digitalWrite(LED,LOW);
      }
    }

Importante:Aunque la tarjeta Arduino cuenta con resistencias Pull Up internas con un valor de 30 kilo-ohms, no se suelen utilizar por los siguientes motivos:

  • El nivel de autoridad es bajo, lo que significa que el valor de la resistencia es muy alto.
  • Se puede provocar un cortocircuito si la configuración desde la programación es incorrecta, debido a esto se recomienda conectar físicamente la resistencia y así poder verificar la conexión.

PULSADOR COMO INTERRUPTOR CON ARDUINO

La siguiente práctica consta de que al momento de presionar un pulsador este prenderá un led hasta que se vuelva a presionar, convirtiendo este pulsador a un interruptor con programación, esto no solo nos servirá con pulsadores sino con muchos otros componentes.

MATERIAL
  • 1x Arduino.
  • 1x LED.
  • 1x Protoboard.
  • 1x Resistor(Para el pulsador).
  • 1x Resistor(Para el LED).

Esquema de montaje

El esquema de montaje es el mismo que el anterior (lectura de un pulsador), considerando la configuración del resistor como Pull Down.

Circuito esquemático

Código

Se crearon tres variables del tipo int, una para almacenar la lectura del pulsador que es push_lee, estadoLed para almacenar el estado que entrará en el if para que prenda o apague el led, incluso cualquier otro actuador.

La variable estadoAnterior almacenará el estado anterior del pulsador, estas tres variables se igualan a cero para tener un valor por defecto, ya en el setup() se configuran los pines como entrada y salida respectivamente, ahora viene lo más interesante que es el programa de ejecución que sirve para usar un pulsador como un switch.

Primero se almacena en push_lee la lectura que se le hace al pulsador, luego continua un if en el cual se tiene dos condiciones unidas por un AND o sea un &&, la primera condición nos dice que al estado de push_lee debe ser uno y se hace la comparación además de que este estado debe ser verdadero y esto se cumple cuando presionamos el pulsador, la segunda condición dice que el estado anterior debe ser cero y esto es verdad ya que al principio nosotros le dimos un valor de cero, después tiene una operación muy interesante la cual es estadoLed = 1 – estadoLed.

Después dentro del if viene un delay(), es un pequeño tiempo llamado antirrebote y es el tiempo en que tardamos presionando el pulsador, al terminar este if se le asigna a la variable estadoAnterior el valor de push_lee.

Ahora bien, explicaremos la operación estadoLed = 1 – estadoLed, como el pulsador fue configurado en modo pull-downn al presionar el pulsador el valor de la variable push_lee cambia a uno, después entra al if donde las dos condiciones se evalúan y se encuentran verdaderas ya que se cumple la primera al presionar el pulsador y la segunda se cumple ya que le dimos el valor de cero, por consiguiente entra al if donde tenemos la operación estadoLed = 1 – estadoLed.

Como la variable estadoLed tiene valor cero porque así lo hemos puesto al principio entonces tenemos que estadoLed = 1 – 0, eso nos da el valor de uno en estadoLed, y ahora en la variable estadoAnterior fuera del if tiene un valor cero ya que el valor de uno lo toma únicamente cuando presionamos el pulsador y cuando se suelta toma el valor de cero nuevamente, después de esto entra el segundo if, como el estadoLed vale uno y no se ha cambiado este valor permanece en ese if y prende el led hasta que se vuelva a presionar el pulsador cambiará de estado porque ahora se tendrá: estadoLed = 1 – 1, que es cero y entra en el else ya que no se cumple la primera condición y se apaga el led, y así es como se hace para que un pulsador funcione como switch, como ya se mencionó esto no sirve solo para pulsadores, sino para muchas más aplicaciones.

  • #define Push 2 //Damos el alias a nuestro pin 2.
  • #define LED 3 //Damos el alias a nuestro pin 3.
  • int Push_lee = 0;
  • int estadoLed = 0;
  • int estadoAnterior = 0;
  • void setup()
  • {
    • pinMode(LED,OUTPUT); //Definimos el pin LED como salida.
    • pinMode(Push,INPUT); //Definimos el pin Push como entrada.
    }
  • void loop() //Definimos nuestra secuencia.
  • {
    • Push_lee = digitalRead(Push); //Almacenamos en la variable la lectura del pulsador.
    • if((Push_lee == 1) && (estadoAnterior == 0))
    • {
      • estadoLed = 1 - estadoLed;
      • delay(10);
      }
    • estadoAnterior = Push_lee;

    • if(estadoLed == 1)//Condición que si tenemos el valor de 1 entra en el.
    • {
      • digitalWrite(LED,HIGH); //Se manda un ALTO al LED.
      }
    • else //Condición que se cumple si no se cumple el if.
    • {
      • digitalWrite(LED,LOW);
      }
    }