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éthode : Lire 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 :
// Au dessus du setupint light_value; // 2 octets en mémoire
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 :
void setup() {
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
}
void loop() {
light_value = analogRead(LIGHT_PIN); // la variable light_value contiendra une valeur comprise entre 0 et 1023 qui dépend de l'éclairement
Serial.print("Light value: "); // on affiche le texte "Light value: "
Serial.println(light_value); // on affiche en décimal la valeur de la variable light_value
delay(1000); // on temporise pour pouvoir lire la valeur de light_value dans la fenêtre du moniteur série
}
Méthode : Tester la valeur d'une variable numérique
// remplacer valeur_de_votre_seuil par votre valeur (dépend de vos mesures)
void loop() {
if (light_value > SEUIL) {
// code executé si light_value est plus grand que SEUIL}
else { // code executé dans le cas contraire}
}
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 :
éclairer la LDR ou la photo-diode avec une lampe ;
appuyer sur K1 ;
é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 :

