La forma de hacer esto, dado que no hay un valor digital entre HIGH y LOW, es crear activamente una señal en el pin que pueda reconocer. Tenga en cuenta que si la señal que ingresa al pin es un flujo de datos (una secuencia de ALTO y BAJO) que se ejecuta todo el tiempo, es posible que esto no funcione de manera confiable, pero es bueno para cosas como botones y otros sensores simples.
Cualquier señal en un cable tiene una fuerza de transmisión . Esto es básicamente lo poderosa que es la señal y lo buena que es para anular otras cosas que suceden en el mismo cable. Está estrechamente relacionado con la impedancia de salida de la fuente (qué está enviando la señal). Para cosas como botones e interruptores, ese es básicamente el valor de la resistencia pullup utilizada.
Para detectar activamente si un pin está desconectado o no, debe conectarlo temporalmente a un nivel de señal conocido en el al mismo tiempo que está conectado al cable (o no conectado si resulta que no está conectado). Este nivel de señal conocido tiene que ser de una unidad más débil que la señal de origen en varios órdenes de magnitud. Esto asegura que si intenta superponer su señal de prueba sobre la señal entrante, la señal entrante invade la señal de prueba y no la ve en absoluto. Por ejemplo, si su fuente tiene una impedancia de 10KΩ (digamos un botón con una resistencia pullup de 10KΩ), entonces sería adecuada una señal de prueba con una impedancia de fuente de 1MΩ.
Cada pin que se probará puede conectarse a su propio 1MΩ. (en este ejemplo) resistor, y esos resistores están todos conectados al mismo pin IO adicional:
En este ejemplo, el pin D2 es el pin de prueba y los pines D4-D7 son sus entradas.
Por lo tanto, en circunstancias normales, el pin D2 se establece como entrada y se ignora por completo. Sin embargo, cuando viene a probar los pines, lo configura como una salida.
Luego configura D2 en ALTO y lee cada uno de D4 a D7. Cualquiera que se lea como ALTO es candidato a no estar conectado.
Luego, configura D2 en BAJO y lee los pines que leen ALTO antes. Cualquiera que ahora se lea como LOW se desconecta.
Luego, vuelve a configurar D2 para que sea una entrada nuevamente para que no interfiera con las operaciones normales.
Si solo desea para saber si hay corriente fluyendo en un cable, puede usar lo que se llama una resistencia de derivación . Esta es una pequeña resistencia (tal vez 1Ω) que se coloca en línea con el cable y usted mide el voltaje (usando entradas analógicas Arduino) en ambos lados de la resistencia. El voltaje que cae a través de la resistencia es directamente proporcional a la corriente que fluye a través de él gracias a la Ley de Ohm:
I=V/R
Por ejemplo:
Si el voltaje leído por A1 debe ser de 5V (el voltaje al que está conectado el cable) y el voltaje leído por A0 debe ser 4.93 V, el voltaje caído por la resistencia sería 5-4.93 = 0.07v. Con la resistencia de 1Ω, la corriente sería 0.07 / 1 = 0.07A o 70mA.
Con el cable en OUT desconectado, no habrá flujo de corriente cero ya que no hay circuito. Así que reorganizando la fórmula anterior podemos probar que podemos decir que está desconectado.
Si I = V / R entonces V = RI. Por lo tanto, V = 1Ω × 0A = 0V. Entonces, el voltaje caído a través de la resistencia sería 0V, por lo que A0 y A1 serían iguales (descontando cualquier ruido). Tanto A0 como A1 leerían 5V. De manera similar, si el cable IN se desconectara en su lugar, tanto A0 como A1 leerían 0V.
Para detectar corrientes más altas, usa una resistencia más pequeña, y para detectar corrientes más pequeñas, usa una resistencia más grande; esto permite una caída de voltaje que se generará dentro de un rango adecuado para la sensibilidad del ADC que realiza la lectura. Para Arduino, es un ADC de 10 bits, por lo que puede detectar (con un REF de 5V V) 5/1024 = 4.882813mV por LSB.
Tenga en cuenta que si está trabajando con voltajes superiores a los que opera Arduino, deberá separar o escalar esos voltajes. Hay dispositivos especiales diseñados especialmente para esta tarea llamados amplificadores de derivación de corriente de lado alto . También le permiten usar una resistencia más pequeña de la que necesitaría, lo que es menos intrusivo para su circuito (menos caída de voltaje).