Mesurer la luminosité ambiante avec une photorésistance et une carte Arduino / Genuino

Fiat Lux

Image d'entête

par skywodd | | Licence (voir pied de page)

Catégories : Tutoriels Arduino | Mots clefs : Analog Arduino Genuino Photorésistance Capteur LDR Lumière

Cet article a été modifié pour la dernière fois le

Cet article n'a pas été mis à jour depuis un certain temps, son contenu n'est peut être plus d'actualité.


Dans ce tutoriel, nous allons apprendre ensemble à mesurer la luminosité ambiante d'une pièce au moyen d'une photorésistance et d'une carte Arduino / Genuino. Nous verrons d'abord comment fonctionne une photorésistance, puis comment l'utiliser. En bonus, nous verrons comment augmenter ou réduire la sensibilité de la photorésistance si le besoin s'en fait sentir.

Sommaire

Bonjour à toutes et à tous !

Dans mon précédent article, nous avons vu ensemble comment mesurer des tensions avec une carte Arduino / Genuino. Nous allons aujourd'hui mettre à profit ces nouvelles connaissances en mesurant la luminosité ambiante d'une pièce au moyen d'une photorésistance.

Qu'est-ce qu'une photorésistance ?

Photorésistance et symbole

Photorésistance et symbole

Une photorésistance est un composant dont la résistivité dépend de la luminosité ambiante. Pour faire simple, c'est une résistance dont la valeur change en fonction de la lumière qu'elle reçoit.

Il existe différents types de photorésistances, chacune ayant des valeurs de résistance différentes en fonction de la luminosité ambiante. Le type le plus classique de photorésistances est de 1M ohms (obscurité) / 12K ohms (pleine lumière). C'est ce genre de photorésistance qui est employé plus bas dans ce tutoriel.

Qu'importe le diamètre de la photorésistance, sa valeur dans l'ombre ou en pleine lumière, quand une photorésistance est illuminée, sa résistance diminue. On peut donc utiliser une photorésistance pour mesurer la luminosité ambiante.

Sans faire une liste exhaustive, voici quelques exemples d'utilisations très classiques pour une photorésistance :

  • Détection jour / nuit,

  • Mesure de luminosité ambiante (pour ajuster un éclairage par exemple),

  • Suiveur de lumière (pour panneaux solaires, robots, etc),

Fiat Lux et lux fuit

Si vous voulez faire l'homme de science en soirée, criez "Fiat lux et lux fuit" en allumant la lumière dans une pièce. Cela signifie littéralement "Que la lumière soit et la lumière fut".

Ce qui nous intéresse dans cette expression, dans le cadre de ce tutoriel, c'est le "lux". Le "lux" est l'unité de mesure de la lumière. Pour les curieux, voici de quoi lire pour ce soir avant d'aller au lit : https://fr.wikipedia.org/wiki/Lux_%28unit%C3%A9%29.

Voici quelques exemples de valeurs, directement pompées de Wikipedia :

Activité ou lieu concerné

Éclairement moyen

Nuit de pleine lune

0,5 lux

Rue de nuit bien éclairée

20 à 70 lux

Local de vie

100 à 200 lux

Appartement bien éclairé

200 à 400 lux

Local de travail

200 à 3 000 lux

Stade de nuit

150 à 1 500 lux

Extérieur par ciel couvert

500 à 25 000 lux

Extérieur en plein soleil

50 000 à 100 000 lux

Mesurer une luminosité avec une photorésistance

Maintenant que vous savez tout ce qu'il y a à savoir sur les photorésistances, il est temps d'en mettre une à l'oeuvre dans un montage d'exemple.

Le but du montage de démonstration sera de tout simplement mesurer la luminosité ambiante d'une pièce et d'envoyer la valeur mesurée vers l'ordinateur via le câble USB.

Le montage de démonstration

Matériel pour exemple Arduino LDR

Matériel nécessaire

Pour réaliser ce montage, il va nous falloir :

  • Une carte Arduino UNO (et son câble USB),

  • Une photorésistance de 1M ohms (de diamètre 3mm ou 5mm, cela importe peu),

  • Une résistance de 10K ohms (marron / noir / orange),

  • Une plaque d'essai et des fils pour câbler notre montage.

Vue schématique du montage de l'exemple Arduino LDR

Vue schématique du montage

Vue prototypage du montage de l'exemple Arduino LDR

Vue prototypage du montage

Pour commencer notre montage, nous allons câbler la broche VCC de la carte Arduino à une des pattes de la photorésistance au moyen d'un fil. On relie ensuite la seconde patte de la photorésistance à une des deux pattes de la résistance de 10K ohms. Pour finir, on câble la seconde patte de la résistance de 10K ohms sur la broche GND de la carte Arduino.

Montage de l'exemple Arduino LDR

Le montage fini

Une fois la résistance de 10K ohms et la photorésistance câblées, il ne reste plus qu'à relier la jonction entre ces deux résistances à la broche A0 de la carte Arduino.

Les plus attentifs auront remarqué que ce montage est un pont diviseur de tension, dont on a vu le principe de fonctionnement dans le tutoriel précédent ;)

Le code de démonstration

Bien, maintenant que nous avons notre montage, passons au code !

Le but de notre code va être de :

  1. Lire la tension sur la broche A0,

  2. Envoyer la valeur au PC (pour l'affichage),

  3. Recommencer au point 1.

Pour réaliser ce morceau code, nous allons utiliser la fonction analogRead() vue dans le tutoriel précédent.

1
2
3
void setup() {
  Serial.begin(9600);
}

Nous allons commencer notre programme de démonstration avec la fonction setup() qui va simplement initialiser la communication avec le PC.

PS Ne cherchez pas à comprendre comment utiliser Serial.begin() pour le moment, cela fera l'objet d'un futur tutoriel ;)

1
2
3
4
5
6
void loop() {
  int valeur = analogRead(A0);

  Serial.println(valeur);
  delay(250);
}

Dans la fonction loop(), nous allons faire deux choses :

  1. Mesurer la tension sur la broche A0 avec analogRead().

  2. Envoyer la valeur au PC et attendre quelques millisecondes pour avoir le temps de lire ce qui se passe côté PC.

Pourquoi faire simple quand on peut faire compliqué

Ce code de démonstration est volontairement très simpliste, car il n'y a pas de relation mathématique simple entre la valeur mesurée et la luminosité ambiante.

Courbe lumière VS résistance d'une photorésistance

Courbe lumière VS résistance

Si on regarde la courbe de luminosité (en lux) VS la résistance (en ohms) fournie par le fabricant, on se rend compte qu'il ne s'agit pas d'une droite, mais bien d'une courbe. Il est donc assez compliqué de déterminer quelle luminosité (en lux) correspondant à une valeur mesurée par analogRead().

Il faut aussi prendre en compte le fait qu'une photorésistance est un composant très peu cher, ce qui explique sa présence dans des jouets ou autres circuits à bas coût. Les tolérances de fabrication sont en général de ~40% de différences par rapport aux valeurs nominales de résistances.

Courbe couleur VS réponse d'une photorésistance

Courbe couleur VS réponse

De plus, une photorésistance est sensible à la chaleur et réagit différemment en fonction des couleurs. La mesure sera donc légèrement différente s'il fait très chaud ou très froid. De même, la valeur mesurée sera différente en fonction de la couleur de la lumière.

Les photorésistances sont principalement utilisées pour détecter la présence (ou l'absence) de lumière dans une pièce ou à l'extérieur. Pour faire de véritable mesure de luminosité (en lux, avec une précision fixe qu'importent la température et la couleur), il existe des capteurs spécialisés pour cela comme le capteur TSL2561.

Le code complet avec commentaires :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
/*
 * Code d'exemple pour une photorésistance.
 */

// Fonction setup(), appelée au démarrage de la carte Arduino
void setup() {

  // Initialise la communication avec le PC
  Serial.begin(9600);
}

// Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée
void loop() {
  
  // Mesure la tension sur la broche A0
  int valeur = analogRead(A0);
  
  // Envoi la mesure au PC pour affichage et attends 250ms
  Serial.println(valeur);
  delay(250);
}

L'extrait de code ci-dessus est disponible en téléchargement sur cette page (le lien de téléchargement en .zip contient le projet Arduino prêt à l'emploi).

Le résultat

Capture d'écran du moniteur série Arduino avec exemple LDR

Capture d'écran du moniteur série

Après avoir envoyé le programme dans la carte Arduino, en ouvrant le moniteur série (onglet "outils"), puis en sélectionnant la bonne vitesse de communication (ici 9600 bauds), vous devriez voir apparaitre en temps réel la valeur numérique mesurée en sortie de la photorésistance.

Si votre montage est correct, en couvrant la photorésistance ou en la pointant vers une source de lumière, les valeurs dans le moniteur série doivent normalement changer.

N.B. La valeur mesurée n'a pas d'unité ! C'est une valeur purement indicative. Si vous voulez avoir une mesure en lux, il va falloir calibrer votre photorésistance et intégrer les données de calibration dans le code. Savoir calibrer un capteur n'est pas le but de ce tutoriel, on en parlera une prochaine fois ;)

Bonus : Améliorer la sensibilité du montage

Schéma d'un pont diviseur de tension

Schéma d'un pont diviseur de tension

Pour rappel, la formule d'un pont diviseur de tension est la suivante : Vout = Vin * (R2 / (R1 + R2))

Dans notre montage, la résistance R1 est remplacée par une photorésistance. Par conséquent, la valeur de R2 joue énormément sur la sensibilité du montage.

Si la valeur de R2 est négligeable par rapport à la valeur de R1, la photorésistance sera peu sensible, car il faudra atteindre un niveau de luminosité important avant que R2 s'approche de la valeur de R1 et commence à faire une différence dans l'équation.

Au contraire, si la valeur de R2 est non négligeable par rapport à la valeur de R1, la photorésistance sera très sensible, car la moindre différence de luminosité entrainera un changement de la tension en sortie du pont diviseur.

Pour résumer, plus la valeur de la résistance R2 est grande, plus la photorésistance est sensible. A l'inverse, plus la valeur de la résistance R2 est faible, moins la photorésistance est sensible. Trouver le juste milieu peu prendre un certain temps, dans ce genre de cas, un potentiomètre en lieu et place de R2 s’avère très pratique (cf tutoriel précédent).

Conclusion

Ce tutoriel est désormais terminé.

Si ce tutoriel vous a plu, n'hésitez pas à le commenter sur le forum, à le diffuser sur les réseaux sociaux et à soutenir le site si cela vous fait plaisir.