Estabilización de circuitos emisores/receptores de infrarrojos

Necesita ayuda para hacer que estos circuitos emisores/receptores de infrarrojos y su potencia sean más estables.

Construcción de una gran instalación de arte LED de 8' x 10' (se incluyen detalles en proceso). Mariposas LED en una arboleda que interactúan con el espectador. Integrado a la estructura de "árbol" de las instalaciones, habrá un campo de señales de emisores de infrarrojos con receptores de infrarrojos individuales (construidos como "mariposas") que activan y desactivan un grupo de LED cuando el espectador entra y sale del área.

La concepción es una gran variedad de señales de emisores de infrarrojos, que emiten a 38 kHz a una distancia de aproximadamente un metro, y una gran cantidad similar de "mariposas", cada una con su propia carga de receptor-transistor-LED encendida por la recepción de una señal. rebotando en un espectador cercano (de lo contrario, apagado).

Funciona en el circuito de prueba pero lo hace solo por un momento. Los amperios fluctúan desde la fuente de alimentación de banco del emisor, comenzando en 20 mA y aumentando hasta 40 y más. Una vez que sube el amperaje del emisor, los LED del receptor se apagan. Eso es malo. Deben permanecer encendidos mientras se reciba una señal. No estoy seguro de cómo estabilizar esa señal de 38Khz del LED emisor. Los circuitos son los simples y comunes que se encuentran en todas partes y los valores del emisor de infrarrojos/temporizador 555 astable se derivan de una calculadora en línea. Entiendo que el cableado en el circuito de prueba está muy desordenado y eso contribuye a la inestabilidad, PERO, ¿deberían funcionar estos circuitos como se propone si todos los componentes están ordenados en una PCB pequeña? La PCB del emisor tendría la forma de una "hoja" y la PCB de los receptores separados tendría la forma del cuerpo de una mariposa. ¿Habría algún cambio sugerido que debería hacer/ajustar con potencia o resistencia ANTES de enviar los esquemas a una tienda de PCB?

Probablemente debería ser evidente, pero soy un artista, no un ingeniero. Necesita ayuda para mantener estos circuitos sólidos, simples, pequeños y potentes para que la interacción/arte se muestre. Nota al margen: He estado buscando una consulta de EE, estoy dispuesto a pagar razonablemente por tiempo/experiencia, pero como esta no es una aplicación comercial, no puedo encontrar a nadie dispuesto (consulta sugerencias bienvenidas :) Por favor, ayuda.

EMISOR IR - CIRCUITOS RECEPTOR

CONCEPTO DE INSTALACIÓN LED

Calculadora de temporizador de 38Khz

cableado desordenado DETALLE DE INSTALACIÓN - EN CURSO

Verifique el voltaje a 5Vcc cuando los LED se apaguen. Mira que se quede en 5V. ¿De dónde provienen 5V en su circuito de prueba?
Para el circuito de prueba, la energía proviene de dos fuentes: el emisor de un suministro de banco y el receptor de una fuente de alimentación conmutada de 5v y 30 amperios. Cuando pruebo el RECEPTOR por separado, usando un control remoto de repuesto, funciona muy bien. Los LED permanecen encendidos mientras dure la señal. Próxima prueba: el voltaje del EMMITER se mantiene en los mismos 5 V en todo momento, según el suministro de la mesa de trabajo. Son los amperios los que fluctúan. ¿Supongo que se mete con la señal de 38 Khz?
Espero que los 12V en ese 555 ir la resistencia LED sea un error. De lo contrario, está extrayendo una gran cantidad de corriente a través de ese LED IR y fuera del 555. Una estimación aproximada me dice que está descargando alrededor de 1.5W, que es una cantidad considerable de calor para un LED pequeño.
Lo fue, Edgar Brown. Todo estaba funcionando en el mismo bus de 5v.

Respuestas (1)

Veo un defecto fatal en el enlace óptico infrarrojo.
El receptor de infrarrojos espera una cadena "ráfaga" de pulsos de 38 kHz. La hoja de datos explica que los 38 kHz deben estar encendidos momentáneamente, unos 600 microsegundos, y luego apagados durante 900 microsegundos. Las especificaciones de la hoja de datos china son difíciles de descifrar: cuando transmites 38 kHz continuos (como lo estás haciendo), el receptor se acostumbra a la señal, al igual que tus ojos se acostumbran al sol brillante (y cierran su iris). Al menos un usuario ha notado que este receptor también es propenso a la insensibilidad a la luz solar. Otros receptores similares podrían funcionar mejor.
tiempo de ráfaga del receptor de infrarrojos

Su idea básica es sólida, y ese receptor IR puede funcionar fácilmente a una distancia de 1 M. Su circuito 555 que maneja el IRLED necesita un temporizador adicional para "romperse" durante 900 microsegundos.
El receptor IR debe incluir alguna forma de mantenerse activo bajo durante ese descanso de 900 microsegundos. He agregado un capacitor de 0.22uF para lograr esta función, pero supuse que la resistencia interna de pull-up es de 39k ohmios. Muchos receptores de infrarrojos tienen esta resistencia: es posible que la hoja de datos china no especifique esta parte. La constante de tiempo R1*C1 es fundamental para salvar el descanso necesario de 900 microsegundos:
Controlador LED mejorado para eliminar 900 us.  explosiónusaría un microcontrolador muy pequeño en lugar del temporizador 555 para controlar el IRLED... menos partes. Puede generar la ráfaga de 38kHz que dura 600 microsegundos, y también agota el período de "apagado" de 900 microsegundos. Élincluso podría conducir el IRLED directamente a través de una resistencia de pequeño valor.

;Drive an infra-red LED cathode with digital output pin GP2.
;LED anode goes to +5V thru small series resistor, at 38000 Hz.
;23 cycles of 38 kHz, lasting about 600 microseconds
;turn IRLED off (high), lasting about 900 microseconds.
;Repeat this sequence forever.
;Default internal clock speed is 4MHz: instruction rate is 1000000/sec.
;All timing depends on 1MHz instruction rate!
;DON'T FORGET TO PULL notMCLR to LOGIC HIGH, else nothing runs!! Don't let it float.
;If you pull notMCLR low, IRLED goes off, until notMCLR goes high again.
;Watchdog timer is active - code resets it.
;By default, internal comparator is disabled from interfering with GP2 output pin.
;December2018
;
#include p10f200.inc        ;register names defined here
;Macros:
#define ledon bcf GPIO,GP2  ;turn IRLED on by dragging cathode low.
#define ledoff bsf GPIO,GP2 ;turn IRLED off by dragging cathode high.

 __CONFIG _MCLRE_ON         ;GP3/MCLR pin functions as MCLR input..pull it high with
                            ;a resistor to light up LED. Pull it low to turn LED off.

cnt         equ 0x10        ;first available RAM location
burstcnt    equ 0x11        ;a counter for burst length
;---------------------------------------------------------------
;
    ORG 0000h           ;start address from power-up or watchdog
    andlw 0xFE          ;reset to zero least sig bit: disable FOSC/4 output on GP2
    movwf OSCCAL        ;write oscillator calibration byte.
    b   setup           ;go configure this simple environment...
;   
setup:
    movlw 0xDF          ;make GP2 available as programable I/O pin rather
    OPTION              ;than TMR0 clk...write it to OPTION register
mainloop:
    movlw 0x0b          ;make GPIO 2 an output (not input) for driving IRLED
    tris GPIO
    movlw .23           ; init counter for six-hundred microsecond loop timer
    movwf burstcnt      ;it will be decremented to zero later.

shloop:
    ledon               ;macro to turn on IRLED
    movlw 3             ;now waste some time....about 13us.
    movwf cnt
    decfsz cnt,f        ;a short time-wasting loop
    b $-1               ;loop for LED off period.
    clrwdt              ;clear the watchdog so it doesn't disturb us.

    ledoff              ;macro to turn off IRLED
    movlw 3             ;now waste some time....about 13us.
    movwf cnt
    decfsz cnt,f
    b $-1               ;time-wasting loop for LED on.
    decfsz burstcnt,f   ;done with 600 us burst?
    b shloop            ;no, complete this burst with more 38 kHz. cycles
;--------------------------------------------------------

    ledoff                  ;turn IRLED off for remaining 900 microseconds
    movlw   .149            ;time-wasting counter for 900 us.
    movwf cnt               ;initialize off period count
nhloop:
    nop
    nop
    nop
    decfsz cnt,f
    b nhloop                ;countdown loop for LED off period.

    b mainloop              ;start again....600:on, 900:off loop forever
;--------------------------------------------------------
    END                     ;finish assembler code.
Gracias por señalar eso. ¿No sería 600/900 el ciclo de trabajo que podría ajustarse con diferentes condensadores/resistencias, en lugar de un segundo temporizador? De hecho, me hubiera encantado conectar cada grupo de mariposa/led a un microcontrolador para que hubiera tanto control individual (para animaciones, etc.) como el disparador de encendido/apagado. tanto hardware (amplificadores operacionales, distancia de señal, control de potencia, etc.) como software (gestión de matriz). ¿Alguien dispuesto a ayudar con eso?
Necesita dos osciladores o temporizadores: uno para generar los 38 KHz y otro para hacer que eso vaya y venga: los controles remotos de TV codifican información al habilitar/deshabilitar los 38 KHz, por lo que el suyo también debe encenderse y apagarse o será rápidamente ignorado. Una MCU simple bien puede ser la mejor manera de hacer esto; también podría potencialmente transmitir códigos únicos para evitar la interferencia mutua, al menos si los hace en diferentes momentos.
@adlib33e No, se requieren dos 555: hay un chip 555 dual disponible. Por lo general, desaconsejamos los circuitos 555: los microcontroladores son mucho más apropiados para esta tarea. Ha agregado ediciones para actualizar su circuito receptor para cerrar la brecha de 900 us.
Cuando hablas de un pequeño microcontrolador, ¿estás hablando de algo como esto? 556-ATTINY412-SSNR - Microcontroladores de 8 bits - MCU 105C, 5.5V, Green, 20MHz, SOIC8, T&R (de Mouser) Hoja de datos: mouser.com/datasheet/2/268/40001911A-1220759.pdf ... También buscando para que el código Arduino controle las señales 600 ns encendido, 900 apagado mientras hablamos
Estamos desalentados aquí de las recomendaciones. Cualquier microcontrolador (incluidos los más básicos) es apropiado, incluso ATtiny212, para reemplazar 555 circuitos. Buscaría uno que pudiera conducir la corriente IRLED directamente desde un pin de salida lógica. Elija un entorno de desarrollo de código con el que se sienta cómodo, junto con hardware de flasheo fácil de usar: pasará un tiempo considerable en la curva de aprendizaje si es nuevo en microcontroladores... Consideraría esto un proyecto de inicio sencillo, después de hacer el proyecto de LED parpadeante con el que todos comienzan.
@adlib33e Por curiosidad, se inició un proyecto MPLAB para un microcontrolador Microchip P10F200 (en ASM en lugar de C), solo para darle una idea de cuánto esfuerzo se requiere. De las 256 palabras de programa disponibles, se utilizaron 30. De los 16 bytes de RAM disponibles, se utilizaron 2. Este microcontrolador es tan básico como se obtiene, más básico que el ATtiny412 que está contemplando. Eso sí, si la programación se hace en C, se utilizarán más de sus recursos.
Esta es la gran liga, juego t-ball :-). Mi objetivo es usar Arduino/AVR para poder tener al menos un poco de comodidad. ¿Es esta la Idea general?1. Inicie el chip/temporizador a 38Khz 2. Configure el IRpin High en esa frecuencia 3. Retraso para 600us 4. Pin Low5, retraso para 900us --- Configure el temporizador: TCCR2A = _BV (COM2A0) | _BV(WGM21); // CTC, alternar OC2A en Comparar coincidencia TCCR2B = _BV (CS20); // Sin preescalador OCR2A = 209; // comparar el valor del registro A (210 * velocidad del reloj) // = 13,125 nS, por lo que la frecuencia es 1 / (2 * 13,125) = 38095 Khz } // fin de la configuración void loop() { }
La configuración del chip/temporizador anterior es para un Arduino Uno... si esta es la idea correcta, debe ajustarse para el ATtiny 412
@adlib33e No soy un programador de AVR: la versatilidad (complejidad) de la configuración del temporizador/contador de AVR es alucinante, y evito usar estos bloques para este programa de 1 tarea. En su lugar, uso el tiempo de ejecución de instrucciones para hacer los períodos de 38kHz, 600us, 900us, un enfoque simple y sin cerebro. Mi herramienta de programación calcula el tiempo de ejecución del programa en su simulador, lo que hace que este método sea fácil de modificar. Tenga en cuenta que la frecuencia de 38 kHz no es muy crítica.
glen_geek.... Entiendo que los comandos IC son súper simples (y me encanta eso de su elegante solución), pero tratar de trabajar con MPLAB por primera vez, no tanto. ¿Hay alguna posibilidad de que comparta sus ideas como un ejemplo de programa en la página de ejemplos de código de MPLAB? Estoy usando la versión en línea: mplabxpress.microchip.com/mplabcloud/example
@ adlib33e Se agregó el ejemplo de código 10F200 a esta respuesta. Requiere el archivo P10F200.INC de Microchip que define nombres para registros internos.