Arduino analógico interrupción LDR

2

Estoy usando un LDR en un Arduino Pro Mini con una interrupción analógica. El Arduino va a dormir profundamente cuando no hay luz o no está ocupado:

Sleepy::powerDown();

La interrupción en el LDR se ve así:

PCintPort::attachInterrupt(lightPin, wakeUp, CHANGE); // lightpin = A0

Esto funciona muy bien, no demasiado rápido. Pero el problema que tengo es que esto solo funciona con grandes incrementos de luz, no con incrementos pequeños. De hecho, nada sucede cuando el LDR da un poco menos de resistencia.

¿Esto se debe al tipo de modo de suspensión? ¿Tal vez por algún tipo de insensibilidad? ¿Hay un umbral codificado? No tengo mucha experiencia con la electrónica o microprocesadores. ¿Me estoy perdiendo algo?

El despertar del Arduino cuando ocurre un pequeño cambio en la luz es crítico para mi aplicación. No puedo mantener el Arduino constantemente despierto porque funciona con una batería.

Si ustedes necesitan algo más, como mi código completo, solo dígalo. Gracias.

    
pregunta Rebel Designer

3 respuestas

2

Un LDR es un dispositivo analógico. Su resistencia varía, y algunos dispositivos en la oscuridad tienen una resistencia de 1 megohmio, para otros puede ser de 20 megohmios. En luz, puede ser tan bajo como 150 kilohm.

Los pines de interrupción en los microprocesadores son entradas digitales y están a 5 voltios o 0 voltios (niveles lógicos típicos). No tienen valores intermedios.

¿Tiene el LDR conectado a una entrada analógica o digital? Supongo que es digital, porque mencionas "interrupción".

El problema que tiene es que tiene que convertir un cambio en la resistencia (que resulta en un cambio en el voltaje o la corriente) en una salida digital de 5 voltios o 0 voltios y alimentar el pin de interrupción digital.

Si conecta el LDR a una entrada analógica, entonces realmente mide el brillo de la luz y obtendrá una salida de código digital desde el ADC (convertidor de analógico a digital) que representará el brillo de la luz que cae en el LDR. . Luego, puede codificar el umbral que desee y decidir qué desea hacer con el número entero que representa el brillo de la luz que cae en el LDR.

Si desea conectar el LDR a una entrada digital, tendrá que tener alguna forma de convertir de un valor analógico continuamente variable (voltaje, corriente) en un nivel lógico digital (5 V o 0 V) a Alimentar en el pin digital en el Arduino. Vas a necesitar algún tipo de detección de umbral.

Tendrá que decidir qué cambio de resistencia en el LDR hace que el pin digital en el procesador cambie de un valor lógico de 0 a un valor lógico de 1. Puede ser que tenga que experimentar con el LDR y medir la resistencia en diferentes niveles de iluminación.

Luego, puedes construir un circuito para darte una salida de nivel lógico cuando el nivel de luz cambie de la forma que deseas. Busque los circuitos del comparador, o incluso los "comparadores de voltaje CMOS". Estos toman una tensión analógica, y usted establece un umbral de tensión de retención. Necesitará un par de resistencias configuradas como un 'divisor de potencial' para establecer el voltaje de umbral en el chip comparador, posiblemente incluso un potenciómetro trimmer para permitir que sea ajustable.

Hay un poco de trabajo involucrado; Tendrás que calcular los valores de resistencia.

Entonces, lo primero en lo que debe pensar es si realmente desea solo una salida digital (1 o 0) en respuesta a un cambio en el nivel de luz o si desea medir el nivel de luz y alimentar la señal LDR en una entrada analógica y obtenga un número que represente el nivel de brillo, es decir, ¿desea introducir el LDR en una línea de entrada digital (interrupción?) o tiene el LDR en un convertidor analógico a digital?

Dado que desea que Arduino se despierte, entonces creo que realmente está buscando generar una salida compatible con el nivel lógico digital desde el circuito LDR, lo que significa que necesita detectar el brillo de la luz que cruza un umbral. Así que quieres buscar "comparadores de voltaje CMOS". No sé cuáles son las entradas lógicas para el Arduino, por lo que un comparador de salida CMOS puede no ser adecuado, pero eche un vistazo a ellas. Si observa los "comparadores de voltaje", encontrará circuitos que usan amplificadores operacionales, vale la pena verlos para que pueda comprender cómo funcionan y cómo establecer el valor de umbral mediante resistencias, pero realmente desea buscar voltaje. comparadores que tienen una salida compatible con lógica (5 V, 0 V = lógica 1 o lógica 0). Estos se adaptan mejor a lo que necesitas.

    
respondido por el Dean
0

Como entiendo su punto de vista, desea que se active la función de interrupción cada vez que la luz está encendida a pesar de su débil poder. Incluso una pequeña cantidad de luz debe configurar su lightPin de bajo a alto.

En ese caso, me pregunto si un fotodiodo Es una solución apropiada para ti. Sin embargo tienes que Cuidado seleccionando el fotodiodo correcto considerando Su fuente de luz (ver un posible circuito). Para hacer cumplir la señal, incluso puede hacer uso de opAmp.

Aparte de eso, si realmente desea atenerse a un LDR Estoy de acuerdo con los puntos de Dean. Sin embargo, asegúrese de que ha elegido la correcta LDR para su fuente de luz. Incluso la resistencia del LDR debe ser considerado.

    
respondido por el Sathees
0
  

¿Esto se debe al tipo de modo de suspensión?

se debe al modo gpio y la estructura del pin de entrada. para que el código funcione, el pin está configurado como gpio. Al ser un pin ST, sus cambios lógicos deberán cumplir con un umbral bastante alto (para ir alto) o un umbral bajo (para bajar).

La solución típica es poner un comparador en eso, ya sea externo o interno, que activará una lógica alta o baja basada en la salida de voltaje del divisor de luz. para la solución interna, deberá comprobar si el comparador funciona en modo de suspensión y si su interrupción puede activar el mcu.

Otro enfoque es utilizar adc: despierta el mcu periódicamente, toma una lectura del ldr, prueba su valor y actúa sobre eso, luego vuelve a dormir.

una mejor solución es encontrar un mcu con adc con ventana.

    
respondido por el dannyf

Lea otras preguntas en las etiquetas