Pregunta:
¿Cómo puedo detectar un pin desconectado?
Karim Stekelenburg
2015-08-29 12:51:06 UTC
view on stackexchange narkive permalink

Estoy intentando construir un sistema en el que si un cable se desconecta de un pin (cualquier pin), se ejecuta una acción.

Me pregunto cómo configurar esto. ¿Puedo simplemente conectar el 5V a un pin y leer su estado o esto estropeará el Arduino? ¿Debo usar resistencias? ¿Cómo debo conectar esto a GND?

Tenga en cuenta que soy bastante nuevo en todo esto.

Indique si estos pines se utilizarán para entrada o salida. Si es salida, ¿qué están impulsando? p.ej. LEDs. Si es entrada, ¿cuál es el dispositivo desde el que está leyendo?
No estoy realmente seguro de si debería usarlos como entrada o salida. La idea es que active un evento de software y no un evento físico (hardware). Todo lo que realmente necesito es una señal a la computadora (aunque USB por ahora) que dice que el cable está desconectado.
Tres respuestas:
Majenko
2015-08-29 14:59:34 UTC
view on stackexchange narkive permalink

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:

enter image description here

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:

enter image description here

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).

Avamander
2015-08-29 13:51:28 UTC
view on stackexchange narkive permalink

Puede conectar todos los pines a través de una resistencia de 1M a un riel. De vez en cuando, configura todas sus salidas en entradas y alterna el riel ALTO y BAJO, si las entradas son ALTA y BAJA en la secuencia en que alteró el riel, no hay cable. Se hizo la misma pregunta en los foros de Arduino, así que lea este hilo.

La respuesta de esta pregunta fue proporcionada por johnwasser@forum.arduino.cc.

Gracias, pero esto parece mucho más complejo de lo que debería ser para mi propósito. No estoy usando ningún dispositivo o sensor externo. Lo que estoy buscando es una forma de detectar si la corriente fluye de 5V a GND (cable conectado) o no (cable desconectado) .Podría pensar en ello como un extraño collar electrónico que emitirá un sonido una vez que se desconecte. Ahora, ¿cómo puedo determinar cuándo hacer el ruido?
Gazihan Alankus
2017-10-19 00:58:14 UTC
view on stackexchange narkive permalink

Alternativamente, si se trata de una entrada digital, puede usar una resistencia pull-up o pull-down para darle al pin de entrada un valor predeterminado. Digamos que usa una resistencia pull-up para hacer el alto predeterminado. Luego, conecta un cable bajo a esta entrada para que la entrada lea bajo. Ahora, si el cable sube o si se desconecta, obtiene un valor alto en el pin de entrada.

Sé que esto no era exactamente lo que estaba preguntando, pero tal vez tal solución podría ayudar con su problema original. En mi caso, tengo un módulo de detección de llama que da salida baja por defecto y se pone alta cuando hay llama. No quiero perderme la llama debido a que mi cable se desconecta, así que uso una resistencia pull-up que hará que la entrada sea alta no solo cuando hay una llama, sino también cuando hay una desconexión. De esta manera me aseguro de no perderme un incendio debido a la desconexión del cable del sensor.



Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...