Tutorial de fotocélula!

Fotocélulas, también conocidas como células CdS, fotoresistores, LDR (resistencia dependiente de la luz) ...

¿Qué es una fotocélula?

Las fotocélulas son sensores que le permiten detectar la luz. Son pequeños, económicos, de baja potencia, fáciles de usar y no se desgastan. Por esa razón, a menudo aparecen en juguetes, aparatos y electrodomésticos. A menudo se refieren a células CdS (están hechas de sulfuro de cadmio), resistencias dependientes de la luz (LDR) y fotoresistores.

Una fotocélula es básicamente una resistencia que cambia su valor resistivo (en ohmios) dependiendo de la cantidad de luz que brille en la cara ondulada. Son de muy bajo costo, fáciles de obtener en muchos tamaños y especificaciones, pero son muy imprecisos. Cada sensor de fotocélula actuará un poco diferente que el otro, incluso si son del mismo lote. ¡Las variaciones pueden ser realmente grandes, 50% o más! Por esta razón, no deben usarse para tratar de determinar niveles de luz precisos en lux o millicandela. En cambio, puede esperar solo poder determinar los cambios básicos de luz

Para la mayoría de las aplicaciones sensibles a la luz como "si hay luz u oscuridad", "hay algo delante del sensor (que bloquearía la luz)", "hay algo que interrumpe un rayo láser" (sensores de luz de rotura) o "¿Cuál de los múltiples sensores tiene la mayor cantidad de luz?", ¡las fotocélulas pueden ser una buena opción!

Algunas estadísticas básicas

Estas estadísticas son para la fotocélula en la tienda Adafruit, que se parece mucho al PDV-P8001. Casi todas las fotocélulas tendrán especificaciones ligeramente diferentes, aunque casi todas funcionan igual. Si hay una hoja de datos, querrás consultarla

  • Tamaño: Redondo, 5 mm (0.2 ") de diámetro. (¡Otras fotocélulas pueden alcanzar hasta 11 mm / 0.4" de diámetro!)
  • Precio $ 1.50 en la tienda Adafruit
  • Rango de resistencia: 200K ohm (oscuro) a 10K ohm (brillo de 10 lux)
  • Rango de sensibilidad: las células CdS responden a la luz entre longitudes de onda de 400 nm (violeta) y 600 nm (naranja), alcanzando un máximo de aproximadamente 520 nm (verde).
  • Fuente de alimentación: casi cualquier cosa hasta 100 V, utiliza menos de 1 mA de corriente en promedio (depende del voltaje de la fuente de alimentación)
  • Hoja de datos y otra hoja de datos
  • Dos notas de aplicación sobre el uso y la selección de fotocélulas de donde se toman casi todos estos gráficos

Paso 1: Cómo medir la luz usando una fotocélula


Como hemos dicho, la resistencia de una fotocélula cambia a medida que la cara está expuesta a más luz. Cuando está oscuro, el sensor parece una gran resistencia de hasta 10M ohmios, a medida que aumenta el nivel de luz, la resistencia disminuye. Este gráfico indica aproximadamente la resistencia del sensor a diferentes niveles de luz. Recuerde que cada fotocélula será un poco diferente, ¡así que use esto solo como guía!

(Ver gráfico de Resistencia vs. Iluminación a continuación)
Tenga en cuenta que el gráfico no es lineal, ¡es un gráfico log-log!

Las fotocélulas, particularmente las células CdS comunes que es probable que encuentres, no son sensibles a toda la luz. En particular, tienden a ser sensibles a la luz entre 700 nm (rojo) y 500 nm (verde).

¡Básicamente, la luz azul no será tan efectiva para activar el sensor como la luz verde / amarilla!

¿Qué diablos es lux?

La mayoría de las hojas de datos usan lux para indicar la resistencia a ciertos niveles de luz. ¿Pero qué es lux? No es un método que tendemos a usar para describir el brillo, por lo que es difícil de medir. ¡Aquí hay una tabla adaptada de un artículo de Wikipedia sobre el tema!
(Ver tabla de iluminación a continuación)

Paso 2: Prueba y conexión de su fotocélula


Probar su fotocélula

La forma más fácil de determinar cómo funciona su fotocélula es conectar un multímetro en modo de medición de resistencia a los dos cables y ver cómo cambia la resistencia al sombrear el sensor con la mano, apagar las luces, etc. Debido a que la resistencia cambia mucho, Un medidor de rango automático funciona bien aquí. De lo contrario, solo asegúrese de probar diferentes rangos, entre 1M ohmios y 1K ohmios antes de 'darse por vencido'

Conectando a su fotocélula

Debido a que las fotocélulas son básicamente resistencias, no están polarizadas. ¡Eso significa que puede conectarlos 'de cualquier manera' y funcionarán bien!

Las fotocélulas son bastante resistentes, puede soldarlas fácilmente, cortar los cables, enchufarlos en placas de pruebas, usar pinzas de cocodrilo, etc. El único cuidado que debe tener es evitar doblar los cables directamente en el sensor epoxídico, ya que podrían romperse Si se flexiona con demasiada frecuencia.

Paso 3: ejemplos de proyectos



Noisemaker que cambia la frecuencia en función del nivel de luz.


Valor del motor y control direccional con fotoresistores y microcontroladores.


Robot de seguimiento de línea que utiliza fotocélulas para detectar la luz que rebota en las rayas blancas / negras

Otro robot, este tiene dos sensores y se mueve hacia la luz (se llaman vehículos Braitenberg)


Usando un puntero láser de fotocélula y bolsillo para crear un sensor de haz de luz

Paso 4: Método de lectura de voltaje analógico


La forma más fácil de medir un sensor resistivo es conectar un extremo a la alimentación y el otro a una resistencia desplegable a tierra. Luego, el punto entre la resistencia pulldown fija y la resistencia de fotocélula variable se conecta a la entrada analógica de un microcontrolador como un Arduino (se muestra)
(Ver diagrama del circuito a continuación)

Para este ejemplo, lo estoy mostrando con un suministro de 5V, pero tenga en cuenta que puede usar esto con un suministro de 3.3v con la misma facilidad. En esta configuración, la lectura de voltaje analógico varía de 0 V (tierra) a aproximadamente 5 V (o aproximadamente lo mismo que el voltaje de la fuente de alimentación).

La forma en que esto funciona es que a medida que disminuye la resistencia de la fotocélula, la resistencia total de la fotocélula y la resistencia pulldown disminuye de más de 600K ohmios a 10K ohmios. Eso significa que la corriente que fluye a través de ambas resistencias aumenta, lo que a su vez hace que aumente el voltaje a través de la resistencia fija de 10K ohmios. ¡Es todo un truco!

(Ver primera tabla a continuación)
Esta tabla indica el voltaje analógico aproximado basado en la luz / resistencia del sensor con un suministro de 5V y una resistencia pulldown de 10K ohmios

Si planea tener el sensor en un área brillante y utilizar un pulldown de 10K ohmios, se saturará rápidamente. Eso significa que alcanzará el 'techo' de 5V y no podrá diferenciar entre un poco brillante y realmente brillante. En ese caso, debe reemplazar el pulldown de 10K ohm con un pulldown de 1K ohm. En ese caso, tampoco podrá detectar diferencias de nivel oscuro, pero sí podrá detectar mejor las diferencias de luz brillante. ¡Esta es una compensación que tendrá que decidir!

(Ver la segunda tabla a continuación)
Esta tabla indica el voltaje analógico aproximado basado en la luz / resistencia del sensor con un suministro de 5V y una resistencia pulldown de 1K

¡Tenga en cuenta que nuestro método no proporciona voltaje lineal con respecto al brillo! Además, cada sensor será diferente. A medida que aumenta el nivel de luz, el voltaje analógico aumenta aunque la resistencia disminuye:

Vo = Vcc (R / (R + Fotocélula))

Es decir, el voltaje es proporcional al inverso de la resistencia de la fotocélula que, a su vez, es inversamente proporcional a los niveles de luz.

Paso 5: Demostración simple de uso


Este boceto tomará la lectura de voltaje analógico y lo usará para determinar qué tan brillante es el LED rojo. ¡Cuanto más oscuro sea, más brillante será el LED! Recuerde que el LED tiene que estar conectado a un pin PWM para que esto funcione, en este ejemplo utilizo el pin 11.

Estos ejemplos suponen que conoce alguna programación básica de Arduino. Si no lo hace, ¿tal vez pase un tiempo repasando los conceptos básicos en el tutorial de Arduino?

/ * Boceto de prueba simple de fotocélula.

Conecte un extremo de la fotocélula a 5V, el otro extremo a Analog 0.
Luego, conecte un extremo de una resistencia de 10K de 0 analógico a tierra
Conecte el LED del pin 11 a través de una resistencia a tierra
Para obtener más información, visite www.ladyada.net/learn/sensors/cds.html * /

int photocellPin = 0; // la celda y el menú desplegable de 10K están conectados a a0
int photocellReading; // la lectura analógica del divisor del sensor
int LEDpin = 11; // conecta el LED rojo al pin 11 (pin PWM)
int LEDbrightness; //
configuración nula (nula) {
// Enviaremos información de depuración a través del monitor de serie
Serial.begin (9600);
}

bucle vacío (vacío) {
photocellReading = analogRead (photocellPin);

Serial.print ("Lectura analógica =");
Serial.println (photocellReading); // la lectura analógica en bruto

// El LED se vuelve más brillante cuanto más oscuro está en el sensor
// eso significa que tenemos que invertir la lectura de 0-1023 a 1023-0
photocellReading = 1023 - photocellReading;
// ahora tenemos que mapear 0-1023 a 0-255 ya que ese es el rango que usa analogWrite
Brillo LED = mapa (lectura de fotocélulas, 0, 1023, 0, 255);
analogWrite (LEDpin, LEDbrightness);

retraso (100);
}

¡Es posible que desee probar diferentes resistencias pulldown dependiendo del rango de nivel de luz que desea detectar!

Paso 6: Código simple para mediciones de luz analógica:


Este código no hace ningún cálculo, solo imprime lo que interpreta como la cantidad de luz de manera cualitativa. Para la mayoría de los proyectos, esto es prácticamente todo lo que se necesita.

/ * Boceto de prueba simple de fotocélula.

Conecte un extremo de la fotocélula a 5V, el otro extremo a Analog 0.
Luego, conecte un extremo de una resistencia de 10K de 0 analógico a tierra

Para obtener más información, visite www.ladyada.net/learn/sensors/cds.html * /

int photocellPin = 0; // la celda y el menú desplegable de 10K están conectados a a0
int photocellReading; // la lectura analógica del divisor de resistencia analógica

configuración nula (nula) {
// Enviaremos información de depuración a través del monitor de serie
Serial.begin (9600);
}

bucle vacío (vacío) {
photocellReading = analogRead (photocellPin);

Serial.print ("Lectura analógica =");
Serial.print (photocellReading); // la lectura analógica en bruto

// Tendremos algunos umbrales, determinados cualitativamente
if (photocellReading <10) {
Serial.println ("- Oscuro");
} else if (photocellReading <200) {
Serial.println ("- Dim");
} else if (photocellReading <500) {
Serial.println ("- Light");
} else if (photocellReading <800) {
Serial.println ("- Brillante");
} más {
Serial.println ("- Muy brillante");
}
retraso (1000);
}

Para probarlo, comencé en una habitación iluminada por el sol (pero sombreada) y cubrí el sensor con la mano, luego lo cubrí con un trozo de tela opaca.

Paso 7: ¡BONIFICACIÓN! Lectura de fotocélulas sin pines analógicos


Debido a que las fotocélulas son básicamente resistencias, es posible usarlas incluso si no tiene pines analógicos en su microcontrolador (o si dice que desea conectar más de lo que tiene pines de entrada analógica). La forma en que hacemos esto es aprovechando una propiedad electrónica básica de resistencias y condensadores. Resulta que si toma un condensador que inicialmente no almacena voltaje y luego lo conecta a la alimentación (como 5 V) a través de una resistencia, se cargará lentamente al voltaje de alimentación. Cuanto más grande es la resistencia, más lenta es.

Esta captura de un osciloscopio muestra lo que sucede en el pin digital (amarillo). La línea azul indica cuándo el boceto comienza a contar y cuándo se completa, aproximadamente 1, 2 ms después.

Esto se debe a que el condensador actúa como un cubo y la resistencia es como una tubería delgada. Para llenar un balde con un tubo muy delgado se necesita tiempo suficiente para que pueda calcular qué tan ancho es el tubo calculando cuánto tiempo lleva llenar el balde hasta la mitad.

En este caso, nuestro 'cubo' es un condensador cerámico de 0.1uF. Puede cambiar el condensador de la forma que desee, pero los valores de temporización también cambiarán. 0.1uF parece ser un buen lugar para comenzar con estas fotocélulas. Si desea medir rangos más brillantes, use un condensador de 1uF. Si desea medir rangos más oscuros, baje a 0.01uF.

/ * Boceto de prueba simple de fotocélula.
Conecte un extremo de la fotocélula a la alimentación, el otro extremo al pin 2.
Luego conecte un extremo de un capacitor de 0.1uF desde el pin 2 a tierra
Para obtener más información, visite www.ladyada.net/learn/sensors/cds.html * /

int photocellPin = 2; // el LDR y la tapa están conectados al pin2
int photocellReading; // la lectura digital
int ledPin = 13; // puedes usar el LED 'incorporado'

configuración nula (nula) {
// Enviaremos información de depuración a través del monitor de serie
Serial.begin (9600);
pinMode (ledPin, OUTPUT); // tiene un LED para salida
}

bucle vacío (vacío) {
// lee la resistencia usando la técnica RCtime
photocellReading = RCtime (photocellPin);

if (photocellReading == 30000) {
// si obtuvimos 30000, eso significa que 'agotó el tiempo de espera'
Serial.println ("¡Nada conectado!");
} más {
Serial.print ("RCtime reading =");
Serial.println (photocellReading); // la lectura analógica en bruto

// ¡Cuanto más brillante es, más rápido parpadea!
digitalWrite (ledPin, HIGH);
retraso (lectura de fotocélulas);
digitalWrite (ledPin, LOW);
retraso (lectura de fotocélulas);
}
retraso (100);
}

// Utiliza un pin digital para medir una resistencia (¡como un FSR o una fotocélula!)
// Hacemos esto haciendo que la resistencia alimente corriente a un condensador y
// contando cuánto tiempo lleva llegar a Vcc / 2 (para la mayoría de los arduinos, eso es 2.5V)
int RCtime (int RCpin) {
int lectura = 0; // comienza con 0

// establece el pin en una salida y tira a LOW (ground)
pinMode (RCpin, OUTPUT);
digitalWrite (RCpin, LOW);

// Ahora establece el pin en una entrada y ...
pinMode (RCpin, INPUT);
while (digitalRead (RCpin) == LOW) {// cuenta el tiempo que se tarda en subir a HIGH
lectura ++; // incrementa para hacer un seguimiento del tiempo

if (lectura == 30000) {
// si llegamos tan lejos, la resistencia es tan alta
// ¡es probable que nada esté conectado!
descanso; // deja el bucle
}
}
// OK, o llegamos al máximo en 30000 o esperamos obtener una lectura, devuelve el conteo

volver a leer;
}

Artículos Relacionados