Ahora que ya sabemos qué es un pulsador y cómo se usa, vamos a buscarle utilidad para nuestro Arduino.
Vamos a enseñar a nuestro Arduino a hacer una acción cuando se presiona un botón. Sería el ejemplo más simple de lo que nuevo será la operativa para que nuestro futuro robot actúe de forma autónoma. Cuando reciba una señal (en nuestro ejemplo la presión del botón, pero podría ser una vibración, un ruido, ...) nuestro robot ejecutará una acción (en nuestro caso el encendido de un LED, pero puede ser la activación de un sistema de vigilancia, el envío de un mensaje, la emisión de una alarma acuística, etc.).
Para esta práctica necesitaremos
Qué
|
Imagen
|
Coste
estimado
|
Placa
Arduino
|
24 €
|
|
Placa de
prototipado
|
5-6€
|
|
Adaptador
de red
|
6€
|
|
LED
naranja
|
0,1€
|
|
Resistencias
|
0,1€
|
|
Pulsador
|
0,2€
|
|
Cablecitos
|
2€
|
Ahora, ayudándonos de Fritzing para nuestro prototipo, vamos a desarrollar nuestro proyecto
cuyo esquema sería
donde para calcular la resistencia de protección de nuestro LED hemos usado lo que aprendimos en Cálculo de la resistencia para un led, y hemos propuesto una de 220 ohms.
y le cargamos este pequeño Sketch que hemos preparado
/*
Práctica con el pulsador_1 Basado en un sketch de DojoDave y Tom Igoe Enciende y apaga un LED conectado al pin digital 13, cuando se presiona el pulsador unido al pin 2 El circuito se coompone de: * un LED unido desde el pin 13 a tierra * un pulsador unido a pin con +5 voltios adaptado en 2013 M. Domínguez Basado en el ejemplo de dominio público http://www.arduino.cc/en/Tutorial/Button */ // Bloque de definición de constantes que usaremos en nuestro sketch // Define la asignación de los pines a usar const int pulsadorPin = 2; // El número del pin asociado al pulsador const int ledPin = 13; // El número del pin asociado al LED // Bloque de declaración de las variables que usaremos int pulsadorEstado= 0; // Es la variable que registrará el estado del pulsador // Bloque de configuración // Definimos qué pines vamos a usar // y si lo usaremos como entradas o como salida de datos void setup() { // Inicializamos el pin del LED y lo definimos del tipo Salida: pinMode(ledPin, OUTPUT); // Inicializamos el pin del pulsador y lo definimos del tipo Entrada: pinMode(pulsadorPin, INPUT); } // Bloque de definición del programa a ejecutarse void loop(){ // lee el valor del estado del pulsador: pulsadorEstado = digitalRead(pulsadorPin); // verifica si el pulsador está presionado // si es así, el estado del pulsador es Alto: // y enciende el LED if (pulsadorEstado == HIGH) { // enciende el LED digitalWrite(ledPin, HIGH); } // si no lo es, el estado del pulsador es Bajo: // y apaga el LED else { // turn LED off: digitalWrite(ledPin, LOW); } }
Con lo que obtenemos un resultado como éste
Si nos fijamos parece que funciona, pero si nos fijamos con más detenimiento, vemos no va demasiado fino.
Cuando pulsamos el botón (o pulsador), el LED se enciende, pero cuando dejamos de pulsarlo, se mantiene encendido durante un instante, y éste no es el comportamiento que queríamos reproducir. Nuestro robot ejcutará una acción (por ejemplo activar un sistema anti-incendios) mientras se de una condición concreta (en nuestro caso, alguien presionando una botón), pero una vez que esa situación se finaliza, queremos que desactive el sistema que haya activado (en nuestro caso nuestro LED). ¿Por qué sucede ésto?
Si recordamos lo que vimos en la entrada Resistencias Pull-Up - Pull-Down, la tensión que ejercemos sobre el pin 2 de nuestro Arduino, es como el empujón que damos para abrir una puerta, si no implementamos en la puerta un mecanismos de autocierre, puede que se quede abierta durante un tiempo e incluso que se cierre y se abra debido a pequeñas perturbaciones (lo que en electrónica se llama ruido). Para ello si queremos que nuestro pin note que hemos dejado de presionar el botón tenemos que implementar nuestro pequeño resorte para cerrar "nuestra puerta". Y esto lo hacíamos conectandole una resistencia de 10K a tierra. De este modo, una vez que el pulsador deja de actuar, y los 5 voltios no llegan al pin 2, la carga que quede en ese pin, fluirá hacia la tierra a través de la resistencia de pull-down.
Para ello tendremos que modificar nuestro prototipo como sigue:
cuyo esquema sería
Pues en ese caso, si pensamos de nuevo en la analogía de la puerta, lo que queremos es siempre que la puerta esté abierta, osea que querríamos que siempre hubiera 5 voltios en la entrada del pin 2 a menos que algo mande una señal contraria. Es lo que viene ser una resistencia de Pull-up
siendo su prototipo como sigue
y su comportamiento lo podemos ver más claramente en este vídeo
En resumen:
Este ejemplo enciende el LED asociado al pin 13 cuando
pulsas el botón asociado al pin 2.
Con resistencia Pull-down:
Cuando el pulsador está abierto (sin pulsar) no hay conexión
entre las dos patas del pulsador, de forma que el pin está conectado a tierra
(a través de la resistencia pull-down) y leemos un LOW (bajo ó 0). Cuando el
botón se cierra (pulsado), se establece la unión entre sus dos extremos,
conectando el pin a 5 voltios, por lo que leemos un HIGH (alto ó 1).
Con resistencia Pull-up:
Cuando cableamos el circuito en sentido contrario, con
una resistencia "pull-up" que mantiene la entrada del pin 2 en HIGH, ésta pasa LOW cuando se pulsa el botón. Así, el comportamiento del programa (sketch) se
invertie, con el LED normalmente encendido y apagado cuando se pulsa el botón.
Si resistencias pull-down o pull-up:
Si se desconectas el pin digital de E/S del todo, el LED
puede llegar a parpadear de forma errática. Esto se debe a la entrada es
"flotante", es decir, al azar se tornará en HIGH o LOW. Y este efecto se puede ver si esperas un poco o usas un LED de tensión baja y que lo haga muy sensible a las señales generadas por el ruido. Por eso se
necesita la resistencia pull-up o pull-down estos tipos de circuitos. De otro modo nuestro futuro robot, podría malinterpretar el ruido como señales de disparo, y actuar cuando debería no hacerlo.
es → en
pulsadorPin
es → en
in
preposición: in, on, at, into, to, for, by, about
No hay comentarios:
Publicar un comentario