Documente Academic
Documente Profesional
Documente Cultură
ASTUPS - CampusFab
LECHALUP Julien
ASTUPS - CampusFab
LECHALUP Julien
Sommaire
Introduction................................................................................................................................ 2
I)
II)
B)
C)
B)
IV)
V)
A)
B)
C)
Pratique ......................................................................................................................... 17
A)
B)
C)
D)
Corrections ............................................................................................................. 18
Quelques librairies............................................................................................................ 22
Conclusion ................................................................................................................................ 24
ASTUPS - CampusFab
LECHALUP Julien
Introduction
Ce cours pour but de prsenter et dinitier lutilisation dArduino. Les cartes
Arduino sont conues pour raliser des prototypes et des maquettes de cartes lectroniques
pour linformatique embarque.
Ces cartes permettent un accs simple et peu couteux linformatique embarque. De
plus, elles sont entirement libres de droit, autant sur laspect du code source (Open Source)
que sur laspect matriel (Open Hardware). Ainsi, il est possible de refaire sa propre carte
Arduino dans le but de lamliorer ou denlever des fonctionnalits inutiles au projet.
Le langage Arduino se distingue des langages utiliss dans lindustrie de linformatique
embarque de par sa simplicit. En effet, beaucoup de librairies et de fonctionnalits de
base occulte certains aspects de la programmation de logiciel embarque afin de gagner en
simplicit. Cela en fait un langage parfait pour raliser des prototypes ou des petites
applications dans le cadre de hobby.
Les possibilits des cartes Arduino sont normes, un grand nombre dapplication ont
dj t ralise et testes par bon nombre dinternautes. On retrouve par exemple diverse
forme de robot (voir Fig.1), des stations mto (voir Fig.2). Dautres exemples dapplications
sont disponibles sur le web aux adresses suivantes :
http://www.hackaday.com/category/arduino-hacks/
http://www.instructables.com/tag/type-id/category-technology/channel-arduino/
ASTUPS - CampusFab
LECHALUP Julien
ASTUPS - CampusFab
LECHALUP Julien
I) Prsentation de la carte
A) Quest ce quun microcontrleur
Les cartes Arduino font partie de la famille des microcontrleurs. Un microcontrleur
est une petite unit de calcul accompagn de mmoire, de ports dentre/sortie et de
priphriques permettant dinteragir avec son environnement. Parmi les priphriques, ont
recense gnralement des Timers, des convertisseurs analogique-numrique, des liaisons
Sries, etc. On peut comparer un micro contrleurs un ordinateur classique, mais systme
dexploitation et avec une puissance de calcul considrablement plus faible.
Les microcontrleurs sont invitables dans les domaines de linformatique embarque,
de lautomatique et de linformatique industrielle. Ils permettent de rduire le nombre de
composant et de simplifier la cration de cartes lectroniques logiques.
ASTUPS - CampusFab
LECHALUP Julien
ASTUPS - CampusFab
LECHALUP Julien
(compatible
Windows,
Linux
et
Mac)
ladresse
ASTUPS - CampusFab
LECHALUP Julien
B) Langage Arduino
Le langage Arduino est inspir de plusieurs langages. On retrouve notamment des
similarits avec le C, le C++, le Java et le Processing. Le langage impose une structure
particulire typique de linformatique embarque. La fonction setup contiendra toutes les
oprations ncessaires la configuration de la carte (directions des entres sorties, dbits de
communications srie, etc.). La fonction loop elle, est excute en boucle aprs lexcution
de la fonction setup. Elle continuera de boucler tant que la carte nest pas mise hors tension,
ASTUPS - CampusFab
LECHALUP Julien
redmarre (par le bouton reset). Cette boucle est absolument ncessaire sur les
microcontrleurs tant donn quil non pas de systme dexploitation. En effet, si lon
omettait cette boucle, la fin du code produit, il sera impossible de reprendre la main sur la
carte Arduino qui excuterait alors du code alatoire.
Au niveau de la syntaxe, on retrouve des similarits avec les langages prcdemment
cits. La dclaration des variables se fait gnralement dans lespace global (de faon
partager les variables les plus importantes entre les deux fonctions principales). On retrouve
les types de base suivant :
Nom
Contenu
(unsigned) char
Entier ou caractre
(unsigned) int
Entier
(unsigned) long
Entier
Plage de valeurs
(0->255) -128 -> 127
(0->65 535)
-32 768 -> 32 767
(0 -> 4 294 967 295)
float/double
Nombre virgule
flottante
String
Chaine de caractres
(Objet)
boolean
Boolen
-3,4028235E+38 ->
3,4028235E+38
variable
Aucune
True / False
Il existe dautres types de base mais ils ne sont quun alias de ceux cits
prcdemment, la liste des types est disponible sur la page des rfrences du site Arduino
(http://arduino.cc/en/Reference/HomePage). La dclaration des variables suit cette syntaxe:
(const) <type> <nom>([<longueur du tableau>]) (= valeur);
Exemples :
ASTUPS - CampusFab
LECHALUP Julien
Utilit
Syntaxe
If-else
Condition logique
If ( <valeur boolenne> ) {
<instruction>
} else {
<instruction>
}
If-else if - else
ASTUPS - CampusFab
LECHALUP Julien
If ( <valeur boolenne> ) {
<instruction>
} else if (<valeur boolenne>) {
<instruction>
} else {
<instruction>
}
Switch
Slecteur
Switch ( <variable> ) {
case <valeur> :
<instruction>
break ;
default :
<instruction>
}
While
Boucle
For
Boucle itrative
10
ASTUPS - CampusFab
LECHALUP Julien
doSomething(0) ;
}
} else if ( variable > 4 ) {
while ( variable != 10 ) {
variable = doSomethingElse(variable-1) ;
}
} else {
for ( int i = 0 ; i < 10 ; i++ ) {
variable = variable *2 ;
}
}
Les fonctions, les structures et les classes se dclarent de la mme faon quen C++.
Elles se dclarent sous cette forme :
Structure :
struct <nom> {
<type> <nom du champ> ;
};
Fonction :
<type de retour> <nom>(<paramtre>) {
<instruction>
}
Classe :
class <nom> {
public :
<attributs et champ publics>
private :
<attributs et champ privs>
protected :
11
ASTUPS - CampusFab
LECHALUP Julien
// Broche 2 en entre
}
Une fois cette configuration faite, on peut procder lutilisation des broches. Toutes
les broches sont capables dcrire et de lire des donnes numriques (c'est--dire des 0 (0V)
ou des 1 (5V)). Mais, certaines disposent de fonctionnalit supplmentaire.
Tout dabord, toutes les cartes Arduino possdent des entres analogiques. Ce sont
les broches A0-A1-A2 etc. Elles permettent de lire des tensions analogiques (comprise entre
0 et 5V) et de le convertir en entier (compris entre 0 et 1023) proportionnellement la
tension mesure. Certaines cartes Arduino possde des sorties analogique faisant
lopration inverse (met une tension sur la broche proportionnellement lentier donn),
mais ce nest pas le cas pour lArduino UNO.
12
ASTUPS - CampusFab
LECHALUP Julien
Pour pouvoir tout de mme contrler des composants autrement quen tout ou
rien il est possible dutiliser des broches PWM. Ce sont les broches annots par un tilde ~
sur la carte. Les PWM (Pulse Width Modulation) sont utilises pour synthtiser des signaux
analogiques en modulant le temps pass ltat 1 (5V). Le signal obtenu est reprsent
figure 5. En utilisant une frquence relativement leve, les PWM permettent de
commander certains composants comme si il recevait une tension analogique. Cela provient
du fait que les composants utiliss dans llectronique analogique, ne changes pas dtats
instantanment. Par exemple, une ampoule incandescence reste chaude et claire un
court instant aprs avoir t teinte. Ce phnomne est gnralement invisible lil nu.
Grce elles, on pourra par exemple faire varier lintensit dune LED. La plupart des cartes
Arduino utilisent des PWM cadences 490Hz environ.
Toutes ces fonctionnalits sur les broches dentres sorties sont utilisables par le biais
de quatre fonctions :
digitalRead(pin) : mesure une donne numrique sur une des broches, la broche en
question doit tre rgle en entre.
digitalWrite(pin, value) : crit une donne numrique sur une des broches, la broche
concerne doit tre rgle en sortie. Le paramtre value doit tre gal HIGH (tat 1
soit 5V) ou LOW (tat 0 soit 0V).
analogRead(pin) : mesure une donne analogique sur une des broches (compatible
seulement), la broche doit tre rgle sur entre.
analogWrite(pin, value) : crit une donne sous forme de PWM sur une des broches
(compatible uniquement), la broche doit tre rgle en sortie. Le paramtre value
doit tre compris dans lintervalle [0;255]
13
ASTUPS - CampusFab
LECHALUP Julien
B) La gestion du temps
Pour la plupart des applications de domotique, il est ncessaire de faire intervenir des
intervalles de temps. Par exemple, pour grer le temps dappui sur un bouton ou pour faire
une sonnerie qui se rpte un certains nombre de fois. Le langage Arduino fournis quelques
fonctions permettant de grer le temps.
Il est possible dinsrer une pause dans son programme pendant un instant. Pour cela,
on utilise les fonctions delay et delayMicroseconds qui insre une pause suivant le
paramtre pass (en milliseconde pour lun, en microseconde pour lautre). Cependant ces
fonctions bloquent le microcontrleur, on ne peut alors plus effectuer aucune action.
En plus dinsrer une pause, il est possible de mesurer le temps. De la mme manire
que les fonctions de dlai, on utilise les fonctions millis et micros qui donnent le nombre de
milliseconde (respectivement microseconde) depuis le lancement de la carte. Attention, ces
fonctions incrmente une variable (interne). Ces variables se remettent zro une fois le
maximum atteint (overflow). La variable utilise pour les millisecondes atteint sont
maximum au bout de 49 jours et 17 heures et la variable utilise pour les microsecondes au
bout de 71 minutes et 34 secondes environ. Il faut donc faire attention lors de lutilisation de
ces fonctions pour des utilisations longues dures.
UPS ASTUPS - CampusFab
14
ASTUPS - CampusFab
LECHALUP Julien
C) Les Interruptions
Il est parfois ncessaire en informatique embarque, dattendre un vnement
externe (appui sur un bouton, donnes dun capteur, etc.) pour effectuer une action. Pour ce
type de problme, on utilise les interruptions. Les interruptions sont des portions de code
(fonctions) appels lorsque quun vnement (interne ou externe) survient et besoin
dtre trait sur le champ. Il faut cependant faire attention, ce mcanisme interrompt le
code excut, il est prioritaire par rapport au reste du code. Vu quil est possible de mesurer
les vnements ponctuellement (via les fonctions dentres/sorties) on utilise gnralement
les interruptions pour du code critique (arrt durgence par exemple) ou des vnements
non-ponctuels (transmissions de donnes depuis un ordinateur par exemple).
Aussi, le nombre dinterruption externe est limit sur 2 sur la plupart des cartes
Arduino. Les interruptions sont utilisables sur les broches compatibles seulement (broches 2
et 3 sur lArduino UNO). Pour choisir la fonction et la broche utilise pour linterruption, on
utilise la fonction attachInterrupt. On peut utiliser detachInterrupt pour supprimer
linterruption. Il est possible de partir en interruptions sur 4 types dvnements :
LOW : Lorsque la broche est ltat 0 (0V)
RISING : Lorsque la broche passe de ltat 0 (0V) ltat 1 (5V) (front montant).
FALLING : Lorsque la broche passe de ltat 1 (5V) ltat 0 (0V) (front descendant).
CHANGE : Lorsque la broche change dtat (front montant et front descendant).
Voici un exemple dutilisation :
15
ASTUPS - CampusFab
LECHALUP Julien
16
IV)
ASTUPS - CampusFab
LECHALUP Julien
Pratique
A) Hello LED
Nous allons maintenant passer la pratique. Pour cette premire manipulation, il est
demand de faire clignoter une LED de faon rgulire. Vous pouvez soit utiliser une LED
avec une rsistance en srie sur une breadboard. Ou alors, vous pouvez utiliser la LED
directement sur lArduino (broche 13 sur la carte Arduino UNO).
Si vous souhaitez plus de difficult, essayer de faire ce mme programme en utilisant
la fonction millis plutt que delay.
17
ASTUPS - CampusFab
LECHALUP Julien
D) Corrections
Hello LED
Code avec delay :
const int pinLed = 13;
void setup()
{
pinMode(pinLed, OUTPUT); // Broche 13 en sortie
}
void loop()
{
delay(500); // Attente d'une demi seconde
digitalWrite(pinLed, HIGH); // Allumage de la LED
delay(500);
digitalWrite(pinLed, LOW); // Eteignage de la LED
}
18
ASTUPS - CampusFab
LECHALUP Julien
19
ASTUPS - CampusFab
LECHALUP Julien
20
ASTUPS - CampusFab
LECHALUP Julien
21
V)
ASTUPS - CampusFab
LECHALUP Julien
Quelques librairies
22
ASTUPS - CampusFab
LECHALUP Julien
23
ASTUPS - CampusFab
LECHALUP Julien
Conclusion
On peut conclure sur le fait que les cartes Arduino sont un puissant outil de
prototypage pour les cartes lectroniques. Mais aussi, elles permettent un accs facile et
intuitif linformatique embarqu. On pourra ainsi enrichir tout ces projets dun
microcontrleur pour leurs donner une plus value importante.
LArduino UNO est une des cartes les plus courantes. Cest la premire de ce genre. Il
existe cependant dautres versions de cartes Arduino plus adaptes pour certains projets.
Pour certains projet il va falloir, par exemple, plus dentres/sorties. On pourra alors opter
pour lArduino Mga.
Il ne faut cependant pas oublier quArduino nest pas la seule marque proposer ce
type de cartes. En effet, des concurrents on rapidement vu le jour. Il existe deux types de
concurrences. Les cartes compatibles Arduino, ce sont des produits diffrents (de par les
composants quils proposent ou leurs prix) mais entirement compatible avec le logiciel et
les librairies Arduino (on peut par exemple citer Freeduino). Il existe aussi des cartes
similaires mais qui ne sont pas compatible avec Arduino (par exemple le LaunchPad de Texas
Instrument).
Pour plus dinformations sur le projet Arduino, de laide pour la ralisation dun projet
ou des documentations, reportez vous sur le site officiel Arduino : http://www.arduino.cc/.
Contact : lechalupe.julien@gmail.com
24