Créer une interface pour contrôler son Arduino depuis un PC
Dans ce tutoriel, je vais vous expliquer comment allumer des LEDs sur votre Arduino par le biais de votre ordinateur avec une application Windows Forms que nous allons créer.
Théoriquement si vous lisez ce tuto, vous devez déjà connaitre ce qu’est un Arduino. Sinon, voici la définition de Wikipédia :
« Arduino est un circuit imprimé en matériel libre (dont les plans sont publiés en licence libre) sur lequel se trouve un microcontrôleur qui peut être programmé pour analyser et produire des signaux électriques, de manière à effectuer des tâches très diverses comme la charge de batteries, la domotique (le contrôle des appareils domestiques – éclairage, chauffage…), le pilotage d’un robot, etc. C’est une plateforme basée sur une interface entrée/sortie simple et sur un environnement de développement utilisant la technique du Processing/Wiring. »
En gros (et en plus clair), l’Arduino est un circuit imprimé comprenant un microcontrôleur (peut être abrégé µcontrôleur avec un µ (mu) et pas un u (u) (seule une partie infime de la population mondiale peut comprendre pourquoi je dis ça ;))) qui vous permet en le programmant de pouvoir contrôler de l’allumage d’une LED au chauffage de votre maison en passant par votre toutou robotisé.
Maintenant que vous savez ce qu’est une carte Arduino, je vais vous parler de ce que c’est qu’une application Microsoft Windows Forms.
Microsoft Windows Forms est une partie du Framework (kit de composants permettant de structurer un programme (merci Wiki !)) qui permet de créer des fenêtres Windows et de gérer les interactions avec ses différents éléments.
Nous allons donc programmer une interface homme/machine graphique sur Visual C++ pour contrôler un Arduino que nous allons aussi programmer pour allumer la LED.
I. Prérequis
Un doctorat informatique, une connaissance complète du C et du C++, un supercalculateur, une prise électrique de 10 000V et un budget de 150 000€.
Si vous n’avez pas tout ça, avoir des bases en C, C++ et Arduino, un ordinateur avec Visual C++ Express 2008 ou 2010 d’installé dessus, un Arduino et son IDE installé aussi sur votre PC, une LED et quelques résistances suffiront amplement.
II. Let’s go!
Dans les 7 étapes suivantes je vais vous expliquer comment coder tout ça.
1ère étape : Un peu de musique
Pour commencer, lancer votre lecteur de musique préféré et choisissez de la musique pour égayer « l’intense » réflexion que va vous demander ce tuto.
2ème étape : Créer un nouveau projet dans Visual C++
Ouvrez Visual C++ et aller dans « Fichier > Nouveau projet » pour ouvrir la fenêtre de création de nouveau projet. Ensuite, sélectionner « Application Windows Forms » dans la liste « CLR », donnez un nom à votre projet, sélectionnez le répertoire où vous voulez l’enregistrer et enfin, cliquez sur « OK ».
3éme étape : Designer l’interface
Normalement vous vous retrouvez devant une fenêtre de ce genre :
Nous allons donc ajouter à la fenêtre « Form1 » quelques boutons et labels qui nous servirons à communiquer avec M. Arduino. Pour ce faire, ajoutez-y un « label », un « button » et un « numericUpDown » que vous trouverez dans le menu de droite nommé « Boîte à outils ». Il faut aussi rajouter un composant qui s’appelle « serialPort » qui nous servira à communiquer avec l’Arduino.
Essayez de faire en sorte que votre fenêtre ressemble à l’image ci-dessous en modifiant les champs « Text » de vos éléments sauf pour le « numericUpDown » où vous devrez remplir le champ « Value » en mettant « 1 « , le champ « Maximum » en y mettant « 10 » et « Minimum » avec « 1 « .
4ème étape : Coder l’interface
Nous allons maintenant passer aux choses sérieuses (ou pas) : il va falloir coder cette interface pour que nos différents éléments fonctionnent comme on le souhaite.
On va commencer par la sélection du port de communication (port COM). Pour cela, double cliquez sur le « numericUpDown1 » pour créer la fonction « numericUpDown1_ValueChanged() » dans le fichier form.h.
Maintenant la fonction créée, il faut la remplir. Pas besoins d’aller trop loin pour trouver ce qu’il faut mettre dedans, il suffit juste de changer les propriétés de « serialPort1 » :
serialPort1->PortName = "COM"+numericUpDown1->Value;
Ensuite nous allons nous occuper du bouton « button1 » aussi appelé « Allumer la LED ». Pour se faire, retourner dans le designer et double cliquez sur ce bouton. Vous voilà donc dans la fonction « button1_Clicked() ». Là aussi, pas grand-chose à mettre, il suffit d’envoyer un caractère à l’Arduino après avoir ouvert la connexion et enfin, la fermer :
serialPort1->Open(); serialPort1->Write("a"); serialPort1->Close();
Voilà pour l’interface graphique sous Visual C++. Avant de passer sur l’Arduino, dans la barre d’outils, cliquez sur la liste déroulante « Debug » (à gauche de la flèche verte) et sélectionnez « Release » et pour finir, cliquer sur la flèche verte. Une fois cela fait, s’il n’y a pas d’erreurs, vous devriez avoir dans le répertoire de votre projet un dossier nommé « Release ». Ouvrez-le et copiez le fichier qu’il contient sur votre bureau : c’est l’exécutable final de votre application.
5ème étape : Programmer Mister Arduino
Comme vous pouvez le devinez, l’Arduino n’a pas d’intelligence artificielle : il ne comprendra sûrement pas qu’il devra allumer votre LED quand il recevra le caractère « a ». Nous allons donc lui dire dans son langage : le C. Je vais directement vous donner le code (les commentaires serviront d’explication). Il ne vous restera donc plus qu’à l’envoyer sur votre Arduino.
Voici donc le code :
int ledPin = 13; // Sortie où sera branchée la LED int ledState = LOW; // Etat de la LED (LOW par défaut) void setup() { Serial.begin(9600); // On initialise la connexion pinMode(ledPin, OUTPUT); // Et la sortie de la LED } void loop() { int received; // Variable servant à récupérer // les données reçues if (Serial.available()>0) { // Si des données sont disponibles received = Serial.read(); // On les récupère if(received == 'a') { // Si "a" est reçu if (ledState==HIGH) // Et que la LED est allumée ledState = LOW; // On l'éteinds else // Sinon ledState = HIGH; // On l'allume digitalWrite(ledPin, ledState); // Enfin on change l'état de la LED } } }
6ème étape : Câbler l’Arduino
Cette étape est vraiment très simple. Il vous faut juste câbler votre LED et une résistance de 220Ω à la sortie numéro 13 de votre Arduino comme ceci (schéma venant du site Arduino.cc) :
Ce qui donnera à peu près ceci IRL (dans la vie réelle pour les incultes :P) :
(Oui, j’ai pris une résistance de 820Ω mais je n’avais pas d’autres résistances sous la main)
7ème étape : Sortez le champagne !
Voilà, vous venez de terminer ce tutoriel. Vous êtes maintenant un dieu vivant : rares sont les personnes qui sont arrivées ici (ou pas). Vous avez donc le droit de sabrer le champagne (ou autre suivant vos goûts), mais n’oubliez pas que l’alcool se consomme avec modération.
Pour connaitre le port COM de votre Arduino, tapez « Windows (touche avec le logo Windows sur votre clavier) + R » puis tapez « devmgmt.msc » et enfin cliquez sur « OK ». Vous êtes maintenant dans le gestionnaire de périphériques. Rendez-vous dans la liste « Ports (COM et LPT) » et cherchez la ligne « USB Serial Port (COMX) » où X est le numéro du port de votre Arduino.
Voici le résultat que vous avez dû obtenir en suivant ce tuto :
III. Conclusion
Grâce à ce tuto, j’espère que vous savez maintenant comment créer une interface pour communiquer avec votre Arduino. Comme vous avez pu le remarquer, l’interface très simple peut être grandement améliorée, par exemple, en y ajoutant un deuxième label qui vous afficherait un message de l’Arduino vous disant si la LED est allumée ou pas, ou tout simplement en changeant le texte du bouton lors du clic (ou grâce au message de l’Arduino), ou alors, juste vérifier si l’Arduino est bien connecté au port sélectionné…
Si vous avez des questions ou des remarques, n’hésitez pas à le faire via les commentaires ou via email (contact
@arnakazim.com).Merci pour votre lecture 🙂 !
PS: Je mets à dispositions mes sources au cas où vous n’y arriveriez pas et que vous ne trouveriez pas pourquoi. 😉