¿Cómo agregar un indicador LED para informar un error del sensor LDR usando PIC?

Tengo este proyecto de sensor de luz simple usando LDR. El PIC lee una señal analógica de 0-5V de LDR y encenderá el relé cuando esté brillante y lo apagará cuando esté oscuro. Quiero agregar un indicador LED simple que se encenderá cuando el LDR esté roto o algo así, pero no sé cómo hacerlo.

mi circuito

Respuestas (3)

Quiero agregar un indicador LED simple que se encenderá cuando el LDR esté roto o algo así

En realidad, conducir el indicador LED es la parte fácil, por supuesto. Dependiendo de la salida de luz esperada del LED de "falla LDR detectada", es posible que no se necesite un transistor de accionamiento.

Para detectar que el LDR está "roto o algo así", debe decidir exactamente qué significa "roto o algo así", especialmente "algo". Solo he visto que los LDR fallan en circuito abierto (debido a elementos fracturados), pero puede haber otros modos de falla.

Aquí hay 2 enfoques rápidos, que puede investigar y modificar para adaptarse a sus restricciones generales de diseño:

  1. Use un LDR cuya resistencia oscura aún pueda detectarse fácilmente como diferente de un "circuito abierto". De esa manera, aún esperaría obtener una salida de ADC por debajo del valor máximo, cuando se usa en ese divisor potencial con R1.

    Por ejemplo, usar un LDR con una resistencia oscura de 20 MΩ hace que esto sea mucho más difícil, especialmente si usa el ADC de 10 bits en su PIC16F877A. Mientras que un LDR con una resistencia en la oscuridad de 100 kΩ es mucho más fácil de distinguir de un circuito abierto, ya que no esperaría que el valor del ADC se acerque a su valor máximo incluso cuando el LDR está en la oscuridad.

  2. O, más complejo, pero más flexible, puede probar el LDR usted mismo, en el intervalo que elija.

    • No reaccione inmediatamente a los cambios en su salida ADC controlada por LDR. Introduzca un retraso, para que su código no informe "ligero" durante la prueba a continuación.
    • Agregue un pequeño LED verde, bajo el control de MCU, que puede brillar en su LDR (el verde es un color al que los LDR suelen ser más sensibles, alrededor de 550 nm).
    • Cuando desee probar el LDR, lea el valor ADC del LDR, encienda el pequeño LED verde y lea el valor ADC del LDR nuevamente. Espero que detecte una respuesta LDR en decenas de milisegundos (dependiendo de su LDR). ¿Cae el valor ADC medido del LDR (lo que indica que detecta luz y su resistencia cae)? Sí, entonces el LDR está funcionando. Luego apague inmediatamente el LED verde.
    • Habrá un breve retraso antes de que el LDR vuelva a su "estado oscuro", después de que haya sido probado por ese LED verde.

En ese segundo enfoque, hay varias variables que debe considerar y ajustar en su código, pero eso le permitirá cumplir un objetivo para probar que el LDR responde a la luz.

Voy a sugerir un pensamiento completamente diferente a considerar que se dirige tanto a la medición con el propósito de umbrales de encendido/apagado, como a la detección de casos abiertos y en cortocircuito para el LDR (roto o alguien tiene un destornillador que corta los contactos por alguna razón.) La idea también funciona casi completamente independientemente del comportamiento específico de LDR. Pero significa una modificación en su sistema de medición.

Me gustaría sugerir lo siguiente:

esquemático

simular este circuito : esquema creado con CircuitLab

En primer lugar, ambos V ADC 1 y V ADC 2 cada uno estará, siempre, dentro del rango de medición de sus entradas ADC. En segundo lugar, su diferencia, V ADC 1 V ADC 2 , será una medida linealizada del comportamiento de resistencia exponencial del LDR a la luz. (Dicho de otra manera, los BJT toman el logaritmo de la corriente del colector y por lo tanto de la resistencia, porque eso es lo que el V SER de BJT lo hacen por usted). Por lo tanto, puede ser "más agradable" en términos de cómo interpreta las cosas dentro de su software para los umbrales. ( R 1 y R 2 casi no tienen efecto en este comportamiento).

Si el LDR está abierto (o desconectado del circuito), entonces V ADC 1 = V CC y V ADC 0 = 0 V y podrá detectar fácilmente este problema.

Si el LDR está roto-cerrado (o alguien clava un destornillador en los cables), entonces R 1 y R 2 se acortarán y limitarán el "daño" actual a aproximadamente 10 mamá y presente V ADC 1 = V ADC 2 = 1 2 V CC . Eso también es muy fácil de detectar con su software.

Ese es más el enfoque que probablemente tomaría. (A menos que me perdí algo serio, aquí.)


Coloqué el circuito anterior (menos las resistencias de protección contra cortocircuitos) en Spice usando un LDR simulado (que en este caso va de 5 k Ω a plena luz para 2 METRO Ω en plena oscuridad. El X -eje es el logaritmo natural de la resistencia LDR. El y -eje es V ADC 1 V ADC 2 . Estoy usando BJT no ideales (2N2222A y 2N3906) en 27 C .

ingrese la descripción de la imagen aquí

Lo anterior muestra la linealidad que los BJT pueden conferir a sus mediciones de ADC. Debería ser muy simple escribir código para que pueda pedirle al usuario que "calibre", aplicando una luz brillante y luego cubriéndola en la oscuridad, para que su software pueda capturar el rango operativo para una mejor repetibilidad durante la operación.

Dicho esto, la compensación de la diferencia de voltaje variará con la temperatura de funcionamiento, ya que tanto los BJT (y también el LDR) tienen dependencias de temperatura. Ignorando el LDR por un momento, las variaciones de BJT de congelación a aproximadamente 55 C se parece a esto:

ingrese la descripción de la imagen aquí

Entonces puede ver que puede experimentar un cambio de compensación suficiente sobre la temperatura lo suficiente como para que una calibración periódica de un punto pueda ayudar. (Simplemente cubriría el LDR para bloquear la luz y le diría al software que tome una medida que se usaría para corregir el extremo oscuro de la curva de calibración de dos puntos).

Sin embargo, los BJT pueden ser el menor de los problemas. El LDR también tiene una variación sustancial sobre la temperatura. Realmente no están diseñados para aplicaciones de luz/oscuridad de precisión. Por lo tanto, también debe tener eso en cuenta, y para mejorar su funcionamiento en varias temperaturas, es posible que necesite un sensor de temperatura (que usaría con un algoritmo de interpolación mejorado).

El punto principal que estaba tratando de transmitir es que el comportamiento exponencial de la resistencia LDR, con respecto a la luz, se puede linealizar fácilmente antes de que la MCU lo procese. Lo bueno de esto es que, en términos generales, existe una relación lineal entre el logaritmo de la resistencia LDR y el logaritmo de la luminancia. (Los seres humanos también tienen una especie de función de raíz cuadrada que llega en parte debido a la dilatación de la pupila, y esto agregará otro factor más a considerar).

PS En las gráficas anteriores, si toma mi elevado a la X -valor del eje, obtendrá R de la LDR.

Soy realmente curioso. ¿Cómo linealiza este circuito la respuesta LDR? Q1 y Q2 funcionan como diodos simples. ¿O me estoy perdiendo algo?
@DwayneReid Te estás perdiendo algo. Déjame publicar una carrera de especias para ti.
@DwayneReid Se ha agregado. Con suerte, eso ayuda un poco. La idea básica es que en un BJT el V SER es proporcional al logaritmo de la corriente del colector.
Muchas gracias. Tu respuesta es muy informativa. Pero quiero preguntar por qué usar la linealidad entre VBE e Ic, y por qué no usar la linealidad simple entre V,I,R en la ley de Ohm. ¿Es porque la Resistencia de los LDR varía mucho?
@LinhTrầnQuang La resistencia LDR puede, en situaciones prácticas, variar en tres órdenes de magnitud. Si lo usa como parte de un divisor de voltaje, esto significa que el rango de resolución útil (con un ADC) representa solo una pequeña parte de la capacidad del sensor.
@jonk: Muchas gracias. He usado transistores conectados a diodos durante décadas, pero nunca de la manera que has mostrado. Pasaré algún tiempo con uno de los paquetes SPICE y luego confirmaré en mi banco. Me encanta, ¡aprendo algo nuevo todos los días!
Ya veo, entonces aumenta la precisión, ¿verdad?
@LinhTrầnQuang Eso depende. Si todo lo que le importa es una pequeña parte en un extremo, o solo una pequeña parte en el otro extremo, y solo para un rango muy estrecho, entonces un divisor simple es realmente mejor, solo para ese rango pequeño. Pero si desea algo que proporcione algunos cambios útiles de ADC en los tres órdenes de magnitud completos. Entonces algo como esto puede ser mejor. (Todavía se podría hacer más [compensar y luego aplicar una pequeña ganancia de voltaje a la diferencia] ya que gran parte del rango de ADC todavía se desperdicia con este circuito).
@DwayneReid Nunca había hecho esto antes y nunca había considerado hacerlo antes. Fue solo una idea. Me pregunté: "¿Qué me importa si una resistencia puede variar en tres órdenes de magnitud, cuando uso un ADC que solo responde en un rango lineal de voltaje?" Cuando hice esa pregunta, supe de inmediato que quería una función logarítmica de la resistencia. Entonces fue obvio, ya que sabía que la corriente del colector BJT se convierte en voltaje base solo por esa relación. Dejo que fluya una imaginación sin restricciones, eso es todo. Sabía que debería funcionar. Cuando lo probé en Spice, lo hizo.
Gracias. Aprendo mucho hoy.
@DwayneReid Y un efecto secundario genial es que si uso dos BJT, los dos voltajes leídos por el ADC se compensarían desde tierra y desde V CC y empujado hacia el área media donde el ADC puede alcanzar fácilmente. Eso significaba que no estaba creando un nuevo problema, sino que en realidad estaba evitando que ocurriera. La otra cosa es que usar dos BJT también significa que el efecto se duplica aproximadamente (ya que cada uno responde por separado). La única parte que me gustaría arreglar es que me gustaría compensarlo y luego aplicar quizás una pequeña ganancia de voltaje para que toda la gama ADC se hace más útil.
@DwayneReid Y creo, en retrospectiva, que usar un PIC10F322 para este propósito podría crear un producto muy útil. Con la codificación correcta y algunas notas de la aplicación relacionadas con su uso, creo que se podría crear una amplia gama de productos útiles y específicos que facilitan el uso de sensores como este. Trasladado al mundo del software, esto es exactamente lo que hace Microsoft con .NET Core 3.0 y con la variedad de herramientas de simplificación que brindan, poniendo a disposición de los programadores que no saben ni tienen que saber detalles íntimos para operaciones complejas. Facilitar las cosas vende productos.
@DwayneReid Estoy poniendo esto en mi tolva de conceptos de productos que se basan en MCU SOT23-6 y harán que una variedad de necesidades básicas estén disponibles para cualquier persona, amplia y fácilmente configurable para una amplia variedad de intereses, junto con hojas de datos cuidadosamente escritas y notas de aplicación sobre su uso. Creo que hay un gran mercado en las grietas entre los fabricantes de circuitos integrados y sus productos y las empresas de placas que fabrican cosas como Arduinos. En ese espacio intermedio, hay un poco de vacío. Y eso significa oportunidad.
@jonk: Creo que deberías publicar esto en algo como "Ideas para el diseño" o similar. No estoy seguro de si esto es patentable, pero sería increíble si pudieras compartirlo con la comunidad de ingenieros en general.
El lugar donde quiero probar su concepto es la linealización de termistores. Problema similar con ellos como con LDR.
@DwayneReid Bueno, no sé si esto se ajusta a sus pensamientos, pero si está pensando en algo como instrumentación comercial, hay amplificadores de registro disponibles que están compensados ​​térmicamente y funcionan bien. O simplemente puede usar un diodo o transdiodo en la ruta de retroalimentación de la mayoría de los amplificadores operacionales decentes (pero luego el diodo tendrá su comportamiento térmico, nuevamente).
@DwayneReid Estaba pensando principalmente en esto como una aplicación de pasatiempo/barata que no es crítica. La medición de la temperatura probablemente pesa sobre la idea frívola que ofrecí. Para la temperatura, probablemente podría usar un sumidero/fuente de corriente de precisión (el TL431 con un BJT, por ejemplo) en el colector de un BJT y simplemente medir la temperatura del VBE. Omita el termistor, si el rango de temperatura necesario se ajusta a lo que un BJT puede manejar adecuadamente, de todos modos. Aunque ahora que lo considero, hay algunas compensaciones serias entre los dos usos. Así que tal vez borre esa idea.

Si "roto" significa que el LDR es un circuito abierto, entonces el voltaje en su entrada sería de 5V. Supervisaría esa situación en la entrada analógica y escribiría algún código para encender un LED.

Tenga en cuenta que está utilizando el LED para generar luz, no como sensor.

Ah quiero usar 2 Led. Este Led es el Led principal para la iluminación, y quiero agregar un pequeño Led rojo para detectar un circuito abierto roto. El problema es que, normalmente, si está oscuro, el LDR se comporta como un circuito abierto debido a su alta R, no sé qué tipo, diseño o código hacer que el circuito lo distinga.
¿Quiere decir que desea usar un LED para excitar su LDR y encender otro LED si no funciona? No estás siendo particularmente claro. Edite para explicar su situación a alguien que no esté familiarizado con ella.
Ah, lo siento por la confusión. El LED en este proyecto es un LED para iluminación doméstica (Lamp Light) controlado por el PIC, que detecta la señal de intensidad de luz de LDR. Quiero agregar un nuevo LED rojo pequeño O una campana que se encenderá cuando se rompa el LDR.
Una cálida bienvenida al sitio, @LinhTrầnQuang. Edite su pregunta y agregue su nueva información y mucha más explicación. De lo contrario, le está pidiendo a la gente que reconstruya más de su pregunta a partir de muchos comentarios. Gracias.