Qu'est-ce qu'un capteur de lumière LDR ? Mesurer la lumière avec Arduino et veilleuse automatique
Comment fonctionne une LDR (photorésistance) ? Montage en pont diviseur, choix de la résistance, lecture de la lumière avec analogRead, veilleuse avec hystérésis, module LDR, ESP32, Pico et erreurs fréquentes.
Une LDR (Light Dependent Resistor) est, comme son nom l'indique, une résistance dont la valeur dépend de la lumière ; on l'appelle aussi photorésistance. Dans le noir, sa résistance est très élevée ; plus il y a de lumière, plus elle diminue. Les lampadaires qui s'allument au crépuscule, les veilleuses automatiques et les jouets sensibles à la lumière fonctionnent avec ce composant tout simple. Elle est bon marché, n'a pas de polarité et se branche sur un Arduino avec une seule résistance : un point de départ idéal pour ton premier projet lumineux.

Comment fonctionne une LDR ?
Le zigzag à la surface de la LDR est un semi-conducteur sensible à la lumière, le sulfure de cadmium (CdS). Quand la lumière l'atteint, les photons libèrent des électrons, le matériau conduit mieux et la résistance baisse. Cette variation n'est pas linéaire et reste assez lente (quelques dizaines de millisecondes). C'est pourquoi une LDR ne sert pas à mesurer précisément la lumière en lux, mais elle est idéale pour des décisions du type « fait-il sombre ou clair ? » et pour des niveaux de lumière approximatifs.
| Ambiance | Résistance approximative de la LDR (GL5528) |
|---|---|
| Obscurité totale | 1 MΩ et plus |
| Lueur de veilleuse (~1 lux) | 50–100 kΩ |
| Pièce peu éclairée (~10 lux) | 10–20 kΩ |
| Pièce éclairée (~100 lux) | 3–5 kΩ |
| Sous une lampe de bureau (~1000 lux) | Environ 1 kΩ |
| Lumière du jour | Quelques centaines d'Ω |
Les valeurs varient selon le modèle. La plus courante dans les kits est la GL5528 ; ses sœurs GL5516, GL5537 et GL5539 donnent des résistances différentes sous la même lumière. Tu peux connaître facilement les valeurs de ta LDR en la mesurant au multimètre dans le noir et à la lumière.
Brancher la LDR sur Arduino : le pont diviseur
L'Arduino mesure une tension, pas une résistance. La LDR se branche donc avec une résistance fixe pour former un pont diviseur de tension : 5V → LDR → A0 → 10 kΩ → GND. Quand la lumière augmente, la résistance de la LDR baisse et la tension sur A0 monte. Cette tension vaut V = 5 × Rfixe / (RLDR + Rfixe), et analogRead() la convertit en un nombre entre 0 et 1023. Pour essayer différentes valeurs, utilise le calculateur Pont diviseur.
| Lumière | Résistance de la LDR | Tension sur A0 | analogRead |
|---|---|---|---|
| Obscurité totale | 1 MΩ | 0,05 V | ~10 |
| Pièce peu éclairée | 15 kΩ | 2,0 V | ~410 |
| Pièce éclairée | 4 kΩ | 3,6 V | ~730 |
| Sous une lampe de bureau | 1 kΩ | 4,5 V | ~930 |
Lire le niveau de lumière avec Arduino
1const int LDR_PIN = A0;
2
3void setup() {
4 Serial.begin(9600);
5}
6
7void loop() {
8 int raw = analogRead(LDR_PIN); // 0 (karanlık) – 1023 (aydınlık) / dark – bright
9 int percent = map(raw, 0, 1023, 0, 100); // yüzde / percent
10 Serial.print("Ham / raw: ");
11 Serial.print(raw);
12 Serial.print(" Işık / light: %");
13 Serial.println(percent);
14 delay(500);
15}Avec le traceur série (Serial Plotter) de l'Arduino IDE, tu peux suivre la valeur sous forme de courbe en direct. Quand tu caches la LDR avec ta main, la courbe descend ; quand tu l'éclaires avec une lampe torche, elle monte. C'est le moyen le plus simple de trouver le bon seuil pour ton projet, avec le capteur placé là où il restera.
Veilleuse automatique : seuil et hystérésis
La veilleuse la plus simple dit « si la valeur est inférieure à 300, allume la LED ». Mais quand la lumière tourne autour du seuil, la lampe s'allume et s'éteint sans arrêt, et c'est encore pire si sa propre lumière atteint la LDR. La solution, c'est l'hystérésis : utiliser deux seuils différents. Le code ci-dessous allume la lampe quand la lumière passe sous 300, mais ne l'éteint qu'au-dessus de 400 ; l'écart entre les deux supprime totalement le clignotement.
1const int LDR_PIN = A0;
2const int LED_PIN = 9;
3const int ON_LEVEL = 300; // bunun altında yak / turn on below this
4const int OFF_LEVEL = 400; // bunun üstünde söndür / turn off above this
5
6bool lampOn = false;
7
8void setup() {
9 pinMode(LED_PIN, OUTPUT);
10}
11
12void loop() {
13 int light = analogRead(LDR_PIN);
14 if (!lampOn && light < ON_LEVEL) lampOn = true;
15 if (lampOn && light > OFF_LEVEL) lampOn = false;
16 digitalWrite(LED_PIN, lampOn ? HIGH : LOW);
17 delay(200);
18}Une LED qui brille davantage dans le noir
Au lieu d'allumer et d'éteindre, tu peux faire briller la LED de plus en plus à mesure que la lumière baisse. La fonction map() transforme la lumière mesurée en une valeur PWM inversement proportionnelle : plus la pièce s'assombrit, plus la LED brille, et inversement. N'oublie pas de brancher la LED sur une broche PWM marquée ~ (par exemple la 9).
1void loop() {
2 int light = analogRead(A0);
3 int brightness = map(light, 100, 900, 255, 0); // karanlık → parlak / dark → bright
4 analogWrite(9, constrain(brightness, 0, 255));
5 delay(50);
6}Module LDR : sortie numérique et analogique
Les modules LDR tout prêts réunissent sur une carte la LDR, la résistance du pont, un potentiomètre bleu pour le seuil et un comparateur LM393. La broche AO fournit la sortie analogique du pont, et la broche DO seulement HIGH ou LOW selon le seuil réglé au potentiomètre. Sur la plupart des modules, DO est à LOW quand il fait plus clair que le seuil et à HIGH quand il fait plus sombre ; vérifie ton module par un petit test.
| Broche | Rôle |
|---|---|
| VCC | Alimentation (3,3–5 V) |
| GND | Masse |
| DO | Sortie numérique : seuil réglé au potentiomètre |
| AO | Sortie analogique : point milieu du pont diviseur |
LDR avec l'ESP32 et le Raspberry Pi Pico
L'ESP32 et le Pico fonctionnent en 3,3 V : alimente donc le pont diviseur par la broche 3V3. L'ADC de l'ESP32 est sur 12 bits et renvoie des valeurs de 0 à 4095. Les broches ADC2 ne fonctionnent pas quand le Wi-Fi est actif, branche donc la LDR sur une broche ADC1 (GPIO 32 à 39). Sur le Pico, les entrées analogiques sont GP26, GP27 et GP28 ; read_u16() en MicroPython renvoie des valeurs de 0 à 65535 :
1from machine import ADC, Pin
2import time
3
4ldr = ADC(26) # GP26 (ADC0); bölücü 3V3'ten / divider fed from 3V3
5led = Pin(15, Pin.OUT)
6
7while True:
8 light = ldr.read_u16() # 0 (karanlık) – 65535 (aydınlık) / dark – bright
9 led.value(light < 20000) # karanlıkta yak / on when dark
10 print(light)
11 time.sleep(0.5)LDR ou capteur de lumière numérique ?
| Caractéristique | LDR | BH1750 (numérique) |
|---|---|---|
| Sortie | Analogique (variation de résistance) | Numérique (I2C), directement en lux |
| Précision | Approximative ; dépend de la température et du modèle | Précise et étalonnée |
| Temps de réponse | Lent (dizaines de millisecondes) | Rapide |
| Prix | Très bon marché | Un peu plus cher |
| Idéal pour | Décision jour/nuit, veilleuse | Mesure de la lumière, éclairage des plantes, luminosité d'écran |
Idées de projets avec une LDR
- Veilleuse automatique : une lampe qui s'allume dans le noir et ne clignote pas grâce à l'hystérésis.
- Éclairage de couloir intelligent : associe la LDR à un capteur de mouvement PIR pour qu'il ne s'allume que dans le noir et au passage de quelqu'un.
- Panneau qui suit le soleil : fais tourner un servo selon la différence entre deux LDR pour orienter un panneau vers le côté le plus lumineux.
- Système de sécurité laser : vise une LDR avec un faisceau laser ; quand le faisceau est coupé, l'alarme sonne.
- Lumière d'ambiance colorée : fais glisser une LED RGB vers des tons chauds à la tombée de la nuit.
- Réveil au lever du soleil : fais sonner un buzzer aux premières lueurs du matin.
Erreurs fréquentes et solutions
- La valeur est toujours 0 ou toujours 1023 : la résistance fixe manque, ou la LDR est branchée directement entre 5V et A0 ; monte le pont diviseur.
- Les valeurs sont inversées : la LDR et la résistance fixe ont été permutées ; si la valeur monte dans le noir, intervertis-les ou inverse la comparaison dans le code.
- La lampe clignote : sa lumière atteint la LDR, ou il n'y a qu'un seul seuil ; ajoute une hystérésis.
- Retard quand il fait nuit : une LDR revient plus lentement du clair au sombre que l'inverse ; quelques secondes de retard sont normales.
- Vouloir mesurer des lux : une LDR n'est pas un capteur étalonné ; pour de vraies valeurs en lux, utilise un BH1750.
- Sur l'ESP32, les mesures déraillent quand le Wi-Fi démarre : la LDR est sur une broche ADC2 ; déplace-la sur une broche ADC1 entre GPIO 32 et 39.
La LDR est le moyen le plus simple d'apprendre la lecture analogique et le principe du pont diviseur, et ce que tu apprends ici te servira pour de nombreux capteurs analogiques d'humidité, de gaz ou de température. Pour comprendre le rôle des résistances du pont, lis Qu'est-ce qu'une résistance ? ; dans l'application BlueGrays, tu trouveras des projets de veilleuse à LDR, de mesure de luminosité et de sécurité laser, pas à pas.
Questions fréquentes
Quelle résistance associer à une LDR ?
Le choix le plus courant est 10 kΩ, qui convient à la plupart des projets en intérieur. Pour plus de sensibilité en faible lumière, prends 47 kΩ, et pour les environnements très lumineux, 1 kΩ. En règle générale, choisis une résistance fixe proche de celle de la LDR au niveau de lumière qui t'intéresse.
Une LDR a-t-elle un plus et un moins ?
Non. Une LDR n'a pas de polarité, comme une résistance ordinaire ; tu peux la monter dans n'importe quel sens. L'essentiel est de réaliser correctement le pont diviseur avec la résistance fixe.
Peut-on mesurer des lux avec une LDR ?
On peut les estimer, mais pas avec précision : sa réponse n'est pas linéaire et varie selon le modèle, et même avec la température. Si tu as besoin de vraies valeurs en lux, utilise un capteur de lumière numérique comme le BH1750 ou le TSL2561.
Quelle est la différence entre les broches DO et AO d'un module LDR ?
AO fournit une tension analogique qui varie avec la lumière et se lit avec analogRead(). DO ne donne que HIGH ou LOW selon le seuil réglé au potentiomètre du module et se lit avec digitalRead() ; c'est pratique pour allumer et éteindre.
Pourquoi ma LDR réagit-elle lentement dans le noir ?
Une fois la lumière coupée, le CdS met quelques secondes à atteindre sa résistance d'obscurité, alors que le passage à la lumière est beaucoup plus rapide. C'est une propriété naturelle des LDR. Pour une réponse rapide, on utilise une photodiode ou un phototransistor.
Pourquoi ma LDR affiche-t-elle toujours 4095 sur l'ESP32, ou ne change-t-elle jamais ?
Si le pont est alimenté en 5V, la tension dépasse la limite de l'ADC et la valeur reste bloquée à 4095 ; alimente-le en 3V3. Si la valeur ne change jamais, la LDR est peut-être sur une broche ADC2 ; l'ADC2 ne fonctionne pas avec le Wi-Fi actif, utilise donc une broche ADC1 entre GPIO 32 et 39.
Projets à réaliser après cet article
Voir tous les projets
Intensité de la lumière de lecture avec Ldr
Projet qui mesure l'intensité de la lumière ambiante à l'aide d'un capteur LDR et l'affiche sur un moniteur série. Enseigne les bases de la lecture de capteurs analogiques et de la communication série

Lampe de nuit avec Ldr
Projet de veilleuse à base de LDR qui allume automatiquement la LED lorsque l'environnement s'assombrit. Enseigne la logique de contrôle automatique avec la comparaison des valeurs seuils analogiques.

Système d'alerte laser
Projet de sécurité qui détecte l'interruption du faisceau laser via une LDR et avertit par un buzzer et une LED. Il enseigne la logique de la détection de l'interruption de la lumière avec une paire l

Système de sécurité laser
Système de sécurité avancé qui déclenche l'alarme lorsque le faisceau laser est interrompu et qui peut être réinitialisé par un bouton-poussoir ou une commande IR. Enseigne les sources d'entrée multip

Veilleuse ESP32 avec LDR
Veilleuse dans laquelle la LED s'allume automatiquement dans l'obscurité et s'éteint à la lumière. La broche D0 (sortie numérique) du module capteur LDR est utilisée - le seuil d'obscurité est réglé avec le petit potentiomètre sur le module, le module lui-même génère la sortie HAUT/BAS. L'ESP32 lit simplement ce signal avec digitalRead(), le code est très simple.

Mesure de l'intensité lumineuse avec le module LDR ESP32
Suivi en temps réel de la valeur de luminosité mesurée par le module LDR sur le moniteur série + valeur approximative en lux. Permet de comprendre le principe de calibrage du module. Il est préférable de réaliser cet exercice avant le projet 10, car il sert à déterminer la valeur seuil.

Éclairage Intelligent ESP32 (PIR + LDR + Relais + OLED)
Transformez votre couloir, votre salle de bain ou votre garde-manger en éclairage intelligent avec l'ESP32 ! En utilisant un capteur de mouvement PIR, un capteur de lumière LDR et un module relais, nous construisons le scénario classique "la lumière s'allume lorsqu'un mouvement est détecté dans l'obscurité" — si l'environnement est déjà lumineux, le mouvement N'ACTIVE PAS la lumière, économisant ainsi de l'énergie pendant la journée. La lumière reste allumée pendant 30 secondes ; si le mouvement

Éclairage automatique avec le capteur de mouvement PIR ESP32
Dans ce projet, nous allons détecter toute personne entrant dans la pièce à l'aide du capteur de mouvement PIR HC-SR501 et allumer automatiquement la LED. Lorsqu'un mouvement sera détecté, la LED restera allumée pendant un certain temps et nous gérerons le temps à l'aide de la fonction `millis()` et d'un compteur, sans avoir recours à `delay()`. Nous obtiendrons ainsi un système d'éclairage à détecteur de mouvement qui ne bloque pas l'ESP32 et permet d'effectuer d'autres tâches. Dans la vie de t
Autres articles
Apprends comment une LDR change de résistance avec la lumière, comment la brancher sur un Arduino avec un pont diviseur, choisir la bonne résistance et réaliser une veilleuse automatique qui ne clignote pas.

