Aduino : le guide complet

Pour ingénieurs, techniciens et bricoleurs

J.M. Hughes

Arduino : le guide complet

Traduction française publiée et vendue avec l’autorisation de O’Reilly Media, Inc. de Arduino: A Technical Reference ISBN 9781491921760 © 2016 John Hugues

© 2018 Éditions First, un département d’Édi8.

12, avenue d’Italie

75013 Paris – France

Tél. : 01 44 16 09 00

Fax : 01 44 16 09 01

Courriel : firstinfo@editionsfirst.fr

Site Internet : lisez.com

ISBN : 978-2-412-03437-8

ISBN numérique : 9782412037003

Dépôt légal : janvier 2018

Traduction de l’anglais : Olivier Engler

Mise en page : Pierre Brandeis

Cette œuvre est protégée par le droit d’auteur et strictement réservée à l’usage privé du client. Toute reproduction ou diffusion au profit de tiers, à titre gratuit ou onéreux, de tout ou partie de cette œuvre est strictement interdite et constitue une contrefaçon prévue par les articles L 335-2 et suivants du Code de la propriété intellectuelle. L’éditeur se réserve le droit de poursuivre toute atteinte à ses droits de propriété intellectuelle devant les juridictions civiles ou pénales.

Ce livre numérique a été converti initialement au format EPUB par Isako www.isako.com à partir de l'édition papier du même ouvrage.

Introduction

Depuis sa naissance en 2005, le projet électronique Arduino, un projet collaboratif ouvert dans l’esprit open source, est devenu l’un de ceux qui a rencontré la plus forte adhésion (certains vont jusqu’à prétendre que c’est celui qui a eu le plus grand succès). Grâce à la mise à disposition des schémas, de nombreuses cartes compatibles sont apparues dans différents pays du monde, et notamment l’Italie, le Brésil, la Chine, les Pays-Bas, l’Inde et les États-Unis. Une carte compatible Arduino peut se trouver pour environ 10 euros et l’environnement logiciel pour créer des programmes est disponible gratuitement. Au départ, toutes les cartes utilisaient l’un des microcontrôleurs de la famille AVR sur 8 bits (l’histoire des puces AVR est d’ailleurs intéressante en soi aussi). Depuis peu, l’équipe Arduino a commencé à proposer des cartes avec des unités centrales sur 32 bits, en utilisant le processeur ARM dans le modèle Due, et même une version à deux processeurs permettant d’utiliser Linux en même temps, le modèle Yún (sans compter le récent modèle Zero). Les cartes Arduino ont trouvé une utilisation dans des domaines très divers. Vous en trouverez dans les installations artistiques, dans la robotique, dans les systèmes de surveillance de l’environnement, et même dans les microsatellites appelés CubeSat qui peuvent être mis en orbite pour une fraction du coût d’un satellite habituel.

J’ai acheté ma première carte Arduino voici déjà quelques années (c’était une Duemilanove), d’abord par curiosité. J’ai en effet eu l’occasion de travailler auparavant avec de nombreux systèmes de développement basés sur des microcontrôleurs, et ce depuis les années 1980. J’ai ainsi connu les 6502, 6800 et 8051, puis les processeurs 8086, 80186 et les 68000. Pour programmer ces circuits, je devais utiliser soit le langage assembleur, soit le PL/M, les seuls langages disponibles pour les systèmes embarqués. Plus tard, j’ai pu travailler en langage C ou en Ada, car la puissance des microprocesseurs et la richesse des outils logiciels avaient suffisamment progressé. Dans tous les cas, je savais qu’il me fallait réunir énormément de documentation de référence : fiches techniques, gros manuels et guides de référence. Toute la documentation technique était habituellement livrée avec le circuit de développement et ses accessoires. L’ensemble tenait en général dans un grand carton, bien lourd.

Quelle ne fut donc pas ma surprise en recevant ma première carte Arduino. Une petite boîte qui ne contenait que la carte, un adaptateur secteur, quelques diodes LED, résistances et des bouts de fil. Aucun manuel, aucune fiche technique. Pas même un CD réunissant des documents au format PDF et des logiciels utilitaires. Il y avait une feuille dressant la liste de ce que devait contenir le colis et une adresse URL pour apprendre comment bien démarrer et trouver des liens pour télécharger les logiciels nécessaires. On peut dire que j’ai été interloqué.

Il faut dire aussi que j’étais totalement ignorant de l’histoire du mouvement Arduino, et du public auquel s’adressait ce projet. J’ai appris que les utilisateurs des cartes Arduino avaient un profil peu technique, ou pas technique du tout ; des gens qui voulaient faire des expérimentations de façon amusante, qui voulaient faire marcher des trucs. Autrement dit, les utilisateurs visés étaient d’abord des artistes et des bricoleurs, et non les ingénieurs avides de détails techniques et assoiffés de plannings, de spécifications et, bien sûr aussi, de manuels de référence.

À partir du moment où j’ai su cela, les choses sont devenues bien plus claires. J’ai beaucoup mieux compris la philosophie Arduino à la lecture du livre d’un de ses créateurs, Massimo Banzi (Démarrez avec Arduino, chez Dunod). Ce petit livre a constitué un excellent point de départ pour continuer dans ma recherche de détails. À la différence des fabricants de semi-conducteurs (les fondeurs de silicium) qui proposent des kits de développement, l’équipe Arduino n’est pas motivée pour vendre le maximum de puces. Ce qui l’intéresse, c’est d’aider les gens à être de plus en plus créatifs. Elle a choisi les microcontrôleurs de la gamme AVR parce qu’ils étaient très abordables et pouvaient facilement s’intégrer dans sa vision : proposer un appareil pouvant facilement servir de base pour des projets créatifs. Les contrôleurs AVR offrent suffisamment de puissance de traitement et de mémoire interne pour réaliser des choses intéressantes et assez complexes, ce qui les distingue des générations précédentes de microcontrôleurs qu’il fallait enrichir de différents outils de développement coûteux et qui embarquaient très peu de mémoire.

En complément des arguments de simplicité et de faible coût, un autre secret du succès de l’Arduino, peut-être le premier, est l’existence d’un outil logiciel de téléchargement des programmes sur la puce AVR, couplé à un atelier de création de programmes simple et enrichi de librairies de fonctions, le tout étant disponible gratuitement dans l’esprit open source et avec des licences de type Creative Commons. Ces choix sont cohérents avec la vision Arduino qui consiste à rendre l’utilisation des cartes la plus simple possible. Arduino pousse l’utilisateur à faire des essais en lui épargnant les détails techniques et en simplifiant le processus de création. Cette aide dans les premiers pas pousse les utilisateurs à s’amuser. Pour la première fois depuis bien longtemps, je me suis vu m’amuser à connecter des objets dans différentes combinaisons pour voir ce qu’il pouvait en résulter. J’aurais vraiment aimé que les cartes Arduino existent à l’époque où j’enseignais la conception des systèmes électroniques embarqués ; cela aurait évité à mes élèves bien des déceptions lorsqu’ils cherchaient à trouver leurs repères dans les pages de code en langage assembleur, les plans d’adressage mémoire et les schémas fonctionnels obscurs.

Depuis que j’ai reçu ma première carte Arduino, j’ai imaginé de nombreuses manières d’ajouter des composants à mes montages Arduino. Certains de mes projets m’ont vraiment étonné en termes de rapport entre coût et possibilités. Je suis ainsi devenu une sorte de « fondu d’Arduino » en achetant de nombreuses cartes d’extension (boucliers) et modules peu coûteux, obtenant ainsi une vraie ménagerie électronique. Cela dit, souvent, en ouvrant la petite boîte reçue par la poste, il m’a fallu constater qu’il n’y avait aucune documentation, pas même un petit schéma photocopié.

En tant qu’ingénieur, je suis souvent déçu d’acheter quelque chose d’intéressant, pour devoir constater qu’il n’y a aucune documentation. Cela m’oblige à me lancer dans une longue quête, afin de trouver un peu de documentation sur Internet, et dans une langue que je peux comprendre (donc par exemple pas en chinois). Parfois, la recherche ne donne rien. Je dois alors remonter aux fiches techniques des composants puis faire de la rétro-ingénierie pour essayer de comprendre le circuit. Parfois, l’information n’existe pas en tant que telle, et je dois chercher sur plusieurs sites Web. La situation s’améliore quelque peu, mais cela reste désagréable. Après plusieurs années de collecte de notes, d’adresses Web et de fiches techniques, j’ai décidé de tout réunir de façon structurée, donc dans un livre.

Que peut-on trouver dans ce livre qui ne se trouve pas déjà sur Internet ? Peu de choses, pour être honnête, mais j’espère que le livre vous évitera du temps perdu et des déceptions, et cela sans compter les informations originales que j’ai découvertes par moi-même. Les données techniques officielles sont celles du fabricant Atmel, celles de l’équipe Arduino et de quelques sources, certaines très connues, d’autres moins. Certains fournisseurs ne disposent que d’une page Web élémentaire, alors que d’autres offrent des liens vers d’autres sites pour la documentation. J’ai réuni dans ce livre toutes les données indispensables que j’ai pu trouver ou rédiger par rétro-ingénierie, en sorte de laisser le moins possible de zones d’ombre. J’ai voulu éviter aux autres de subir les mêmes déceptions au moment de trouver le détail qui leur manque au sujet d’une interface USB, d’une carte bouclier qui ne fonctionne pas correctement, ou encore la raison pour laquelle le joli petit capteur que je viens de dénicher sur le Web semble ne pas fonctionner du tout.

Ce livre est donc le fruit de mes attentes, celui dont j’ai toujours rêvé pour travailler avec les cartes Arduino et les boucliers. Je voulais que ce soit un objet physique que je puisse toujours garder à portée de main sur mon plan de travail. Il n’est en effet pas toujours pratique de devoir naviguer d’une page Web à l’autre pour vérifier une information, sans compter que l’accès à Internet n’est pas à toujours possible.

Imaginez que vous ayez à dépanner un appareil de collecte de données en haute montagne avec votre ordinateur portable et sans aucun réseau. Je veux pouvoir retrouver rapidement l’information qui me manque en travaillant avec les cartes Arduino et mes composants, quel que soit le lieu. Et ce genre de livre ne me semblait pas exister. J’espère que vous le trouverez aussi utile qu’il me l’a été lors de sa rédaction.

Lorsque vous saisissez le terme « Arduino » dans un moteur de recherche, vous obtenez des millions de réponses avec des sites qui proposent toutes sortes de capteurs de température ou d’humidité, des émetteurs à ultrasons, des cartes d’extension boucliers, des modules sans fil Bluetooth et ZigBee, etc. Un certain nombre de ces composants sont livrés sans aucune documentation, ou une documentation sommaire et parfois inexacte. N’en concluez pas qu’il ne faille pas vous approvisionner chez ces fournisseurs, d’autant que les prix sont généralement imbattables et la qualité de fabrication pas mauvaise. Mais comme toujours lorsque l’on s’apprête à acheter quelque chose, c’est au client de se méfier (on parle du principe de caveat emptor).

À qui s’adresse ce livre

Ce livre est d’abord destiné à ceux qui ont envie ou besoin d’obtenir des détails techniques. Ce sera par exemple le cas de ceux qui ont exploité le plus possible les livres d’initiation et les guides pratiques de création de projets. Si vous en êtes, il vous faut plus d’informations pour vous lancer dans un projet vraiment unique. Le livre s’adresse aussi aux ingénieurs et chercheurs qui envisagent d’utiliser une carte Arduino dans un montage expérimental de laboratoire. Le livre intéressera aussi ceux qui veulent installer une carte Arduino dans un avion radiocommandé, dans une station météorologique, et plus ambitieux encore, ceux qui cherchent à créer un microsatellite de type CubeSat.

Parmi les prérequis, il est conseillé d’avoir un minimum de connaissances des langages C et C++, une certaine idée du déplacement des électrons dans un circuit et un peu d’expérience dans le montage de circuits électroniques. Je donne dans l’Annexe D quelques conseils de lecture dans ces différents domaines.

Rappelons que les projets Arduino se situent à mi-chemin entre le monde de l’électronique et le monde de la programmation.

Description de ce livre

Ce livre est véritablement un manuel de référence, et j’ai tenté de le structurer pour vous permettre de trouver rapidement ce que vous cherchez. J’ai souvent donné les sources de mes informations.

En revanche, ce livre n’est pas un guide pratique. Je ne rappelle pas les principes de l’électronique et je ne décris pas les règles du langage C++ (celui qui permet de créer le code source des croquis qui sont les programmes Arduino). Vous trouverez déjà assez de livres d’initiation à l’électronique et à la programmation, de façon générale, ou plus spécialement dans l’environnement Arduino. Je fournis quelques suggestions à ce sujet dans l’Annexe D.

Ce livre n’est pas non plus un guide validé par l’équipe Arduino pour présenter ses produits. Il se fonde sur des informations que j’ai recueillies auprès de nombreuses sources différentes, certaines moins connues que d’autres, et j’ai ajouté mes propres notes, qui sont le fruit de mon expérience. Je suis donc seul responsable de toute erreur ou oubli.

Un peu de terminologie

C’est au début des années 1980 que l’on a commencé à vouloir distinguer les trois termes « processeur », « microprocesseur » et « microcontrôleur ». Les fabricants avaient besoin de classer leurs circuits intégrés en fonction de la quantité de circuits complémentaires qu’il fallait leur ajouter pour les rendre utiles. Les processeurs des grands systèmes, et les microprocesseurs qui animent les ordinateurs de bureau, ont tous besoin d’un certain nombre de composants périphériques pour fonctionner, notamment de la mémoire et des circuits d’entrées-sorties. En revanche, un microcontrôleur contient sur la même puce tous les composants dont il a besoin pour travailler. Souvent, les microprocesseurs ont besoin d’être associés à des cartes mémoire, alors que les microcontrôleurs se contentent de la mémoire qui est intégrée sur la même puce de silicium. Rares sont les contrôleurs qui peuvent utiliser de la mémoire complémentaire, externe au circuit.

Au long de ce livre, j’utilise les deux termes microcontrôleur et contrôleur dans le même sens. Le terme le plus exact est microcontrôleur, mais il s’agit d’abord d’un automate qui effectue un traitement sur des données, autrement dit une version un peu limitée des gros processeurs sur lesquels j’ai commencé à travailler voici bien longtemps. Tous ces circuits font le même travail, à des échelles et à des vitesses différentes.

N. d. T. : Un terme encore souvent utilisé pour traduire library est « bibliothèque ». J’opte dans ce livre pour le terme « librairie », tout aussi exact et plus proche de l’anglais. Vous trouverez encore le terme « bibliothèque » dans les menus de l’atelier de développement Arduino.

Contenu du livre

• Le Chapitre 1 propose un bref historique du mouvement Arduino et présente les microcontrôleurs AVR qui sont utilisés dans les cartes Arduino. J’ai expliqué les différences entre les produits qui sont compatibles au niveau matériel et ceux qui sont compatibles au niveau logiciel avec une carte Arduino officielle.

• La famille de microcontrôleurs AVR de la société Atmel fait l’objet du Chapitre 2. Il s’agit d’une présentation générale d’un circuit assez sophistiqué. J’y présente la logique des timers et chronomètres, le comparateur analogique, les entrées analogiques, l’interface de communication SPI et plusieurs autres sous-systèmes du circuit.

• Dans le Chapitre 3, nous entrons plus dans les détails des contrôleurs AVR utilisés dans les cartes Arduino, c’est-à-dire les trois modèles ATmega168/328, ATmega1280/2560 et ATmega32U4. En me basant sur les données du chapitre précédent, je fournis d’autres détails au sujet de l’architecture interne, des caractéristiques électriques et surtout du brochage des circuits intégrés.

• Le Chapitre 4 s’intéresse aux caractéristiques physiques et aux interfaces des cartes Arduino. J’y présente les interfaces USB, les circuits imprimés avec toutes leurs dimensions et le brochage des connecteurs.

• Ce qui distingue l’environnement de programmation Arduino des autres est le sujet du Chapitre 5. Je présente le concept de croquis Arduino et l’utilisation des langages C et C++ pour créer les programmes source appelés croquis. Je présente ensuite l’essentiel outil amorceur (bootloader) puis la fonction principale main(). Je montre enfin comment téléverser un programme Arduino vers le microcontrôleur.

• Dans le Chapitre 6, nous entrons dans les détails de la chaîne d’outils appelée avr-gcc. J’y montre comment programmer une carte Arduino sans utiliser l’atelier de développement Arduino IDE. Nous y découvrons aussi les fichiers de production Makefile et verrons rapidement le langage assembleur. Le chapitre se termine par une présentation des outils permettant de téléverser le code exécutable.

• Le Chapitre 7 s’intéresse aux librairies de fonctions standard qui sont livrées avec l’atelier Arduino (on parle également de bibliothèques). L’environnement Arduino est livré dès le départ avec un grand nombre de librairies de fonctions, et de nouvelles librairies sont ajoutées sans cesse. C’est l’endroit à consulter dès que vous avez besoin de savoir s’il existe un module de librairie pour gérer un capteur ou pour réaliser un traitement particulier.

• Le Chapitre 8 passe en revue une grande sélection de cartes d’extension boucliers pour Arduino. Nous y verrons les catégories les plus utilisées, comme les cartes de mémoire flash, celles de prototypage, les cartes d’entrées-sorties, les cartes de communication Ethernet, Bluetooth et ZigBee, les contrôleurs de servomoteurs et de moteurs pas à pas et les afficheurs à diodes LED ou LCD. Nous verrons également comment combiner plusieurs boucliers et découvrirons quelques astuces pour exploiter vos boucliers le plus efficacement possible.

• Dans le Chapitre 9, nous passons en revue un grand nombre de composants utilisables avec une carte Arduino, qu’il s’agisse de capteurs, de relais, de claviers et d’autres éléments qui n’ont pas été conçus spécialement pour Arduino, mais qui sont tout à fait exploitables. Dans la plupart des cas, je fournis les informations de brochage et les schémas.

• Malgré un choix énorme, vous ne trouverez pas de bouclier pour tous vos besoins. Dans ce cas, le Chapitre 10 propose une solution. Nous y verrons en effet comment concevoir puis construire votre propre bouclier. Nous en profiterons pour voir comment utiliser un microcontrôleur AVR sans carte Arduino, tout en profitant malgré tout de l’atelier de développement Arduino.

• Les trois Chapitres 11, 12 et 13 proposent plusieurs projets pour démontrer les possibilités des contrôleurs AVR et des cartes Arduino. Vous y verrez comment exploiter une carte Arduino dans certaines situations. Il ne s’agit pas de guides pas à pas pour construire les projets. Néanmoins, rien ne vous empêche de réaliser ces projets, ou de vous en servir comme point de départ pour les vôtres. Pour chaque exemple, je commence par une description théorique, des schémas, une nomenclature, le dessin du circuit imprimé si nécessaire et une visite rapide du logiciel permettant de faire fonctionner le projet. Ce livre est principalement orienté vers le matériel Arduino, c’est-à-dire les modules, les capteurs et les composants. Autrement dit, les logiciels présentés ne servent qu’à mettre l’accent sur certains points précis, et ne constituent pas des exemples complets et prêts à être exécutés. Vous trouverez cependant le code source de tous les exemples dans la page dédiée à ce livre sur le site de l’éditeur, ainsi que sur le site de référence GitHub.

Dans le Chapitre 11, nous découvrons un générateur de signal, appareil toujours pratique lorsque l’on passe du temps avec des circuits électroniques. Le projet permet de produire des ondes carrées et sinusoïdales à différentes fréquences, d’utiliser la tension de déclenchement, et même de créer des impulsions à largeur variable. Dans le Chapitre 12, nous voyons comment créer un thermostat intelligent que vous pouvez ensuite utiliser avec une climatisation domestique. Au lieu d’acheter un thermostat électronique, vous le construisez vous-même pour qu’il se comporte exactement comme vous le désirez. Nous verrons comment mettre en place des capteurs de température et un capteur d’humidité et comment contrôler le ventilateur de la climatisation afin de jouir d’une ambiance confortable sans provoquer sans cesse le redémarrage du compresseur ou du radiateur. Dans le Chapitre 13, je prends comme prétexte la fabrication d’un pupitre de déclenchement de séquences, par exemple pour une fusée miniature, avec toutes les mesures de sécurité envisageables. Le projet est utilisable dans tout domaine qui demande un séquencement précis de processus, que ce soit sur une ligne de production industrielle ou dans des robots de manipulation de laboratoire. Le chapitre commence par quelques concepts essentiels en ingénierie en montrant comment rédiger un jeu d’exigences.

• L’Annexe A présente les outils et accessoires dont vous aurez besoin pour monter vos circuits électroniques.

• L’Annexe B est une série de tableaux qui détaille les registres de contrôle des trois modèles de microcontrôleur ATmega168/328, ATmega1280/2560 et ATmega32U4.

• Dans l’Annexe C, je propose une liste de fabricants et de distributeurs de cartes Arduino et de produits compatibles. La liste est loin d’être exhaustive, mais elle permet de commencer à s’approvisionner.

• L’Annexe D donne quelques suggestions de livres concernant non seulement Arduino, mais également l’électronique et la programmation C et C++.

• Enfin, l’Annexe E présente quelques outils de développement logiciel pour les cartes Arduino et les microcontrôleurs AVR.

Parrainages

En dehors des nécessaires références à l’équipe Arduino et au site officiel arduino.cc, je ne suis engagé avec personne en particulier dans ce livre, tout du moins jamais de façon volontaire. Je fais référence à différents fabricants et fournisseurs, et à certains auteurs, mais j’ai cherché à rester impartial, et je n’ai pas d’inclinaison particulière pour l’un ou l’autre. Mes seuls critères de sélection sont le fait que j’ai utilisé effectivement un bouclier, un module, un capteur ou une carte Arduino, dans certains cas au minimum pour vérifier qu’il fonctionne. Les marques déposées ne sont citées dans ce livre que pour référence.

Au niveau des illustrations, j’ai tenté d’utiliser les miennes, montrant mes propres outils, circuits, modules et autres composants. Lorsqu’une photographie laisse voir une marque en particulier, cela ne signifie nullement que c’est la seule disponible, seulement que c’était celle dont je disposais au moment de l’écriture. Certaines images sont utilisées après accord de leur propriétaire et d’autres images sont dans le domaine public ou sont diffusées sous le régime de la licence Creative Commons (CC). Tous les schémas et diagrammes sont produits spécifiquement pour ce livre. Je suis le seul responsable des erreurs et oublis dans ces illustrations.

Conventions de ce livre

Voici les conventions utilisées dans ce livre au niveau de sa présentation :

• Les mots en anglais (ou autre langue étrangère) ainsi que les noms et formats de fichiers sont en italique.

• Tous les éléments de code (programmes, listings, fonctions, mots-clés, etc.) sont écrits en police à espacement fixe, et les variables en police à espacement fixe en italique.

• Les URL et adresses e-mail sont écrites dans une police à espacement fixe et soulignées.

Vous trouverez également les paragraphes suivants tout au long du livre :

Les paragraphes ainsi singularisés contiennent une astuce ou une suggestion.

Cet élément correspond à une note générale. C’est là que vous trouverez notamment les commentaires du traducteur (N.d.T.).

Ce symbole indique une mise en garde.

Fichiers source des exemples

Pour obtenir les fichiers de code source, rendez-vous sur le site lisez.com, puis cherchez le titre de ce livre ou son code ISBN (9782412034378). Dans la page du livre, vous trouverez une rubrique Contenu additionnel, avec un bouton Télécharger, qui vous permettra de rapatrier les fichiers sur votre ordinateur.

CHAPITRE 1 La famille Arduino

Ce chapitre propose un historique rapide du mouvement Arduino ainsi qu’une présentation des principales cartes apparues depuis 2007. Il ne s’agira pas d’un inventaire exhaustif ; je présente aussi quelques cartes compatibles produites par d’autres sociétés qu’Arduino. L’objectif est de montrer comment se différencient les principales catégories de cartes, tant au niveau de l’encombrement physique que des possibilités du microcontrôleur. Nous terminerons par un tour d’horizon des domaines d’application possibles pour les cartes Arduino.

Dans le Chapitre 2, nous verrons quelles sont les fonctions internes d’un microcontrôleur AVR. Le Chapitre 3 présente les trois principaux microcontrôleurs utilisés dans les cartes Arduino. Vous découvrirez dans le Chapitre 4 les caractéristiques physiques des principales cartes Arduino (à l’exception de la carte hybride Yún).

Un historique résumé

Au début des années 2000, Hernando Barragan avait créé un langage de programmation simplifié et l’avait baptisé Wiring. En 2005, Massimo Banzi et David Cuartielles ont conçu un appareil programmable facile à utiliser pour la conception et la réalisation de toutes sortes de projets artistiques interactifs. Le fruit de ce travail, réalisé à l’institut de design interactif d’Ivrea, en Italie, a été nommé Arduino. David Mellis a écrit le logiciel de l’atelier Arduino, directement inspiré de Wiring. Peu de temps après, Gianluca Martino et Tom Igoe sont venus rejoindre leurs collègues, portant ainsi l’équipe fondatrice à cinq personnes. Le produit devait être simple d’emploi, facile à connecter à toutes sortes de capteurs et d’actionneurs (des relais, des moteurs, et des capteurs) et surtout facile à programmer, tout en restant bon marché, car les étudiants et les artistes ne sont pas réputés pour être riches.

Le choix du microcontrôleur s’est arrêté sur la famille de microcontrôleurs 8 bits AVR d’Atmel. Un microcontrôleur (MCU) est une puce qui réunit toutes les fonctions requises avec des connexions simplifiées. Les fondateurs ont alors écrit le microgiciel amorceur (bootloader) qui permet le chargement du programme puis de l’outil de création fonctionnant sur une machine hôte sous Windows, macOS ou Linux pour rédiger et compiler les programmes. Cet outil est l’atelier Arduino IDE (Integrated Development Environment). Les fondateurs ont décidé de donner aux fichiers contenant le code source le nom de croquis, pour bien montrer que cette écriture devait rester simple comme une esquisse et pouvoir être peaufinée par étapes successives. Tout cela forme l’environnement Arduino.

Au cours de la première dizaine d’années de son existence, Arduino a pris de l’ampleur dans plusieurs directions. Certaines cartes apparues depuis sont plus petites que la carte initiale et d’autres plus grandes. À chaque carte correspond un domaine d’application. Toutes les cartes partagent la même librairie de fonctions open source, le même jeu d’outils avr-gcc et le même logiciel amorceur/chargeur préimplanté dans le microcontrôleur de chaque carte Arduino.

Les microcontrôleurs sont ceux de la société Atmel Corporation de San José en Californie. Presque toutes les cartes Arduino utilisent un modèle sur 8 bits. (Le modèle Due embarque un processeur assez différent, un Cortex ARM 32 bits).

Je ne parle pas du Due dans ce livre, car son processeur est très différent de ceux de la famille AVR. Sa description sera mieux à sa place dans un livre consacré aux microcontrôleurs bâtis sur l’approche ARM, comme le Cortex.

Selon les termes mêmes de l’équipe fondatrice Arduino, une carte Arduino peut se résumer à un circuit imprimé sur lequel est soudé un microcontrôleur de la famille AVR Atmel. Ce qui distingue une carte Arduino des nombreuses autres cartes dites de développement est son environnement logiciel. Tous les utilisateurs Arduino profitent du même environnement, qui constitue la pierre d’angle et la raison principale du succès d’Arduino. Je présente l’atelier de développement Arduino dans le Chapitre 5, ainsi que les librairies essentielles et l’indispensable logiciel amorceur/chargeur. Dans le Chapitre 6, je montre néanmoins comment créer du logiciel pour un microcontrôleur AVR sans utiliser l’atelier Arduino, donc avec des outils sur ligne de commande.

La gamme de cartes Arduino

Année après année, les concepteurs d’Arduino ont lancé sur le marché un assez grand nombre de cartes différentes. La première carte ayant rencontré un certain succès est la Diecimila, de 2007. Les cartes suivantes ont tenu compte de l’apparition de nouveaux modèles de microcontrôleurs dans la famille AVR. En 2012 a été lancée la Due, dont j’ai déjà parlé, et qui est bâtie sur un processeur totalement différent. Certaines cartes, comme la LilyPad et la Nano n’ont ni le même encombrement physique, ni le même brochage. Elles sont miniaturisées, et destinées à des domaines assez particuliers : la LilyPad est prévue pour être intégrée à des vêtements interactifs ; la Esplora est destiné aux équipements portatifs et les trois cartes Mini, Micro et Nano sont, comme leur nom l’indique, destinées aux projets devant être les moins encombrants possibles.

De nouveaux modèles de cartes Arduino sont lancés tous les ans, et la liste que je propose ici n’est par définition pas complète. Les plus récentes cartes tirent avantage de processeurs plus puissants avec plus de mémoire et de meilleures fonctions d’entrées-sorties. Cependant, les nouvelles cartes maintiennent une compatibilité dès que possible avec les anciennes cartes au niveau des connecteurs, afin de pouvoir utiliser les nombreuses cartes d’extension disponibles, cartes que l’on appelle boucliers, car elles s’enfichent par-dessus la carte Arduino. La compatibilité est également recherchée afin de pouvoir utiliser les mêmes capteurs, relais et actionneurs. Le Tableau 1.1 offre une sélection de cartes apparues depuis 2007. En général, les cartes les plus récentes permettent d’utiliser les fichiers de code source ou croquis des modèles antérieurs, parfois au prix de quelques adaptations ou d’une nouvelle version d’une librairie de fonctions. En revanche, les croquis écrits pour une carte récente ne fonctionnent pas toujours avec une carte plus ancienne.

Tableau 1.1 : Sélection de cartes Arduino.

Carte
Année
Microcontrôleur
Carte
Année
Microcontrôleur

Diecimila

2007

ATmega168V

Mega 2560

2010

ATmega2560

LilyPad

2007

ATmega168V/ATmega328V

Uno

2010

ATmega328P

Nano

2008

ATmega328/ATmega168

Ethernet

2011

ATmega328

Mini

2008

ATmega168

Mega ADK

2011

ATmega2560

Mini Pro

2008

ATmega328

Leonardo

2012

ATmega32U4

Duemilanove

2008

ATmega168/ATmega328

Esplora

2012

ATmega32U4

Mega

2009

ATmega1280

Micro

2012

ATmega32U4

Fio

2010

ATmega328P

Yún

2013

ATmega32U4 + Linino

Le Tableau 1.1 n’est pas un guide d’achat, mais un tour d’horizon des cartes apparues en une dizaine d’années. Vous constatez par exemple que les deux années 2007 et 2008 ont vu apparaître la LilyPad, les trois cartes miniatures Nano, Mini et Mini Pro et la Duemilanove qui a succédé à la carte fondamentale Diecimila. Il n’y a pas de différence physique entre les deux, mais la Duemilanove apporte des améliorations au niveau de l’alimentation, par exemple une commutation automatique entre l’alimentation par la prise USB et celle par une source extérieure en courant continu. Les plus récentes éditions de la Duemilanove embarquent le nouveau microcontrôleur ATmega328, qui offre plus de mémoire pour le programme.

Je n’ai pas cité dans ce tableau l’Arduino Robot qui est un circuit imprimé équipé de moteurs et de roues. La carte Yún est particulière, car elle embarque simultanément un microcontrôleur ATmega32U4 et un processeur MIPS Atheros AR9331 qui permet de faire fonctionner une version du système Linux, dans la variante OpenWrt. Je ne décrirai pas la partie Linux de cette carte hybride, mais il est bon de savoir que la partie Arduino est tout à fait standard, puisque basée sur une carte Leonardo. Si vous avez envie d’en savoir plus sur la carte Yún, voyez la page qui lui est consacrée sur le site officiel Arduino.cc.

Dans les lignes du Tableau 1.1, j’ai parfois indiqué deux microcontrôleurs pour la même carte ; cela signifie qu’une nouvelle édition de la carte a adopté un microcontrôleur plus récent. La première version de la Duemilanove était par exemple équipée d’un ATmega168 alors que les versions plus récentes hébergent un ATmega328. La seule différence notable entre les deux est le doublement de la mémoire interne.

Les cartes Arduino apparues plus récemment que sont la Leonardo, la Esplora, la Micro et la Yún utilisent toutes le contrôleur ATmega32U4 qui réunit un ATmega328 et un composant pour gérer l’interface USB-série. Cela permet d’éliminer un des circuits intégrés complémentaires de la carte Uno ou Duemilanove.

L’interface de programmation est un peu différente pour les cartes équipées du ATmega32U4, mais ces différences ne se feront pas sentir pour la plupart des utilisateurs.

Découverte des cartes Arduino

Les Tableaux 1.2 à 1.5 montrent à quoi ressemblent un certain nombre de cartes Arduino, qu’elles soient encore commercialisées ou pas. L’objectif est de vous montrer la grande diversité de formats des cartes Arduino.

Tableau 1.2 : Aspect de quelques cartes Arduino au format de base.

Type
Année de lancement

Diecimila

2007

Duemilanove

2008

Uno (R3 version)

2010

Ethernet

2011

Leonardo

2012

Tableau 1.3 : Aspect de quelques cartes Arduino au format Mega.

Type
Année de lancement

Mega

2009

Mega 2560

2009

Mega ADK

2011

Tableau 1.4 : Aspect de quelques cartes Arduino miniatures.

Type
Année de lancement

Nano

2008

Mini

2008

Fio

2010

Micro

2012

Tableau 1.5 : Aspect de quelques cartes Arduino à format spécial.

Type
Année de lancement

LilyPad

2007

Esplora

2012

Une carte Arduino n’est pas très encombrante. Le format dit de base, qui est celui auquel tentent de se conformer les cartes d’extension appelées boucliers (shields), que je présente dans le Chapitre 8, est de 53 mm sur 69. La Figure 1.1 montre une carte au format de base et une carte au format étendu Mega. La Figure 1.2 montre une carte miniature Nano enfichée sur une plaque d’essai sans soudure.

Figure 1.1 : Tailles comparées de deux cartes Arduino.

Figure 1.2 : Vue d’une carte Arduino Nano posée sur une plaque d’essai.

Vous trouverez dans le Chapitre 4 les dimensions exactes et les brochages complets d’un grand nombre de cartes Arduino. Sachez que la carte Nano, même si elle est bien plus petite, offre les mêmes possibilités qu’une Duemilanove, sauf qu’elle ne possède pas l’encombrant connecteur USB de type B, bien pratique. Cette carte miniature est donc d’abord destinée à être installée une fois pour toutes quelque part, en prenant le moins de place possible. Elle servira donc par exemple pour collecter des données sur l’environnement, dans une station météo ou une bouée en plein océan, pour recueillir les données en vol pour un modèle réduit volant, pour un système d’alarme, ou pour une machine à café intelligente.

Cartes compatibles Arduino

Les cartes officielles Arduino offrent déjà un vaste choix, mais s’y ajoutent également des cartes produites par d’autres sociétés, qui sont compatibles soit au niveau matériel, soit au niveau logiciel seulement. Pour qu’une telle carte soit compatible, elle doit être dotée dans le microcontrôleur d’un logiciel amorceur Arduino, ou un équivalent. Elle doit aussi pouvoir être programmée avec l’atelier Arduino, par sélection du modèle de carte compatible dans la liste déroulante des menus de l’atelier.

Cartes compatibles au niveau matériel

Une carte est dite compatible Arduino au niveau matériel lorsque les broches d’entrées-sorties sont strictement les mêmes que sur l’un des formats de carte Arduino officiels. Le résultat est une carte compatible qui peut normalement recevoir n’importe quelle carte bouclier prévue pour Arduino et n’importe quel module additionnel. La section sur l’utilisation du nom Arduino un peu plus loin dans ce chapitre donne des explications complémentaires.

La plupart des cartes compatibles au niveau matériel offrent le même aspect que les cartes Arduino originales, sauf qu’elles n’ont pas le droit de porter ni le logo Arduino, ni les mêmes légendes sur le circuit imprimé. Certaines cartes compatibles n’offrent pas le même aspect, mais restent compatibles au niveau des connecteurs, pour accepter les mêmes boucliers Arduino. Certaines cartes offrent un plus grand nombre de connexions, ce qui est le cas de la version SainSmart du modèle Uno qui offre plus d’entrées-sorties. Le Tableau 1.6 cite quelques noms de cartes compatibles Arduino. Vous en trouverez bien d’autres sur le marché.

Tableau 1.6 : Cartes compatibles Arduino au niveau matériel.

Nom
Type
Origine

SainSmart UNO

Clone d’Uno

Chine

SainSmart Mega2560

Clone de Mega 2560

Chine

Brasuino

Similaire à l’Uno, avec quelques retouches.

Brésil

Diavolino

Clone en kit

États-Unis

Notez bien que la Diavolino est un kit qu’il faut monter.

Cartes compatibles au niveau logiciel

Vous trouverez un encore plus grand nombre de cartes qui sont compatibles au niveau du logiciel, parce qu’elles utilisent l’amorceur/bootloader Arduino et l’environnement de développement, sans être compatibles au niveau des connexions physiques. Vous pouvez ainsi créer vos programmes avec les mêmes outils de développement, mais vous aurez à travailler avec des connecteurs différents, au lieu des deux connecteurs habituels qui sont la marque de fabrique Arduino. Même un projet assez différent, s’il est basé sur un microcontrôleur AVR, peut être considéré comme compatible au niveau logiciel dès que le microcontrôleur contient l’amorceur Arduino.

En effet, l’élément central d’une carte Arduino est le microcontrôleur et le logiciel amorceur/ chargeur. Vous pourrez donc considérer qu’un circuit intégré AVR contenant le microgiciel Arduino et enfiché sur une plaque d’essai est déjà une carte compatible Arduino. Voilà pourquoi il est possible d’acheter dans le commerce des microcontrôleurs AVR de chez Atmel sur lesquels a déjà été implanté dans la mémoire flash ce fameux logiciel amorceur (bootloader) qui permet de téléverser le programme depuis l’atelier Arduino. Dans le Chapitre 5, nous verrons comment implanter le logiciel amorceur dans le microcontrôleur.

Certaines cartes officielles Arduino ne sont pourtant pas compatibles au niveau matériel. C’est le cas des cartes miniatures Mini, Micro, Nano, LilyPad et de la carte spécifique Esplora. Vous ne pouvez pas enficher par-dessus un des boucliers standard. Pourtant, ce sont des cartes Arduino, et elles sont compatibles au niveau logiciel avec l’atelier Arduino.

Un exemple de matériel compatible au niveau logiciel tout en n’étant pas fabriqué par Arduino est la Boarduino d’Adafruit. Cette carte, beaucoup plus longue que large, est prévue pour être enfichée dans une plaque d’essai sans soudure, un peu comme un circuit intégré à 40 broches. Il en existe deux variantes : DC et USB. La version DC ne comporte pas de circuit de gestion USB, il faut donc lui en ajouter un. Une autre carte compatible au niveau logiciel est la DragonFly de la société Circuit Monkey. Elle utilise des connecteurs standard Molex et non des broches mâles et femelles comme les cartes Arduino. Elle est d’abord prévue pour les environnements devant supporter de fortes vibrations, comme les drones et les robots.

Enfin, la carte hollandaise Raspduino est prévue pour être enfichée sur une carte de micro-ordinateur Raspberry Pi, et offrir les mêmes fonctions qu’une carte Arduino Leonardo. Le résultat ressemble beaucoup à la carte hybride Yún, sans être interchangeable. Le Tableau 1.7 présente quelques cartes compatibles au niveau logiciel avec Arduino.

Tableau 1.7 : Cartes compatibles au niveau logiciel.

Nom
Type
Origine

Boarduino DC

Pour enfichage sur plaque d’essai

États-Unis

Boarduino USB

Comme la précédente

États-Unis

DragonFly

Connexions par connecteurs de type Molex

États-Unis

Raspduino

Pour enfichage sur une carte Raspberry Pi

Pays-Bas

De nombreuses autres cartes sont disponibles dans cette catégorie. Une des raisons est la facilité d’intégration d’un microcontrôleur AVR. À partir du moment où le microcontrôleur contient le microgiciel amorceur Arduino, la programmation est grandement simplifiée, ce qui ouvre de nombreux horizons.

Les conventions autour du nom Arduino

Le schéma du circuit imprimé et tous les logiciels Arduino sont disponibles librement, sur le modèle open source. Cependant, les fondateurs d’Arduino ont déposé le mot « Arduino » et le logo pour leur seul usage. Cela explique pourquoi vous rencontrerez de nombreuses cartes qui ne portent pas le nom Arduino, parce que cela leur est interdit, mais qui sont compatibles. Souvent, les créateurs de ces cartes utilisent dans leur nom le suffixe « ...duino » ou même « ino ». C’est par exemple le cas de Freeduino, Funduino, Diavolino, Youduino, etc. Les cartes vendues par SainSmart utilisent directement le nom du modèle de carte, comme Uno ou Mega2560.

En 2015 et 2016, un conflit juridique a opposé les fondateurs de la société Arduino LLC, et la société sous-traitante qui fabriquait les circuits, Arduino Srl. C’est pour cette raison que les cartes officielles de la première des deux sociétés n’ont pas le droit d’être vendues sous le nom Arduino en dehors des États-Unis, donc en Europe. Elles portent ici le nom Genuino, mais ce sont strictement les mêmes.

Vous rencontrerez également des cartes qui sont présentées comme Arduino officielles, qui sont des copies, ou des contrefaçons du logo Arduino. En effet, le masque qui permet d’imprimer le logo et les informations officielles sur chaque carte Arduino font l’objet de droits d’auteur, et ce masque n’est pas librement utilisable d’après les conditions imposées par les gens d’Arduino. Un des fondateurs, Massimo Banzi, a d’ailleurs dédié une section de son blog à ces cartes non autorisées (massimobanzi.com). Ce qu’il pense de ces contrefaçons de cartes officielles est intéressant. Cherchez par exemple le lien « hall of shame » (galerie de la honte).

Vous pouvez librement réutiliser les schémas, le code du microgiciel amorceur et même celui de l’atelier Arduino IDE pour créer votre propre version d’une carte Arduino. Tout est open source. Ce que vous n’avez pas le droit de faire, c’est de donner à votre produit le nom Arduino, ni d’utiliser les éléments graphiques distinctifs d’Arduino.cc, sauf si vous leur demandez la permission d’abord.

Que faire avec une carte Arduino ?

Non seulement l’atelier Arduino rend la programmation beaucoup plus simple, mais les microcontrôleurs AVR sont également très versatiles. Les nombreux boucliers d’extension disponibles (nous les verrons dans le Chapitre 8) et l’énorme choix de capteurs et d’actionneurs bon marché (décrits dans le Chapitre 9) permettent d’envisager une très vaste gamme d’applications avec Arduino. Il vous suffit de bien tenir compte de trois contraintes :

• Quantité d’espace mémoire. Les microcontrôleurs AVR n’ont pas beaucoup de mémoire pour le code exécutable et les variables. La plupart des modèles ne permettent pas d’augmenter cette quantité initiale. Les deux modèles ATmega32 et ATmega128 peuvent utiliser de la mémoire externe, mais cela rend inutilisables les fonctions d’entrées-sorties des broches correspondantes. Par principe, une carte Arduino n’est pas prévue pour recevoir de la mémoire supplémentaire. Le contrôleur est destiné à gérer les entrées-sorties, dans des programmes assez courts. Il n’a jamais été question pour les contrôleurs AVR de rivaliser avec les micro-ordinateurs qui possèdent des gigaoctets de mémoire vive et un disque dur spacieux. D’ailleurs, il existe des cartes basées sur un processeur Intel qui correspondent plus à cette idée de PC miniature, mais jamais une telle carte ne pourra être implantée dans une petite boîte, dans un morceau de tube en PVC scotché contre un tronc d’arbre, dans un petit robot ou à l’intérieur du corps d’une fusée en modèle réduit. Tous ces domaines conviennent parfaitement à une carte Arduino.

• Performances. La deuxième des trois contraintes est la vitesse d’exécution. La vitesse d’horloge d’un contrôleur AVR va de 8 à 20 MHz (je donne des détails dans le Chapitre 4). C’est de l’ordre de 100 fois moins rapide qu’un ordinateur de bureau actuel. Il y a cependant deux différences importantes : tout d’abord, un contrôleur AVR fonctionne avec un jeu d’instructions réduit RISC. Deuxièmement, dans le monde réel des événements physiques, les choses ne surviennent pas à une vitesse telle qu’un microcontrôleur ne puisse pas en garder le contrôle. À votre avis, à quelle fréquence faut-il lancer une mesure de la température ambiante pour modifier éventuellement le réglage d’un thermostat ? Sans doute qu’une fois par seconde est inutilement fréquent. En pratique, il suffit d’interroger le capteur toutes les 5 ou 10 secondes. Pour qu’il puisse éviter les obstacles, combien de fois par seconde un robot doit-il émettre une impulsion ultrasonore pour les détecter à temps ? À moins que le robot se déplace très vite, une impulsion tous les dixièmes de seconde devraient largement suffire. Pour un processeur AVR qui fonctionne à 16 MHz comme celui du Leonardo, il reste environ 1 million de cycles d’horloge entre deux émissions d’une impulsion, et tous ces cycles sont disponibles pour d’autres traitements. Ajoutons qu’un microcontrôleur AVR est conçu pour exécuter la plupart des instructions en un ou deux cycles d’horloge. Il reste donc largement assez de puissance de traitement pour faire exécuter votre programme entre deux palpations de l’environnement par ultrasons.

• Ampérage supportable. La troisième contrainte concerne l’alimentation électrique. Une carte Arduino est essentiellement un circuit imprimé sur lequel est installé un microcontrôleur AVR. Il n’y a aucune électronique intermédiaire pouvant servir de tampon mémoire (buffer) ou d’amplification du signal. Si vous ne prenez pas vos précautions avant d’alimenter un composant extérieur en entrée ou en sortie, vous pouvez aisément faire passer un courant trop important par le microcontrôleur, et le détruire en un instant. Tenez également compte du fait que certains des modèles AVR utilisent des entrées-sorties en 3,3 V et non en 5 V, qui est la règle. Si vous connectez à un équipement à transistors fonctionnant avec 5 V un équipement qui attend 3,3 V, vous maltraitez le matériel, et vous risquez même de déclencher des émanations de fumée fatales.

Une fois ces quelques contraintes bien posées, voici une brève sélection des domaines d’application possibles d’une carte Arduino :

• Surveillance du monde physique

— Station de météo automatisée

— Détecteur de foudre

— Suivi du soleil pour des panneaux solaires

— Surveillance de radiations

— Détection automatique d’animaux sauvages

— Systèmes d’alarme domestiques ou d’entreprise

• Pilotage de petit matériel

— Petits robots

— Fusées en modèle réduit

— Avions radiocommandés

— Drones et quadricoptères

— Contrôle de machines-outils à commande numérique

• Automatisation à petite échelle

— Contrôle de serres automatisé

— Contrôle d’aquarium

— Contrôle d’échantillons de laboratoire

— Étuves de précision

— Systèmes de test électronique automatisé

• Performances artistiques

— Contrôle dynamique d’éclairage

— Contrôle dynamique de musique

— Structures climatiques

— Installations artistiques interactives

Nous verrons dans les Chapitres 11, 12 et 13 des applications précises : un thermostat, un générateur de signal et un système de contrôle de déclenchement d’événements. Les possibilités ne sont limitées que par votre imagination. N’essayez pas de faire faire à une carte Arduino les mêmes traitements qu’un ordinateur de bureau. En revanche, n’hésitez pas à intégrer une carte Arduino dans toutes sortes d’applications, car c’est exactement ce dont rêvent les fondateurs d’Arduino.

Pour aller plus loin

Dans ce chapitre, je n’ai présenté qu’une courte sélection des cartes Arduino et compatibles disponibles. Pour en savoir plus, reportez-vous à l’acte à la page Wikipédia consacrée aux cartes Arduino, et bien sûr au site officiel Arduino, à l’adresse arduino.cc.

Consultez également les annexes pour trouver d’autres liens Web et des conseils de lecture.