"Débuter avec Arduino"
"Débuter avec Arduino"
Arduino
Table des matières
1. Introduction...................................................................................................................................... 2
2. Le logiciel.........................................................................................................................................5
2.1. L'interface................................................................................................................................. 5
2.2. Le langage Arduino...................................................................................................................7
3. Le matériel........................................................................................................................................9
3.1. Constitution de la carte............................................................................................................. 9
3.2. Test de la carte........................................................................................................................ 10
4. Gestion des entrées / sorties........................................................................................................... 14
4.1. La diode électroluminescente................................................................................................. 14
4.2. Temporisation......................................................................................................................... 16
4.2.1. Fonction delay()..............................................................................................................16
4.2.2. Fonction millis()..............................................................................................................17
4.3. Le bouton poussoir..................................................................................................................19
4.4. Les interruptions matérielles...................................................................................................21
5. Communication par la liaison série................................................................................................29
5.1. Envoi de données....................................................................................................................29
5.2. Reception des données............................................................................................................30
Arduino est un circuit imprimé en matériel libre sur lequel se trouve un microcontrôleur qui peut
être programmé pour analyser et produire des signaux électriques, de manière à effectuer des tâches
très diverses comme la domotique (le contrôle des appareils domestiques - éclairage, chauffage…),
le pilotage d'un robot, etc.
[Link] 1
Tutoriel Initiation 2
1. Introduction
Le système Arduino donne la possibilité d'allier les performances de la programmation à celles de
l'électronique. Plus précisément, pour programmer des systèmes électroniques. Le gros avantage de
l'électronique programmée c'est qu'elle simplifie grandement les schémas électroniques et par
conséquent, le coût de la réalisation, mais aussi la charge de travail à la conception d'une carte
électronique.
Le système Arduino permet de :
• contrôler les appareils domestiques
• fabriquer votre propre robot
• faire un jeu de lumières
• communiquer avec l'ordinateur
• télécommander un appareil mobile (modélisme)
• etc.
Le système Arduino est composé de deux choses principales : le matériel et le logiciel.
• Le matériel
Il s'agit d'une carte électronique basée autour d'un microcontrôleur Atmega du fabricant Atmel, dont
le prix est relativement bas pour l'étendue possible des applications.
• Le logiciel
Le logiciel permet de programmer la carte Arduino. Il offre une multitude de fonctionnalités.
[Link] 2
Tutoriel Initiation 2
[Link] 3
Tutoriel Initiation 2
1. La mémoire
Il en possède 5 types :
• La mémoire Flash : C'est celle qui contiendra le programme à exécuter. Cette mémoire
est effaçable et réinscriptible.
• RAM : c'est la mémoire dite "vive", elle va contenir les variables de votre programme.
Elle est dite "volatile" car elle s'efface si on coupe l'alimentation du micro-contrôleur.
• EEPROM : C'est le disque dur du microcontrôleur. Vous pourrez y enregistrer des infos
qui ont besoin de survivre dans le temps, même si la carte doit être arrêtée. Cette
mémoire ne s'efface pas lorsque l'on éteint le microcontrôleur ou lorsqu'on le
reprogramme.
• Les registres : c'est un type de mémoire utilisé par le processeur.
• La mémoire cache : c'est une mémoire qui fait la liaison entre les registres et la RAM.
1. Le processeur
C'est le composant principal du micro-contrôleur. C'est lui qui va exécuter le programme qu'on lui
donnera à traiter. On le nomme souvent le CPU.
Pour que le microcontrôleur fonctionne, il lui faut une alimentation ! Cette alimentation se fait en
générale par du +5V. D'autres ont besoin d'une tension plus faible, du +3,3V.
En plus d'une alimentation, il a besoin d'un signal d'horloge. C'est en fait une succession de 0 et de 1
ou plutôt une succession de tension 0V et 5V. Elle permet en outre de cadencer le fonctionnement
du microcontrôleur à un rythme régulier. Grâce à elle, il peut introduire la notion de temps en
programmation.
[Link] 4
Tutoriel Initiation 2
2. Le logiciel
Au jour d'aujourd'hui, l'électronique est de plus en plus remplacée par de l'électronique
programmée. On parle aussi d'électronique embarquée ou d'informatique embarquée.
2.1. L'interface
L'interface du logiciel Arduino se présente de la façon suivante :
[Link] 5
Tutoriel Initiation 2
1. permet de vérifier le programme, il actionne un module qui cherche les erreurs dans le
programme
2. Créer un nouveau fichier
3. Sauvegarder le programme en cours
4. Liaison série
[Link] 6
Tutoriel Initiation 2
5. Stoppe la vérification
6. Charger un programme existant
7. Compiler et envoyer le programme vers la carte
E/S analogique
• analogReference()
• analogRead()
• analogWrite() - PWM
E/S avancée
• tone()
• noTone()
• shiftOut()
• shiftIn()
• pulseIn()
Temps
• millis()
• micros()
• delay()
• delayMicroseconds()
Bits et octets
• lowByte()
• highByte()
• bitRead()
• bitWrite()
• bitSet()
[Link] 7
Tutoriel Initiation 2
• bitClear()
• bit()
Interruptions externes
• attachInterrupt()
• detachInterrupt()
Interruptions
• interrupts()
• noInterrupts()
Communication
• Serial
• Stream
3. Le matériel
1. Le micro-contrôleur
Il va recevoir le programme et le stocker dans sa mémoire puis l’exécuter.
2, 3 : Alimentation
Pour fonctionner, la carte a besoin d'une alimentation. Le microcontrôleur fonctionnant sous 5V, la
carte peut être alimentée en 5V par le port USB (en 2) ou bien par une alimentation externe (en 3)
qui est comprise entre 7V et 12V. Cette tension doit être continue et peut par exemple être fournie
par une pile 9V. Un régulateur se charge ensuite de réduire la tension à 5V pour le bon
fonctionnement de la carte.
4. Visualisation
[Link] 8
Tutoriel Initiation 2
Les trois "points blancs" entourés en rouge sont des LED dont la taille est de l'ordre du millimètre.
Ces LED servent à deux choses :
• Celle tout en haut du cadre : elle est connectée à une broche du microcontrôleur et va
servir pour tester le matériel.
Nota : Quand on branche la carte au PC, elle clignote quelques secondes.
• Les deux LED du bas du cadre : servent à visualiser l'activité sur la voie série (une pour
l'émission et l'autre pour la réception). Le téléchargement du programme dans le micro-
contrôleur se faisant par cette voie, on peut les voir clignoter lors du chargement.
[Link] 9
Tutoriel Initiation 2
5a, 5b : La connectique
La carte Arduino ne possédant pas de composants qui peuvent être utilisés
pour un programme, mis a par la LED connectée à la broche 13 du
microcontrôleur, il est nécessaire de les rajouter. Mais pour ce faire, il faut
les connecter à la carte (en 5a et 5b).
C'est grâce à cette connectique que la carte est "extensible", car l'on peut y
brancher tous types de montages et modules ! Par exemple, la carte
Arduino Uno peut être étendue avec des shields, comme le « Shield
Ethernet » qui permet de connecter cette dernière à internet.
[Link] 10
Tutoriel Initiation 2
Avant d'envoyer le programme Blink vers la carte, il faut dire au logiciel quel est le nom de la carte
et sur quel port elle est branchée. Pour cela, allez dans le menu "Tools" ("outils" en français) puis
dans "Board" ("carte" en français). Vérifiez que c'est bien le nom "Arduin Uno" qui est coché. Si ce
n'est pas le cas, cochez-le.
[Link] 11
Tutoriel Initiation 2
Allez ensuite dans le menu Tools, puis Serial port. Choisissez le port COMX, X étant le numéro du
port qui est affiché. Ne choisissez pas COM1 car il n'est quasiment jamais connecté à la carte. Dans
l'exemple, il s'agit de COM5 :
Maintenant, il va falloir envoyer le programme dans la carte. Pour ce faire, il suffit de cliquer sur le
bouton Upload (ou "Télécharger" en Français), en jaune-orangé sur la photo :
[Link] 12
Tutoriel Initiation 2
En bas dans l'image, vous voyez le texte : "Uploading to I/O Board...", cela signifie que le logiciel
est en train d'envoyer le programme dans la carte. Une fois qu'il a fini, il affiche un autre message :
Le message afficher : "Done uploading" signale que le programme à bien été chargé dans la carte.
Si votre matériel fonctionne, vous devriez avoir une LED sur la carte qui clignote :
[Link] 13
Tutoriel Initiation 2
Pour programmer la carte, il faut créer un nouveau programme. Allez dans le menu File Et
choisissez l'option Save as... :
[Link] 14
Tutoriel Initiation 2
Tapez le nom du programme, puis Enregistrez. Vous arrivez dans votre nouveau programme, qui est
vide pour l'instant, et dont le nom s'affiche en Haut de la fenêtre et dans un petit onglet :
Pour commencer le programme, il faut un code minimal. Ce code va permettre d'initialiser la carte :
void setup() //fonction d'initialisation de la carte
{
//contenu de l'initialisation
}
void loop() //fonction principale, elle se répète (s’exécute) à l'infini
{
//contenu du programme
}
Il faut avant tout définir les broches du micro-contrôleur. Cette étape constitue elle-même deux sous
étapes. La première étant de créer une variable définissant la broche utilisée, ensuite, définir si la
broche utilisée doit être une entrée du micro-contrôleur ou une sortie.
Premièrement, définissons la broche utilisée du micro-contrôleur :
const int led_rouge = 2; //définition de la broche 2 de la carte en tant que variable
Il faut maintenant dire si cette broche est une entrée ou une sortie. Cette ligne de code doit se
trouver dans la fonction setup(). La fonction à utiliser est pinMode(). Pour utiliser cette fonction, il
faut lui envoyer deux paramètres :
[Link] 15
Tutoriel Initiation 2
• Le nom de la variable que l'on a défini à la broche
• Le type de broche que cela va être (entrée ou sortie)
void setup()
{
pinMode(led_rouge, OUTPUT); // initialisation de la broche 2 comme étant une sortie
}
La deuxième étape consiste à créer le contenu du programme. Celui qui va aller remplacer le
commentaire dans la fonction loop() pour allumer la LED.
On va utiliser la fonction digitalWrite() qui va écrire une valeur HAUTE (+5V) ou BASSE (0V) sur
une sortie numérique. La LED étant connecté au pôle positif de l'alimentation, il faut qu'elle soit
reliée au 0V. Par conséquent, on doit mettre un état bas sur la broche du microcontrôleur. Ainsi, la
différence de potentiel aux bornes de la LED permettra à celle-ci de s'allumer
La fonction digitalWrite() requiert deux paramètres : le nom de la broche que l'on veut mettre à un
état logique et la valeur de cet état logique.
Voici le code entier :
const int led_rouge = 2; //définition de la broche 2 de la carte en tant que variable
void setup() //fonction d'initialisation de la carte
{
pinMode(led_rouge, OUTPUT); //initialisation de la broche 2 comme étant une sortie
}
void loop() //fonction principale, elle se répète (s’exécute) à l'infini
{
digitalWrite(led_rouge, LOW); // écriture en sortie (broche 2) d'un état BAS
}
4.2. Temporisation
[Link] 16
Tutoriel Initiation 2
Pour faire clignoter la LED on fait intervenir la fonction delay(), qui
va mettre le programme en pause pendant un certain temps.
Ensuite, on éteint la LED.
On met en pause le programme.
Puis on revient au début du programme. On recommence et ainsi de
suite.
[Link] 18
Tutoriel Initiation 2
À la différence d'un bouton poussoir, l'interrupteur agit comme une bascule. Un appui ferme le
circuit et il faut un second appui pour l'ouvrir de nouveau. Il possède donc deux états stables (ouvert
ou fermé). On dit qu'un interrupteur est bistable.
En électronique, on a toujours des perturbations
(générées par des lampes à proximité, un téléphone
portable, ...). On appelle ça des contraintes de CEM.
Pour contrer ces effets nuisibles, ont place en série avec
le bouton une résistance de pull-up. Cette résistance sert
à "tirer" ("to pull" in english) le potentiel vers le haut
(up) afin d'avoir un signal clair sur la broche étudiée.
Sur le schéma suivant, on voit ainsi qu'en temps normal
le "signal" à un potentiel de 5V. Ensuite, lorsque
l'utilisateur appuiera sur le bouton une connexion sera
faite avec la masse. On lira alors une valeur de 0V pour
le signal. Voici donc un deuxième intérêt de la résistance
de pull-up, éviter le court-circuit qui serait généré à
l'appui !
Les boutons ne sont pas des systèmes mécaniques parfaits. Du coup, lorsqu'un appui est fait dessus,
le signal ne passe pas immédiatement et proprement de 5V à 0V. En l'espace de quelques
millisecondes, le signal va "sauter" entre 5V et 0V plusieurs fois avant de se stabiliser. Il se passe le
même phénomène lorsque l'utilisateur relâche le bouton. Ce genre d'effet n'est pas désirable, car il
peut engendrer des parasites au sein du programme.
[Link] 19
Tutoriel Initiation 2
Pour atténuer ce phénomène, on utilise un condensateur
en parallèle avec le bouton. Ce composant servira ici
"d'amortisseur" qui absorbera les rebonds (comme sur
une voiture avec les cahots de la route). Le condensateur,
initialement chargé, va se décharger lors de l'appui sur le
bouton. S'il y a des rebonds, ils seront encaissés par le
condensateur durant cette décharge. Il se passera le
phénomène inverse (charge du condensateur) lors du
relâchement du bouton.
Des résistances de pull-up existent aussi en interne du microcontrolleur de l'Arduino, ce qui évite
d'avoir à les rajouter. Ces dernières ont une valeur de 20 kΩ. Elles peuvent être utilisées sans aucune
contraintes techniques. Cependant, si vous les mettez en marche, il faut se souvenir que cela
équivaut à mettre la broche à l'état haut (et en entrée évidemment). Donc si vous repassez à un état
de sortie ensuite, rappelez vous bien que tant que vous ne l'avez pas changée elle sera à l'état haut.
Pour récupérer l'appui du bouton, on doit lire l'état d'une entrée numérique.
Schéma électrique Réalisation
Lorsque le bouton est relâché, la tension à ses bornes sera de +5V, donc un état logique HIGH. S'il
est appuyé, elle sera de 0V, donc LOW.
La fonction digitalRead() permet de lire l'état logique d'une entrée logique. Cette fonction prend un
paramètre qui est la broche à tester et elle retourne une variable de type int.
Le programme suivant allume une LED lorsque le bouton est appuyé. Lorsque l'on relâche le
bouton, la LED doit s'éteindre.
[Link] 20
Tutoriel Initiation 2
const int bouton = 2; //le bouton est connecté à la broche 2 de la carte Adruino
const int led = 13; //la LED à la broche 13
int etatBouton; //variable qui enregistre l'état du bouton
void setup()
{
pinMode(led, OUTPUT); //la led est une sortie
pinMode(bouton, INPUT); //le bouton est une entrée
etatBouton = HIGH; //on initialise l'état du bouton comme "relaché"
}
void loop()
{
etatBouton = digitalRead(bouton); //Rappel : bouton = 2
[Link] 22
Tutoriel Initiation 2
le terminal série
Dans cette fenêtre, vous allez pouvoir envoyer et recevoir des messages sur la liaison série de votre
ordinateur (qui est émulée par l'Arduino).
Du côté du programme, pour utiliser la liaison série et communiquer avec l'ordinateur, on utilise un
objet qui est intégré nativement dans l'ensemble Arduino : l'objet Serial.
Cet objet rassemble des informations (vitesse, bits de données, etc.) et des fonctions (envoi, lecture
de réception,...) sur ce qu'est une voie série pour Arduino.
Pour commencer, il faut initialiser l'objet Serial afin de définir la vitesse de communication entre
l'ordinateur et la carte Arduino grâce à la fonction begin(). Cette vitesse doit être identique côté
ordinateur et côté programme.
Exemple : [Link](9600); //établissement d'une communication série à 9600 bauds
[Link] 24
Tutoriel Initiation 2
carlu = carlu – 'A'; //on garde juste le "numéro de lettre"
carlu = carlu + 'a'; //on passe en minuscule
}
Si vous voulez éviter de mettre le test de présence de données sur la voie série dans votre code,
Arduino a rajouter une fonction qui s'exécute de manière régulière. Cette dernière se lance
régulièrement avant chaque redémarrage de la loop. Ainsi, si vous n'avez pas besoin de traiter les
données de la voie série à un moment précis, il vous suffit de rajouter cette fonction.
Pour l'implémenter c'est très simple, il suffit de mettre du code dans une fonction nommée
serialEvent() qui sera à rajouter en dehors du setup et du loop. Le reste du traitement de texte se fait
normalement, avec [Link] par exemple.
Voici un exemple de squelette possible :
const int Led = 11; //on met une LED sur la broche 11
void setup()
{
pinMode(Led, OUTPUT); //la LED est une sortie
digitalWrite(maLed, HIGH); //on éteint la LED
[Link] 25