27

ULJKW (OHNWRU ,QWHUQDWLRQDO 0HGLD % 9€¦ · &RS\ULJKW (OHNWRU ,QWHUQDWLRQDO 0HGLD % 9 vi 7.3 Regarde, maman, sans les mains ! Réaliser un système automatisé . . . 126 7.3.1 Pilote

Embed Size (px)

Citation preview

Copyright Elektor International Media B.V.

Sommaire

1. Démarrage rapide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

1.1 Installation du logiciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

1.2 Installation du matériel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.2.1 Windows (XP ou plus récent) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

Carte sans puce FTDI (Uno, Mega 2560 ou plus récente) . . . . . . . . . . 12Carte avec puce FTDI (Duemilanove, Nano, Diecimila…) . . . . . . . . . 13Comment trouver le numéro de port de la carte sous Windows . . . . . . 14

1.2.2 Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Carte sans puce FTDI (Uno, Mega 2560 ou plus récente) . . . . . . . . . . 15Carte avec puce FTDI (Duemilanove, Nano, Diecimila…) . . . . . . . . . 16

1.2.3 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

1.3 Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.1 On frappe à la porte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.2 Mais on va où ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3. Connaître son adversaire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.1 Un peu d’histoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.2 Ils sont mimi, mais qu’est-ce qu’il y a dedans ? . . . . . . . . . . . . . . . . . . . 253.2.1 Le processeur (CPU) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.2.2 L’oscillateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.2.3 Les mémoires mortes, vivantes et zombies . . . . . . . . . . . . . . . . . . . . . . 263.2.4 Les interruptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.2.5 Entrées-sorties (E/S) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.2.6 Convertisseur analogique-numérique (CAN) . . . . . . . . . . . . . . . . . . . . 283.2.7 Convertisseur numérique-analogique (CNA) . . . . . . . . . . . . . . . . . . . . 293.2.8 Modules de communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

enarvuino_14x21.book Page iii Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.iv

3.2.9 Gestion de temps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.2.10 Autres périphériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.3 Les outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.3.1 La programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.3.2 Charger le programme dans le micro . . . . . . . . . . . . . . . . . . . . . . . . . . 343.3.3 Déboguer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

4. Prototypage rapide à l’italienne. . . . . . . . . . . . . . . . . . . . . . 39

4.1 Le Parrain 1, 2 et 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

4.2 Pâtes, fromage et sauce tomate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

4.3 L’ingrédient de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

4.4 La cuisine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.4.1 Menu Fichier (File) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494.4.2 Menu Édition (Edit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514.4.3 Menu Croquis (Sketch) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534.4.4 Menu Outils (Tools) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544.4.5 Menu Aide (Help) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554.4.6 Les onglets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

4.5 Le service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564.5.1 Plan de table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574.5.2 Le maître d’hôtel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

5. Mon premier délit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

5.1 La clé à molette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

5.2 Repérer les lieux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

5.3 Préparer le coup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

5.4 Des types avec des problèmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

5.5 Les faits divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

5.6 Prendre « perpette » . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

5.7 L’incarcération . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

5.8 If-else ou la liberté conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

5.9 La réinsertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

enarvuino_14x21.book Page iv Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.v

6. Les signaux numériques : tout ou rien . . . . . . . . . . . . . . 73

6.1 Trois surprises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

6.2 Toujours des surprises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

6.3 Le clavier matriciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

6.4 Charlie à la rescousse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

6.5 Les boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

6.6 Boucles f’Or et les trois (t)ours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836.6.1 for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846.6.2 while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856.6.3 do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

6.7 Plus de touches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

6.8 S.O.S. Fantômes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

6.9 Les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

6.10 Mini-afficheur à LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

6.11 Le défilé, une petite animation lumineuse . . . . . . . . . . . . . . . . . . . . . . . . 97

6.12 Petite arnaque entre amis, un jeu qui peut rapporter gros . . . . . . . . . . . 100

6.13 De nouveaux amis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

6.14 C’est nul, pas zéro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

6.15 La pomme de Blanche Neige . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

6.16 Le trognon ou comment manipuler les E/S de façon efficace . . . . . . . . 112

6.17 Une astuce pour inverser le niveau d’une broche . . . . . . . . . . . . . . . . . 114

7. Les signaux analogiques : ni noir ni blanc. . . . . . . . . 117

7.1 Le passage au numérique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177.1.1 Typecasts : des types reconvertis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1207.1.2 Le gros du budget passe dans les frais de représentation . . . . . . . . . . 1217.1.3 Un truc à savoir : les résistances de rappel . . . . . . . . . . . . . . . . . . . . . 1227.1.4 Les références du CAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

7.2 Retour à l’analogique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

enarvuino_14x21.book Page v Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.vi

7.3 Regarde, maman, sans les mains ! Réaliser un système automatisé . . . 1267.3.1 Pilote de moteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1277.3.2 Obtenir une réponse indicielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1317.3.3 Le if composé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1357.3.4 Le régulateur PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1367.3.5 Filtre numérique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1407.3.6 Ziegler et Nichols, un duo de choc . . . . . . . . . . . . . . . . . . . . . . . . . . . 1407.3.7 Le coin des matheux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1457.3.8 Avant-première . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

7.4 Récréation : le Misophone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

7.5 Un peu de C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

7.6 Les No d’Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

7.7 Regarde, maman, sans Arduino ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

8. La communication : un art et une science . . . . . . . . . 159

8.1 Visualisons nos données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1618.1.1 Raccorder un afficheur alphanumérique à cristaux liquides . . . . . . . . 161

8.2 L’action de communiquer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1648.2.1 Asynchrone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1648.2.2 Synchrone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

8.3 RS-232 ou port série ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1668.3.1 Quelques subtilités : write et print . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1698.3.2 Enchaînons les caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1708.3.3 Briser les chaînes ou comment manipuler les chaînes de caractères . . 1758.3.4 Décodeur NMEA 0183A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1778.3.5 Mutatis mutandis, l’art d’extraire une valeur contenue

dans une chaîne de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1808.3.6 Faites demi-tour, une application déroutante . . . . . . . . . . . . . . . . . . . 1828.3.7 Perluète cacahouète : le caractère « & » . . . . . . . . . . . . . . . . . . . . . . . 188

8.4 Liaisons à deux fils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1898.4.1 I²C, TWI et Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1908.4.2 Capteur de pression atmosphérique . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

8.5 Liaisons à trois ou quatre fils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1988.5.1 Pilote amélioré pour afficheur graphique . . . . . . . . . . . . . . . . . . . . . . 2008.5.2 Capteur d’humidité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

8.6 Tous ensemble : une station météo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

8.7 Quand Arduino n’est pas là . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

enarvuino_14x21.book Page vi Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.vii

8.8 Les pointeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

8.9 Savais-tu ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

9. Le temps est compté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

9.1 Ici radio Francfort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2239.1.1 DCF77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

9.2 Réaliser un collier de secondes en mesurant la longueur d'impulsions . 227

9.3 Décoder un chapelet de bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2319.3.1 Décodeur DCF77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

9.4 millis et micros, deux petites fonctions . . . . . . . . . . . . . . . . . . . . . . . . . 236

9.5 C’est qui, Émilie ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2379.5.1 Deux types de MLI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

9.6 Le Maître du Temps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2389.6.1 Émetteur DCF77 : MLI de haut vol . . . . . . . . . . . . . . . . . . . . . . . . . . 241

9.7 Peut mieux faire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

9.8 Attendre un heureux événement : pulseIn . . . . . . . . . . . . . . . . . . . . . . . 2509.8.1 Trier tes télécommandes infrarouges . . . . . . . . . . . . . . . . . . . . . . . . . 253

9.9 Arrêter ou continuer, break ou continue . . . . . . . . . . . . . . . . . . . . . . . . 256

9.10 L’art de la division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

9.11 L’union structurée des types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2579.11.1 struct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2589.11.2 union . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2589.11.3 typedef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

9.12 C’est une image ? Ce sont des données ? C’est Superfichier ! . . . . . . . 2609.12.1 Le format de fichier SVG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

9.13 Ce que disent les manipulateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2659.13.1 Le protocole NEC-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

9.14 To goto or not to goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

9.15 Jeux de trains d’impulsions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2739.15.1 La composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2749.15.2 Bien gérer les délais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2779.15.3 Volatile, ça passe ou ça casse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

9.16 Profession : émeutier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

enarvuino_14x21.book Page vii Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.viii

9.17 Résumons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2859.17.1 Mode normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2869.17.2 Mode CTC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2869.17.3 Mode capture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

9.18 Que la force soit avec toi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

10. Les interruptions : la boîte de Pandore . . . . . . . . . . . . 289

10.1 Ma première interruption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29010.1.1 Temporisateur 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29010.1.2 Produire un signal de 1 kHz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

10.2 Le loup déguisé en mouton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29310.2.1 Les vecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

10.3 Comme une lettre à la Poste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

10.4 Partir dans le décor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299

10.5 On sonne à la porte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30210.5.1 Réalisons une bascule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

10.6 L’interruption de trop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30410.6.1 La pile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

10.7 Mais c’est qui qui sonne à la porte ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 30610.7.1 Les interruptions multiplexées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307

10.8 Vive le codeur rotatif ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

10.9 RAZ à toutes les sauces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31610.9.1 POR, BOR, BOD et RAZ de l’AVR . . . . . . . . . . . . . . . . . . . . . . . . . . 316

10.10 Inversons les rôles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31710.10.1 Une nuisance sonore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

10.11 La Cucaracha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32110.11.1 Le protocole 1-Wire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

10.12 Feu ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32910.12.1 SMBus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

enarvuino_14x21.book Page viii Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.ix

11. Travaux pratiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

11.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33511.1.1 Taille unique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33511.1.2 On y va ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

11.2 Gradateur à LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

11.3 Pilote de moteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339

11.4 Le Misophone revisité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

11.5 Visualise tes données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

11.6 Expériences avec un GPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

11.7 Baromètre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

11.8 Mesurer l’humidité et la température . . . . . . . . . . . . . . . . . . . . . . . . . . 349

11.9 Récepteur DCF77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

11.10 Émetteur DCF77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

11.11 Récepteur infrarouge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

11.12 Émetteur infrarouge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355

11.13 Émeutier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356

11.14 Nuisance sonore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

11.15 La Cucaracha en stéréo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

11.16 Détecteur de feu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361

11.17 Bonus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362

Liste des programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365

Liste des figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366

Liste des tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

enarvuino_14x21.book Page ix Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.

19

2. Introduction

2.1 On frappe à la porte

Les microcontrôleurs ou micros sont des composants programmables fréquem-ment employés dans des applications de plus en plus diverses. Grâce à la diminu-tion continuelle de leur coût et leurs performances toujours plus impressionnantes[Toc toc toc ! Tiens, on frappe à la porte ? « Entrez ! »], aujourd’hui il est souventplus avantageux d’utiliser un micro plutôt que quelques composants discrets.

« Bonjour Denis, Mariline, qu’y a-t-il ? »

[Denis et Mariline sont les rédacteurs qui relisent et corrigent le manuscrit de celivre.]

« Eh bien Clemens, je trouve ce début particulièrement rantanplan.

— Ah bon ?

— Oui, c’est le modèle du lieu commun ! Vous auriez par exemple puinterpeller votre lecteur et lui demander combien de microcontrôleurs ila rencontrés depuis qu’il s’est levé ce matin sans même s’en rendrecompte.

— Ah ouais.

— Dans le radio-réveil, dans la chaudière de la salle de bain, dans lamachine à café, dans l'ascenseur, dans la porte automatique dans la voi-ture, le train, le bus, etc. Si ça se trouve, il y en a eu des centaines !

enarvuino_14x21.book Page 19 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.2. Introduction

20

— Il a une porte automatique dans sa voiture ?

— J’ai oublié une virgule.

— D’accord. Mais eh… il prend la voiture, le train et le bus ? Il habite siloin de son travail ?

— Vous m’avez très bien compris ! »

[Denis et Mariline quittent la pièce.]

Hum… Bon, j’en étais où ? Ah oui, les micros qui sont partout. Bref, même pourun simple clignotant, un microcontrôleur et une LED sont nettement mieux à leuraffaire qu'un circuit classique. Le travail de dimensionnement des composants pas-sifs ou actifs autrefois nécessaire est de nos jours souvent remplacé par la program-mation d’un micro.

Le développement de circuits à microcontrôleur a longtemps été réservé aux spé-cialistes au sein des entreprises car les outils étaient chers et difficiles à mettre enœuvre. Tout cela a changé et réaliser un montage à microcontrôleur est désormaisà la portée de l’électronicien amateur, voire le débutant (même moi j’y arrive). Onne compte plus les cartes à microcontrôleur bon marché ni les logiciels de pro-grammation faciles et gratuits. Oui, les micros sont devenus banals.

Attention, banal ne veut pas dire enfantin. Même si les constructeurs s’efforcentde rendre cette technologie accessible au plus grand nombre, une bonne maîtrisedu sujet est toujours nécessaire pour transformer en produit de qualité un prototypefabriqué avec des kits « grand public ».

2.2 Mais on va où ?

Ce livre a pour but de t’initier aux microcontrôleurs. Cette initiation reposera surla plate-forme de prototypage rapide Arduino. Cette plate-forme, composée d’unecarte de développement bon marché et d’un logiciel de programmation gratuit,permet d’introduire les différents aspects de la programmation des microcontrô-leurs de façon accessible et à peu de frais.

Je présente les périphériques des microcontrôleurs les plus courants, le tout illustrépar des exemples de programmation en Arduino. Ainsi tu pourras comprendre leurfonctionnement sans te perdre dans les détails. Ensuite nous examinerons chaquepériphérique de plus près pour découvrir comment l’utiliser, ce qui te permettra depoursuivre. Ce livre n’est pas du type « 30 applications rigolotes avec Arduino ».

enarvuino_14x21.book Page 20 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.2.2 Mais on va où ?

21

Il donne des applications rigolotes, mais il offre bien plus. À la fin du livre, si tun’as rien sauté, tu seras capable de mettre en œuvre n’importe quel microcontrô-leur et tu pourras quitter le cocon Arduino pour voler de tes propres ailes.

Pour profiter des chapitres qui suivent, je suppose que tu as un minimum de bagageen informatique et que tu sais :✦ te servir d’un navigateur internet, de ton ordinateur et son gestionnaire de

fichiers ; ✦ créer des dossiers et des fichiers ; ✦ manipuler des archives dans différents formats (notamment les plus courants

pour ton système d’exploitation) ;✦ retrouver tes téléchargements ;✦ ce que sont un port USB et un port série ;✦ ce que sont une résistance, un condensateur ou un transistor.

Pour me concentrer sur la programmation, je n’expliquerai pas tous les détails del’électronique utilisée dans les exemples. Ce livre n’est pas une initiation à l’élec-tronique. Aussi je dessinerai les schémas comme des schémas, et pas comme desœuvres d’art multicolores en 3D comme on en voit souvent dans des articles surArduino. De toute façon, les illustrations dans ce livre sont toutes en noir et blanc.

Bonne lecture !

enarvuino_14x21.book Page 21 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.

39

4. Prototypage rapide à l’italienne

D’origine italienne, Arduino est une plate-forme de prototypage rapide pour appli-cations à microcontrôleur. Cela veut dire qu’il s’agit d’un ensemble d’outils déve-loppé pour faciliter la conception de montages à base de microcontrôleur sansperdre trop de temps à en apprendre les tenants et aboutissants. Avec Arduino, toiaussi tu peux « faire du microcontrôleur » ou « faire de l’électroniqueembarquée », il suffit de te munir d’une petite carte électronique pas chère, d’ins-taller un logiciel gratuit et de garder tes soirées libres (« voilà une offre qui ne serefuse pas »).

4.1 Le Parrain 1, 2 et 3

Arduino s’inscrit dans la lignée des projets Processing et Wiring et a pour but devulgariser la technique, ce qui la rend accessible aux non-initiés, aux artistes, auxstylistes, aux passionnés et à ceux qui sont intéressés par la création d’objets oud’environnements interactifs, mais qui n’ont pas suivi une formation technique etqui ne disposent pas forcément de beaucoup d’argent. Aussi les concepteursd’Arduino ont-ils décidé que leur carte ne devrait pas coûter plus de 25 €, ce quiétait en effet le prix de la première carte. Depuis, les prix ont grimpé un peu pouratteindre aujourd’hui environ 30 €.

Processing (www.processing.org) est un langage et un environnement de pro-grammation à code source libre (open source) pour la création sur ordinateurd’images, d’animations et d’interactions. Processing a été développé « pour ensei-gner les fondements de la programmation dans un contexte visuel et pour servircomme carnet de croquis ou outil de production professionnel de logiciel ».

Wiring (www.wiring.org.co), italien comme Arduino, est un environnement deprogrammation avec cartes à microcontrôleur « pour explorer les arts électro-niques, l’enseignement de la programmation et le prototypage rapide ».

Arduino (www.arduino.cc), conçu à la même école que Wiring, a simplifié encoreplus le concept de Wiring, lui-même déjà assez facile à utiliser. A l’origine, Wiringn’était pas un projet libre mais, sous la pression de l’équipe Arduino, Wiring a cédéet a publié ses sources. Cela a permis à l’équipe Arduino de réaliser son rêve dumicrocontrôleur pour tout le monde.

enarvuino_14x21.book Page 39 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.4. Prototypage rapide à l’italienne

40

Les premières cartes Arduino étaient plus élémentaires que celles de Wiring mais,au fil du temps, le matériel Arduino est devenu plus élaboré tandis que Wiring aétendu sa gamme en la simplifiant. Maintenant, les cartes Wiring S et Arduino Unose ressemblent beaucoup.

Malgré l’équivalence des deux projets, Wiring n’a pas connu le succès fulgurantd’Arduino. Depuis le début, Arduino a tout fait pour répandre sa bonne parolepuisque le code source, les schémas électriques, les dessins des platines et la docu-mentation sont libres et ouverts ; là où Wiring a essayé de tout maîtriser. Aumoment d’écrire ces lignes, plus de 600 000 cartes Arduino avaient été venduesdans le monde entier.

Les bibliothèques d’Arduino s’appuient sur celles de Wiring et l’environnement dedéveloppement intégré (EDI), basé sur Processing, semble identique à celui deWiring. La seule différence notable est la couleur : orange pour Wiring et bleu clairpour Arduino. Processing quant à lui utilise les tons de gris dans un EDI avec lesmêmes traits.

L’EDI de Wiring supporte les cartes Arduino mais l’EDI d’Arduino n’accepte pasle matériel Wiring. Au départ, Arduino se bornait à quelques microcontrôleursAVR d’Atmel tandis que Wiring flirtait ouvertement avec les micros de Micro-chip, Texas Instruments ou encore ceux à base de cœur ARM. Arduino égalements’est transformé en un système multi-plateforme, mais un peu « à l’insu de sonplein gré ». La philosophie a été embrassée par des passionnés qui l’ont portée surd’autres micros de constructeurs différents. Il a fallu quelques années à Arduinopour modifier l’EDI et ainsi permettre d’y intégrer d’autres compilateurs pour desmicros différents mais, avec la version 1.5 et l’introduction de la carte ArduinoDue avec son micro au cœur ARM Cortex M3, le but a été atteint.

4.2 Pâtes, fromage et sauce tomate

La plate-forme Arduino est construite sur trois piliers :

1. le pilier Matériel qui regroupe une collection de cartes à microcontrôleur et decartes d’extension. Les schémas électriques des cartes et les dessins des cir-cuits imprimés sont disponibles et gratuits ;

2. le pilier Logiciel qui comprend les outils de programmation et une biblio-thèque étendue de fonctions de haut niveau. Tout est gratuit, à code sourcelibre et multi-plateforme ;

enarvuino_14x21.book Page 40 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.4.2 Pâtes, fromage et sauce tomate

41

3. le pilier Distribution-Communication sous forme d’un site internet par lequelle matériel et le logiciel Arduino sont mis à disposition des intéressés.L’adresse est www.arduino.cc (arduino.cc marche également). Pour lescurieux, .cc est le domaine national réservé au territoire des îles Cocos(anciennement les îles Keeling), un territoire extérieur à l’Australie. Cedomaine a probablement été choisi pour son faible coût, mais je m’égare.

Le site internet est la référence pour tout ce qui concerne officiellement Arduino.Ce site regroupe les mises à jour logicielles et matérielles et toutes les informationsnécessaires pour leur mise en œuvre. Si tu cherches un revendeur de matérielauthentique, c’est ici que tu le dénicheras. Un forum pour poser les questions quine trouvent pas de réponse dans ce livre est également accessible. Le site est enanglais, mais il existe des forums dans d’autres langues, dont un en français.

Léonardo Uno chinoise

Mega ADK Lilypad

Figure 4-1 - Quelques cartes Arduino moins courantes : la Léonardo (sans connecteurs) est équipée d’un ATmega32U4 pour réaliser des dispositifs USB, la Lilypad en forme de pâquerette cible les applications de mode, la Mega ADK est capable de communiquer avec les dispositifs Android et une Uno chinoise qui ne porte pas la mention « made in Italy ».

enarvuino_14x21.book Page 41 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.4. Prototypage rapide à l’italienne

42

Côté matériel, Arduino est une carte à microcontrôleur avec un port USB. Plu-sieurs modèles existent, mais les plus courantes sont la petite carte au format Uno(Diecimila, Duemilanove…) et la plus grande au format Mega 2560 (Mega,Mega 1280, Mega ADK…). Il y en a d’autres comme la Mini, la Micro, la Nanoou encore la Lilypad en forme de pâquerette prévue pour les applications wea-rable, c’est-à-dire à intégrer dans les vêtements. La carte Arduino Due est diffé-rente des autres car elle est équipée d’un micro à 32 bits au lieu de 8 bits et elle estdonc beaucoup plus puissante que les autres1. Il existe aussi une carte nomméeYún qui est une sorte de mélange d’une carte Linux et d’une Arduino Léonardo.La Yún vise les applications sans fil et dans les nuages.

Figure 4-2 - Une collection de cartes d’extension compatibles avec Arduino. La photo montre un shield Wifi/Bluetooth, un shield Ethernet (blanc), un shield avec écran de téléphone portable, avec clavier matriciel (voir chapitre 6, page 73), un monome 10h (avec les 16 grosses LED blanches, voir aussi www.monome.org) et, au milieu à gauche, un shield d’expérimentation que nous construirons dans le chapitre 8 (page 159).

1. La Due et la Yún ne sont pas traitées dans ce livre car elles compliquent considérablement les choses. Un peu de la simplicité d’Arduino a été sacrifiée à des micros beaucoup plus puissants.

enarvuino_14x21.book Page 42 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.7.4 Récréation : le Misophone

147

7.4 Récréation : le Misophone

Ouf, après ce long exercice pour mettre en œuvre un régulateur PID, il est tempsde se reposer. Pour cela, je te propose un montage sympathique qui nécessite unpeu de mécanique, de l’électronique et de la programmation.

As-tu déjà entendu parler de la misophonie ? Probablement pas, car il s’agit d’unemaladie peu connue, identifiée seulement dans les années 1990. La misophonie, àne pas confondre avec la mysophobie, la phobie des poussières, est « une hyper-sensibilité aux bruits quotidiens, plus particulièrement à ceux que fait l’entourageen respirant ou en mangeant. Le malade peut en venir à des sentiments extrêmesde colère ou de panique, voire à des idées violentes envers la personne qui produitles sons. »1 Quand, il y a quelque temps, j’ai visionné sur l’internet une vidéo surune fourchette électronique qui émet un son au moment où l’aliment piqué sur elleentre en contact avec la bouche de son utilisateur, j’ai tout de suite pensé à la miso-phonie. Le but de la fourchette musicale, nommée EaTheremin par ses inventeursjaponais, est d’inciter les enfants à manger des légumes en les amusant. J’ai desdoutes sur l’efficacité de cette approche assez surprenante mais une telle fourchettepourrait peut-être aider à sortir de leur isolement social les gens qui souffrent demisophonie. En effet, équipée de quelques fourchettes musicales, la personnesouffrant de cette maladie pourrait à nouveau inviter des amis à venir manger chezelle, les bruits émanant de la bouche de ses hôtes seraient rendus inaudibles par lechant harmonieux des fourchettes musicales. Alors, comment réaliser une tellefourchette (que j’ai rebaptisée Misophone) ?

La fourchette tenue dans la main de l’utilisateur, l’aliment piqué sur la fourchetteet le corps de l’utilisateur forment un circuit électrique qui se ferme quand l’ali-ment touche un endroit conducteur de l’utilisateur, comme sa bouche, mais un boutde peau nue fonctionne aussi bien. La fréquence du son obtenu dépend de la résis-tance électrique de l’aliment mais également du corps de l’utilisateur. Nous avonsdonc besoin d’un circuit capable de produire un son dont la fréquence est contrôléepar une résistance. Un tel circuit est assez facile à fabriquer avec uniquement descomposants analogiques, mais un microcontrôleur aussi fait l’affaire. Il suffit demesurer la résistance à l’aide d’une entrée analogique puis de délivrer sur une sor-tie numérique un signal carré dont la fréquence varie en fonction de la résistancemesurée. Pour avoir un ordre de grandeur, la résistance entre ma main et mabouche est, selon mon multimètre, d’environ 1 MΩ. Avec une pile bouton de 3 V,j’ai mesuré des courants autour d’une dizaine, parfois même plusieurs dizaines, de

1. Source : A Misophonia UK information leaflet, réf. M001 FRENCH, www.misophonia-uk.org.

enarvuino_14x21.book Page 147 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.7. Les signaux analogiques : ni noir ni blanc

148

microampères. Cela m’a donné l’idée de traiter la fourchette musicale comme uncapteur qui fournit un courant dont l’intensité est une fonction de la résistance cor-porelle. Une résistance ou un ampli-op peut convertir ce courant en tension que lemicro pourra numériser. Un filtre passe-bas inséré juste avant l’entrée du micro éli-mine les ronflements à 50 Hz dus au secteur et captés par le corps. Il est aussi pos-sible d’implémenter ce filtre en logiciel, ce qui simplifiera encore plus le montage.Avec une fréquence de coupure assez basse (j’ai choisi 5 Hz), on obtient égale-ment une certaine lenteur qui se traduit en glissandos sympathiques. Des vibratos

Figure 7-12 - Le circuit du Misophone.

enarvuino_14x21.book Page 148 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.9.1 Ici radio Francfort

225

nécessaire, celle intégrée dans le micro convient parfaitement. Pour une réceptionoptimale, oriente l’axe de l’antenne, la barre de ferrite avec la bobine, perpendicu-lairement à Francfort.

Le schéma montre comment j’ai connecté le module à une carte Arduino. J’ai uti-lisé la sortie inversée (broche 4), du coup mes bits horaires sont actifs au niveaubas, mais cela ne change rien au fonctionnement. Puisque les valeurs des bits sontcodées en durées, leurs niveaux n’ont pas d’importance. Comme entrée, j’ai choisil’entrée analogique numéro deux car elle était encore libre sur ma carte d’expéri-mentation. Voici un petit croquis qui permet de vérifier que le module « voit » bienl’émetteur à Francfort et si les bits sont actifs au niveau haut ou bas.

Figure 9-1 - Un module récepteur DCF77 bon marché et facile à trouver.

Figure 9-2 - Les modules récepteurs DCF77 sont faciles à mettre en œuvre.

enarvuino_14x21.book Page 225 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.9. Le temps est compté

226

/* * DCF77 polling pulse measuring */ int dcf77 = A2;int pulse_prev;unsigned long time_falling;unsigned long time_rising;

void setup(void){Serial.begin(115200);pinMode(dcf77,INPUT_PULLUP);pulse_prev = digitalRead(dcf77);time_falling = millis();time_rising = millis();

}

void loop(void){unsigned long time = millis();int pulse = digitalRead(dcf77);

if (pulse==1 && pulse_prev==0){// rising edgetime_rising = time;Serial.print("lo: ");Serial.println(time_rising-time_falling);

}else if (pulse==0 && pulse_prev==1){// falling edgetime_falling = time;Serial.print("hi: ");Serial.println(time_falling-time_rising);

}

pulse_prev = pulse;}

À chaque passage, la fonction loop demande d’abord le nombre de millisecondesécoulées depuis le lancement du croquis. C’est la fonction millis qui fournit cettevaleur. Il existe une fonction similaire, micros, qui fournit le nombre de microse-condes écoulées depuis le lancement du programme. Puisque nous nous attendonsà des bits qui durent au moins 100 ms, une résolution en microsecondes ne pré-sente pas d’avantages.

enarvuino_14x21.book Page 226 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.9.3 Décoder un chapelet de bits

235

Serial.print("/20");Serial.println(year);

}else Serial.println("error");bits = "";seconds = 0;

}}

}

J’ai aussi resserré un peu les marges pour les durées des bits. Grâce à ce réglage etaux tests de parité, le décodage est ainsi assez robuste. Pour encore renforcer larobustesse, tu peux rajouter des contrôles sur les valeurs décodées. L’heure ne doitpas dépasser 23, les minutes 59, etc. Je te laisse cet exercice.

Figure 9-3 - Un LCD permet d’afficher l’heure reçue par le module récepteur DCF77.

enarvuino_14x21.book Page 235 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.9. Le temps est compté

236

9.4 millis et micros, deux petites fonctions

L’écriture du croquis pour décoder les trames DCF77 était relativement facilegrâce à la fonction millis qui nous a permis de mesurer la durée des bits sans beau-coup d’effort. Cette fonction utilise un des modules temporisateur/compteur dumicro pour compter le nombre de millisecondes écoulées depuis le démarrage ducroquis. Le micro de la carte Arduino Uno possède trois de ces modules, celui dela carte Mega en a six. Les modules ne sont pas tous pareils. Le temporisateur/compteur 0 est un module à 8 bits, équipé de deux sorties indépendantes et doté defonctions MLI. Il a été prévu par son concepteur pour gérer des tâches de synchro-nisation et pour produire des formes d’ondes rectangulaires.

Le temporisateur/compteur 1 est le plus complet et le plus précis des trois, il offreune résolution de 16 bits, deux sorties, de la MLI et de la capture d’événements.Ce module est à utiliser quand il faut produire des fréquences ou des longueursd’impulsions avec exactitude ou quand il faut mesurer des durées avec beaucoupde précision. Le micro de la Mega est équipé de quatre de ces modules (1, 3, 4 et 5)qui, en plus, ont chacun trois sorties au lieu de deux.

Le temporisateur/compteur 2 est un module à usage général. Il offre une résolutionde 8 bits, il dispose de deux sorties et il peut être cadencé par un quartz de montrede 32 768 Hz. Cela le rend particulièrement bien adapté à des applications qui ontbesoin de l’heure. Malheureusement, dans le monde d’Arduino, cette fonctionn’est pas exploitable car l’entrée du quartz est déjà occupée par le quartzde 16 MHz.

Pour les besoins d’Arduino, le temporisateur/compteur 0 est réservé aux fonctionsmillis, micros, delay et delayMicroseconds et il compte à une fréquence de presque1 kHz, 976,6 Hz pour être exact. À intervalle régulier, environ toutes les 42 ms, lecompteur de millisecondes est corrigé à cause de cette différence de fréquence. Lavaleur retournée par millis est toujours en retard, jusqu’à presque une millisecondeentière. Ce compteur n’est donc pas très précis. Un compteur de microsecondesproprement dit n’existe pas, cette valeur est calculée à chaque appel de la fonctionmicros. Contrairement au compteur de millisecondes, la valeur retournée parmicros est exacte (ou presque, car elle ne tient pas compte du temps nécessairepour exécuter la fonction). Vu l’imprécision de millis, la fonction delay utilisemicros. La fonction delayMicroseconds effectue ses propres calculs et ne dépendde personne. Elle est assez précise, sauf pour de tout petits délais de seulement uneou deux µs.

enarvuino_14x21.book Page 236 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.9.5 C’est qui, Émilie ?

237

9.5 C’est qui, Émilie ?

Sur le micro de la Uno, les compteurs/temporisateurs ont tous deux sorties et ilssavent tous faire de la MLI, ce qui explique les six sorties MLI utilisables par ana-logWrite. Le micro de la Mega ne possède pas seize de ces sorties comme tu pour-rais le croire, mais quinze, car la sortie supplémentaire du temporisateur/compteur 1 (par rapport à la Uno) partage une broche avec la deuxième sortie dutemporisateur/compteur 0. Note que la documentation d’Arduino a un peu de malà suivre l’évolution du matériel et du logiciel, une mise à jour ne sera pas du luxe.Au moment d’écrire ces lignes, elle affirme que la carte Mega n’a que douze sor-ties MLI (ce qui était le cas pour l’ancienne Mega).

9.5.1 Deux types de MLILes signaux MLI produits par analogWrite sont censés être indépendants de lasortie : quelle que soit la sortie MLI que tu utilises, le signal produit doit être lemême. Cependant ce n’est pas le cas. Bien que les compteurs/temporisateurs fonc-tionnent tous en mode 8 bits avec une horloge de 16 MHz / 64 = 250 kHz (diviseur(prescaler) de 64), ils ne produisent pas pour autant la même fréquence. Lesbroches 5 et 6 qui sont reliées au compteur 0 tournent à presque 977 Hz (16 MHz / 64 / 256), les autres produisent une fréquence d’un peu plus de 490 Hz (16 MHz / 64 / 255 / 2). Les signaux MLI sur les broches 5 et 6 (4 et 13 sur la Mega) sontplus rapides mais moins symétriques que les autres qui, eux, bénéficient d’uneoption du micro nommé MLI à phase correcte (Phase Correct PWM). Le tempori-sateur/compteur 0 fonctionne en mode MLI rapide (Fast PWM). Cette différenceest due au fait que le compteur 0 est aussi utilisé pour le compteur de millise-condes. Si tu utilises le compteur 0 en mode MLI à phase correcte, ce qui est toutà fait possible, le compteur de millisecondes ne fonctionnera plus, les valeurs four-nies par millis et micros seront fausses et delay sera trop lente.

Pour produire un signal MLI, le compteur est comparé à une valeur de seuil. Si lecompteur est en dessous de ce seuil, le signal MLI est 0 logique. Si le compteurdépasse le seuil, le signal MLI est 1 logique1. En mode MLI rapide, le compteurcompte de 0 à 255, puis repart de 0, car 255 + 1 = 0 pour un registre à 8 bits.L’horloge du compteur est donc divisée par 256. La forme d’onde produite par lecompteur est en dent de scie et les impulsions du signal MLI se trouvent toujoursà gauche de la valeur maximale du compteur. En revanche, en mode MLI à phasecorrecte, le compteur ne repart pas de 0, mais change de direction. Après 255, lavaleur suivante est 254 au lieu de 0. À chaque fois que le compteur atteint la valeur

1. Les niveaux peuvent être inversés.

enarvuino_14x21.book Page 237 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.9. Le temps est compté

238

maximale ou minimale, il change de direction. La forme d’onde produite par lecompteur est alors triangulaire. Du coup, le compteur croise deux fois la valeur deseuil, en montant et en descendant, avec comme résultat que les impulsions dusignal MLI sont maintenant centrées autour de la valeur maximale du compteur.La fréquence de ce signal est égale à un peu plus que la moitié de celle obtenueavec la MLI rapide, car l’horloge du compteur est dans ce cas divisée par 255 × 2.Pour mettre en évidence la différence entre les deux techniques, compare avec unoscilloscope les deux canaux du même module pendant qu’ils produisent deux rap-ports cycliques différents.

9.6 Le Maître du Temps

À part analogWrite, l’API d’Arduino n’offre pas d’autres fonctions pour joueravec des signaux MLI. C’est dommage, car le constructeur du micro est assez fierdes capacités MLI de ses AVR. Alors, pour mettre en valeur les efforts du fondeur,je te présente ici une application spectaculaire et unique au monde (restonsmodestes) : un émetteur de signal horaire DCF77 à signal MLI.

Les horloges radiopilotées se synchronisent sur le signal horaire DCF77 (ou unautre émetteur) qu’elles reçoivent par voie hertzienne. Les signaux horaires desdivers émetteurs, pas uniquement celui du DCF77, sont tellement peu protégés etleurs formats sont si bien documentés qu’ils forment des proies faciles pour desmalveillants. En effet, il n’est pas compliqué de réaliser son propre émetteur designal horaire compatible et d’embrouiller les horloges radiopilotées proches.

Figure 9-4 - La différence entre la MLI rapide (haut) et la MLI à phase correcte (bas).

enarvuino_14x21.book Page 238 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.9.6 Le Maître du Temps

239

Ainsi elles affichent l’heure que tu veux au lieu de l’heure absolue. L’utilisationdes brouilleurs de GPS ou téléphones portables est tout à fait légale sous certainesconditions, alors pourquoi pas un brouilleur de signal horaire ? C’est marrant,non ? Alors, comment faire ?

Le signal émis par l’émetteur DCF77 est assez simple. Il s’agit d’une porteuse, unsignal sinusoïdal à 77,5 kHz, modulée en amplitude par l’information1. Pourenvoyer un bit, l’amplitude de la porteuse est diminuée à 20% de sa valeur nonmodulée. La durée de la modulation détermine la valeur du bit. Un niveaulogique 0 a une durée de 100 ms, un niveau logique 1 dure deux fois plus long-temps, 200 ms. Plusieurs techniques peuvent être employées pour produire un telsignal, comme un oscillateur sinusoïdal précis suivi par un atténuateur à deuxniveaux (20% et 100%), contrôlé par un micro qui fournit les bits horaires. Or, pro-duire une fréquence de 77,5 kHz est tout à fait à la portée d’un micro et ce seraitdonc un peu dommage de ne pas profiter de cette capacité. Le micro de la carteArduino est cadencé à 16 MHz. Si nous divisons cette fréquence par 206, nousobtenons une fréquence de 77 670 Hz, soit une erreur de seulement 0,2%. Lesrécepteurs DCF77 du commerce ne sont probablement pas assez chatouilleux pourse laisser perturber par une si petite différence.

L’étape suivante est d’appliquer la modulation d’amplitude (MA, les anglophonesdisent AM, de amplitude modulation) à la porteuse. La solution qui vient à l’espritest un pont diviseur de tension avec deux résistances, mais elle nécessite unebroche supplémentaire du micro pour contrôler le diviseur. Or, il est possible defaire encore plus simple en utilisant la modulation de largeur d’impulsions ou MLI.À l’aide d’un « peu » de mathématique, l’analyse de Fourier en l’occurrence, il estpossible de démontrer que chaque signal périodique peut être construit à partird’une série de signaux sinusoïdaux. Le premier signal sinusoïdal dans la série estappelé le fondamental et sa fréquence est la même que celle du signal périodique.Les autres signaux sinusoïdaux sont les harmoniques. Leurs fréquences sont desmultiples entiers de la fréquence fondamentale et leurs phases et amplitudesdépendent de la forme d’onde du signal périodique. La suite des signaux sinusoï-daux forme ce que l’on appelle le spectre du signal périodique et, commel’empreinte digitale chez l’homme, il est unique pour chaque forme d’onde2. Ainsi

1. En réalité, le format n’est pas si simple que ça car le signal est aussi en partie modulé en phase par une séquence pseudo-aléatoire qui permet de corriger l’heure reçue en fonction de la distance entre l’émetteur et le récepteur. Heureusement pour nous, la grande majorité des récepteurs du commerce ne tiennent pas compte de cette information.

2. Si la valeur moyenne du signal périodique n’est pas égale à zéro, le spectre contiendra aussi une composante continue (0 Hz).

enarvuino_14x21.book Page 239 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.9. Le temps est compté

240

un signal carré contient uniquement des harmoniques dont les fréquences sont desmultiples impairs de la fréquence fondamentale. Dans notre exemple, nous pou-vons construire un signal carré à partir de signaux sinusoïdaux avec des fréquencesde 77,5 kHz, de 232,5 kHz (×3), de 387,5 kHz (×5) et ainsi de suite.

Quand le rapport cyclique du signal carré dévie des 50%, les harmoniques pairsapparaissent également, comme celui à 155 kHz (×2) ou celui à 310 kHz (×4). Ladistribution des amplitudes change aussi. Non seulement les amplitudes des har-moniques dépendent du rapport cyclique, mais aussi celle du fondamental. Elle estau maximum pour un rapport cyclique de 50% et elle diminue quand le rapportcyclique change. Nous pouvons exploiter cette caractéristique pour modulerl’amplitude du fondamental. Pour notre brouilleur de DCF77, il suffit de choisir unsignal rectangulaire avec un rapport cyclique en dessous de 50% et dont l’ampli-tude du fondamental est égale à seulement un cinquième de l’amplitude du fonda-mental du signal carré.

Quel rapport cyclique faut-il choisir ? Si tu es fort en maths, tu pourras le calculer,si tu ne l’es pas, comme moi, tu utilises ton oscilloscope ou multimètre. Il existeune autre solution : te procurer un logiciel d’analyse de Fourier (il y en a plein surl’internet) et essayer plusieurs signaux jusqu’à obtenir le résultat voulu. J’ai utiliséla méthode suivante :un filtre accordé sur la fréquence fondamentale permet d’extraire un beau signalsinusoïdal de 77,5 kHz modulé en amplitude. Ce filtre doit être sélectif sans pourautant être un filtre de compétition. Il doit filtrer tous les harmoniques à partir dupremier à 155 kHz. La modulation d’amplitude modifie aussi le niveau moyen dusignal, un filtre passe-bande qui par sa nature élimine le niveau moyen est donc lemeilleur choix. J’ai obtenu de bons résultats avec un filtre actif du quatrième ordre(figure 9-5). Avec un oscilloscope ou un multimètre connecté à la sortie du filtre,tu peux mesurer l’amplitude du fondamental pour des rapports cycliques différentset ainsi trouver la bonne valeur.

La dernière étape côté matériel consiste à équiper l’étage de sortie d’un amplifica-teur et d’une antenne. La fréquence sur laquelle émettent les horloges atomiquesest tellement basse qu’il faut une antenne immense pour obtenir une portéeexploitable. La longueur d’onde λ à 77,5 kHz est de 3 871 m et l’antenne opti-male de λ/4 fait donc presque 968 m de long. Même une antenne moins efficacede λ/20 nécessite toujours un câble, fil ou conducteur d’une longueur de presque200 m. Ce genre d’antennes peut être construit en roulant le conducteur autourd’un cadre pour obtenir une antenne… cadre. J’ai choisi une autre approche, beau-coup moins fatigante, puisque j’ai tout simplement cannibalisé l’antenne d’unmodule récepteur DCF77. C’est une antenne à barre de ferrite qui ne supporte pasde fortes puissances, car la ferrite sature rapidement, mais qui présente l’avantage

enarvuino_14x21.book Page 240 Mercredi, 9. avril 2014 8:30 08

Copyright Elektor International Media B.V.9.6 Le Maître du Temps

241

non négligeable d’être déjà accordée sur la bonne fréquence à l’aide d’un conden-sateur soudé sur la bobine et par le placement de la bobine sur la barre de ferrite.Avec cette antenne, j’ai obtenu une portée d’environ deux mètres avec un modulerécepteur DCF77 identique. Pour une horloge de commerce bon marché, la portéeétait de 20 cm. Pour améliorer la portée, un amplificateur de plusieurs dizaines dewatts et une bonne antenne d’émission sont nécessaires.

9.6.1 Émetteur DCF77 : MLI de haut volPour mon montage final, je n’ai utilisé ni filtre ni amplificateur. Puisque l’antenned’émission est un filtre LC et que le récepteur est équipé d’une antenne similaire,et puisque Dame Nature a tendance à atténuer les fréquences aiguës d’un signal,les harmoniques n’auront pas beaucoup d’influence sur le signal. Du coup, le rôlede l’amplificateur peut être endossé par le micro et j’ai pu connecter l’antenne à labroche 9 de la carte Arduino simplement à travers un condensateur pour bloquerla tension continue qui, dans ce montage, ne sert à rien.

Figure 9-5 - Un filtre passe-bande Bessel du quatrième ordre permet de visualiser sur un oscilloscope le fondamental d’un signal MLI. Ce filtre a été calculé pour une fréquence centrale de 77,5 kHz. Les valeurs entre parenthèses permettent de réaliser les valeurs non standard. Attention à l’alimentation asymétrique.

enarvuino_14x21.book Page 241 Mercredi, 9. avril 2014 8:30 08