15
Nicolas GOILAV Geoffrey LOI Arduino Apprendre à développer pour créer des objets intelligents

Arduino - multimedia.fnac.commultimedia.fnac.com/multimedia/editorial/pdf/9782746096028.pdf · 29,90 € ISBN : 978-2-7460-9602-8 Ce livre s’adresse à toute personne intéressée

Embed Size (px)

Citation preview

ISBN

: 97

8-2-

7460

-960

2-8

29,9

0 €

Ce livre s’adresse à toute personne intéressée par la création d’objets intelligents et pose les bases de l’utilisation des cartes électroniques Arduino. La simplicité d’utilisation de ce type de carte rend l’électronique accessible à tous et la création d’objets intelligents à la portée de toute personne passionnée par le sujet.

Les premiers chapitres décrivent l’univers Arduino, de l’introduc-tion des microcontrôleurs à la présentation de l’environnement de développement. Les deux chapitres suivants présentent les bases de l’électronique puis de l’informatique, ce qui permet à un élec-tronicien, ou respectivement à un informaticien, d’acquérir les com-pétences nécessaires pour être autonome dans cet univers.

Le chapitre sur la programmation entre un peu plus spécifiquement dans le langage Arduino, il décrit notamment en détail les fonc-tionnalités propres à ce langage. Les chapitres sur les entrées-sor-ties et les interfaces de communication mettent en valeur l’inté-grabilité de la carte Arduino dans son environnement, en relation avec d’autres composants électriques un peu plus complexes. Cette intégration peut être d’autant plus simplifiée en utilisant des cartes prévues à cet effet, les Shields. Compatibles avec Arduino, ces cartes proposent des caractéristiques plus avancées. Les capacités des Shields ainsi que certaines applications pratiques constituent les dernières parties de cet ouvrage. Enfin, l’intégration de divers capteurs et composants permet d’ouvrir le champ des possibilités vers l’internet des objets ou la robotique.

Certains des exemples du livre sont disponibles en télécharge-ment sur le site www.editions-eni.fr (bibliothèques de fonctions, quelques applications simples liées à l’emploi des fonctionnalités de base de l’Arduino). Ils peuvent être utilisés immédiatement ou adaptés pour répondre aux besoins du lecteur.

ArduinoApprendre à développer pour créer des objets intelligents

Pour plus d’informations :

Nicolas GOILAV est Ingénieur infor-matique, spécialisé dans le manage-ment de projets. Geoffrey LOI est étudiant en informatique, spécialité Sciences de l’électronique. Nicolas et Geoffrey sont tous les deux passion-nés par les « objets intelligents » et ont tout de suite été séduits par le potentiel des cartes Arduino dans ce domaine. Grâce à la complémentarité de leur expérience et de leur forma-tion, ils transmettent au lecteur un livre réellement opérationnel pour lui apprendre à développer des objets intelligents.

Le module Arduino • Environnement de développement • Les bases de l’électronique • Les bases de la pro-grammation • La programmation sur Arduino • Les entrées/sorties • Les interfaces de communication • Les cartes Arduino • Les shields • Les accessoires de l’Arduino • Vers l’In-ternet des objets et la robotique

Téléchargementwww.editions-eni.fr.fr

sur www.editions-eni.fr : b Bibliothèques de fonctions.b Exemples de code.

Nicolas GOILAVGeoffrey LOI

Arduino Apprendre à développer

pour créer des objets intelligents

Ardu

ino

Appr

endr

e à

déve

lopp

er

pour

cré

er d

es o

bjet

s in

telli

gent

s

Les chapitres du livre

1Table des matières

Chapitre 1Le module Arduino

1. Introduction au microcontrôleur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.1 Principales notions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.2 Programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2. Présentation générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3. Description technique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.1 Alimentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.2 Horloge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.3 Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.4 Entrées/sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.5 Mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

4. Historique de l’Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

5. Matériel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205.1 Fer à souder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205.2 Breadboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215.3 Multimètre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235.4 Câble d’alimentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Chapitre 2Environnement de développement

1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.1 Sous Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.2 Sous Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

Les éléments à télécharger sont disponibles à l'adresse suivante :http://www.editions-eni.fr

Saisissez la référence ENI de l'ouvrage RIARD dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

2Apprendre à développer pour créer des objets intelligents

Arduino

2.3 Sous Mac OS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3. Interface de développement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.1 Démarrer sur l’environnement . . . . . . . . . . . . . . . . . . . . . . . . . . 333.2 Créer un nouveau projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.3 Ouvrir un projet existant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.4 Fonctionnalités utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383.5 Communiquer avec la carte Arduino . . . . . . . . . . . . . . . . . . . . . 42

4. Première application : faire clignoter une LED . . . . . . . . . . . . . . . . . . 46

Chapitre 3Les bases de l'électronique

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

2. Quelques notions d’électricité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522.1 Intensité, tension et puissance . . . . . . . . . . . . . . . . . . . . . . . . . . 52

2.1.1 Intensité d’un courant électrique . . . . . . . . . . . . . . . . . . . 522.1.2 Tension d’un courant électrique . . . . . . . . . . . . . . . . . . . . 542.1.3 Puissance d'un courant électrique . . . . . . . . . . . . . . . . . . . 55

2.2 Courant continu et courant alternatif . . . . . . . . . . . . . . . . . . . . 552.2.1 Courant continu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552.2.2 Courant alternatif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

2.3 Fil de terre, fil neutre et fil de phase . . . . . . . . . . . . . . . . . . . . . . 57

3. Composants de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.1 Diodes/LED. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.2 Résistances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613.3 Transistors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

3.3.1 Introduction aux transistors . . . . . . . . . . . . . . . . . . . . . . . 623.3.2 Transistors bipolaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623.3.3 Transistors à effet de champ . . . . . . . . . . . . . . . . . . . . . . . 65

3.4 Condensateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663.5 Bobines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

3Table des matières

4. Principes fondamentaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714.1 Loi d’Ohm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714.2 Loi des nœuds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744.3 Loi des mailles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

5. Lecture et compréhension des schémas électriques . . . . . . . . . . . . . . 765.1 Montages en série . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765.2 Montages en dérivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

6. Découverte d’autres composants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806.1 Découverte de nouveaux composants. . . . . . . . . . . . . . . . . . . . . 80

6.1.1 Multiplexeurs et démultiplexeurs . . . . . . . . . . . . . . . . . . . 806.1.2 Relais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826.1.3 Photocoupleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

6.2 Lecture de datasheets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846.3 Exemple de datasheet : le transistor . . . . . . . . . . . . . . . . . . . . . . 85

7. Premier branchement : relier la carte à une diode . . . . . . . . . . . . . . . 90

Chapitre 4Les bases de la programmation

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

2. Quelques notions d’informatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

3. Langage de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963.1 Syntaxe de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963.2 Inclusions et définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

4. Variables et constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994.2 Types de variables et constantes . . . . . . . . . . . . . . . . . . . . . . . . 1034.3 Portée des variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

5. Opérations basiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1085.1 Opérations mathématiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1085.2 Opérations logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125.3 Opérations trigonométriques . . . . . . . . . . . . . . . . . . . . . . . . . . 114

4Apprendre à développer pour créer des objets intelligents

Arduino

6. Structures de contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1166.1 Structures conditionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1166.2 Boucles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

7. Structures de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217.1 Définitions générales et introduction à la complexité . . . . . . . 1217.2 Structures linéaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1237.3 Choix d'une structure de données . . . . . . . . . . . . . . . . . . . . . . . 129

8. Fonctions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1308.1 Définition d’une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1308.2 Création d'une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1328.3 Appel d'une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

9. Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1389.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1389.2 Lecture des erreurs de compilation . . . . . . . . . . . . . . . . . . . . . . 139

Chapitre 5La programmation sur Arduino

1. Structure d’un programme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

2. Variables et constantes spécifiques . . . . . . . . . . . . . . . . . . . . . . . . . . 143

3. Fonctions propres à l’Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1453.1 Entrées/sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1453.2 Gestion du temps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

3.2.1 Fonctions de pause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1493.2.2 Fonctions de décompte . . . . . . . . . . . . . . . . . . . . . . . . . . 150

3.3 Génération de nombres aléatoires . . . . . . . . . . . . . . . . . . . . . . . 1523.4 Manipulation de bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1543.5 Gestion des interruptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

4. Bibliothèques et objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1604.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1604.2 Création d'une bibliothèque. . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

4.2.1 Bibliothèque en C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

5Table des matières

4.2.2 Bibliothèque en C++. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1674.3 Ajout de bibliothèques à son projet. . . . . . . . . . . . . . . . . . . . . . 173

Chapitre 6Les entrées/sorties

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

2. Les types d’entrées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1782.1 Les entrées digitales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1782.2 Les entrées analogiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1802.3 Les entrées PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

3. Les types de sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1863.1 Les sorties digitales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1863.2 Les sorties PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

Chapitre 7Les interfaces de communication

1. Présentation des interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1911.1 Liaison asynchrone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1911.2 Liaison synchrone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

2. Communication Serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1922.1 Principe de communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1922.2 Bibliothèque Serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1942.3 Exemple d’utilisation de Serial. . . . . . . . . . . . . . . . . . . . . . . . . . 200

3. Communication I2C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2013.1 Principe de communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2013.2 Bibliothèque Wire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

3.2.1 Fonctions maîtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2043.2.2 Fonctions esclaves. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2053.2.3 Fonctions de lecture et d’écriture . . . . . . . . . . . . . . . . . . 206

3.3 Exemple d’utilisation de l’I2C . . . . . . . . . . . . . . . . . . . . . . . . . . 208

6Apprendre à développer pour créer des objets intelligents

Arduino

4. Communication SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2104.1 Principe de communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2104.2 Bibliothèque SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

Chapitre 8Les cartes Arduino

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

2. Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2162.1 Présentation de l’Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . 2162.2 Avantages et inconvénients . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

3. Arduino Mega . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2233.1 Présentation de l’Arduino Mega . . . . . . . . . . . . . . . . . . . . . . . . 2233.2 Avantages et inconvénients . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

4. Arduino Nano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2274.1 Présentation de l’Arduino Nano . . . . . . . . . . . . . . . . . . . . . . . . 2274.2 Avantages et inconvénients . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

5. LilyPad Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2315.1 Présentation de la LilyPad Arduino . . . . . . . . . . . . . . . . . . . . . . 2315.2 Avantages et inconvénients . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

6. Adapter la carte Arduino à son projet . . . . . . . . . . . . . . . . . . . . . . . . 236

Chapitre 9Les shields

1. Définitions et utilisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

2. Le protoshield : construire vos propres shields . . . . . . . . . . . . . . . . . 2382.1 Définition générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2382.2 Utilisation d'un protoshield . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

3. Le module XBee : communiquer avec l’extérieur . . . . . . . . . . . . . . . 2403.1 Définition générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2403.2 Intérêts et inconvénients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

7Table des matières

3.3 Utilisation d’un module XBee . . . . . . . . . . . . . . . . . . . . . . . . . . 242

4. Les shields Ethernet/Wi-Fi : relier son Arduino à Internet . . . . . . . 2514.1 Définition générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2514.2 Le shield Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2514.3 Le shield Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2594.4 Le shield GSM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

Chapitre 10Les accessoires de l'Arduino

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

2. L’écran LCD : communiquer avec l’environnement. . . . . . . . . . . . . 2672.1 Brancher un écran. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2672.2 Utilisation d’un écran. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2712.3 Réalisation d'une interface graphique . . . . . . . . . . . . . . . . . . . . 2742.4 Utilisation de l’écran pour exécuter des commandes . . . . . . . . 275

3. Les capteurs : connaître son environnement . . . . . . . . . . . . . . . . . . 2783.1 Capteurs de distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2783.2 Capteurs de température . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2833.3 Capteurs de lumière . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2863.4 Capteurs d’orientation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2883.5 Capteurs de déplacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

4. Les moteurs : se déplacer dans son environnement . . . . . . . . . . . . . 2994.1 Définition générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2994.2 Types de moteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

4.2.1 Servomoteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3004.2.2 Moteurs pas à pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3024.2.3 Moteurs à courant continu . . . . . . . . . . . . . . . . . . . . . . . 303

4.3 Mise en marche et arrêt d'un moteur . . . . . . . . . . . . . . . . . . . . 3044.3.1 La bibliothèque Servo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3044.3.2 La bibliothèque Stepper . . . . . . . . . . . . . . . . . . . . . . . . . . 306

5. Savoir s’adapter à son environnement automatiquement. . . . . . . . 307

8Apprendre à développer pour créer des objets intelligents

Arduino

Chapitre 11Vers l'Internet des objets et la robotique

1. Internet des objets, objets connectés et objets intelligents . . . . . . . 3091.1 Définition générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3091.2 Intérêts, avantages et inconvénients. . . . . . . . . . . . . . . . . . . . . 3101.3 Réalisation d'objets intelligents avec Arduino . . . . . . . . . . . . . 3111.4 Cas particulier de la domotique. . . . . . . . . . . . . . . . . . . . . . . . . 3111.5 Application domotique : relier une lampe

à une carte Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

2. Robotique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3142.1 Définition générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3142.2 Réalisation de robots avec Arduino. . . . . . . . . . . . . . . . . . . . . . 3152.3 Applications robotiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

141

Chapitre 5

La programmation sur Arduino

La programmation sur Arduino

1. Structure d’un programme

Comme vu dans le chapitre précédent, le langage utilisé avec Arduino est trèsproche du langage C ou C++. C’est notamment le cas pour la syntaxe et lestypes de variables. Cependant, ce langage présente quelques différences, prin-cipalement dans la structure d’un programme.

Un programme Arduino se décompose en deux parties principales : une pre-mière partie appelée setup, et une seconde appelée loop. Ces deux partiessont représentatives de la manière de fonctionner d’un microcontrôleur etsont appelées dans cet ordre. En effet, un microcontrôleur est destiné à exécu-ter les instructions contenues dans sa mémoire de manière cyclique et infinie.Avant de s’exécuter, le microcontrôleur a besoin d’une phase de« configuration » de son environnement, notamment pour paramétrer desbroches d’entrées/sorties ou tout simplement pour fixer des variables globales.Cette phase correspond à la fonction setup.

La fonction setup se présente de la manière suivante :

void setup(){ [Instructions] ;

}

Les instructions contenues dans cette fonction ne sont exécutées qu’une seulefois, et ce, lors de la mise sous tension de la carte.

© E

dit

ions

EN

I -

All r

ights

rese

rved

142Apprendre à développer pour créer des objets intelligents

Arduino

Remarque

Une réinitialisation de la carte est considérée également comme une misesous tension. La fonction setup est donc également exécutée après un reset.

Une fois la configuration effectuée, le microcontrôleur débute l’exécution desinstructions contenues dans sa mémoire. Cette phase correspond à la fonctionloop.

La fonction loop se présente de la manière suivante :

void loop(){ [Instructions] ;

}

Cette fonction s’apparente à une boucle ne possédant aucune conditiond’arrêt. Le seul moyen de l’arrêter est de couper l’alimentation de la carte oude réinitialiser la carte. Les instructions contenues dans cette fonction sontdonc répétées aussi longtemps que la carte sera alimentée.

Il est impératif que ces deux fonctions soient présentes dans le programmeprincipal. L’ordre d’apparition de ces fonctions dans le programme n’a pasd’importance. Cependant, il est conseillé de garder la déclaration de ces fonc-tions dans cet ordre et d’éviter de les séparer. Cela permet de rendre plus lisiblele code, et surtout cela permet à un autre lecteur de repérer plus rapidement ledébut de la fonction principale.

Il est également possible de déclarer des fonctions dans le même fichier quecelui dans lequel est présent le programme Arduino. Ces déclarations de fonc-tions pourront s’insérer à tout endroit du programme, du moment que la syn-taxe est respectée. Enfin, il est possible, tout comme dans les programmes enC ou C++, d’inclure des bibliothèques de fonctions dans son programme.Cette inclusion devra s’effectuer, si nécessaire, avant la déclaration de toutefonction.

Il est important de structurer efficacement son programme, afin de permettreune meilleure relecture et surtout de repérer rapidement d’éventuelles erreurs.Un programme Arduino « efficace » pourrait se composer de la manièresuivante :

-Inclusion ou non des bibliothèques utilisées- -Déclaration des fonctions utilisées-

143La programmation sur ArduinoChapitre 5

void setup(){ [Instructions exécutées une seule fois lors de la mise sous tension de la carte] ; }

void loop(){ [Instructions exécutées en boucle par le microcontrôleur] ;

}

2. Variables et constantes spécifiques

Les variables et constantes utilisées par le langage Arduino partagent égale-ment cette similarité avec le langage C et C++. Les variables présentées lorsdu chapitre précédent sont donc toutes applicables pour la programmation surArduino. Il en va de même pour les constantes. Le langage Arduino présentecependant quelques constantes qui lui sont propres. Ces dernières ne seretrouvent pas dans les autres langages et ne sont applicables qu’à la program-mation sur Arduino.

Ces constantes spécifiques sont surtout utilisées pour contrôler les brochesd’entrées/sorties de la carte Arduino. Plus spécifiquement, il s’agit deconstantes permettant de paramétrer leurs modes de fonctionnement.

HIGH et LOW

Ces deux constantes sont employées avec les broches digitales. Comme vuprécédemment (cf. chapitre Le module Arduino, section Entrées/sorties), lesbroches digitales manipulent des données digitales sous forme de signauxlogiques. Les deux valeurs représentables sont donc définies par cesconstantes. Elles correspondent dans la pratique à des valeurs de tension quiseront utilisées par les broches de l’Arduino. Ces constantes ont des propriétésparticulières qui dépendent du mode de fonctionnement que l’on a attribuéaux broches digitales.

Lorsque ces broches sont en lecture, la constante HIGH correspond à unevaleur de tension supérieure à 3V. La constante LOW correspond à une valeurde tension inférieure à 1,5V. Cela signifie qu’il faut fournir des valeurs de ten-sions comprises dans ces marges pour que la lecture de ces broches soit com-prise.

© E

dit

ions

EN

I -

All r

ights

rese

rved

144Apprendre à développer pour créer des objets intelligents

Arduino

Toutes les valeurs de tension comprises entre ces deux valeurs ne peuvent êtreinterprétées par le microcontrôleur. Il est donc impératif que la tension ne soitpas comprise entre ces deux valeurs si l’on souhaite qu’il n’y ait pas d’erreurdans le programme.

Lorsque les broches sont en écriture, la constante HIGH indique au microcon-trôleur de fournir aux broches concernées une tension de 5V. Le microcontrô-leur fournit à l’inverse une tension de 0V lorsque la constante LOW estemployée.

OUTPUT et INPUT

Ces deux constantes servent à déterminer si les broches auxquelles elles sontappliquées fonctionnent en lecture ou en écriture. Comme seules les brochesdigitales peuvent fonctionner dans ces deux modes (cf. chapitre Le moduleArduino, section Entrées/sorties), ces deux constantes ne s’appliquent doncque pour celles-ci.

Lorsqu’une broche est déclarée en INPUT, elle est placée dans un état dit dehaute impédance. Dans cet état, les broches ne consomment quasiment pasde courant sur les circuits auxquels elles sont raccordées. Cet état correspondau mode entrée. C’est également le mode de fonctionnement par défaut detoutes les broches digitales.

Lorsqu’une broche est déclarée en OUTPUT, elle peut fournir ou absorber jus-qu’à 40 mA de courant. Il s’agit du mode de sortie des broches digitales. Dansce mode, les broches génèrent suffisamment de courant pour alimenter desLED ou de petits capteurs. Rappelons néanmoins que même si toutes lesbroches peuvent fournir 40 mA de courant, il existe une limite totale cumuléede courant de 200 mA environ à ce qu’une carte Arduino peut fournir.

145La programmation sur ArduinoChapitre 5

3. Fonctions propres à l’Arduino

Il existe également un certain nombre de fonctions qui sont spécifiques à l’uti-lisation sur Arduino. Ces fonctions sont directement accessibles dans l’envi-ronnement de développement Arduino sans avoir à utiliser de nouvellesbibliothèques.

3.1 Entrées/sorties

Les fonctions d’entrées/sorties permettent d'utiliser les broches présentes surles cartes Arduino. On peut distinguer deux types de fonctions, vu qu'il existedeux types de broches. En effet, les broches analogiques et digitales ne secontrôlent pas de la même manière et il existe des fonctions spécifiques pources deux cas.

Broches digitales

Les fonctions suivantes permettent de manipuler les broches digitales descartes Arduino.

– pinMode()

Les broches digitales peuvent fonctionner en lecture ou en écriture. Cettefonction permet de préciser ce mode de fonctionnement. Elle doit être idéa-lement appelée lors de la fonction setup() du programme principal.pinMode(numéro de la broche, mode de fonctionnement);

La broche à configurer doit être précisée dans les paramètres de la fonctionsous la forme d’un nombre. Ce dernier est représenté par le numéro qui estgravé sur la carte. Sur les cartes Arduino Uno, ce numéro va de 0 à 13. Il estimportant de noter que les broches analogiques peuvent également servird’entrée/sortie digitale. Les numéros à utiliser dans ce cas, pour une carteArduino Uno par exemple, vont de A0 à A5. Le mode de fonctionnement en-fin est déclaré en utilisant les deux constantes INPUT et OUTPUT définiesdans la partie précédente. Par défaut, toutes les broches sont configurées enmode INPUT. Il n’est techniquement pas nécessaire de le faire si l’on sou-haite utiliser une broche en lecture, mais il est fortement conseillé tout demême d’effectuer systématiquement ce travail de configuration pour facili-ter la lisibilité du programme.

© E

dit

ions

EN

I -

All r

ights

rese

rved

146Apprendre à développer pour créer des objets intelligents

Arduino

– digitalWrite()

L’écriture sur les broches digitales est maintenant la prochaine étape. Pourcela, la fonction digitalWrite() entre en jeu. Une broche configurée enécriture doit envoyer une valeur et cette fonction indique quelle valeur uti-liser.digitalWrite(numéro de la broche, valeur à envoyer);

Le numéro de la broche, comme dans la fonction précédente, doit être indi-qué dans les paramètres sous la forme d’un nombre. La valeur à envoyer en-suite correspond aux deux constantes HIGH et LOW introduites dans lapartie précédente.

– digitalRead()

La lecture est effectuée par la fonction digitalRead(). Cette fonction neprend en paramètre que le numéro de la broche sur laquelle la lecture estsouhaitée. La valeur retournée ne peut être qu'une des deux constantesHIGH et LOW. Cette constante renvoyée, même si cela n'est précisé nullepart, est d’un type numérique. Il est ainsi possible de stocker cette valeurdans une variable locale dans son programme pour peu que cette variablesoit du bon type.byte valeur; valeur = digitalRead(numéro de la broche);

Broches analogiques

Les broches analogiques ont un fonctionnement différent de celui de leurcontrepartie digitale. De par leur nature, elles doivent pouvoir manipuler plusque deux valeurs. Ainsi, les microcontrôleurs équipant les Arduino disposentd’un certain nombre de convertisseurs analogique/numérique (6 pour lesArduino Uno et 16 pour les Arduino Mega). La fonction de ces convertisseursest de traduire une grandeur analogique, dans notre cas une tension électrique,en une valeur numérique qu'il sera possible de manipuler dans un programmeArduino. Le convertisseur présent dans les microcontrôleurs utilisés par lescartes Arduino peut manipuler des valeurs allant jusqu’à 10 bits, soit desnombres compris entre 0 et 1023. Ainsi, le nombre 0 correspond à une valeurde tension nulle ou 0V, et le nombre 1023 correspond à une valeur maximale.