Yahoo refuse tous les emails du site. Si vous avez une adresse chez un autre prestataire, c'est le moment de l'utiliser
En cas de soucis, n'hésitez pas à aller faire un tour sur la page de contact en bas de page.
Mesurer la luminosité ambiante avec une photorésistance et une carte Arduino / Genuino
Fiat Lux
par skywodd | | Licence (voir pied de page)
Catégories : Tutoriels Arduino | Mots clefs : Arduino Genuino Analog 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
- Qu'est-ce qu'une photorésistance ?
- Mesurer une luminosité avec une photorésistance
- Bonus : Améliorer la sensibilité du montage
- Conclusion
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 ?
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
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.
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.
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 :
Lire la tension sur la broche
A0
,Envoyer la valeur au PC (pour l'affichage),
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 :
Mesurer la tension sur la broche
A0
avecanalogRead()
.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.
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.
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
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
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.