Détecteur crépusculaire

On adopte la convention suivante :

  • NL0 => 0 V

  • NL1 => +5 V

Préparation au défi

Fondamental

À l'aide d'un multimètre en position voltmètre :

  • mesurer la tension VADC1 que « voit » la broche Arduino raccordée à la photorésistance (LDR[1] : Light Dependant Resistor), notez cette valeur : VADC1 = ..................

    Remarque : il est possible que votre carte possède une photo-diode[2] plutôt qu'une LDR)

  • en éclairant la LDR (ou la photo-diode) avec une lampe vérifiez que la tension VADC1 varie et notez cette valeur : VADC1 = ..................

  • VADC1 augmente-t-elle ou diminue-t-elle lorsque la luminosité varie ?

  • en déduire si la résistance de la LDR (ou de la photo-diode) augmente ou diminue avec la luminosité ? Justifiez.

  • au niveau du microcontrôleur la tension VADC1 sera converti en un code binaire naturel sur 10 bits. Complétez le tableau suivant avec les deux valeurs précédentes puis calculez le code correspondant :

    VADC1

    Code sur 10 bits en décimal

    0 V

    0

    5 V

    1023

    Éclairement ambiant

    ............

    ..............

    Sur-éclairement

    ............

    ..............

Le défi

La led verte doit s'allumer lorsque la luminosité passe en dessous de la luminosité ambiante initiale. Les méthodes qui suivent vous aideront à relever ce défi.

Appeler le professeur pour valider le bon fonctionnement.

MéthodeLire la tension sur une broche analogique

VADC1 étant un signal analogique il faut utiliser une instruction particulière qui permet de faire appel au Convertisseur Analogique Numérique (CAN) interne au microcontrôleur.

Il faut utiliser l'instruction analogRead() et stocker le résultat dans une variable (espace en mémoire) d'au moins 10 bits :

1
// Au dessus du setup
2
int light_value; // 2 octets en mémoire
3
const int LIGHT_PIN = A1; // la LDR (ou la photo-diode) est raccordée à la broche A1

On utilise la communication série avec Serial pour afficher le code sur 10 bits en décimal :

1
void setup() {
2
  Serial.begin(9600); // on initialise le moniteur série avec un débit de 9600 b/s pour afficher ensuite dans le loop les valeurs de light_value
3
}
1
void loop() {
2
  light_value = analogRead(LIGHT_PIN); // la variable light_value contiendra une valeur comprise entre 0 et 1023 qui dépend de l'éclairement
3
  Serial.print("Light value: "); // on affiche le texte "Light value: "
4
  Serial.println(light_value); // on affiche en décimal la valeur de la variable light_value
5
  delay(1000); // on temporise pour pouvoir lire la valeur de light_value dans la fenêtre du moniteur série
6
}

MéthodeTester la valeur d'une variable numérique

1
#define SEUIL valeur_de_votre_seuil // remplacer valeur_de_votre_seuil par votre valeur (dépend de vos mesures)
2
3
void loop() {
4
  if (light_value > SEUIL) {
5
    // code executé si light_value est plus grand que SEUIL
6
  }
7
  else {
8
    // code executé dans le cas contraire
9
  }
10
}

ComplémentLe moniteur série

Le moniteur série est un outil intégré à l'IDE Arduino qui permet de communiquer avec le programme dans les deux sens. En général on l'utilise dans le sens microcontrôleur => PC :

Amélioration du code précédent

Le bouton-poussoir K1 permet de mémoriser un nouveau seuil de luminosité ambiante.

Pour tester si votre code fonctionne :

  1. éclairer la LDR ou la photo-diode avec une lampe ;

  2. appuyer sur K1 ;

  3. éteindre la lampe : la led verte doit alors s'allumer avec la luminosité ambiante.

Appeler le professeur pour valider le bon fonctionnement.

Le programme que vous venez de réaliser est utilisé dans les interrupteurs crépusculaires grand public :