Le pilotage des instruments, ou d'appareils électroniques est plus convivial lorsque l'utilisateur dispose d'une interface graphique. Il en est de même pour des cartes à microcontrôleurs.
Dans cet article nous allons créer une interface graphique pour piloter la carte Arduino Uno.
Sommaire
Pour un début, l'interface à créer est toute simple: elle n'a qu'un bouton. Lorsque l'utilisateur va cliquer sur ce bouton, la LED connectée sur la sortie D5 de la carte Arduino s'allume.
Matériel nécessaire:
-
- Arduino Uno;
- Une LED;
- Une résistance de 330 Ohm 1/4 W;
- AppDesigner
Schéma du montage:
Préparation de l'environnement:
Pour piloter Arduino avec Matlab, il faut d'abord installer l'Add On Arduino pour Matlab. Pour cela Il suffit de cliquer sur Add On, puis sur Get Hardware Support Package:
Puis suivre la procédure.
Pour plus de détails sur cette procédure d'installation, il faudra se reporter vers le lien du site officiel de Mathworks, proposé en bas de page.
Une fois terminé, pour vérifier que l'installation s'est bien passée, on crée un objet qu'on va nommer myUno par exemple:
Dans la fenêtre des commandes taper:
>> myUno = arduino();
Puis taper :
>> myUno
Pour avoir en réponse:
myUno =
arduino with properties:
Port: 'COM3'
Board: 'Uno'
AvailablePins: {'D2-D13', 'A0-A5'}
AvailableDigitalPins: {'D2-D13', 'A0-A5'}
AvailablePWMPins: {'D3', 'D5-D6', 'D9-D11'}
AvailableAnalogPins: {'A0-A5'}
AvailableI2CBusIDs: [0]
Libraries: {'I2C', 'SPI', 'Servo'}
Show all properties
Ci-dessus, sont listées toutes les informations sur la carte, le port sur lequel elle est branchée, les entrées sorties, ainsi que les librairies installées.
Effacer l'objet myUno en tapant dans la fenêtre des commandes:
>> clear
Programmation avec AppDesigner:
Lancer AppDesigner, puis cliquer sur Blank App. Nommer le fichier puis, enrégistrer. Sur la face avant, placer l'objet Bouton; ensuite basculer vers le code source en cliquant sur code view:
Créer d'abord une variable partagée myUno; Cliquer sur l'onglet Properties et modifier pour avoir:
properties (Access = private)
myUno % Description
end
Puis initialiser le programme et le montage:
function startupFcn(app)
app.myUno = arduino('com3','uno');
configurePin(app.myUno,'D5','DigitalOutput');
end
Dans le programme d'initialisation, l'object myUno, est créé avec la fonction prédéfinie arduino('com3','uno').
La carte Arduino est connectée sur le port série COM3; ensuite la broche d'entrée-sortie numérique D5 est configurée en tant que sortie numérique.
Callback du bouton:
Un clic sur le bouton entraîne l'écriture d'un niveau logique haut sur la sortie D5:
function ButtonPushed(app, event)
writeDigitalPin(app.myUno,'D5', 1);
end
On exécute le programme une fois terminé. Lorsque l'utilisateur clique sur le bouton, la LED s'allume. Pour l'éteindre il suffit de changer la valeur envoyée de 1 en 0; dans le callback l'instruction d'écriture deviendra:
writeDigitalPin(app.myUno,'D5', 0);
Allumer et éteindre une led avec un seul bouton:
Pour réaliser cette opération, quelques modifications seront apportées au programme précédent.
D'abord une seconde variable partagée ledState sera ajoutée au programme.
properties (Access = private)
myUno % Description
ledState
end
Puis dans la fonction d'initialisation, la variable ledState sera initialisée à 0.
function startupFcn(app)
app.myUno = arduino('com3','uno');
configurePin(app.myUno,'D5','DigitalOutput');
app.ledState = 0;
end
Pour ce qui est du callback, chaque action sur le bouton va écrire le complément de la variable ledState sur la sortie numérique D5.
function ButtonPushed(app, event)
writeDigitalPin(app.myUno,'D5',~app.ledstate);
app.ledstate = ~app.ledstate;
end
Si on exécute ce programme, chaque clic sur le bouton pourra allumer ou éteindre la LED branchée sur la sortie numérique D5.
Varier la luminosité d'une LED:
Pour faire varie la luminosité de la LED, on va se servir d'un bouton rotatif. Dans un premier temps on supprime le bouton précédent, ainsi que son callback, puis on met en commentaire la variable partagée ledState puis son initialisation.
Le callback du bouton rotatif va lire (KnobValueChanging), la valeur du bouton puis le résultat est stocké dans la variable cValue. Le contenu de cette variable est directement envoyé vers la sortie numérique D5 grâce à l'instruction: writePWMVoltage(), qui transforme une valeur numérique en un signal modulé en largeur d'impulsions (PWM) sur la sortie D5. Cette sortie n'a pas été choisie pour cet exemple au hasard c'est l'une broche de la carte Arduino capable d'assurer cette fonction. Il en existent d'autres il faut alors en cas de besoins se référer à la documentation de la carte utilisée.
Ci-dessous l'ensemble des fonctions:
La variable partagée
properties (Access = private)
myUno % Description
% ledState
end
Initialisation:
function startupFcn(app)
app.myUno = arduino('com3','uno');
configurePin(app.myUno,'D5','DigitalOutput');
% app.ledState = 0;
end
Le callback:
function KnobValueChanging(app, event)
cValue = event.Value;
writePWMVoltage(app.myUno,'D5',cValue/50);
end
Lorqu'on exécute le programme, tout mouvement sur le bouton entraîne une variation de luminosité de la LED. Le résumé se trouve dans la vidéo ci-après:
Conclusion:
Ces exemples simples nous ont permi d'envoyer des commandes d'écriture sur les ports Arduino à partir d'une interface graphique AppDesigner. Il serait aussi intéressant de lire l'état des ports ou d'un capteur connecté sur l'un d'entre eux.
JtBB
Le lien ci-dessous renvoie vers la procédure d'installation des Add On Arduino:
Autrement on pourra aussi se reporter sur cet autre lien:
https://www.mathworks.com/help/matlab/supportpkg/intro.html