Lectura del estado de un pulsador para la activación de un LED
Vistas las resistencias Pull-Down, vamos a seguir cacharreando, esta vez incorporando la entrada de datos digitales en Arduino.
Introducción al tutorial
En este tutorial aprenderemos a configurar un determinado puerto como entrada, otro como salida, y activaremos o desactivaremos éste último para encender y apagar un led en función de la entrada. El siguiente vídeo muestra el resultado final de nuestro montaje.
Lista de componentes
- 1x Arduino Mega (podemos emplear cualquier Arduino).
- 1x Led Blanco 5 mm.
- 1x Pulsador Mini-Switch de 6mm
- 1x Resistencia de 220 Ω
- 1x Resistencia de 10 kΩ.
- 1x Protoboard.
- 1x Juego de cables.
Montaje del diseño
Como en el Tutorial 1, el led blanco de 5 mm también funciona sobre los 3v y una corriente de 0,15mA. Por tanto, ya tendríamos de sobra que saber calcular la resistencia necesaria para colocar en serie con el led:
[math]R=\frac{V}{I}=\frac{5V – 3V}{0,015A}=133,33\Omega[/math]
Por tanto podemos usar un valor típico igual o superior a ese. En mi caso, utilizaré una de 220Ω que tengo al alcance, proporcionando al led una corriente algo menor a 10mA, pero suficiente para que se ilumine. Además, de esta forma, alargaremos la vida del led. Con éstos números es obvio que una resistencia de un cuarto de watio nos valdrá:
[math]P=V^2/R=4V^2/220\Omega=0,018W[/math]
En éstos tutoriales de iniciación a arduino las conexiones eléctricas son pocas y fáciles de llevar a la práctica. Siguiendo en concordancia con esta norma, haremos un esquema muy simple, como el siguiente:
Podemos apreciar que la salida digital empleada para encender el led es la 53, mientras que nuestro pin para obtener datos y decidir si encenderlo o no es el pin digital 48. Observar la utilización de la resistencia pull-down en el anterior esquema de conexiones. Sin ella, el pin 48 quedaría al aire mientras el pulsador estuviera abierto, y no podríamos asegurar el estado lógico deseado debido a variaciones en el valor de tensión en ese pin.
El pulsador cuenta con un total de cuatro patillas, conectadas 2 a 2. Cuando lo mantenemos pulsado, los dos pares se conectan.
Cuando el circuito está en reposo (no estamos presionando el pulsador), nuestra entrada (pin 48 de arduino) obtendrá un 0 lógico, y tendremos nuestro led a 0v. En el momento que accionemos el pulsador, como la conexión con el pin 48 de nuestro arduino ofrece menos resistencia que la resistencia pull-down, obtendremos en ese pin un 1 lógico, y alimentaremos al led con 5v desde nuestro programa.
Escribiendo el programa
Como siempre, nuestro sketch bien comentado para que sea totalmente auto explicativo. Podéis descargarlo más abajo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
/* *********************************************************** **** rDuinoStar.com - Comunidad Arduino en Español **** *********************************************************** Tutorial 2.- Estradas y Salidas digitales Lectura de una entrada digital proveniente de un pulsador, y activación de un LED mientras se mantiene el pulsador accionado. Uso público citando el autor o procedencia, bajo licencia: Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0) Éste y más ejemplos en rDuinoStar.com, tu comunidad Arduino en Español */ // Pin digital al que conectamos el LED blanco int ledBlanco = 53; // Pin digital desde el que leeremos el estado del botón int estadoBoton = 48; void setup() { // Configración del pin 53 como salida pinMode(ledBlanco, OUTPUT); // Configración del pin 48 como entrada pinMode(estadoBoton, INPUT); } void loop() { // Comprobamos si el botón está presionado if (digitalRead(estadoBoton) == HIGH) {// Está presionado // Activamos el pin 53 (+5V) digitalWrite(ledBlanco, HIGH); } else {// No está presionado // Desactivamos el pin 53 (0V) digitalWrite(ledBlanco, LOW); } } |
Por tanto, podemos dividir el programa en tres bloques bien diferenciados.
– En el primer bloque declaramos dos variables que nos permitirán trabajar con los pines elegidos de una forma mucho más cómoda. Siguiendo nuestras propias recomendaciones, hacemos la inicialización junto con la declaración de las variables.
– El segundo bloque de código comprende la función setup(). En ella, establecemos qué pin va a actuar como entrada de datos (48) y cuál como salida para encender y apagar el led (53).
– El tercer y último bloque es el comprendido en la función loop(). Se repite una y otra vez la misma secuencia: Obtenemos el estado del pulsador en el pin 48, y actuamos en consecuencia. Si está pulsado (HIGH), entonces activamos el led conectado en el pin 53 (5v). En caso contrario, escribimos un 0 lógico (0 v) en nuestra salida de datos (pin 53), manteniendo el led apagado.
Las únicas lineas que pueden no ser familiares hasta este momento son las lineas destacadas (33 y 38). digitalRead(numeroDePin); obtiene la tensión en el pin pasado como argumento y decide si es un 1 o un 0 lógico. Un 1 (HIGH) representará el pulsador accionado, y un 0 (LOW) el pulsador en reposo. Por último, el bloque formado por el código if y el código else permiten ejecutar una parte de código si la condición entre los paréntesis que siguen a if es verdadera, y otra parte de código (else) en caso contrario.
Si surge alguna duda o sugerencia, o simplemente quieres decirnos si te ha servido de ayuda, puedes dejar un comentario.
Hasta el próximo tutorial!
Que tal muy bueno tu post necesito ayuda para ver el codigo para evaluar dos entradas y definir dos salidas.
Creo que no entiendo a qué te refieres, ¿puedes explicarnos un poco más en detalle lo que necesitas?
Hola un cordial saludo, quiero compartir un proyecto que estoy haciendo es sobre codificar pulsos de un radial telefónico antiguo, sino que tengo un problema ahora quiero sacar salidas por los pines del arduino según el marcado por el radial de pulsos, me explico por ejemplo si giro el numero dos me da cuatro pulsos en el radial, y automáticamente me salga una salida de 5vdc al pin de arduino, estoy tratando de programar pero no consigo, serial gentil de ayudarme, espero su cordial respuesta. este es mi correo tecnomovilraf@gmail.com
hola. necesito hacer un sorteador de 12 leds ,cada vez que apretas el pulsador sortea y prende un led,apretas y sortea ..es para hacer un batak ,es para ejercitar reflejos. si me podes ayudar con esto te agradesco…
muchas gracias
Hola, necesito que las salidas digitales me den valor negativo al pulsar .
En arduino mega .
Gracias desde ya
Buenas, muy bien explicado pero me surge la duda de porque pones la R=10Ω,
en segundo lugar me podría ayudar a realizar la siguiente modificación:
Se trata de que el pulsador actúe como interruptor, es decir, si partimos de un estado de led inicial apagado, al pulsar por 1º vez el led se ha de mantener encendido hasta que se realice la 2º pulsación.
He intentado ampliar su ejemplo recogiendo el estado del led en un nuevo pin.
En cuanto al circuito he puesto la lectura en el mismo punto que la escritura.
El programa es el siguiente:
int led = 12; // Pin digital al que conectamos el LED
int estadoBoton = 8; // Pin digital desde el que leeremos los estado botón
int estadoled = 7; // Pin digital desde el que leeremos los estado led
void setup()
{
pinMode(led, OUTPUT); // Configración del pin 12 como salida
pinMode(estadoBoton, INPUT); // Configración del pin 8 como entrada
pinMode(estadoled, INPUT); // Configración del pin 7 como entrada
}
void loop()
{// Comprobamos si el botón está presionado
if (digitalRead(estadoBoton) == HIGH) //Está presionado
{
if (digitalRead(estadoled) == HIGH) //Esta encendido
{
digitalWrite(led, LOW);// Desactivamos el pin 12 (0V)
}
else //Esta apagado
{
digitalWrite(led, HIGH); // Activamos el pin 12 (+5V)
}
}
}
Esta realizado sobre arduino uno. Funciona de forma irregular y huele a quemadillo creo que el problema es de circuito.
Un saludo y gracias.