24 mars 2012

Arduino leçon 1 : Entrées-sorties numériques

Après avoir vu de quoi se compose Arduino, nous allons maintenant l'utiliser.
Nous verrons les entrées numériques, les sorties numériques, et aussi la structure SI ... ALORS ... SINON ...
pas FB

Définition

On appelle numériques des bornes de la plaquette qui fonctionnent en "tout ou rien", c'est à dire 0 ou 5 volts.
on les appelle aussi digitales ou logiques .
en entrée : il faut leur fournir
- soit une tension comprise entre 2,5 et 5 volts et elle est alors reconnue comme niveau 1
- soit moins de 0,8 volt et elle est alors reconnu comme niveau 0
sinon le résultat est incertain
en sortie : pas de problème, Arduino fournit 0 ou 5 volts.

attention : une borne en entrée non reliée à 0 volt ou 5 volts est lue de façon hasardeuse, donc à éviter.

Application : faire un montage en 2 étapes
- d'abord une Led qui clignote
- ensuite on ajoutera une autre qui s'allume quand on appuie sur un bouton.

repérages d'une led

La cathode (borne moins) d'une diode est la plus courte.
On la reconnaît aussi par un méplat sur le boîtier.Branchements

exemple de leds

Arduino est sécurisé : chaque sortie est limitée à 20 mA. Ce n'est pas une raison pour faire n'importe quoi. Nous ne brancherons pas les leds directement sur les broches mais par l'intermédiaire d'une résistance.

1er montage : utilisation d'une sortie digitale

Nous mettons l'anode d'une led sur la borne digitale 2.
la cathode est reliée à la masse par une résistance.

branchement d'une led

le programme

Son rôle sera de
- allumer la led
- attendre 1 seconde
- éteindre la led
- attendre 1 seconde
- recommencer

Il faudra d'abord informer Arduino que la broche 13 servira de sortie.

void setup()
{
pinMode(13, OUTPUT);
}

void loop()
{
digitalWrite(13, HIGH);    // éclaire la LED
delay(1000);                   // attend 1 seconde
digitalWrite(13, LOW);     // éteint la LED
delay(1000);                   // attend 1 seconde
}

Rappel de quelques notions de programmation

commentaires

Pour comprendre le rôle des différentes parties d'un programme, on insère des commentaires.
Les commentaires ne sont pas interprétés par le programme. Ils sont juste destinés à expliquer le programme.
Un commentaire est compris entre "//" et la fin de la ligne ou entre "/*" et "*/".

variables

C'est un moyen pratique d'utiliser une valeur.
On la définit par son type (exemple "int" qui signifie "nombre entier") et son nom ("led" dans notre exemple).
On peut lui donner une valeur (13 dans notre exemple) mais ce n'est pas obligatoire au moment où on la définit.
Dans notre programme, on ne change jamais cette valeur mais ça peut arriver. Ça arrive même souvent.
Quand elle ne change jamais, comme ici, on parle plutôt de constante que de variable.

instruction

Une ligne de commande s'appelle une instruction.
Elle se termine par un point-virgule.

fonctions

Une fonction est un groupe d'instructions utilisées ensemble et encadrées par des { } .
On la définit par sa valeur de retour (notion qu'on étudiera plus tard). Dans le cas actuel cette valeur est absente et on le précise par le mot "void". On lui donne un nom. Ce nom est fixé pour les fonctions setup() et loop(). Il est libre pour les fonctions que nous créons. On fait suivre son nom d'une paire de parenthèses et on groupe les instructions qu'elle contient entre de accolades {}.
int toto; // définit une variable
int jojo() // annonce une fonction

2ème montage : utilisation d'une entrée digitale

Sur le même montage, on ajoute :
- une led sur la borne 3, branchée comme la première
- un bouton-poussoir entre la borne 4 et le 5Volts.
- une résistance entre la borne 4 et la masse
Cette seconde led s'éclairera quand on appuyera sur le bouton.
Il suffit d'ajouter dans la loop
- la lecture de l'état du bouton
- l'éclairage ou non de la LED

branchement du poussoir

La condition IF...THEN...ELSE

SI ... ALORS ... SINON ...
IF (la condition est vraie)
      { les accolades contiennent les instructions à exécuter }
ELSE
      { la 2ème paire d'accolades contient les instructions à exécuter dans le cas contraire }

exemple 1
IF (il fait froid)
      { on s'habille chaudement; }
ELSE
      { on peut aller se baigner; }

exemple 2
IF (il y a des octets à recevoir)      {
      on en lit un;
      on le stocke;
}
et comme dans le cas contraire on ne fait rien, le ELSE est inutile.

Le programme

void setup()
    {
    pinMode(13, OUTPUT);
   }

void loop()
    {
    digitalWrite(13, HIGH);    // éclaire la LED
    delay(1000);                   // attend 1 seconde
    digitalWrite(13, LOW);     // éteint la LED
    delay(1000);                   // attend 1 seconde
    // 2ème partie du programme (led 3 et bouton)
    etatBouton = digitalRead(4);
    // Serial.print(etatBouton); // pendant les essais
    digitalWrite(3, etatBouton);
    }

Lancez la compilation. On vous indique une erreur. Corrigez la.

message d'erreur

défaut de ce programme

Ce programme passe son temps à attendre. Arduino ne peut pas effectuer d'autre tâche.
Pour bien comprendre ce problème, nous allons remplacer la seconde d'attente par 5 secondes : delay(5000);
Regardez ce qui se passe quand vous appuyez sur le bouton ou quand vous le relâchez.

solution
supprimer les appels à la fonction delay().
Nous verrons bientôt une fonction qui permet de le faire.

complément d'information

Les résistances que j'ai utilisées en série avec les leds avait une valeur de 270 ohms.
Celle en série avec le bouton-poussoir avait une valeur de 68 Kilohms donc environ 300 fois plus.
On n'est pas obligés d'avoir exactement ces valeurs. Pour éclairer une led sous 5 volts, on met entre 200 et 500 ohms.
Pour amener un niveau sur une entrée, on met une très forte valeur (10 à 100 Kilohms) car quand on appuye sur le poussoir elle est directement entre le +5 et la masse.
La plaque à trous s'appelle une breadbord (planche à pain). La petite qui est sur votre plaquette a 2 zones de 17 lignes de 5 trous.
Elle comporte aussi maintenant (ce n'était pas le cas sur l'ancien modèle) 2 lignes noires de 5 trous. L'une est reliée à la masse, l'autre au +5.

nlle breadboard Arduino

Les breadbords courantes ont des lignes de 5 trous mais aussi 2 lignes longitudinales qu'on utilise généralement pour la masse et le + .
Voici le recto d'une breadboard et le verso d'une autre dont le dos soulevé laisse voir les contacts.

breadboard recto breadbord verso


haut de la page
flèche gauche Page Précédente : présentation d'Arduino           Page Suivante : la boucle for() flèche droite

Valid XHTML 1.0 Transitional