¿fotocélula demasiado sensible?

4

Uso 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: El problema es que, por cada parpadeo de un LED, el conteo es doble o, a veces, triple. Primero sospecho que es la sensibilidad del CdS, ajusto el potenciómetro de ajuste, pero no resuelve el problema. También intenté usar una antorcha, cuando enciendo la antorcha, el recuento es uno, pero cuando intenté quitar la antorcha lejos de CdS, el recuento aumenta a dos. ¿Entonces sospecho que es todo el módulo CdS pero no solo el problema de la sensibilidad de CdS? Probé dos nuevos módulos, ambos tienen el mismo problema. Por favor avise.

    
pregunta andy

3 respuestas

3

Sospecho que su problema será que la rutina de interrupción puede contar pulsos tan cortos como un microsegundo o así, y obtendrá 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 impulsos, por ejemplo 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 con su sistema si la CPU termina dedicando todo su tiempo a atender la interrupción, por lo que la solución publicada por Transistor es probablemente una mejor solución a largo plazo.

    
respondido por el PeterJ
8

Lo más probable es que esté obteniendo un cambio rápido en el nivel de umbral. Necesitas un poco de histéresis para tu circuito. La histéresis es la diferencia entre activar y desactivar y significará que la señal debe cambiar significativamente antes de que el comparador cambie de estado.

Figura 1. Agregue resistencia entre (1) y (2).

Intente agregar 100k entre los puntos que se muestran en la Figura 1.

Cómo funciona:

  • Cuando la luz brilla en el LDR, su resistencia caerá. Cuando \ $ V_ + \ $ la entrada cae por debajo de la referencia del potenciómetro, la salida cambiará a bajo.
  • Esto hará que \ $ V_ + \ $ sea incluso más bajo para que el nivel de luz tenga que caer considerablemente más antes de que la salida cambie de nivel nuevamente.

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

    
respondido por el Transistor
5

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

Puede usar dos umbrales (no está 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, puede pegar cinta en él (o en varias capas).

    
respondido por el Michel Keijzers

Lea otras preguntas en las etiquetas