RPi GPIO interferencia de relé con entrada

0

Estoy tratando de usar un RPi3 para producir / controlar una lámpara usando este módulo de relé.

También quiero poder leer desde un botón pulsador y un interruptor.

El problema que tengo es que parece que cambiar el relé está introduciendo ruido en la entrada GPIO y creando falsos positivos.

El módulo RPi y el módulo de relé están en un recinto exterior de 190 mm x 145 mm x 140 mm. Ellos están bien el uno con el otro.

Intenté usar un relé de estado sólido y eso resolvió el problema de la interferencia, pero preferiría usar un relé convencional debido al tamaño y los precios.

He intentado ver el ruido captado por el GPIO con un osciloscopio digital USB Hantek, pero desafortunadamente no pude ver nada. Sigo esperando para comprobarlo con mi osciloscopio analógico. Además, estoy pensando en probar un cable blindado desde el botón pulsador y cambiar al GPIO y también envolver el módulo de relé en una malla metálica con conexión a tierra para crear una jaula de Faraday.

Hasta ahora he intentado colocar un filtro de paso bajo para cada entrada.

El primer circuito que probé fue: C1 - 10n y 100n

simular este circuito : esquema creado usando CircuitLab

Luego probé un filtro de paso bajo:
R1 - 100 y 1k
C1 - 1u, 10n, 100n

simular este circuito

También probé con la activación y desactivación de GPIO

En cualquier caso, ninguno de ellos mejora el resultado.

En el lado del software, estoy usando Python, RPi.GPIO event_detect; Intenté aumentar el tiempo de rebote e insertar un retardo después de la detección de eventos para "filtrar" los eventos generados por humanos, pero esto solo funcionaría para el caso del botón pulsador, no para cambiar.

Cualquier consejo sería apreciado.

ACTUALIZACIÓN : este módulo de relé inserta mucho ruido, lo probé con la porción de RPI HAT de verdad y el mismo código funcionó bien, podría detectar falsos positivos en una prueba rápida.

este es el código:

#!/usr/bin/python


import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False)

GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.OUT)
GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_UP)


GPIO.setup(20, GPIO.IN, pull_up_down=GPIO.PUD_UP)

GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)


def read2(channel):
    print "GPIO 2"

def read20(channel):
    print "Button"

def read23(channel):
    print "Switch"


if __name__ == '__main__':

    GPIO.add_event_detect(26, GPIO.BOTH, callback=read2, bouncetime=300)
    GPIO.add_event_detect(20, GPIO.BOTH, callback=read20, bouncetime=300)
    GPIO.add_event_detect(23, GPIO.BOTH, callback=read23, bouncetime=300)

    while True:
        pass

A pesar de todo, sigo buscando cómo poder usar esa placa.

    
pregunta maco1717

4 respuestas

1

Debería poder deshacer el cambio de software. Siempre es una buena práctica "tirar" de la entrada en la dirección opuesta a la acción del interruptor utilizando una resistencia de 10k ohmios.

Con respecto a los transitorios de conmutación de relé, parece que hay diodos de supresión en las bobinas de relé. Así que intentaría colocar un condensador de 100 uF o más directamente en los terminales de la fuente de alimentación del tablero de relés. Esto ayudará a "sostener" el suministro de 5 voltios a la placa cuando el relé está energizado.

    
respondido por el Glenn W9IQ
2

He enfrentado exactamente el mismo problema y justo antes de volverme loco, encontré la causa raíz y la solución.

Su problema es que la detección de bordes es muy, muy, muy, muy sensible para los picos de voltaje. Probablemente verá falsas detecciones incluso cuando encienda o apague otros equipos en su casa también.

Para superar este problema, simplemente ponga un retraso de 10 ms en sus definiciones de devolución de llamada y vuelva a leer el estado del pin; Si todavía es lo mismo que realizar una acción, de lo contrario era solo un pico. Los condensadores pueden ayudar, pero tienen que diseñarse de una manera específica para que el tiempo sea perfecto, también tienen un comportamiento de carga y descarga diferente, ¡por lo que es bastante difícil!

Por favor, eche un vistazo a: enlace para obtener información real y correcta. Espero que tengas éxito!

    
respondido por el user181352
1

No estoy seguro de si se aplica, pero hay varios problemas posibles con estos relés.

  1. Tienen una bobina de 5 V, por lo que requieren cambio de nivel de 3.3 V GPIO de RPi.
  2. La resistencia de la bobina es de solo 70 ohmios, lo que causaría una gran cantidad de corriente de los pines GPIO, posiblemente destruyéndolo. Esto podría resolverse junto con la p. 1
  3. Un relé necesita un diodo de retorno para proteger los pines GPIO de EMF potencialmente destructivos.

A menos que el módulo de relé se lo proporcione (no se pudo encontrar la hoja de datos del módulo), debe hacerlo usted mismo. Ahora, dado que el módulo está diseñado para Arduino, que, AFAIK, tiene 5 V GPIO, hay una alta probabilidad de que al menos p. 1 está en el lugar. Es decir, el módulo espera 5 V como voltaje de control y tratar de controlarlo con 3.3 V RPi GPIO conduce a una operación inestable.

    
respondido por el Andrey Pro
0

Por fin, un límite de 100uf en el tablero de relés entre VCC y GND resolvió los problemas de los falsos positivos.

No es necesario cambiar de nivel.

Gracias a todos.

ACTUALIZACIÓN : ¡Falsa alarma! estaba probando sin carga (LAMP) y no funciona con el módulo de relé o RPi HAT.

Estoy empezando a creer que estoy tratando de hacer algo imposible. Creo que solo tengo las opciones de SSR y / o software "debouncing" left ...

    
respondido por el maco1717

Lea otras preguntas en las etiquetas