Commutation: Potentiomètre

A coté des ports digitaux, l'Arduino a aussi 6 ports qui peuvent être utilisés comme entrées analogiques. Ces entrées reçoivent un courant (de 0 à 5 volts) et le convertissent en nombre digital entre 0 (0 volts) et 1023 (5 volts) (10 bits de résolution). Un appareil très utile qui exploite ces entrées est le potentiomètre (aussi appelé résistance variable). Quand il est connecté en 5 volts par ses ports externes le port du milieu lira quelque valeurs entre 0 et 5 volts en fonction de l'angle selon lequel il est tourné (donc 2.5 volts au milieu). Nous pouvons utiliser les valeurs retournées comme variable dans notre programme.

Note du traducteur: Cet exercice comporte quelques erreurs qui ont été corrigées dans la traduction, l'original étant sans doute basé sur une carte Arduino ancienne. Il n'y a pas de port analogique 2 sur l'Arduino Uno mais les ports A0 à A5. Comme le code adresse le port A0, j'ai remplacé 0 sur le schéma anglais par A0 sur le schéma en français et 2 dans le texte anglais par A0 dans le texte français (double erreur corrigée). Le diagramme mentionne le port digital 13 alors que le code utilise le 9, là encore, il faut suivre le code.

PARTS

SCHEMA DU CIRCUIT

Schéma du circuit

MONTAGE DU CIRCUIT

Diagramme d'assemblage

NdT: Remplacer pin 13 par 9 et pin 2 par A0.

Vidéo du montage.

Commutation avec Arduino et JavaScript

Montage par le traducteur. L'effet de perspective produit un décalage, mais c'est bien le port 9 qui est relié.

CODE

Vous pouvez trouver ce code dans  CIRC-08-code-pot.js.

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

board = new five.Board();
board.on("ready", function() {
  myPotentiometer = new five.Sensor({
    pin: "A0",
    freq: 250
  });
  myLed = new five.Led(9);
  myPotentiometer.on("read", function() {
    var rawValue = this.raw;
    myLed.brightness(Math.floor(rawValue / 4));
  });
});

DEPANNAGE

Fonctionne de façon sporadique

Cela est le plus probablement dû à une connexion légèrement douteuse des broches du potentiomètre. Cela peut généralement être corrigé en enfonçant le potentiomètre.

Ne fonctionne pas

Assurez-vous que vous n'avez pas par mégarde connecté le fil du potentiomètre avec le port digital 0 au lieu du port analogique A0 (la rangée de ports sous les ports de l'alimentation).

Toujours pas opérationnel

Vous pouvez essayez de refaire le circuit à l'envers. Quelquefois cela aide.

ETENDRE LE CODE

Seuil de commutation:

Quelquefois on veut commuter un signal de sortie quand une valeur dépasse un certain seuil. Pour le faire avec un potentiomètre, ajoutez une variable pour la valeur de seuil dans votre programme (comme var threshold = 512;) et changer le code dans le gestionnaire de "données" (voir plus loin, NdT) en:

if (this.raw > threshold) {
   myLed.on();
} else {
   myLed.off();   
}

Alternativement, l'objet Sensor de Johnny-Five peut se voir assigner un seuil booléen, comme ceci:

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

Controler un servo:

Ceci est un très bon exemple qui met un couple de circuits ensemble. Montez le circuit comme vous l'avez fait dans l'Exercice 4, puis modifiez le gestionnaire "read" pour assigner la position du servo en utilisant servo.move(valeurQuelconque).
Vous pouvez utiliser la fonction map pour interpoler un nombre d'un intervalle à l'autre comme  five.Fn.map(rawValue, 0, 1023, 0, 179) pour synchroniser la valeur du potentiomètre selon un angle entre 0 et 180 avec le servo.

Lancez votre programme et voyez comme l'arbre du servo tourne quand vous tournez le potentiomètre.


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.