Introduction
Arduino est un constructeur de cartes électroniques matériellement libres (les plans et les
schémas des cartes sont disponibles gratuitement, vous pouvez même en fabriquer une
vous-même), sur lesquelles se trouve un microcontrôleur programmable. Le but d’un
projet à base d'Arduino est de programmer celui-ci pour qu’il analyse et qu’il produise des
signaux électriques. Tout simplement. Vous pouvez par exemple brancher toutes sortes
de capteurs sur les entrées (capteurs de température, capteur capacitif, capteur de
lumière..) et définir l’état des sorties en fonction de l’état des entrées (par exemple
allumer une lampe quand on appuie sur un bouton, activer un moteur en fonction d’un
capteur de lumière etc…) Vous l’aurez compris, une carte Arduino est souvent utilisée
pour automatiser ou simplifier des processus. Les Arduino sont de ce fait souvent utilisés
pour faire de la domotique.
Voici comme exemple la carte Arduino Due :
Programmation
La langage de programmation Arduino est basé sur les langages C et C++. Si vous
connaissez déjà ceux-ci, vous n'aurez aucun mal à vous familiariser avec l'environnement
Arduino.
Si vous débutez, il est préférable d’utiliser le logiciel officiel Arduino. Il est téléchargeable
gratuitement sur internet (à cette adresse : https://www.arduino.cc/en/Main/Software ).
Sachez néanmoins qu’il existe de nombreuses alternatives viables pour programmer votre
Arduino depuis un autre logiciel.
Création du projet
Une fois le logiciel téléchargé et installé, vous pouvez créer votre premier projet. Il suffit
simplement de cliquer sur Fichier, puis sur Nouveau, ou utiliser le raccourci clavier ctrl+N.
A la création d'un projet, voici ce qu'on obtient :
On peut remarquer que deux fonctions se génèrent automatiquement. Voici leurs utilités :
- Setup() : la fonction setup est une fonction qui s’exécute une seule fois à chaque
démarrage du programme. C’est dans cette fonction qu’on initialise les variables, qu’on
définit la fonction de chaque broche (entrée ou sortie), l’initialisation de l’état des sorties,
des fonctions d’initialisation personnalisées ou tout autre partie de code que l'on souhaite
exécuter qu’une seule fois.
- Loop() : la fonction loop est la fonction principale de l’Arduino : une fois la fonction setup
exécutée, la fonction loop s’exécutera et se répètera à l’infini.
Le logiciel est très simple d’utilisation. Dans la barre d’icônes (visible en haut sur l’image
précédente), on peut voir cinq boutons en haut à gauche. Le premier (vérifier) sert à
compiler le code et vérifier qu’il n’y a pas d’erreurs dans celui-ci. Le deuxième
(téléverser) sert à envoyer le programme sur l’Arduino pour que celui-ci l’exécute. Les
trois icônes restants servent à créer (nouveau), ouvrir ou enregistrer un projet.
L’icône en haut à droite sert à ouvrir le moniteur série. L’utilisation de celui-ci sera
détaillée plus loin.
Une autre chose très importante à savoir, c’est que lorsque l’on connecte une carte en
USB, il faut aller dans le menu « outils » et sélectionner le type de carte sur laquelle on
veut transférer notre projet ainsi que le port COM sur lequel l’Arduino est branché. Il est
nécessaire de faire cette manipulation à chaque fois pour que la carte soit reconnue par
le logiciel Arduino et que le téléversement se fasse correctement. Si le type de notre
carte n’existe pas dans le logiciel, il faut simplement le rajouter à l’aide du gestionnaire
de carte (Outils > Type de carte > Gestionnaire de carte).
Fonctions
Comme dans tout langage, le système de fonction est présent dans le langage Arduino.
Toutes les fonctions de bases et les opérateurs tels que "if", "else", "switch case", "==", "!
=", etc. sont communs à beaucoup de langages, et ne seront donc pas présentés dans
cet article. Si ces fonctions ne vous sont pas familières, je vous conseille de commencer
votre apprentissage par un tutoriel du langage C.
Fonction Scheduler
La fonction scheduler est l’une des plus importante fonction de l’Arduino, car celle-ci nous
permet d’effectuer des tâches asynchrones. En effet, de base, un Arduino ne peut pas
gérer plusieurs tâches en même temps. Par exemple, si vous utiliser la fonction delay()
pour faire clignoter une LED, et que vous souhaitez lire l’état d’une entrée de l’Arduino en
même temps, cela vous sera impossible, car pendant que le délai s’écoule, le programme
est bloqué, et attend la fin de celui-ci. Comme on a pu le voir au début, le programme est
composé de seulement deux fonctions : « setup() » et « loop() ». On a évidemment la
possibilité de créer d’autres fonctions, mais celle-ci s’exécuterons de manière synchrone
après leur appel. La fonction Scheduler nous permet de créer plusieurs boucle infinie
( identiques à la fonction loop() déjà existante ) et de les lancer en même temps. Voici un
exemple :
Etant donné que le microprocesseur de l'Arduino n'est pas conçu pour faire de
l'asynchrone, la fonction Scheduler lui permet d'en faire comme on l’a vu précédemment,
mais de façon un peu détournée. En effet, lorsque que la fonction Scheduler est utilisée,
l’Arduino n’exécute pas vraiment les deux boucles en mêmes temps ; la première boucle
va exécuter une toute petite partie de son code, passer le relai à la deuxième boucle qui
va elle aussi exécuter une partie de code, puis repasser la main à la première boucle, et
ainsi de suite. En général, pour les petits projets, cela n’est pas du tout dérangeant.
Néanmoins, pour ceux qui souhaitent exécuter du code dans un temps précis, cette
fonction est à proscrire, car le passage d’une boucle à l’autre augmente le temps de
calcul de l’Arduino.
De plus, il est impératif d'utiliser la fonction "yield()" à la fin de chaque boucle, car c'est
elle qui permet la gestion du passage de l'une à l'autre.
Fonctions personnalisées
On peut bien évidemment créer des fonctions personnalisées qui correspondent à nos
besoins. Plutôt que de longs discours, voici un exemple de code qui permet de faire
clignoter une LED un nombre de fois précis lorsqu’on appuie sur un bouton, le nombre de
répétitions étant spécifié lors de l’appel :
L'utilisation des fonctions personnalisées est identique aux langages C et C++.
Moniteur série
Grâce au moniteur série (le petit icône loupe en haut à droite) vous avez la possibilité
d’afficher des informations provenant du code. Celui-ci est souvent utilisées pour le
débogage, ou simplement pour logger des informations renvoyées par l'Arduino, en
direct. Dans le code qu’on écrit, on peut spécifier à l’Arduino que nous souhaitons afficher
certaines informations, ou variables. Voici un exemple :
Ce programme nous permet de voir l’état d’un bouton en direct. Quand on se trouve dans
la fenêtre du moniteur série et que le programme est lancé sur l’Arduino, on peut voir
s’afficher les mots « Bouton Appuyé » quand celui-ci est pressé.
La ligne « Serial.begin(9600) » qui se trouve dans le setup est obligatoire, et sert à
initialiser la liaison série de l’Arduino, en lui affectant une vitesse de transmission. Cette
vitesse peut évidemment être changée, mais il faudra donc aussi modifier cette valeur
dans le moniteur série pour que la lecture des informations se fasse à la même fréquence
que leurs envois.
Conclusion
Cet article présente les bases de la programmation en Arduino. Si vous aimez ce
domaine, que vous avez quelques connaissances en électronique et que vous fourmilliez
d'idées géniales, lancez-vous! Et si vous souhaitez continuer, et que vous avez besoin
d'aide, sachez qu'internet regorge de sites en tout genre qui traitent de ce sujet et qui
vous permettront de faire tout ce que vous souhaitez.