Photocell Tutorial!

Cellules photoélectriques aka cellules CdS, photorésistances, LDR (résistance dépendante de la lumière) ...

Qu'est-ce qu'une photocellule?

Les photocellules sont des capteurs qui vous permettent de détecter la lumière. Ils sont petits, peu coûteux, de faible puissance, faciles à utiliser et ne s'usent pas. Pour cette raison, ils apparaissent souvent dans les jouets, gadgets et appareils électroménagers. Ils sont souvent appelés cellules CdS (elles sont en sulfure de cadmium), résistances photo-dépendantes (LDR) et photorésistances.

Une cellule photoélectrique est essentiellement une résistance qui change sa valeur résistive (en ohms) en fonction de la quantité de lumière qui brille sur la face ondulée. Ils sont très peu coûteux, faciles à obtenir dans de nombreuses tailles et spécifications, mais sont très inexacts. Chaque cellule photoélectrique agira un peu différemment les autres, même si elles proviennent du même lot. Les variations peuvent être vraiment importantes, 50% ou plus! Pour cette raison, ils ne doivent pas être utilisés pour essayer de déterminer des niveaux de lumière précis en lux ou en millicandela. Au lieu de cela, vous pouvez vous attendre à ne pouvoir déterminer que les changements de lumière de base

Pour la plupart des applications sensibles à la lumière comme «est-ce clair ou obscur», «y a-t-il quelque chose devant le capteur (qui bloquerait la lumière)», «y a-t-il quelque chose qui interrompt un faisceau laser» (capteurs à faisceau de rupture), ou "lequel des capteurs multiples a le plus de lumière le frappant", les photocellules peuvent être un bon choix!

Quelques statistiques de base

Ces statistiques concernent la cellule photoélectrique de la boutique Adafruit, qui ressemble beaucoup au PDV-P8001. Presque toutes les photocellules auront des spécifications légèrement différentes, bien qu'elles fonctionnent toutes à peu près de la même manière. S'il y a une fiche technique, vous voudrez vous y référer

  • Taille: Rond, 5 mm (0, 2 ") de diamètre. (Les autres photocellules peuvent atteindre jusqu'à 11 mm / 0, 4" de diamètre!)
  • Prix 1, 50 $ à la boutique Adafruit
  • Plage de résistance: 200K ohm (sombre) à 10K ohm (luminosité 10 lux)
  • Plage de sensibilité: les cellules CdS répondent à la lumière entre 400 nm (violet) et 600 nm (orange), atteignant un pic à environ 520 nm (vert).
  • Alimentation: à peu près tout jusqu'à 100 V, utilise moins de 1 mA de courant en moyenne (dépend de la tension d'alimentation)
  • Fiche technique et une autre fiche technique
  • Deux notes d'application sur l'utilisation et la sélection des photocellules où presque tous ces graphiques sont tirés de

Étape 1: Comment mesurer la lumière à l'aide d'une cellule photoélectrique


Comme nous l'avons dit, la résistance d'une cellule photoélectrique change lorsque le visage est exposé à plus de lumière. Lorsqu'il fait sombre, le capteur ressemble à une grande résistance jusqu'à 10M ohms, lorsque le niveau de lumière augmente, la résistance diminue. Ce graphique indique approximativement la résistance du capteur à différents niveaux d'éclairage. N'oubliez pas que chaque photocellule sera un peu différente, utilisez-la uniquement comme guide!

(Voir le graphique Résistance contre éclairage ci-dessous)
Notez que le graphique n'est pas linéaire, c'est un graphique log-log!

Les photocellules, en particulier les cellules CdS courantes que vous trouverez probablement, ne sont pas sensibles à toute la lumière. En particulier, ils ont tendance à être sensibles à la lumière entre 700 nm (rouge) et 500 nm (vert).

Fondamentalement, la lumière bleue ne sera pas aussi efficace pour déclencher le capteur que la lumière verte / jaune!

Qu'est-ce que c'est que lux?

La plupart des fiches techniques utilisent le lux pour indiquer la résistance à certains niveaux de lumière. Mais qu'est-ce que le lux? Ce n'est pas une méthode que nous avons tendance à utiliser pour décrire la luminosité, il est donc difficile à évaluer. Voici un tableau adapté d'un article Wikipédia sur le sujet!
(Voir le tableau d'éclairage ci-dessous)

Étape 2: Test et connexion de votre photocellule


Test de votre photocellule

Le moyen le plus simple de déterminer le fonctionnement de votre photocellule est de connecter un multimètre en mode de mesure de résistance aux deux fils et de voir comment la résistance change lorsque vous ombragez le capteur avec votre main, éteignez les lumières, etc. Parce que la résistance change beaucoup, un compteur à distance automatique fonctionne bien ici. Sinon, assurez-vous d'essayer différentes plages, entre 1M ohms et 1K ohms avant de `` renoncer ''

Connexion à votre photocellule

Les photocellules étant essentiellement des résistances, elles ne sont pas polarisées. Cela signifie que vous pouvez les connecter dans un sens ou dans l'autre et ils fonctionneront très bien!

Les photocellules sont assez robustes, vous pouvez facilement les souder, couper les fils, les brancher sur des plaques d'essais, utiliser des pinces crocodiles, etc. Le seul soin que vous devez prendre est d'éviter de plier les fils directement au niveau du capteur époxyde, car ils pourraient se rompre si fléchi trop souvent.

Étape 3: Exemples de projets



Noisemaker qui change la fréquence en fonction du niveau de lumière.


Valeur moteur et contrôle directionnel avec photorésistances et microcontrôleur


Robot suiveur de ligne qui utilise des cellules photoélectriques pour détecter la lumière qui rebondit sur les bandes blanches / noires

Un autre robot, celui-ci a deux capteurs et se dirige vers la lumière (ils sont appelés véhicules Braitenberg)


Utilisation d'une cellule photoélectrique et d'un pointeur laser de poche pour créer un capteur de faisceau de rupture

Étape 4: Méthode de lecture de tension analogique


La façon la plus simple de mesurer un capteur résistif est de connecter une extrémité à l'alimentation et l'autre à une résistance de rappel à la terre. Ensuite, le point entre la résistance de rappel fixe et la résistance de photocellule variable est connecté à l'entrée analogique d'un microcontrôleur tel qu'un Arduino (illustré)
(Voir schéma ci-dessous)

Pour cet exemple, je le montre avec une alimentation 5 V, mais notez que vous pouvez l'utiliser avec une alimentation 3, 3 V tout aussi facilement. Dans cette configuration, la lecture de tension analogique varie de 0 V (masse) à environ 5 V (ou à peu près la même que la tension d'alimentation).

La façon dont cela fonctionne est qu'à mesure que la résistance de la photocellule diminue, la résistance totale de la photocellule et de la résistance de défilement passe de plus de 600K ohms à 10K ohms. Cela signifie que le courant traversant les deux résistances augmente, ce qui entraîne une augmentation de la tension aux bornes de la résistance fixe de 10K ohms. C'est tout un tour!

(Voir le premier tableau ci-dessous)
Ce tableau indique la tension analogique approximative basée sur la lumière / résistance du capteur avec une alimentation de 5 V et une résistance de rappel de 10 K ohms

Si vous prévoyez d'avoir le capteur dans une zone claire et d'utiliser un pulldown de 10K ohms, il saturera rapidement. Cela signifie qu'il atteindra le «plafond» de 5V et ne pourra pas faire la différence entre un peu brillant et vraiment brillant. Dans ce cas, vous devez remplacer le pulldown 10K ohm par un pulldown 1K ohm. Dans ce cas, il ne sera pas en mesure de détecter également les différences de niveau d'obscurité, mais il pourra mieux détecter les différences de lumière vive. C'est un compromis que vous devrez décider!

(Voir le deuxième tableau ci-dessous)
Ce tableau indique la tension analogique approximative basée sur la lumière / résistance du capteur avec une alimentation 5V et une résistance de rappel 1K

Notez que notre méthode ne fournit pas de tension linéaire par rapport à la luminosité! De plus, chaque capteur sera différent. À mesure que le niveau de lumière augmente, la tension analogique augmente même si la résistance diminue:

Vo = Vcc (R / (R + photocellule))

C'est-à-dire que la tension est proportionnelle à l' inverse de la résistance de la cellule photoélectrique qui est, à son tour, inversement proportionnelle aux niveaux de lumière

Étape 5: Démonstration simple d'utilisation


Cette esquisse prendra la lecture de tension analogique et l'utilisera pour déterminer la luminosité de la LED rouge. Plus il fait sombre, plus la LED sera lumineuse! N'oubliez pas que la LED doit être connectée à une broche PWM pour que cela fonctionne, j'utilise la broche 11 dans cet exemple.

Ces exemples supposent que vous connaissez une programmation Arduino de base. Si vous ne le faites pas, passez peut-être un peu de temps à revoir les bases du didacticiel Arduino?

/ * Croquis de test simple de cellule photoélectrique.

Connectez une extrémité de la photocellule à 5V, l'autre extrémité à Analog 0.
Connectez ensuite une extrémité d'une résistance 10K de l'Analog 0 à la masse
Connectez la LED de la broche 11 via une résistance à la masse
Pour plus d'informations, voir www.ladyada.net/learn/sensors/cds.html * /

int photocellPin = 0; // la cellule et le pulldown 10K sont connectés à a0
int photocellReading; // la lecture analogique du diviseur de capteur
int LEDpin = 11; // connecter la LED rouge à la broche 11 (broche PWM)
int LEDbrightness; //
void setup (void) {
// Nous enverrons des informations de débogage via le moniteur série
Serial.begin (9600);
}

boucle vide (void) {
photocellReading = analogRead (photocellPin);

Serial.print ("Lecture analogique =");
Serial.println (photocellReading); // la lecture analogique brute

// La LED devient plus brillante lorsqu'elle est sombre au niveau du capteur
// cela signifie que nous devons inverser la lecture de 0-1023 à 1023-0
photocellReading = 1023 - photocellReading;
// maintenant nous devons mapper 0-1023 à 0-255 car c'est la plage utilisée par analogWrite
LEDbrightness = map (photocellReading, 0, 1023, 0, 255);
analogWrite (LEDpin, LEDbrightness);

retard (100);
}

Vous voudrez peut-être essayer différentes résistances de conversion en fonction de la plage de niveau de lumière que vous souhaitez détecter!

Étape 6: Code simple pour les mesures de lumière analogique:


Ce code ne fait aucun calcul, il affiche simplement ce qu'il interprète comme la quantité de lumière de manière qualitative. Pour la plupart des projets, c'est à peu près tout cela; il en faut!

/ * Croquis de test simple de cellule photoélectrique.

Connectez une extrémité de la photocellule à 5V, l'autre extrémité à Analog 0.
Connectez ensuite une extrémité d'une résistance 10K de l'Analog 0 à la masse

Pour plus d'informations, voir www.ladyada.net/learn/sensors/cds.html * /

int photocellPin = 0; // la cellule et le pulldown 10K sont connectés à a0
int photocellReading; // la lecture analogique du diviseur de résistance analogique

void setup (void) {
// Nous enverrons des informations de débogage via le moniteur série
Serial.begin (9600);
}

boucle vide (void) {
photocellReading = analogRead (photocellPin);

Serial.print ("Lecture analogique =");
Serial.print (photocellReading); // la lecture analogique brute

// Nous aurons quelques seuils, déterminés qualitativement
if (photocellReading <10) {
Serial.println ("- Dark");
} else if (photocellReading <200) {
Serial.println ("- Dim");
} else if (photocellReading <500) {
Serial.println ("- Light");
} else if (photocellReading <800) {
Serial.println ("- Bright");
} autre {
Serial.println ("- Très lumineux");
}
retard (1000);
}

Pour le tester, j'ai commencé dans une pièce ensoleillée (mais ombragée) et j'ai couvert le capteur avec ma main, puis je l'ai recouvert d'un morceau de tissu occultant.

Étape 7: BONUS! Cellules photoélectriques de lecture sans broches analogiques


Parce que les photocellules sont essentiellement des résistances, il est possible de les utiliser même si vous n'avez pas de broches analogiques sur votre microcontrôleur (ou si vous voulez connecter plus que vous n'avez de broches d'entrée analogiques). Pour ce faire, nous utilisons une propriété électronique de base des résistances et des condensateurs. Il s'avère que si vous prenez un condensateur qui ne stocke initialement aucune tension, puis que vous le connectez à l'alimentation (comme 5 V) via une résistance, il se chargera lentement jusqu'à la tension d'alimentation. Plus la résistance est grande, plus elle est lente.

Cette capture à partir d'un oscilloscope montre ce qui se passe sur la broche numérique (jaune). La ligne bleue indique quand l'esquisse commence à compter et quand le comptage est terminé, environ 1, 2 ms plus tard.

En effet, le condensateur agit comme un seau et la résistance est comme un tuyau mince. Remplir un seau avec un tuyau très mince prend suffisamment de temps pour déterminer la largeur du tuyau en chronométrant le temps qu'il faut pour remplir le seau à mi-chemin.

Dans ce cas, notre «seau» est un condensateur céramique 0, 1 uF. Vous pouvez changer le condensateur presque comme vous le souhaitez, mais les valeurs de synchronisation changeront également. 0, 1 uF semble être un bon point de départ pour ces photocellules. Si vous souhaitez mesurer des plages plus lumineuses, utilisez un condensateur 1uF. Si vous souhaitez mesurer des plages plus sombres, descendez à 0, 01 uF.

/ * Croquis de test simple de cellule photoélectrique.
Connectez une extrémité de la photocellule à l'alimentation, l'autre extrémité à la broche 2.
Ensuite, connectez une extrémité d'un condensateur 0, 1 uF de la broche 2 à la masse
Pour plus d'informations, voir www.ladyada.net/learn/sensors/cds.html * /

int photocellPin = 2; // le LDR et le capuchon sont connectés à la broche2
int photocellReading; // la lecture numérique
int ledPin = 13; // vous pouvez simplement utiliser la LED 'intégrée'

void setup (void) {
// Nous enverrons des informations de débogage via le moniteur série
Serial.begin (9600);
pinMode (ledPin, OUTPUT); // avoir une LED pour la sortie
}

boucle vide (void) {
// lire la résistance en utilisant la technique RCtime
photocellReading = RCtime (photocellPin);

if (photocellReading == 30000) {
// si nous avons 30000, cela signifie que nous avons expiré
Serial.println ("Rien de connecté!");
} autre {
Serial.print ("RCtime reading =");
Serial.println (photocellReading); // la lecture analogique brute

// Plus il est brillant, plus il clignote vite!
digitalWrite (ledPin, HIGH);
retard (photocellule);
digitalWrite (ledPin, LOW);
retard (photocellule);
}
retard (100);
}

// Utilise une broche numérique pour mesurer une résistance (comme un FSR ou une photocellule!)
// Nous le faisons en ayant le courant d'alimentation de la résistance dans un condensateur et
// compter le temps qu'il faut pour arriver à Vcc / 2 (pour la plupart des arduinos, c'est 2, 5 V)
int RCtime (int RCpin) {
int lecture = 0; // commence par 0

// définir la broche sur une sortie et tirer sur LOW (masse)
pinMode (RCpin, SORTIE);
digitalWrite (RCpin, LOW);

// Définissez maintenant la broche sur une entrée et ...
pinMode (RCpin, INPUT);
while (digitalRead (RCpin) == LOW) {// compte le temps qu'il faut pour monter jusqu'à HIGH
lecture ++; // incrément pour garder une trace du temps

if (lecture == 30000) {
// si nous sommes arrivés jusqu'ici, la résistance est si élevée
// il est probable que rien n'est connecté!
Pause; // quitte la boucle
}
}
// OK soit nous avons atteint un maximum de 30000, soit nous espérons avoir obtenu une lecture

retour de lecture;
}

Articles Connexes