4 votos

¿fotocélula demasiado sensible?

Utilizo arduino con un módulo de fotocélula para contar el número de parpadeos del LED, código de arduino :

attachInterrupt(cds, onPulse, FALLING);

sch del módulo CdS: enter image description here el problema es, que por cada parpadeo de un LED, las cuentas se duplican o a veces se triplican, lo primero que sospecho es la sensibilidad del CdS, ajusto el potenciómetro de ajuste, pero no resuelve el problema. También traté de usar una antorcha, cuando se enciende la antorcha el recuento es uno, pero cuando traté de quitar la antorcha lejos de CdS, el recuento de aumentar a dos. Así que sospecho que es todo el módulo CdS, pero no sólo el problema de la sensibilidad CdS? He probado dos módulos nuevos y ambos tienen el mismo problema. Por favor, aconséjeme.

4 votos

¿Acoplar un osciloscopio y mirar las señales?

2 votos

Hay que tener en cuenta que una célula CdS funcionará para parpadeos (lo suficientemente lentos como para contarlos a ojo) pero no es lo suficientemente rápida como para responder a señales más rápidas (quizás cientos de Hz, quizás miles, pero casi seguro que no más rápidas).

8voto

transistor Puntos 2074

Lo más probable es que esté obteniendo una conmutación rápida en el nivel de umbral. Necesitas un poco de histéresis en tu circuito. La histéresis es la diferencia entre el encendido y el apagado y significará que la señal necesita cambiar significativamente antes de que el comparador cambie de estado.

enter image description here

Figura 1. Suma la resistencia entre (1) y (2).

Prueba a añadir 100k entre los puntos mostrados en la Figura 1.

Cómo funciona:

  • Cuando la luz incide sobre la LDR, su resistencia disminuye. Cuando \$ V_+ \$ entrada cae por debajo de la referencia del pote la salida conmutará a baja.
  • Esto tirará de \$ V_+ \$ aún más bajo, de modo que el nivel de luz tendrá que descender considerablemente antes de que la salida vuelva a ser alta.

Por supuesto, también debería ser posible desechar el circuito y utilizar el 10k y la LDR para alimentar una entrada analógica en el microcontrolador. La histéresis podría entonces ser manejada en el software.

5voto

Spike Puntos 304

Parece que es similar a la "desbordamiento" de un interruptor, pero en este caso para la luz. Lo mismo que los sensores de presión que pueden aumentar un poco y disminuir durante su aumento (principal).

Puedes usar dos umbrales (no estoy seguro de cómo implementarlo eléctricamente), uno para contar y dejar de contar cuando esté por debajo del umbral inferior.

Además, para reducir el sensor, puedes pegar cinta adhesiva (o varias capas).

1 votos

Además, puede filtrar cualquier frecuencia por encima de la señal de los LED. Si sólo esperas 60kHz y tus repeticiones son de 120kHz, puedes filtrarlas.

3voto

xilun Puntos 261

Sospecho que tu problema será que la rutina de interrupción puede contar pulsos tan cortos como un microsegundo o algo así y tendrás un par de transiciones cuando esté justo al borde de la detección. Probablemente la forma más fácil es hacer algo como lo siguiente para ignorar los pulsos digamos dentro de 10 milisegundos de diferencia:

volatile uint32_t last_count_ms = 0;

void isr()
{
   if (millis() - last_count_ms < 10)
       return;
   last_count_ms = millis();
   // Do the count here
}

Tener demasiadas interrupciones por segundo puede causar otros problemas en tu sistema si la CPU termina gastando todo su tiempo atendiendo la interrupción, así que la solución que Transistor publicó es probablemente una mejor solución a largo plazo.

0 votos

Este hack hace el truco, mucho más fácil que la soldadura más componente. gracias a todos, pero lo siento que no he probado el post de Transistor que probablemente funciona también, porque soy un tipo mecánico no es bueno con la soldadura y la electrónica

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X