Entrées analogiques
Un montage un peu plus complexe que le précédent, support d'une unique application.
Le schéma électrique est donné à titre indicatif.
L'objectif est de déclencher l'allumage d'une LED en fonction d'un seuil lié à la luminosité ambiante. Ce seuil sera ajustable via un potentiomètre.
Nom | Type |
---|---|
Composant1 | Arduino Uno (Rev3) |
LED1 | LED Rouge |
LED2 | LED jaune |
Photorésistance | Photorésistance (LDR) |
R1 | Résistance 330 Ω |
R2 | Résistance 330 Ω |
R3 | Résistance 10k Ω |
R4 | Potentiomètre rotatif |
Le montage est composé de deux LED 5mm, une jaune et une rouge, toutes deux reliées à la masse via une résistance de 330 Ω. La première, commandée par la sortie 6, sert à informer que le système est en fonction, alors que la seconde, commandée par la sortie 9, s'allumera si la luminosité captée par la photorésistance passe en dessous un certain seuil. Cette photorésistance est montée en diviseur de tension avec une résistance fixe de 10k Ω. Le seuil de déclenchement est ajustable à l'aide d'un potentiomètre (ici un potentiomètre rotatif de 10k Ω).
La nouveauté dans ce programme est l'utilisation de la fonction analogRead()
qui permet de convertir une valeur analogique sur un port d'entrée en une valeur numérique que l'on peut facilement traiter. La valeur analogique doit être comprise entre 0 V et 5 V. La valeur numérique résultante sera comprise entre 0 et 1 023. La conversion est linéaire entre ces deux bornes, c'est à dire qu'une tension d'entrée de 0 V correspondra à une valeur numérique de 0, qu'une tension d'entrée de 5 V correspondra à une valeur numérique de 1 023 et qu'entre les deux, ça varie de manière linéaire.
La valeur maximale de 1 023 est due au convertisseur analogique numérique de l'Arduino qui a une précision de 10 bits, soit 210 valeurs qui commencent à 0 et se terminent à 1 023.
Le paramètre que l'on passe à analogRead()
est le nom du port d'entrée que l'on désire utiliser. Sur les Arduino Duemilanove, UNO et Leonardo, il y a six ports d'entrée analogique (A0 à A5). Ceci est dû à l'utilisation du micro-contrôleur ATMega 328 qui en possède lui-même six.
La fonction retourne une valeur entière, résultat de la conversion.
Attention, il n'y a qu'un seul convertisseur dans les Arduino, à se partager entre tous les ports. Si l'on désire faire des conversions rapides et rapprochées, il risque d'y avoir un effet fantôme de la conversion précédente qui va venir altérer la valeur de la conversion courante. Si on laisse passer quelques millisecondes (10 à 20) entre deux conversions, cet effet disparaît (se reporter à la documentation technique des micro-contrôleurs ATMega pour plus de détail sur ce point).
Ce qu'il faut retenir ici, c'est que quelque soit le dispositif analogique branché, la méthode de lecture est la même. L'utilisation d'une photorésistance et d'un potentiomètre sont présentés à titre d'exemple. Il sera possible, avec cette même méthode, de lire la valeur de n'importe lequel des autres nombreux capteurs qui donnent une information analogique (température, distance, ...)
Cependant, un phénomène qui apparaît souvent lors de ce type de lecture est une légère oscillation des valeurs autours de la moyenne et ce, même s'il n'y a aucune modification en entrée. Ceci est lié aux imprécisions de conversion (convertir une infinité de valeurs comprises entre 0 et 5, en seulement 1 024 valeurs ne peut se faire sans quelques imprécisions). Selon le type d'application il sera intéressant de pouvoir lisser les valeurs (appliquer un filtre passe bas), de pouvoir créer un hystérésis, ou les deux, qui permettront de limiter l'apparition de ce phénomène.