Hardwire rgb-led-controller en lugar de infrarrojo

2

Creo que la mayoría de ustedes conoce estos controladores rgb-strip con IR-Remote. Intento controlarlo a través de gpio cableado desde raspberry3, simplemente reemplazando el receptor ir.

de

|ir remote|.......>...|IR-LED GP3 µc|

a

|rpi GPIO out|----->----|in GP3 µc|

Encontré estas informaciones sobre la caja:

12 V In 
SMD5050 RGB Strip 4Wire
SOT23 NFET, max 3A
IR Sensor CHQB, 3Wire 
8bit 8pin µc with 5V TTL Logic
at least 3x PWM
maybe PIC12F617

Pinout en este µc:

        GND - XX - 5V
        GP5 - XX - GP0 - B Out
        GP4 - XX - GP1 - R Out
IR IN - GP3 - XX - GP2 - G Out

enlace

¿Esposible?!

  • 1.¿ControlatravésdeGP3(IR)-Port?

    • Parecequelademodulacióndeportadora(35KHz)estádentrodelreceptorir.
    • ¿Cómodebocodificar/recodificarlosdatosirparaqueseancomprendidosporelµc?
    • ¿Esunpseudo-serial-en-puertosimpleconunatasadebaudiosdistintiva?
    • diciendoclaramente"quiero omitir el ir-path"
    • beneficio comandos cortos y sin prisas en la frambuesa
    • desventaja solo puede usar comandos guardados por µc
  • 2. ¿Se conecta directamente al NFET (Q1-Q3 en la imagen)?

    • ¿Tengo que cambiar de nivel 3,3V a 5V?
    • beneficio todo es posible
    • desventaja necesita codificarlo todo en frambuesa
pregunta chmee

2 respuestas

3

Ambos son posibles.

IR, primero necesita una configuración de receptor IR. Grabe la señal entrante desde el control remoto. Luego, configure un circuito led IR simple controlado por un transistor / FET controlado por GPIO. Envía los comandos que quieras. No es pseudo serial, los códigos tienden a ser NEC (Quizás RC5, pero NEC es más simple y más común). Cualquier número de proyectos de control remoto IR RPi en google ayudará.

El cable duro, retire el IC existente. Utilice un cambiador de nivel, ya que es probable que 3.3V no sea suficiente para superar el umbral VGS para una resistencia baja adecuada de la fuente de drenaje, RDS (activado). Este cambio puede ser un simple transistor npn, pero requiere que inviertas tu lógica en el código RPI.

Actualización:

Sí, podría pasar por alto el receptor IR. Es como espera, un demodulador que elimina la onda portadora de 38 kHz (más o menos) y pasa los datos. Creo que debería ser una señal alta activa a través de un pull-up. Esto le permite omitir las secciones del transmisor LED y el receptor IR. Como la línea debe tener un tirón de 5V, todo lo que necesita es un simple transistor NPN para cambiar de nivel de 3.3V a 5V. De nuevo, la lógica se invierte, por lo que una lógica 1 en el RPI sería una lógica baja en la entrada de la MCU. Debes asegurarte de que solo se envían los datos, Sin modular .

Ya que estás usando LIRC para el RPI, entonces necesitas cargarlo correctamente :

 sudo modprobe lirc_rpi softcarrier=0

La opción Softcarrier se deshabilitó para eliminar la ola del operador, solo disponible en lirc_rpi afaik, por lo que tuvo suerte.

Esto depende de las características específicas del receptor de IR utilizado. Una imagen del reverso de la placa ayudaría. Desearía desconectar los datos de los receptores IR para evitar interferencias.

    
respondido por el Passerby
3

(1) reemplazando el IR a través del cable

  • No tuve suerte de hacerlo funcionar. Mientras que raspberry / lirc reconoció las señales de infrarrojos del control remoto, no sucede nada cuando envío estos datos por cable a la GP3 de µc. Buenas noticias, este receptor IR también está trabajando con Raspberry / Lirc.

  • Lee la respuesta de @Passerby.

ejemplo lircd.conf

# brand:         /home/pi/lircd.conf
#  
# -- it seems, this controller was built with many
# -- different commands. i ve got 5 at home and only two
# -- remotes/controllers are working with these commands
#
# usage  irsend SEND_ONCE LED LED_ON

begin remote

  name  /home/pi/lircd.conf
  name LED
  bits           16
  flags SPACE_ENC|CONST_LENGTH
  eps            30
  aeps          100

  header       9029  4479
  one           594  1651
  zero          594   530
  ptrail        592
  repeat       9029  2239
  pre_data_bits   16
  pre_data       0xF7
  gap          107958
  toggle_bit_mask 0x0

      begin codes
          LED_ON                   0xC03F
          LED_OFF                  0x40BF
          LED_BRIGHT               0x00FF
          LED_DARK                 0x807F
          LED_R                    0x20DF
          LED_G                    0xA05F
          LED_B                    0x609F
          LED_W                    0xE01F
          LED_FLASH                0xD02F
          LED_STROBE               0xF00F
          LED_FADE                 0xC837
          LED_SMOOTH               0xE817
          LED_RB                   0x48B7
          LED_RG                   0x28D7
          LED_BG                   0xA857
      end codes

end remote  

(2) Conexión al SOT23 N-FET

  • Funciona como un encanto. Corté el gpio de µc, soldé 4 cables y los conecté a la frambuesa, sin un cambio de nivel a 5V. Las primeras pruebas salieron bien.

ejemplo de python:

import time
import RPi.GPIO as GPIO

pinR = 27
pinG = 17
pinB = 22
pwmFreq = 200

GPIO.setmode(GPIO.BCM)
GPIO.setup(pinR, GPIO.OUT)
GPIO.setup(pinG, GPIO.OUT)
GPIO.setup(pinB, GPIO.OUT)

pr = GPIO.PWM(pinR, pwmFreq)  # GPIO 27 frequency=200Hz
pg = GPIO.PWM(pinG, pwmFreq)
pb = GPIO.PWM(pinB, pwmFreq)
pr.start(0)
pb.start(0)
pg.start(0)

try:
    while 1:
        for dc in range(0, 101, 1):
            pr.ChangeDutyCycle(dc)
            pb.ChangeDutyCycle(dc)
            pg.ChangeDutyCycle(dc)
            time.sleep(0.02)
        for dc in range(100, -1, -1):
            pr.ChangeDutyCycle(dc)
            pb.ChangeDutyCycle(dc)
            pg.ChangeDutyCycle(dc)
            time.sleep(0.02)
except KeyboardInterrupt:
    pass
pr.stop()
pb.stop()
pg.stop()
GPIO.cleanup()
    
respondido por el chmee

Lea otras preguntas en las etiquetas