Luminosité: Photorésistances

S'il se trouve que recevoir les entrées d'un potentiomètre peut être utile pour des expériences contrôlées par l'homme, qu'allons nous utiliser si nous voulons une expérience contrôlée par l'environnement? On reprend exactement les mêmes principes mais à la place d'un potentiomètre (résistance basée sur la commutation) on utilise une photorésistance (résistance basée sur la luminosité).
L'Arduino ne peut directement détecter la résistance (il détecte le voltage) aussi nous configurons un diviseur de tension. La tension (voltage) exacte au port qui la reçoit est calculable, mais pour notre utilisation (juste détecter la luminosité relative) on peut expérimenter avec les valeurs et voir ce qui marche pour nous. Une valeur basse se produit quand le senseur est bien éclairé alors qu'une valeur haute se produit quand il est dans le noir.

COMPOSANTS

SCHEMA DU CIRCUIT

Schéma du circuit

Note du traducteur: Le montage de la photorésistance n'est pas clair ou erroné. Le montage conventionnel consiste à:
1) relier une des deux broches à l'alimentation 5v.
2) relier l'autre broche à une résistance de 330 ohm et au port A0.
En outre la résistance reliée à la LED est de 330 et non 560 ohm.

MONTAGE DU CIRCUIT

Diagramme d'assemblage

Vidéo de l'assemblage.

Utiliser une photoresistance

Photo du montage fonctionnel par le traducteur.
Notez que la patte de la photoresistance en haut est reliée à la résistance et au port A0,
et la seconde plus bas à l'alimentation.

CODE

Vous pouvez trouver ce code dans CIRC-09-code-photoresistor.js

var five = require("johnny-five"), board, myPhotoresistor, myLed;

board = new five.Board();
board.on("ready", function() {
  myLed = new five.Led(9);
  myPhotoresistor = new five.Sensor({
    pin: "A0",
    freq: 250
  });
  myPhotoresistor.on("read", function( err, value ) {
    // l'intervalle de la luminosité de la led est entre 0 et 255
    var brightnessValue = five.Fn.constrain(five.Fn.map(value, 0, 900, 0, 255), 0, 255);
    myLed.brightness(brightnessValue);
  });
});

DEPANNAGE

Le LED reste noire

C'est une erreur que nous continuons à faire de temps en temps, si seulement on pouvait faire des LEDs qui fonctionnent dans les deux sens! Enlevez-là et retournez-là.

Cà ne réagit pas aux changements de lumière

Vu que l'espacement des broches sur la photorésistance n'est pas standard, il est facile de mal la placer. Vérifiez qu'elle est à la bonne place.

Ne fonctionne toujours pas?

Vous pouvez vous trouver dans une pièce qui est soit trop claire, soit trop sombre. Essayez d'allumer et éteindre la lumière pour voir si cela aide. Ou si vous avez une lampe à coté de vous, essayez là.

ETENDRE LE CODE

Inverser la réponse:

Peut-être aimeriez vous la réponse opposée. Ne vous en faites pas, on peut facilement inverser la réponse, ajoutez juste:

brightnessValue = 255 - brightnessValue;

Lancez le programme de nouveau et voyez le résultat.

Lumière nocturne :

Plutôt que contrôler la clarté de la LED en réponse à la lumière, allumons la ou éteignons là sur la base d'une valeur de seuil. Changez le gestionnaire de donnée de la photorésistance en:

myPhotoresistor.on("data", function( err, value ) {
  var threshold = 300;
  if (value > threshold) {
    myLed.on();
  } else {
    myLed.off();
  }
});

Ou:

myPhotoresistor.booleanAt(512).on("data", function( err, value ) {
    if (this.boolean) {
        myLed.on();
    } else {
        myLed.off();
    }
});

Servo contrôlé par la lumière

Utilisons notre savoir nouvellement acquis sur la détection de lumière pour contrôler un servo. Reliez un servo au port 9 (comme dans l'exercice 4).
Puis reprenez le code pour contrôler un servo de l'exercice 8 et voyez comme il fonctionne sans modification.

Utiliser la portée entière de votre servo:

Vous noterez que le servo fonctionne seulement sur une partie limitée de sa portée. C'est parce qu'avec le circuit divisant le voltage nous utilisons une tension sur le port analogique 0 qui ne se situe pas dans l'intervalle 0 à 5 volts mais plutôt entre deux valeurs plus basses (ces valeurs changent selon votre configuration). Pour le corriger, jouez avec la ligne:

thefive.Fn.constrain(five.Fn.map(value, 0, 1023, 0, 179), 0, 255);  

Licence Common Creative. Traduction par Scriptol.fr du tutoriel en anglais d'Anna Gerber, sous la même licence. Copie et modification autorisées sous réserve de conserver cette notice y compris le lien sur la page originale.