Cambio de señal de conteo entre flotante y BAJO en Arduino

Tengo un contacto giratorio (disyuntor de contacto de un ICE) que cambia entre no estar conectado a nada (flotante) y estar conectado a la caja del ICE. La carcasa del motor está conectada a tierra (la misma tierra que el Arduino). Por lo tanto, la señal cambia entre tiempos cortos de estar en BAJO (conectado a tierra) y en su mayoría flotando. Ambos intervalos son mucho más altos que la resolución de hardware habitual para las interrupciones en el Arduino: piense en varios microsegundos de BAJO frente a algunos milisegundos de flotación.

Dado que el estado "ENCENDIDO" del interruptor se conecta a tierra, estaba pensando que podría usar la función de interrupción del Arduino para recibir información cada vez que el estado cambia a BAJO, para contar cuántas veces gira el motor. Sin embargo, solo he visto que esto se usa en combinación con una señal ALTA y no con una señal flotante. Me preguntaba si esto también funcionaría y la interrupción se activaría cuando la señal cambiara de flotante a BAJA.

¿Cuáles son mis opciones para contar una señal que cambia entre flotante y la misma señal de tierra que el Arduino?

Respuestas (2)

Puede elevar débilmente la señal cuando el interruptor no está cerrado usando una resistencia pull-up. Los puertos GPIO en la mayoría de los microcontroladores tienen resistencias pull-up integradas que puede controlar desde el software.

Voy a probar esto mañana. establecerlo en INPUT_PULLUP parece bastante fácil. Espero que la diferencia de voltaje entre tierra y flotación sea suficiente para activarlo :)
@YanickSalzmann, su última oración de ese comentario parece que todavía podría estar un poco confundido acerca de algunos de los detalles. Agregar la resistencia pull-up (a través del software o de otra manera) hace que la entrada ya no esté flotando y cualquier "diferencia de voltaje entre tierra y flotación" no es realmente significativa.
tienes razón, estoy un poco confundido sobre qué es una resistencia "pull up", sin embargo, esto es algo que puedo resolver por mí mismo :)
@YanickSalzmann Tenga en cuenta que, a veces, las elevaciones predeterminadas disponibles no son suficientes para que el flanco se incline lo suficiente, por lo que es posible que desee calcular (según el valor de la resistencia) o medir (con un alcance) el resultado.
@YanickSalzmann Una resistencia pullup es una resistencia entre la señal y VCC. La forma MÁS SIMPLE de hacer esto es simplemente colocar una resistencia física entre los 5 V y la señal del Arduino, lo que obliga a que la señal se convierta en 5 V cuando la salida flota. Esto significa que ahora está en condiciones de detectar el cambio entre 5 V y 0 V y ya no necesita preocuparse por 0 V y flotación.

Ninguna MCU puede detectar directamente un pin flotante, requiere componentes externos, trucos de software inteligentes o al menos configurar el pin GPIO correctamente

Es por eso que usa resistencias para elevar la señal para que no flote y pueda leerse como alta.

La resistencia pull up puede ser una resistencia física externa, o también puede usar pull ups incorporados de MCU si son adecuados para su aplicación.

No diría que nunca... Puedo pensar en algunas formas en las que podría detectar una condición flotante con un MCU y un ADC y un circuito con pull ups y pull downs a 2.5V (luego cambiarlo a GPIO). También puede detectar una condición 'no flotante'