Los pines de entrada Raspberry pi GPIO dan valores aleatorios

12

He estado jugando mucho con la Raspberry Pi últimamente. Pero tengo un problema.

Cuando configuro un pin de entrada para verificar si se le envía electricidad o no, me da respuestas bastante inestables.

Algunas observaciones que hice para aclarar mi problema:

  1. Cuando conecto el circuito y la electricidad fluye al pin de entrada, el valor que me da es consistentemente VERDADERO o 1.

  2. Cuando rompo el circuito quitando un LED que es parte de él (cuando el valor de entrada debe ser 0) me da valores aleatorios, cambiando entre 0 y 1.

  3. Cuando quito todos los cables de mi Pi, me da el valor constante de 0

  4. Si me quitan todos los cables GPIO, me da el valor de 0, pero si simplemente toco el pin de entrada con un trozo de metal conductor de electricidad (que no conduce a nada en el otro extremo), comienza de nuevo con los valores aleatorios. No me da valores aleatorios a menos que también tenga algo conectado al pin de salida. No tiene que conducir a ningún lado, solo tiene que tocar el pin de salida. Y alguna otra pieza de metal tiene que tocar el pin de entrada. No hay ninguna conexión entre ellos.

Me pregunto por qué comienza a darme valores aleatorios cuando el pin GPIO de entrada toca cualquier metal.

Y aún más interesante, ¿por qué me da 1s o VERDADERAS consistentes cuando realmente le envío electricidad?

Gustaf
fuente
Editar a la declaración número 4: no me da valores aleatorios a menos que también tenga algo conectado al pin de salida. No tiene que conducir a ningún lado, solo tiene que tocar el pin de salida. Y alguna otra pieza de metal tiene que tocar el pin de entrada. No hay ninguna conexión entre ellos
Gustaf
¡Bienvenido a Raspberry Pi Stack Exchange! ¿Sabes que puedes editar tu pregunta para corregir el cambio de esa información en lugar de comentarla? Además, ingrese al chat de vez en cuando. Siempre nos encantan las nuevas empresas y ayudará a demostrar que este sitio es útil, está creciendo y tiene una base de usuarios involucrada. ¡Gracias!
RPiAwesomeness
1
Esto se debe a que los pines están flotando. Más información en electronics.stackexchange.com/a/35705
Gerben el

Respuestas:

14

El problema

Cuando conecto el circuito y la electricidad fluye al pin de entrada, el valor que me da es consistentemente VERDADERO o 1.

Es cierto, pero ¿qué sucede cuando la tierra está conectada al pin de entrada GPIO? El valor que daría siempre sería falso .

  • Cuando la alimentación está conectada al pin de entrada: el pin de entrada detecta un 1 (verdadero).
  • Cuando la tierra está conectada al pin de entrada: el pin de entrada detecta un 0 (falso).
  • Cuando no hay nada conectado al pin de entrada: el pin de entrada se confunde.

Cuando no hay nada conectado, el pin está en un estado "flotante", y la salida no es predecible. está en un estado indefinido, no es ni 0 ni 1, y el valor detectado puede cambiar de forma extraña, de ahí sus resultados aleatorios. En electrónica, esto se conoce como el tercer estado .

Algunos detalles más de un artículo de Wikipedia :

En los circuitos digitales, una salida de alta impedancia (también conocida como hi-Z, tri-declarada o flotante) no está siendo conducida a ningún nivel lógico definido por el circuito de salida. La señal no se conduce a un nivel lógico alto o bajo; esta tercera condición lleva a la descripción "tri-declarada". Dicha señal puede verse como un circuito abierto (o cable "flotante").

La solución general

La solución es una resistencia desplegable . Piense en esto como un componente adicional que no hace nada cuando la línea obtiene un 0 o 1. Pero cuando la línea está inactiva, de repente entra en acción y da un 0.

La solución Raspberry Pi

Afortunadamente para ti, el Rpi tiene un menú desplegable incorporado, debes activarlo mediante programación. Aquí hay un script de Python para eso:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
//Now your input is stable.

Nota al margen

¡No conecte la alimentación directamente al pin ya que sería peligroso! Asegúrese de que haya suficiente resistencia en el circuito. Además, nunca conecte la alimentación de 5V directamente al GPIO, ya que solo acepta 3.3V.

Hola Mundo
fuente
¿Conoce el código C # equivalente cuando se ejecuta en la plataforma principal de Windows 10 IoT?
Vijay Chavda
¡Esta respuesta es dorada! Thx
domih