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!

Cds-RvsLumen.jpg

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).

Cds-spectral-response.jpg

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!

Cds-connect1.jpg

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.

Cds-connect2.jpg

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).

Cds-analog1.jpg

Cds-analog2.jpg

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).

Cds-example1.jpg

Cds-example2.jpg

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);
}

Cds-example3.jpg

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

Simple code for analog light measurements

This code doesn't do any calculations, it just prints out what it interprets as the amount of light in a qualitative manner. For most projects, this is pretty much all thats needed!

Cds-mesure1.jpg

Cds-mesure2.jpg

/* Photocell simple testing sketch. 
 
Connect one end of the photocell to 5V, the other end to Analog 0.
Then connect one end of a 10K resistor from Analog 0 to ground
 
For more information see www.ladyada.net/learn/sensors/cds.html */
 
int photocellPin = 0;     // the cell and 10K pulldown are connected to a0
int photocellReading;     // the analog reading from the analog resistor divider
 
void setup(void) {
  // We'll send debugging information via the Serial monitor
  Serial.begin(9600);   
}
 
void loop(void) {
  photocellReading = analogRead(photocellPin);  
 
  Serial.print("Analog reading = ");
  Serial.print(photocellReading);     // the raw analog reading
 
  // We'll have a few threshholds, qualitatively determined
  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");
  } else {
    Serial.println(" - Very bright");
  }
  delay(1000);
}

To test it, I started in a sunlit (but shaded) room and covered the sensor with my hand, then covered it with a piece of blackout fabric.

Cds-mesure3.jpg

BONUS! Reading photocells without analog pins

Because photocells are basically resistors, its possible to use them even if you don't have any analog pins on your microcontroller (or if say you want to connect more than you have analog input pins). The way we do this is by taking advantage of a basic electronic property of resistors and capacitors. It turns out that if you take a capacitor that is initially storing no voltage, and then connect it to power (like 5V) through a resistor, it will charge up to the power voltage slowly. The bigger the resistor, the slower it is.

Cds-condensateur1.jpg

This capture from an oscilloscope shows whats happening on the digital pin (yellow). The blue line indicates when the sketch starts counting and when the couting is complete, about 1.2ms later.

This is because the capacitor acts like a bucket and the resistor is like a thin pipe. To fill a bucket up with a very thin pipe takes enough time that you can figure out how wide the pipe is by timing how long it takes to fill the bucket up halfway.

Cds-condensateur2.jpg

Cds-condensateur3.jpg

In this case, our 'bucket' is a 0.1uF ceramic capacitor. You can change the capacitor nearly any way you want but the timing values will also change. 0.1uF seems to be an OK place to start for these photocells. If you want to measure brighter ranges, use a 1uF capacitor. If you want to measure darker ranges, go down to 0.01uF.

/* Photocell simple testing sketch. 
Connect one end of photocell to power, the other end to pin 2.
Then connect one end of a 0.1uF capacitor from pin 2 to ground 
For more information see www.ladyada.net/learn/sensors/cds.html */
 
int photocellPin = 2;     // the LDR and cap are connected to pin2
int photocellReading;     // the digital reading
int ledPin = 13;    // you can just use the 'built in' LED
 
void setup(void) {
  // We'll send debugging information via the Serial monitor
  Serial.begin(9600);   
  pinMode(ledPin, OUTPUT);  // have an LED for output 
}
 
void loop(void) {
  // read the resistor using the RCtime technique
  photocellReading = RCtime(photocellPin);
 
  if (photocellReading == 30000) {
    // if we got 30000 that means we 'timed out'
    Serial.println("Nothing connected!");
  } else {
    Serial.print("RCtime reading = ");
    Serial.println(photocellReading);     // the raw analog reading
 
    // The brighter it is, the faster it blinks!
    digitalWrite(ledPin, HIGH);
    delay(photocellReading);
    digitalWrite(ledPin, LOW);
    delay(photocellReading);
  }
  delay(100);
}
 
// Uses a digital pin to measure a resistor (like an FSR or photocell!)
// We do this by having the resistor feed current into a capacitor and
// counting how long it takes to get to Vcc/2 (for most arduinos, thats 2.5V)
int RCtime(int RCpin) {
  int reading = 0;  // start with 0
 
  // set the pin to an output and pull to LOW (ground)
  pinMode(RCpin, OUTPUT);
  digitalWrite(RCpin, LOW);
 
  // Now set the pin to an input and...
  pinMode(RCpin, INPUT);
  while (digitalRead(RCpin) == LOW) { // count how long it takes to rise up to HIGH
    reading++;      // increment to keep track of time 
 
    if (reading == 30000) {
      // if we got this far, the resistance is so high
      // its likely that nothing is connected! 
      break;           // leave the loop
    }
  }
  // OK either we maxed out at 30000 or hopefully got a reading, return the count
 
  return reading;
}

Cds-condensateur4.jpg

Source: cds

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.