Flanco positivo y negativo y función telerruptor

Resumen en vídeo

Rebotes en Arduino

Los llamados “rebotes” en Arduino se deben a que el paso de 0  a 5 V nunca es instantáneo y limpio. Suele ser algo similar a lo siguiente, teniendo en cuenta que el eje X marca el tiempo y el Y, la tensión (entre 0 y 5 V):

Esas frucutaciones en el cambio de tensión duran milisegundos o incluso microsegundos, y no siempre se dan, pero en algunos casos pueden originar que se detecte que se ha accionado un pulsador varias veces, cuando realmente se a accionado una sola, por ejemplo.

Para evitarlo, se puede añadir el bloque Esperar tras el pulsador, para que la placa no escuche nada durante los siguientes milisegundos.

ArduinoBlocks dispone de un bloque específico para evitar estos problemas, se denomina Pulsador (filtrado) y se encuentra en la sección Sensores.

Flancos positivos y negativos

Para evitar problemas como el descrito en el apartado anterior, se pueden usar flancos. Con estas funciones se consigue tomar el primer instante en el que la tensión cambia. Si toman el momento en el que pasa de menos a mas tensión, entonces se denominan flancos positivos. Si por el contrario, queremos tomar el primer instante en el que la tensión cae, usamos flancos negativos.

Imaginemos que tenemos un pulsador conectado a una entrada de Arduino. Cuando accionemos el pulsador y cambie la entrada de cero a 5 V, entonces tendremos un flanco positivo. Al soltarlo, tendremos un flanco negativo.

En automatización, estas funciones son también muy utilizadas, se suelen representar con una P para el positivo y una N para el negativo. También se puede ver representado con flechas hacia arriba y hacia abajo.

Además de para evitar rebotes, estas funciones se utilizan para multitud de casos como resumido a continuación y abordado al final del artículo:

Si queremos, por ejemplo, que al accionar un pulsador se active una salida, y al volver a pulsarlo, se apague (función telerruptor) nos encontramos con un problema. En el tiempo en el que nosotros accionamos el pulsador, dado que cada ciclo en Arduino pasa muy rápido, la placa puede interpretar que hemos accionado el pulsador varias veces, no solo una. Esto hace que el sistema no funcione. Tenemos que decirle, que solo tome el primer pulso y que no vuelva a hacer nada hasta que hayamos soltado el pulsador y vuelto a pulsar.

Para abordar este tipo de situaciones hay diferentes estrategias, pero quizá la mas simple y efectiva sea el uso de los mencionados flancos. En el vídeo incluido en el inicio del artículo se muestra en la práctica este tipo de problemas y la solución.

 Establecer el estado de una salida en función de una variable booleana

En lugar de seleccionar directamente qué estado queremos que tenga una salida, podemos hacer que este dependa del valor de una variable, de tal forma que, modificando el valor de la variable, cambiamos el estado de la salida. Para eso hay que usar dos conceptos nuevos:

  • Bloque de salida con el estado disponible para insertar variable:

Vemos que en la imagen anterior, el estado del puerto 2, usado como salida, dependerá del valor de la variable booleana “EstadoPulsación”, que solo puede ser ON (1) u Off (0).

  • Cómo hacer para que una variable cambie al valor contrario al que tenía:

Simplemente tenemos que igualarla con ella misma con su valor negado. Por ejemplo, cada vez que se active el puerto 2 se va a hacer que  cambie el valor de la variable “”EstadoPulsación”:

Programa: Función telerruptor usando Esperar para evitar rebotes

Nivel 1: Se trata de activar un punto de luz con un pulsador que funciona tanto para encender, como para pagar ese punto de luz.

Conexión:Se van a utilizar el pulsador del puerto 2 tanto para encender, como para apagar el punto de luz conectado al puerto 4. Es decir:

Programa:

Este programa tiene un problema, y es que si se acciona el pulsador durante mas de los 300 ms que se dejan para evitar rebotes, la luz se apagará. Si se deja permanentemente pulsado, la luz parpadeará todo el tiempo con la frecuencia del bloque Esperar.  Se puede solucionar esto profundizando un poco mas en la programación o utilizando interrupciones, como se muestra en artículos posteriores.

Nivel 2: Se trata de activar un punto de luz con varios pulsadores que funcionan tanto para encender, como para pagar ese punto de luz.

Usando el circuito anterior, vamos a encender y apagar un luz conectada al puerto 4, desde dos de los pulsadores de la instalación (el 2 y el 3).

Programa: Función telerruptor con el bloque Pulsador (filtrado).

Preguntas, sugerencias, propuestas…

Realiza cualquier cuestión, sugerencia o propuesta sobre el artículo o vídeo, en el foro del curso. Muchas gracias.

Deja un comentario

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