Cómo Deshacerse Del Rebote De Contacto Al Conectar Un Botón A Arduino

Tabla de contenido:

Cómo Deshacerse Del Rebote De Contacto Al Conectar Un Botón A Arduino
Cómo Deshacerse Del Rebote De Contacto Al Conectar Un Botón A Arduino

Video: Cómo Deshacerse Del Rebote De Contacto Al Conectar Un Botón A Arduino

Video: Cómo Deshacerse Del Rebote De Contacto Al Conectar Un Botón A Arduino
Video: Como eliminar el rebotes de un pulsador 2024, Noviembre
Anonim

Ya hemos analizado la conexión de un botón al Arduino y hemos abordado el tema de los contactos "rebotando". Este es un fenómeno muy molesto que provoca que se presionen repetidamente los botones y dificulta la gestión programática de los clics de los botones. Hablemos sobre cómo deshacerse del rebote de contacto.

Efecto de rebote de contacto
Efecto de rebote de contacto

Necesario

  • - Arduino;
  • - botón de tacto;
  • - resistencia con un valor nominal de 10 kOhm;
  • - Diodo emisor de luz;
  • - cables de conexión.

Instrucciones

Paso 1

El rebote de contacto es un fenómeno común en interruptores mecánicos, botones pulsadores, interruptores de palanca y relés. Debido al hecho de que los contactos generalmente están hechos de metales y aleaciones que tienen elasticidad, cuando se cierran físicamente, no establecen de inmediato una conexión confiable. En poco tiempo, los contactos se cierran varias veces y se repelen entre sí. Como resultado, la corriente eléctrica adquiere un valor de estado estable no instantáneamente, sino después de una serie de altibajos. La duración de este efecto transitorio depende del material de contacto, el tamaño y el diseño. La ilustración muestra un oscilograma típico cuando los contactos del botón táctil están cerrados. Se puede ver que el tiempo desde el momento del cambio al estado estable es de varios milisegundos. Esto se llama "rebote".

Este efecto no se nota en los circuitos eléctricos para controlar la iluminación, los motores u otros sensores y dispositivos inerciales. Pero en los circuitos donde hay una lectura y un procesamiento rápidos de información (donde las frecuencias son del mismo orden que los pulsos de "rebote", o más), esto es un problema. En particular, el Arduino UNO, que opera a 16 MHz, es excelente para capturar el rebote de contacto al aceptar una secuencia de unos y ceros en lugar de un solo interruptor de 0 a 1.

Rebote de contacto al presionar un botón
Rebote de contacto al presionar un botón

Paso 2

Veamos cómo afecta el rebote de los contactos al correcto funcionamiento del circuito. Conectemos el botón del reloj al Arduino usando un circuito de resistencia desplegable. Pulsando el botón, encenderemos el LED y lo dejaremos encendido hasta que se vuelva a pulsar el botón. Para mayor claridad, conectamos un LED externo al pin digital 13, aunque se puede prescindir del incorporado.

Conectando un botón a un Arduino usando un circuito de resistencia pull-up
Conectando un botón a un Arduino usando un circuito de resistencia pull-up

Paso 3

Para realizar esta tarea, lo primero que me viene a la mente:

- recordar el estado anterior del botón;

- comparar con el estado actual;

- si el estado ha cambiado, cambiamos el estado del LED.

Escribamos ese boceto y lo carguemos en la memoria Arduino.

Cuando se enciende el circuito, el efecto del rebote del contacto es inmediatamente visible. Se manifiesta en el hecho de que el LED no se enciende inmediatamente después de presionar el botón, o se enciende y luego se apaga, o no se apaga inmediatamente después de presionar el botón, sino que permanece encendido. En general, el circuito no funciona de forma estable. Y si para una tarea con encender el LED esto no es tan crítico, entonces para otras tareas más serias, es simplemente inaceptable.

Boceto de la pulsación del botón de procesamiento sin tener en cuenta el rebote del contacto
Boceto de la pulsación del botón de procesamiento sin tener en cuenta el rebote del contacto

Paso 4

Intentaremos arreglar la situación. Sabemos que el rebote de contacto se produce en unos pocos milisegundos después de un cierre de contacto. Esperemos, digamos, 5 ms después de cambiar el estado del botón. Este tiempo para una persona es casi un instante, y presionar un botón por una persona generalmente toma mucho más tiempo: varias decenas de milisegundos. Y Arduino funciona muy bien con períodos de tiempo tan cortos, y estos 5ms le permitirán cortar el rebote de los contactos al presionar un botón.

En este boceto, declararemos el procedimiento debounce () ("bounce" en inglés es simplemente "bounce", el prefijo "de" significa el proceso inverso), a cuya entrada proporcionamos el estado anterior del botón. Si la pulsación de un botón dura más de 5 mseg, entonces es realmente una pulsación.

Al detectar la prensa, cambiamos el estado del LED.

Sube el boceto a la placa Arduino. ¡Todo está mucho mejor ahora! El botón funciona sin falta, cuando se presiona, el LED cambia de estado, como quisiéramos.

Bosquejo del procesamiento de la pulsación de un botón, teniendo en cuenta el rebote del contacto
Bosquejo del procesamiento de la pulsación de un botón, teniendo en cuenta el rebote del contacto

Paso 5

Bibliotecas especiales como la biblioteca Bounce2 proporcionan una funcionalidad similar. Puede descargarlo desde el enlace en la sección "Fuentes" o en el sitio web https://github.com/thomasfredericks/Bounce2. Para instalar la biblioteca, colóquela en el directorio de bibliotecas del entorno de desarrollo de Arduino y reinicie el IDE.

La biblioteca "Bounce2" contiene los siguientes métodos:

Bounce (): inicialización del objeto "Bounce";

intervalo vacío (ms): establece el tiempo de retardo en milisegundos;

void adjuntar (número de pin): establece el pin al que está conectado el botón;

int update (): actualiza el objeto y devuelve verdadero si el estado del pin ha cambiado y falso en caso contrario;

int read (): lee el nuevo estado del pin.

Reescribamos nuestro boceto usando la biblioteca. También puede recordar y comparar el estado anterior del botón con el actual, pero simplifiquemos el algoritmo. Cuando se presiona el botón, contaremos las presiones, y cada presión impar encenderá el LED, y cada presión par lo apagará. Este boceto parece conciso, fácil de leer y fácil de usar.

Recomendado: