Mostrando entradas con la etiqueta pulsador. Mostrar todas las entradas
Mostrando entradas con la etiqueta pulsador. Mostrar todas las entradas

miércoles, 4 de diciembre de 2013

Sensor de interrupción manual KY-004 (Key Switch Module)


Este módulo KY-004 disponible en el  Kit de sensores Keyes 37 en 1 implementa un pequeño pulsador como el que estuvimos presentando en la entrada sobre qué son y cómo funciona un pulsador.

En este caso, el módulo lo que nos hace es implementar el pulsador y una resistencia de protección en una pequeña plaquita. Y aunque a efectos prácticos podría parecernos un módulo un poco útil, éste nos permite evaluar cual sería el posible efecto de un fin de carrera en nuestro proyecto robótico.

Por si no lo sabéis un fin de carrera es un tipo especial de pulsador que lo usaremos en muchísimos sitios, en detección de apertura de puertas, detección de avance de un carro motorizado, impresoras 3D....


El proyecto que presentamos a continuación pretende generar aviso visuales  cada vez que acciones el pulsador, Que sería equivalente a decir, cada vez que el ascensor de nuestro ejemplo anterior, llegue a fin de carrera.


Para su construcción necesitaremos los siguientes elementos:


REFERENCIA
CANTIDAD
FOTO






Módulo de pulsador manual KY-004





1







Protoboard





1







Cables colores






3








Arduino






1


El funcionamiento de un LED,  de las resistencias de protección y de pulsador, lo vimos en entradas anteriores, y el programa está comentado para permitirnos entender las instrucciones que le estamos dando a nuestro microcontrolador.


DIAGRAMA DE CONEXIÓN



FUNCIONAMIENTO

Primero definiremos un pin donde vamos a enclavar el aviso visual, nuestro LED, y el pin desde donde vamos a monitorizar nuestro de llegada (que lo simularemos cuando apretemos el pulsador). Esto lo podemos hacer bien usando variables del tipo entero o bien con la directiva #define (que ahorra memoria en caso de que nuestro sketch muy complejo). En este caso usaremos el pin 13, de nuestra placa que ya monta su propio LED. Así nos ahorramos montar un LED externo y su resistencia limitadora.

Y también definiremos la variable que vamos a usar, para registrar si hemos pulsado el botón (que sería el equivalente en el ejemplo de la cabina elevadora del ejemplo inicial, al detectar que hemos llegado o no al destino (por eso le hemos puesto a la variable el nombre AlarmaDeLlegada).

Luego tendremos que configurar el setup de nuestro proyecto, que en este caso se limitará a definir si los pines que vamos a usar son de entrada o salida. En este ejemplo, el LED de aviso, es un output y como el KY004 es un pulsador que nos manda una señal, este pin será un input (una entrada).

A partir de aquí monitorizaremos la variable de detección de llegada (AlarmaDeLlegada) y si detecta que hemos llegado hará que se encienda nuestro LED, y si no permanecerá apagado.

Si queréis descargaros el sketch y usarlo directamente en vuestra placa, el fichero os lo dejo aquí, aunque es mejor que intentemos siempre copiarlo a mano, de este modo nos vamos familiarizando con las estructuras de programación, sus funciones y los modos más comunes de error que cometeremos a medida que vayamos desarrollando programas más complejos.


Para todos aquellos que no dispongáis de un módulo KY-004, el mismo funcionamiento lo podemos hacer reemplazando el KY004, con un pulsador una resistencia de pull-up.

A fin de cuentas, si le echamos un vistazo rápido a las tripas de nuestro módulo, podremos ver que no es más que un pulsador y una resistencia de pull-up.



Cuando presionamos el botón, la señal que antes estaba conectada a la alimentación (5 voltios en nuestro ejemplo) a través de una resistencia de 10K, pasa a estar conectada a tierra. Y cuando dejamos de presionar, el contacto se pierde y vuelve a situarse a la tensión de alimentación suministrada por el pin central.




El comportamiento esquemático del flujo de corriente lo podemos ver fácilmente en el siguiente esquema donde claramente vemos el efecto del pulsador y de la resistencia de pull-up.




Y si además queremos reemplazar el LED de la placa Arduino con uno exterior, tendremos que montar en la protoboard un LED y una resistencia limitadora de 220ohms.

El esquema que deberéis usar sería uno de los dos de abajo (según si vais o no montar un LED externo). El sketch funcionará igual de bien que si  estuvierais usando un KY-004.




Y ya sabéis, si tenéis alguna sugerencia de mejora o duda, no tenéis más que mandarnos un correo a



e intentaremos responder a vuestra pregunta lo antes que podamos.



miércoles, 4 de septiembre de 2013

El pulsador (2)



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


Y ahora sí funcionaría como queremos.

Pero ¿cómo lo hacemos si lo que queremos es justo el comportamiento contrario? Queremos que nuestro Arduino mantenga activado el sistema de iluminación de nuestro edificio (en nuestro caso, representado por el LED) a menos que se dispare una señal de emergencia, como puede ser un detector de terremotos (en nuestro caso representado por el pulsador)?.

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

El pulsador (1)


Los pulsadores o botones  conectan dos puntos de un circuito al ser pulsados.

Cuando el pulsador está abierto (sin pulsar) no hay conexión entre las dos patas del pulsador,, sin embargo cuando el botón se cierra (pulsado), se establece la unión entre sus dos extremos.

Aparentemente funcionaría como un interruptor con la salvedad de que una vez dejado de pulsar el circuito vuelve a abrirse mientras que el interruptor permanecería en la posición accionada, es por ello por lo que en el esquema eléctrico se representan con símbolos diferentes




Suelen costar del orden de 0,20-0,50 euros, y hay tanta variedad como necesidades tengamos. Pablo Murillo de Arduteka nos ha hecho una comparativa de las diversas modalidades que nos podríamos encontrar. Os dejo el enlace por si teneis curiosidad, Comparativa – Pulsadores para proyectos

Si miráis la placa de vuestro Arduino, veréis que usa un pulsador para permitirnos resetearlo de forma manual.

Para esta primer ejemplo vamos a tomar uno de  6 mm, que cabe en cualquier circuito por pequeño que sea


El más pequeño de todos con tan solo 6 mm de lado y, como el resto de los pulsadores, de actuación momentánea (solo cierra el circuito mientras estamos pulsando). El hecho de tener 4 patillas, no nos quiere decir que tenga dos contactos internos, sino que tenemos un contacto al que tenemos acceso por dos lugares diferentes, un truco para recordar que patillas son las que están comunicadas interiormente es observar las que están enfrentadas entre sí, si se miran, están comunicadas!




El material que vamos a necesitar sería:




Qué
Imagen
Coste estimado



Placa de prototipado







5-6€





Adaptador de red






6€






LED naranja





0,1€





Resistencias 





0,1€



Pulsador 



0,2€



Cablecitos




2€





Primero lo vamos a ver como se comporta sin necesidad de nuestro Arduino. A continuación incluímos el esquemático de nuestro circuito hecho con Fritzing.



En este pequeño vídeo podrás ver el LED funcionando cada vez que accionamos el pulsador