Photo-résistance

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

Qu'est ce qu'une photorésistance?

Les photorésistances (PhotoCells ou CdS en anglais) sont des senseurs qui permettent de détecter la lumière. elles sont petites, bon marchés, économiques en énergies, faciles à utiliser et ne s'usent pas.

C'est pour ces raisons qu'elles apparaissent souvent dans les jouets, gadgets et appareils. Elles sont souvent identifiés sous la dénomination CdS (parce qu'elles sont faites de Cadmium-Sulfite), LDR (pour Light Dependant Resistor ce qui signifie Résistance dépendant de la lumière et Photo-résistance/photorésistance.

Fondamentalement, les photorésistances sont des résistance dont la valeur résistive (en ohms Ω) change en fonction de la quantité de lumière qui atteind le capteur (la partie en serpentin sur le dessus). Elles sont abordables (bon marchés), existent sous de nombreux formats/tailles, disponibles sous de nombreuses spécifications (caractéristiques) mais sont très imprécises.

Chaque photo-résistance agit un peu différemment d'une autre, même lorsqu'elles proviennent du même processus de fabrication. La variation peut-être vraiment grande, 50% voire plus!

C'est pour cette raison qu'elle ne doivent pas être utilisées pour déterminer précisément le niveau lumineux en lux ou milli-candela. A la place, vous pourrez être capable de détecter des variations de lumières élémentaires.

La plupart des applications sensible à la lumière tel que "il fait noir", "il fait clair", "y a t'il quelque-chose en face du senseur (qui bloque la lumière)", "y a t'il quelque-chose qui interrompt le faisceau laser" (senseur d'interruption du faisceau) ou "senseur multiple pour détecter la direction/source de la lumière" sont des cas ou l'utilisation d'une photo-résistance est approprié.

Quelques données techniques

  • Etandue de la variation de résistance: de 200K Ω (noir) à 10KΩ (luminosité de 10 lux)
  • Sensibilité: Les photo-résistances répondent à des lumières de longueur d'onde variant entre 400nm (violet) et 600nm (orange), avec un pic à ~520nm (vert).
  • Alimentation: Presque tout type de tension jusqu'à 100V, consomme moins de 1mA en moyenne (cela dépend de la tension d'alimentation utilisée)

Problèmes en utilisation multi-senseur...

Si vous utilisez plusieurs senseurs, vous pourriez rencontrer quelques problèmes.

Si vous ajoutez plusieurs senseur, vous pourriez remarquer que la température (détection de niveau lumineux) est inconstante. Cela indique que les senseurs interfèrent les un avec les autres lorsque vous passer la lecture analogique d'une broche à l'autre.

Cela peut être corrigé en faisant deux lectures (avec pause et ignorant le résultat de la première lecture) sur le premier senseur. Cette méthode est décrite dans l'article "How to multiplex analog readings what can go wrong with high impedance sensors and how to fix it".

En effet, si le senseur présente une haute impédance et qu'il y a une capacitance (capacité ou toute sorte de matériel équivalent) sur le convertisseur ADC, cela prendra un certain temps pour que la capacitance se charge. Raison de la première lecture erronée :-)

Comment mesurer la lumière avec une photo-résistance

Comme précisé, la résistance d'une cellule photo-résistive change lorsque sa surface est exposée à plus de lumière.

  • Lorsqu'il fait SOMBRE, le senseur se "ressemble" à une grande résistance (jusqu'à 10MΩ)
  • Lorsque le niveau lumineux augmente, la résistance diminue.

Le graphique ci-dessous indique approximativement la résistance du senseur sous différents niveaux d'illumination. Souvenez vous que chaque photo-résistance est diffère des autres. Ce graphique est seulement un guide!

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Notez que le graphe n'est pas linéaire mais logarithmique.

Les photo-résistances, particulièrement les plus faciles à trouver et donc les plus communes, ne sont pas sensible à toutes les lumières. En particulier, elle tendent à être sensibles à des lumières entre 700nm (rouge) et 500nm (vert).

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Fondamentalement, la lumière bleue ne sera pas aussi efficace pour activer le senseur qu'une lumière verte/jaune!

Qu'est ce donc qu'un lux?

La plupart des fiches techniques utilisent le lux pour indiquer la résistance correspondant à un certain niveau lumineux. Mais qu'est ce que c'est qu'un lux ? Ce n'est pas une méthode que nous utilisons habituellement pour décrire la luminosité. C'est donc une unité difficile à évaluer.

Voici une table issue de Wikipedia permettant d'établir un correspondance entre Lux et Luminosité!

Luminosité Exemple
0.002 lux Nuit par temps clair sans lune.
0.2 lux Minimum de lumière que doit produire un éclairage d'urgence (AS2293).
0.27 - 1 lux Pleine lune par temps clair.
3.4 lux Limite crépusculaire (sombre) au couché du soleil en zone urbaine.
50 lux Eclairage d'un living room
80 lux Eclairage des toilette/Hall
100 lux Journée très sombre/temps très couvert.
300 - 500 lux Levé du soleil, luminosité par temps clair. Zone de bureau correctement éclairée.
1,000 lux Temps couvert; Eclairage typique d'un studio TV
10,000 - 25,000 lux Pleine journée (pas de soleil direct)
32,000 - 130,000 lux Soleil direct

Connecter une Photo-résistance

Puisque une photo-résistance est fondamentalement une résistance, elles ne sont donc pas polarisées. Cela signifie que vous pouvez les connecter dans l'importe quel sens, elles fonctionnerons parfaitement!

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Les photo-résistances sont assez robustes, vous pouvez les souder, couper/raccourcir les broches, les insérer sur un breadboard, utiliser des pinces crocodiles, etc. La seule à laquelle vous devez faire vraiment attention est de maintenir les broches bien droites sous le senseur. En effet, le senseur se brise assez facilement si vous pliez trop souvent les broches.

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Méthode de lecture Analogique

Montage

La façon la plus facile de mesurer un senseur résistif est de connecter une borne sur l'alimentation et l'autre sur une résistance Pull-Down (elle même raccordée à la masse).

On raccorde ensuite le point de connexion entre "la résistance et la photo-résistanc" sur une entrée analogique d'un micro-controlleur comme Arduino (voir ci-dessous).

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Dans cet exemple, nous utilisons une tension d'alimentation de 5V mais vous pouvez aussi utiliser une tension de 3.3v tout aussi facilement.

Dans cette configuration, la tension lue varie de 0V (la masse/GND) à +/- 5V (approximativement la tension d'alimentation).

Notes sur le fonctionnement

  1. Lorsque la résistance de la photo-résistance diminue (donc quand la luminosité augmente), la résistance totale "Photo-résistance + Résistance Pull-Down" diminue de ~ 600 KΩ à 10 KΩ.
  2. Cela signifie que le courant traversant le circuit "Photo-résistance + Résistance Pull-Down" augmente.
  3. SI le courant augmente dans la résistance pull-down ALORS la chute de tension augmente au borne de cette résistance.
  4. Par conséquent, la tension mesurée sur l'entrée analogique du micro-controleur augmente aussi.

Pour résumé, la tension lue sur l'entrée analogique augmente avec la luminosité.

Luminosité normale - résistance Pull-Down 10k

Par la nature même du circuit, il est plus difficile de déduire directement (c-à-d "sans calcul"), la tension sur l'entrée du analogique du micro-contrôleur. Le tableau suivant est basé sur une résistance Pull-Down de 10 Ko.

Type de lumière ambiante... Lumière ambiante (lux) Valeur photo-Résistance (Ohms) Photo-résistance + R (Ohms) Courant (Photo-résistance + R) Tension aux bornes de R
Hall faiblement éclairé 0.1 lux 600 KOhms 610 KOhms 0.008 mA 0.1 V
Clair de lune 1 lux 70 KOhms 80 KOhms 0.07 mA 0.6 V
Pièce sombre 10 lux 10 KOhms 20 KOhms 0.25 mA 2.5 V
Jour très couvert (sombre) / Pièce lumineuse 100 lux 1.5 KOhms 11.5 KOhms 0.43 mA 4.3 V
Jour couvert 1000 lux 300 Ohms 10.03 KOhms 0.5 mA 5V

Cette table indique approximativement la tension analogique basée sur un senseur de lumière de type photo-résistance avec une alimentation de 5V et une résistance Pull-Down de 10KΩ

Milieux forts lumineux

Si vous avez planifié d'utiliser le senseur dans un endroit fort lumineux tout en utilisant une résistance de 10 KOhms, le circuit saturera très (trop) vite. Cela signifie que le montage atteindra rapidement le seuil de 5Volts et ne sera pas capable de faire la différence entre ce qui semble être "lumineux" et "très lumineux".

Dans ce cas, vous devriez remplacer la résistance pull-down de 10 KOhms par une résistance pull-down de 1KOhms. Dans ce cas, le montage ne détectera pas de différences quand il fera sombre mais il sera capable de faire de meilleures détections dans les niveaux lumineux et fortement lumineux.

C'est un compromis qu'il faut faire... il ne vous reste plus à décider!

Note de MC Hobby:

Il est également possible d'utiliser conjointement les deux montages en utilisant deux entrées analogiques de votre micro-controleur. Le montage avec la résistance de 10 KOhm permettra d'évaluer la luminosité en milieu peu lumineux. Lorsque ce dernier saturera parce qu'il y a trop de lumière, vous pourrez alors faire vos lecture depuis le second montage (résistance pull-down de 1KOhms) plus adapté aux milieux plus lumineux :-)

Forte luminosité - résistance Pull-Down 1k

Comme précisé ci-avant, une résistance de 1KOhm permet d'obtenir un senseur détectant mieux les variations de luminosités dans un milieu fortement lumineux.

Voici un tableau récapitulatif avec des mesures correspondant à une résistance Pull-Down de 1 KOhms.

Type de lumière ambiante... Luminosité ambiante (lux) Photo-résistance (Ohms) Photo-résistance + R (Ohms) Courant (Photo-résistance + R) Tension aux bornes de R
Clair de lune 1 lux 70 KOhms 71 KOhms 0.07 mA 0.1 V
Pièce sombre 10 lux 10 KOhms 11 KOhms 0.45 mA 0.5 V
Jour très couvert (sombre) / Pièce lumineuse 100 lux 1.5 KOhms 2.5 KOhms 2 mA 2.0 V
Jour couvert 1000 lux 300 Ohms 1.3 KOhms 3.8 mA 3.8 V
Pleine journée 10,000 lux 100 Ohms 1.1 KOhms 4.5 mA 4.5 V

Cette table indique approximativement la tension analogique basé sur un senseur lumineux de type photo-résistance avec une alimentation de 5V et une résistance pull-down de 1K

Note et calcul

Notez que notre méthode ne fourni pas une tension linéaire en rapport avec la luminosité! De même, chaque senseur est également différent.

Lorsque le niveau lumineux augmente, la tension analogique continue à augmenter même si la résistance diminue:

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

En fait, la tension est inversement proportionnelle à la résistance de la photo-résistance qui, elle même, est inversement proportionnelle au niveau lumineux.

Exemple d'utilisation

Le montage et le sketch utilise la tension analogique lue pour déterminer quelle sera la luminosité de la LED.

Plus il fera noir et plus la LED sera lumineuse! Souvenez vous que la LED doit être raccordée sur une broche/sortie PWM pour que cela fonctionne correctement (nous utilisons la PIN 11 dans cet exemple).

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Cet exemple part du principe que vous avez les connaissances fondamentales en programmation Arduino.

Si vous ne les avez pas, peut-être est-ce l'occasion d'investir un peu de temps dans les tutoriels de bases pour Arduino ;-)

 /* Exemple simple testant les Photo-Résistances. 
 
Connectez l'une des broches de la photo-résistance sur 5V, et l'autre sur l'entrée Analogique 0.
Ensuite, connecter une résistance de 10Ko sur la broche analogique 0 et l'autre bout à la masse. 
Connectez une LED à la pin 11 par l'intermédiaire d'une résistance.
Pour plus d'information: 
  * voir http://mchobby.be/wiki/index.php?title=Photo-résistance (en FRANCAIS)  
  * voir htt://www.ladyada.net/learn/sensors/cds.html            (en anglais)
*/
 
int photocellPin = 0;     // La photo-résistaance raccordée sur la PIN A0 (avec une résistance Pull-Down de 10K Ohms)
int photocellReading;     // Contient la lecture de sur senseur  (pont diviseur Photo-résistance + Résistance)
int LEDpin = 11;          // LED rouge connectée sur la pin 11 (sortie PWM)
int LEDbrightness;        // 
void setup(void) {
  // Configuration du port série pour envoyer des message de débugging
  Serial.begin(9600);   
}
 
void loop(void) {
  photocellReading = analogRead(photocellPin);  
 
  Serial.print("Lecture Analogique = ");
  Serial.println(photocellReading);     // La valeur analogique brute
 
  // Plus le senseur est dans l'ombre et plus la LED est brillante.
  // Cela signifie que nous devons INVERSER la lecture de 0-1023 vers 1023-0
  photocellReading = 1023 - photocellReading;
  // Maintenant, nous transformons les valeurs de 0-1023 vers 0-255 (puisque une sortie PWM/analogique utilise cette plage de valeurs)
  LEDbrightness = map(photocellReading, 0, 1023, 0, 255);
  analogWrite(LEDpin, LEDbrightness);
 
  delay(100);
}

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Vous pourriez avoir besoin d'essayer différentes résistance Pull-Down an fonction du niveau de luminosité ambiant que vous voulez détecter.

Mesure analogique de la lumière

Voici un code simple qui permet de faire une lecture analogique du niveau de luminosité.

Ce code ne fait aucun calcul, il affiche seulement ce qu'il interprete comme la quantité de lumière (luminosité) de manière qualitative.

C'est généralement plus que ce qui est nécessaire dans la plupart des projets!

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

/* Test élémentaire de photo-résistance. 
 
Connecter l'une des broches des photo-résistances à +5V et l'autre bout sur la pin/broche analogique 0.
Connectez ensuite une résistance de 10K entre la broche analogique 0 et la masse
 
Pour plus d'information:
 * Voir http://mchobby.be/wiki/index.php?title=Photo-résistance (en FRANCAIS) 
 * Voir htt://www.ladyada.net/learn/sensors/cds.html            (en anglais) 

*/
 
int photocellPin = 0;     // La photo-résistance et la résistance 10K connectées sur la pin/broche analogique A0
int photocellReading;     // Contient la lecture analogique sur le pont diviseur Photo-résistance + R 10 KOhms
 
void setup(void) {
  // Démarrons la connexion série pour envoyer des message de debugging.
  Serial.begin(9600);   
}
 
void loop(void) {
  photocellReading = analogRead(photocellPin);  
 
  Serial.print("Lecture Analogique = ");
  Serial.print(photocellReading);     // La valeur analogique brute
 
  // Utilisons quelques seuils, détermination qualitative
  if (photocellReading < 10) {
    Serial.println(" - Noir");   // Dark en anglais
  } else if (photocellReading < 200) {
    Serial.println(" - Sombre"); // Dim en anglais (aussi traduit par Obscur)
  } else if (photocellReading < 500) {
    Serial.println(" - Léger");  // Light en anglais
  } else if (photocellReading < 800) {
    Serial.println(" - Lumineux"); // Bright en anglais
  } else {
    Serial.println(" - Très lumineux");  // Very bright en anglais
  }
  delay(1000);
}

Reste plus qu'a le tester.

J'ai commencé dans une pièce illuminée (mais à l'ombre) et j'ai progressivement couvert le senseur avec la main. Par la suite, je l'ai recouvert avec un morceau de tissu épais et noir.

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

BONUS! Lecture de la phot-résistance sans entrée analogique

C'est parce que les photo-résistances sont avant tout des résistances qu'il est possible de les utiliser même si vous ne disposez pas d'entrée analogique sur votre micro-controleur.

C'est aussi une option pratique si vous voulez utiliser plus de senseurs qu'il n'y a de broches analogiques disponibles.

Pour y arriver, nous utilisons les caractéristiques électroniques fondamentales des résistances et des capacités. Initialement, si la capacité ne stocke pas de tension et qu'ensuite nous appliquons une tension (ex: 5V) par l'intermédaire d'une résistance, la capacité va lentement se charger jusqu'a la tension appliquée. Plus la résistance est grande et plus il faut de temps pour charger la capacité.

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Cette capture d'un oscilloscope montre ce qui arrive sur une broche digitale (jaune). La ligne bleue indique quand le sketch commence à compter et lorsque l'opération est achevée, environ 1.2ms plus tard..

C'est parce que la capacité agit comme un réservoir et la résistance comme un tuyau étroit. Remplir un réservoir avec un tuyau très étroit prend assez de temps. C'est grâce a ce temps de remplissage (que nous pouvons mesurer) que nous pouvons estimer la taille du tuyau de remplissage (donc la "valeur de la résistance"). Mesurer le remplissage de la moitié du réservoir est suffisant pour estimer la taille du tuyaux.

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Dans notre cas, notre réservoir est une capacité céramique de 0.1uF (micro-farad). Vous pouvez changer cette capacité par presque n'importe quel autre, dans ce cas, le temps de chargement changera aussi.

Quel capacité choisir

  • Une capacité de 0.1uF semble être correct pour commencer avec une photo-résistance.
  • Si vous voulez faire des mesures dans des milieux très lumineux, il est préférable d'utiliser une capacité de 1uF (micro-Farad).
  • Si vous voulez faire des mesures dans des milieux sombre, utilisez alors une capacité de 0.01uF (micro-Farad).
/* Photocell simple testing sketch. 
Connectez une broche d'une Photo-résistance sur l'alimentation, l'autre broche sur la Pin/Broche 2.
Connectez ensuite une des broches d'une capacité de 0.1uF (micro-Farad) sur la Pin 2 et l'autre broche à la masse.

Pour plus d'information:
  * voir http://mchobby.be/wiki/index.php?title=Photo-r%C3%A9sistance (en FRANCAIS)
  * voir http://www.ladyada.net/learn/sensors/cds.html                (en anglais)

*/
 
int photocellPin = 2;     // La photorésistance et capacité connectés sur pin 2
int photocellReading;     // Lecture de la valeur Digitale 
int ledPin = 13;          // Vous pouvez vous contenter de la LED disponible sur la carte (Pin 13)
 
void setup(void) {
  // démarrons la connection série pour envoyer des message de debugging.
  Serial.begin(9600);   
  pinMode(ledPin, OUTPUT);  // Activer la LED en sortie 
}
 
void loop(void) {
  // Lecture de la résistance en utilisant la technique dite RCTime (temps chargement d'un circuit RC)
  photocellReading = RCtime(photocellPin);
 
  if (photocellReading == 30000) {
    // Si nous obtenons 30000 cela signifie que nous avons un 'timed out'
    Serial.println("Rien de raccorder!");
  } else {
    Serial.print("Lecture RCtime = ");
    Serial.println(photocellReading);  // La valeur brute
 
    // Plus il fait lumineux et plus vite elle clignotera!
    digitalWrite(ledPin, HIGH);
    delay(photocellReading);
    digitalWrite(ledPin, LOW);
    delay(photocellReading);
  }
  delay(100);
}
 
// Utilisation d'une broche digitale pour mesurer une résistance (comme un photo-résistance)
// Nous obtenons le résultat en utilisant la résistance pour limiter le courant qui "remplit"/charge 
// une capacité et compter combien de temps il faut pour atteindre Vcc/2 
// Pour la pluslart des Arduino un entrée digitale est activée à 2.5V
//
int RCtime(int RCpin) {
  int reading = 0;  // Démarrer avec 0
 
  // Activer la broche en sortie et placer à LOW (masse)
  pinMode(RCpin, OUTPUT);
  digitalWrite(RCpin, LOW);
 
  // Maintenant, placer la PIN en entrée et ...
  pinMode(RCpin, INPUT);
  while (digitalRead(RCpin) == LOW) { // compter le temps qu'il faut pour quelle passe à HIGH
    reading++;      // l'incrémentation est proportionnelle au temps qui passe 
 
    if (reading == 30000) {
      // Si nous arrivons si loin, c'est que la résistance est beaucoup trop 
      // grande... comme si rien n'était connecté! 
      break; // Abandonner la boucle 
    }
  }
  // OK, nous avons soit atteind le maximum de 30000 ou nous avons 
  // plus de chance et obtenu un vrai résultat.
  // Il ne reste plus qu'a retourner la valeur.
 
  return reading;
}

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Où acheter

MC Hobby propose la vente des photo-résistances utilisées dans cet article. Vous trouverez la "photo-résistance + extra" ici sur le WebShop.


Source: cds. Crédit AdaFruit Industries Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.