capteur-lumiere-ldr.ino

Arduino Pro Mini · Fichier : capteur-lumiere-ldr.ino · Langage : Arduino · Usage : Mesurer la luminosité avec une LDR et allumer une LED dans le noir

Une résistance dépendante de la lumière (LDR) montée en pont diviseur sur A0 permet de mesurer la luminosité ambiante. Quand la valeur passe sous le seuil, la LED 13 s'allume : un éclairage automatique de couloir en miniature.

Matériel requis

Une Arduino Pro Mini (ATmega328P, existe en 5 V/16 MHz et 3,3 V/8 MHz) reliée à un convertisseur USB-série (FTDI) ou un programmeur ICSP. 1 LDR (photorésistance) + 1 résistance fixe 10 kΩ + 1 LED + résistance 330 Ω.

Câblage

LDR entre 5V et A0, résistance 10 kΩ entre A0 et GND (diviseur). LED + 330 Ω sur la broche 13 vers GND.

Fonctionnement

analogRead() convertit la tension du diviseur (0-1023). Dans le noir la LDR résiste beaucoup, A0 tombe vers GND et la valeur baisse. La moyenne de 8 échantillons stabilise la mesure.

Exécution

Choisissez « Arduino Pro Mini » dans l'IDE (5 V/16 MHz ou 3,3 V/8 MHz selon votre modèle), le processeur ATmega328P, le bon port, puis Téléverser. Le convertisseur doit être câblé DTR-DTR, RX-TX, TX-RX, VCC-VCC, GND-GND.

Variantes

Inversez LDR et résistance pour une lecture croissante avec la lumière, ou remplacez la LED par un relais pour piloter un vrai éclairage 230 V.

capteur-lumiere-ldr.ino

// LDR en pont diviseur sur A0 : allumer une LED quand il fait sombre.
const int LDR = A0; // entree analogique 0..1023
const int LED = 13;
const int SEUIL = 500; // 0..1023, a ajuster selon la LDR et la lumiere

unsigned long derniereMesure = 0;

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if (millis() - derniereMesure >= 200) { // 5 mesures/s : evite le spam
    derniereMesure = millis();

    // Moyenne de 8 echantillons : filtre le bruit de l'ADC 10 bits.
    long somme = 0;
    for (int i = 0; i < 8; i++) {
      somme += analogRead(LDR);
      delayMicroseconds(100);
    }
    int valeur = somme / 8;

    Serial.print(F("LDR = "));
    Serial.print(valeur);
    if (valeur < SEUIL) {
      digitalWrite(LED, HIGH); // nuit : on eclaire
      Serial.println(F("  -> OBSCURITE"));
    } else {
      digitalWrite(LED, LOW);
      Serial.println(F("  -> jour"));
    }
  }
}

← Retour à la fiche