Cours d’introduction à Arduino Matlab et Simulink
Cours d’introduction à Arduino Matlab et Simulink
...
1 Présentation de la carte Arduino et l’environnement Matlab/Simulink
Arduino est un projet créé par une équipe de développeurs, composée de six individus :
Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, David Mellis et Nicholas Zambetti. Cette équipe a créé le "système Arduino". C’est un outil qui va permettre aux débutants, amateurs ou professionnels de créer des systèmes électroniques plus ou moins complexes.
1.1 Le matériel : Arduino UNO
C’est un circuit imprimé comportant tous les composants électroniques nécessaires pour faire fonctionner un microcontrôleur (Atmega 328) associé à une interface USB lui permettant de communiquer avec un ordinateur.
Figure 1 – Description de la Carte Arduino "Uno"
- Microcontroller : ATmega328
- Operating Voltage : 5v
- Input Voltage (recommended) : 7-12 v
- Input Voltage (limits) : 6-20 v
- DC Current per I/O Pin : 40mA
- DC Current for 3.3V Pin :50mA
- Flash Memory :32 KB
- Clock Speed : 16MHz
- Pins assignments :
- Analog read(A0-A5)
- Analog write[PWM] (3,5,6,9,10,11)
- Digital read(2-19)
- Digital write(2-19)
1.2 Le logiciel Arduino
Arduino IDE ( Integrated Development Environment ). Le logiciel est gratuit et open source dont la simplicité d’utilisation est remarquable.Ce logiciel va nous permettre de programmer la carte Arduino pour :
- Réaliser l’interfacage avec Matlab/simulink
- Implémenter la commande directement sur la carte.
Figure 2 – L’interface du logiciel Arduino
1.3 Structure d’un programme Arduino
- Le langage de programmation Arduino dérive du langage C++ et il en respecte les règles de syntaxe :
- Une ligne qui commence par "//" est considérée comme un commentaire.
- Un paragraphe qui commence par "/*" et qui se termine par "*/" est considéré comme un commentaire
- Toute ligne d’instruction de code doit se terminer par un point virgule " ;"
- Un bloc d’instructions (définition d’une fonction, boucle "while" ou "if"/"else"...) doit être délimité par des accolades ouvrantes "" puis fermantes "".
- Toutes les variables doivent être déclarées, ainsi que leur type (int,float,...) avant d’être utilisées.
Un programme (ou "sketch") Arduino est constitué de 2 fonctions distinctes :
- La fonction de configuration "void setup" exécutée une seule fois au lancement du pro- gramme.
- La fonction "void loop" qui est ensuite exécutée indéfiniment en boucle.
Remarque : On peut relancer le programme en actionnant le bouton poussoir "reset" sur la carte.
Exemple : le programme "Blink" :
i n t DEL = 5 ;
void setup ( )
{
pinMode (DEL, OUTPUT) ;On i n i t i a l i s e l a borne 5 de l ’ Arduino
( nomm e "DEL" ) comme une s o r t i e .
}void loop ()
{digitalWrite(DEL, HIGH) ;On met la borne 5 au niveau
l o g i q u e haut (+5V) : l a diode s ’ allume .
delay (1000) ; On attend un d e l a i de 1000ms ( s o i t 1 s ) .
d i g i t a l W r i t e (DEL, LOW) ;On met l a borne 5 au niveau l o g i q u e bas (0V)
l a diode s ’ teint .
delay (1000) ; On attend un d e l a i de 1000ms ( s o i t 1 s ) .
}
Et ainsi de suite tant que le circuit est alimenté.
1.4
L’environnement Matlab/Simulink
C’est un logiciel de calcul mathématique pour les ingénieurs et les scientifiques créé par
Mathworks.
MATLAB est un environnement de programmation pour le développement d’algorithme, d’analyse de données, de visualisation, et de calcul numérique. En utilisant MATLAB, la ré- solution des problèmes de calcul complexes se fait plus rapidement qu’avec des langages de programmation traditionnels, tels que C, C++, et le Fortran.
SIMULINK est un environnement pour la simulation multidomaiane.Il fournit un environne- ment graphique interactif et un ensemble de bibliothèques de bloc qui permettent de concevoir, simuler, mettre en application, et examiner une variété de systèmes, tel que les systèmes de communications, de commandes, de traitement des signaux, de traitement visuel, et de traitement d’image.
2 L’interfacage Arduino↔Matlab/Simulink
Il existe trois possibilités d’interfacer la carte Arduino avec Matlab/Simulink, à savoir :
- Programmation de la carte Arduino Uno comme une carte d’interface.
- Utilisation du package ArduinoIO.
- Utilisation du package Arduino Target.
2.1 Programmation de la carte Arduino Uno comme une carte d’interface
Cette solution consiste d’une part à utiliser les fonctions offert par le language Arduino qui permet d’envoyer et d’acquérir des données binaires via le port série (USB) et d’autre part à développer sous Simulink un programme pour traiter ou visualiser ces données.
2.1.1 Configuration de la carte Arduino UNO
Les fonctions Arduino permettant cette configuration sont les suivantes :
– Serial : Cette fonction est utilisée pour la communication entre le la carte Arduino et un ordinateur ou un autre dispositifs.Toutes les cartes Arduino ont au moins un port série (également connue sous le nom d’UART ou USART).Serial, communique sur les pins (0 :RX) et 1 :(TX)) avec l’ordinateur par l’intermédiaire d’USB.
– available() : Permet d’obtenir le nombre de bit (caractères) disponibles pour lire du port série.Ces données sont stockées dans le buffer qui peut sauvegarder 64 bit.
– read() : Permet la lecture des bits entrants sur le port série(acquisition des données).
– write() : Permet l’écriture des bits sur le port série.(envoie des données)
Le programme suivant assure l’échange de données via le port série (USB) :
i n t e n t r e e ; // e n t r e e CAN
i n t s o r t i e ; // s o r t i e
void setup ( )
{Serial . begin(9600) ;//ouvre le port serie , fixe le debit a 9600 bauds
pinMode (6 ,OUTPUT) ; // Configuration de l a pin 6 comme s o r t i e
}void loop ()
{entree=analogRead(A0) ;// lecture du CAN (valeur entre 0 et 1024)
S e r i a l . write ( e n t r e e ) ; // Envoie de l a donnee sur l e port USB
i f ( S e r i a l . a v a i l a b l e ( ) ) / / s i des donnees e n t r a n t e s sont p r e s e n t e s
{ sortie=Serial . read() ;// lecture des donnees arriv es
analogWrite (6 , s o r t i e ) ;// Transfert de ces d o n n e s sur l a pin 6
pour generer l e s i g n a l PWM
}delay(100) ; //delai de 100ms avant la nouvelle acquisition
}
2.1.2 Traitement des données sous Simulink
La bibliothèque Instrument Control Toolbox offre les blocs qui permettent l’échange des données binaires.
Figure 3 – Emplacement de la bibliothèque ”Instrument Control Toolbox”
Ces blocs sont les suivants :
- Serial Configuration : Configuration des paramétrés du port série.
- Serial Send : Envoie des données binaires via le port série.
- Serial Receive : Acquisition des données binaires via le port série.
Les paramétrés à configurer sont :
- Communication Port
Figure 4 – Les blocs pour la communication série
Figure 5 – Paramétrage des blocs pour la communication série
- Data size
- Data type
- Block sample time
- Exemple d’acquisition et d’envoie sous Simulink :
2.2 ArduinoIO
Cette solution consiste à utiliser la carte arduino comme une interface d’entrées(Analog Input)/sorties(Analog/Digital Output).Ce package permet de communiquer Matlab ou Simulink avec la carte Arduino via un câble USB.
Elle consiste à pré-charger un programme dans la carte Arduino afin que celle-ci fonctionne en serveur.
Ce programme consiste à "écouter" les requêtes envoyées via la liaison série (USB) et de répondre à ces requêtes en renvoyant l’état d’une entrée ou en modifiant l’état d’une sortie. Ces mêmes entrées/sortie sont vues dans matlab comme des entrées logiques ou analogiques (utilisation du CAN) ou des sorties analogiques (mode PWM).
2.2.1 Pré-chargement du programme dans la carte Arduino
- Télécharger le package ArduinoIO
- Décompresser à la racine de votre disque dur, exemple E :\arduinoio
- Ouvrir le dossier décompressé.
- Aller vers : ”ArduinoIO\pde\adiosrv” *
- Charger le fichier adiosrv.pde vers le logiciel Arduino.
- Televerser !
* adiosrv est l’abréviation de : Analog and Digital Input and Output Server for MATLAB.
La carte Arduino UNO est maintenant configuré pour être utiliser comme une carte d’interface
Entrées/Sorties.
2.2.2 Installation du package ArduinoIO
- Lancer Matlab2013 et placer vous dans le répertoire E :\arduinoio
- Exécuter la commande : install-arduino
- Fermer et relancer Matlab puis Simulink
- Dans les bibliothèques se trouvent maintenant les blocs dans Arduino IO library.
Figure 6 – ArduinoIO Library
2.2.3 Exploitation de la bibliothèque ArduinoIO sous Simulink
Les blocs nécessaires pour notre objectif d’asservissement sont les suivants :
Figure 7 – Les Blocs d’ArduinoIO nécessaires pour la commande
– Real-Time Pacer : Ce bloc permet de ralentir le temps de simulation de sorte qu’il synchronise avec le temps réel écoulé.Le coeffecient de ralentissement est contrôlable par l’intermédiaire du paramètre Speedup.
– Arduino IO Setup : Pour configurer sur quel port la carte Arduino UNO est connectée.
Pour cela il suffit de voir dans Gestionnaire des périphériques.voir Figure 4.
– Arduino Analog Read : Pour configurer à partir de quel pin [0,1,2,3,4,5] on va acquérir les données du capteur.
– Arduino Analog Write : Pour configurer à partir de quel pin [3,5,6,9,10,11] on va envoyer la commande en PWM vers l’actionneur.
2.2.4 Exploitation du package ArduinoIO sous Matlab
Le package ArduinoIO offre une panoplie de commandes permettant d’écrire un programme sous Matlab (M-file). Pour accéder à ces commandes il faut créer un objet arduino dans l’espace de travail et spécifier le port sur lequel la carte arduino est connecté avec la commande :
>> a = arduino(0port0); (1)
Figure 8 – Emplacement COM de la carte Arduino UNO
Parmi les commandes qui sont accessibles on retrouve :
– pinMode
Exemple :a.pinMode(11,’output’) // configurer la pin 11 comme sortie.
– digitalRead
Exemple :val=a.digitalRead(4) ; // lecture de l’etat de la pin 4
– digitalWrite
Exemple :a.digitalWrite(13,0) ; // mettre la pin 13 à l’etat bas 0V
– analogRead
Exemple :val=a.analogRead(0) ; // lecture de la pin 0 de l’ADC
– analogWrite
Exemple :a.analogWrite(3,10) ; // envoyer sur la pin 10 un signal pwm de rapport cyclique 10/255
2.3 Arduino Target
Embedded Coder Support Package for Arduino permet de créer des applications Simulink qui vont fonctionner de façon autonome sur la carte Arduino. on dit que la carte Arduino est devenue une cible (Target) et elle peut fonctionner d’une façon autonome (sans avoir recours à Matlab/Simulink).
Dans la suite, on utlisera les blocs Simulink offert par le package ArduinoIO Library et la librairie Instrument Control Toolbox pour l’acquisition et l’envoie des données.
3 Acquisition des données
3.1 Présentation du ADC
La carte Arduino Uno dispose de 6 entrées analogiques notées A0, A1,..A5 mais d’un seul convertisseur analogique/numérique, la durée d’une conversion est de l’ordre de 100µs.Il a une résolution de 10 bits. La donnée numérique qu’il fournit après conversion est donc comprise entre 0 et 1024.
Figure 9 – Type du CAN de la carte Arduino UNO
Commande d’un système thermique
Il n’est pas nécessaire d’initialiser ces entrées analogiques qui n’ont que cette seule fonction.
La syntaxe de l’instruction permettant d’acquérir l’entrée analogique est la suivante :
analogRead(pin) ;
– pin : la pin sur la quelle on souhaite acquérir le signal analogique.
3.2 Acquisition des données : Capteur de distance Ultrason HC-SR04
3.2.1 Présentation du module
Ce module dispose de 4 pins de sortie : VCC , TRIG, ECHO, GND . Les caractéristiques techniques de ce module sont les suivantes :
- alimentation : 5V DC
- Courant de repos : <2mA
- Angle de mesure : <15°
- Gamme de distance : 2cm – 500 cm
- résolution : 0.3 cm
Figure 10 – Capteur de distance HC-SR04
Le processus de mesure de distance est le suivant : donner la pin "TRIG" une impulsion de niveau haut (5V) durant au moins 10µs et le module démarre sa lecture ; à la fin de la mesure, s’il détecte un objet devant lui, la pin "ECHO" passe au niveau haut (5V). Et , la distance où se situe l’obstacle est proportionnelle à la durée de cette impulsion Il est donc très facile de calculer cette distance avec la formule suivante :
vitesse.du.son : 340m/s
Distance = (Durée.du.niveau.haut) ×
(2)
3.2.2 Branchement avec la carte Arduino UNO
Figure 11 – Branchement du HC-SR04 avec la carte Arduino UNO
3.2.3 Exploitation de Instrument Control Toolbox
- Pré-programmation de la carte Arduino UNO
#d e f i n e echoPin 7 // Echo Pin
#d e f i n e t r i g P i n 8 // Trigger Pin
long duree , d i s t a n c e ;
void setup ( )
{ Serial . begin (9600) ;
pinMode ( trigPin , OUTPUT) ;
pinMode ( echoPin , INPUT) ;
}void loop ()
{
// Envoyer l e s i g n a l sur l a pin
8
d i g i t a l W r i t e ( trigPin , LOW) ;
delayMicroseconds ( 2 ) ;
d i g i t a l W r i t e ( trigPin , HIGH) ;
delayMicroseconds (10) ;
d i g i t a l W r i t e ( trigPin , LOW) ;
// a v o i r l a duree en ms
duree = puls eIn ( echoPin , HIGH) ;
// V i t e s s e du Son 340 m/ s
// Calcul er l a d i s t a n c e ( en cm)
d i s t a n c e = ( duree /2)∗340∗0.0001 ;
// envoie de l a donnee sur l e port s e r i e
S e r i a l . write ( d i s t a n c e ) ;
// Delai de 50 ms avant l a n o u v e l l e a c q u i s i t i o n
delay (50) ;
}
- Développement du modèle Simulink :
Il suffit d’utiliser les blocs offert par Instrument Control Toolbox.
– Un bloc Serial Configuration
– Un bloc Serial Receive
– Un bloc Display ou Scope pour assurer la lecture de la distance en temps réel.
Figure 12 – Acquisition de la distance sous Instrument Control Toolbox
3.3 Acquisition des données : Capteur de température LM35
3.3.1 Présentation du capteur
Le LM35 fait partie des capteurs de température électroniques de précision en structure intégrée.
Figure 13 – Capteur de température LM35
D’après la fiche technique :
10mV → Co
(3)
Autrement un volt correspond à 100 degrés Celsius.
La lecture analogique d’un signal de 0 à 5V étant codée de 0 à 1023, on a la formule :
T emp = V olt ∗ (5/1023) ∗ 100;
V olt.entre.(0et1023)
(4)
3.3.2 Branchement avec la carte Arduino UNO
Pour exploiter le capteur LM35, il suffit :
– D’alimenter les pattes VCC et GND
– De brancher la patte centrale à une entrée analogique d’Arduino (A0,...,A5).
Figure 14 – Branchement du Capteur LM35 avec Arduino UNO
3.3.3 Exploitation du package ArduinoIO Library
- Pré-chargement de adiosrv.pde sur la carte Arduino UNO
- Développement du modèle Simulink
Figure 15 – Acquisition de la température sous ArduinoIO Library
3.3.4 Exploitation de Instrument Control Toolbox
- Pré-programmation de la carte Arduino UNO
i n t temp ;
void setup ( )
{ Serial . begin(9600) ;
}
void loop ( )
{
// l e c t u r e de l a donnee a p a r t i r du CAN ( valeur entre 0 et 1023)
temp = analogRead (A0) ;
// envoie de l a donnee via l e port s e r i e
S e r i a l . write ( temp ) ;
// d e l a i de 1 s avant n o u v e l l e a c q u i s i t i o n
delay (1000) ;
}
- Développement du modèle Simulink :
Le modele Simulink qui va traiter les données transmises à partir de la carte Arduino UNO.
Figure 16 – Acquisition de la température sous Instrument Control Toolbox
4 Envoie des données
4.1 Présentation des sorties analogiques (mode PWM)
La carte Arduino Uno dispose de 6 sorties (3,5,6,9,10 et 11) qui peuvent être utilisées en mode PWM, c’est-à-dire en modulation de largeur d’impulsion.Ce sont des signaux logiques binaires de fréquence constante (500Hz) mais de rapport cyclique variable.
Figure 17 – Description du signal PWM
Lorsqu’un moteur ou une lampe est alimenté par ce type de tension, tout se passe comme si il était alimenté par une tension continue ajustable entre 0V (rapport cyclique= 0) et 5V (rapport cyclique=255).Ces sorties doivent être initialisées comme des sorties digitales.
τVo out = Vs ×;
avec : τc = 2ms(5) τc
La syntaxe de l’instruction permettant de générer le signal PWM est la suivante :
analogWrite(pin, valeur) ;
– pin : la pin sur la quelle on souhaite envoyer le signal (3,5,6,9,10 ou 11).
– valeur : le rapport cyclique entre 0 et 255.
Figure 18 – Exemles de variation du rapport cyclique
4.2 Commande PWM d’un moteur à courant continu
4.2.1 Présentation du schéma électronique
Le circuit électronique ci-dessous permet de contrôler un moteur à courant continue à partir des sorties PWM de la carte Arduino. Ce circuit doit amplifier le courant de sortie de la carte
Arduino (40 mA) et doit aussi supporter la variation du rapport cyclique du signal PWM. Parmi les transistors pouvant satisfaire ces conditions on a choisit le TIP121.
Figure 19 – Branchement de la carte Arduino UNO avec un moteur DC
Les composants utilisés sont les suivants :
– Le transistor TIP121 : C’est un transistor Darlington NPN qui d’après la fiche technique permet d’amplifier le courant jusqu’à 5A avec son gain d’amplification ”au minimum” β = 1000 et supportant
– La diode 1N4004 : Dans une charge inductive (bobines), le courant ne peut pas se stopper instantanément. Cette diode joue le rôle d’une diode de roue libre qui permet au courant de s’arrêter progressivement.
4.2.2 Exploitation du package ArduinoIO Libraray
- Pré-chargement de adiosrv.pde sur la carte Arduino UNO
- Développement du modèle Simulink
Commande d’un système thermique
4.3 Commande d’une résistance chauffante
4.3.1 Présentation du schéma électronique
Le circuit électronique comporte :
– Une lampe halogène 12V-35W
– Une resistance 1kΩ
– Un transistor TIP121
Figure 21 – Branchement de la carte Arduino UNO avec une lampe
L’utilisation de la commande PWM à partir de la carte Arduino permet de faire varier la tension appliquée aux bornes de la lampe autrement ceci permet de contrôler l’intensité lumineuse de la lampe.
4.3.2 Exploitation du package ArduinoIO Libraray
- Pré-chargement de adiosrv.pde sur la carte Arduino UNO
- Développement du modèle Simulink
5 Présentation de la maquette
La maquette est constituée d’un capteur de température LM35 et une Lampe halogène 12V 35W qui joue le rôle d’un élément chauffant.Le capteur et la lampe sont installés dans une boite en bois avec un couvercle en plexiglass. Cette boite représente le système thermique à commander. La figure suivante schématise la connexion de la carte Arduino UNO avec l’entrée et la sortie du système thermique.
Figure 23 – Branchement du procédé avec la carte Arduino
La figure ci dessous montre une vue réelle de la maquette utilisée.
6 Modélisation du procédé thermique
Le but de cette partie est de déterminer la fonction de transfert échantillonnée de notre procédé thermique en boucle ouvert notée G(z).L’entrée du système est la tension u(z) en volts et la sortie est la température T (z) de degré celsius.
6.1
Présentation de l’étape d’identification avec Matlab
Cette étape est constituée de deux parties. La première est assuré par l’environnement Simulink et le package ArduinoIO pour l’envoie et l’acquisition des données. La deuxième partie est assuré par l’outil System identification sous Matlab.
Figure 25 – L’utilisation de l’outil System Identification
6.2 Acquisition de la réponse indicielle du système
Plusieurs méthodes sont utilisées pour la modélisation d’un système comme la détermination des équations physiques du système, l’étude de la réponse d’un système à une entrée....etc.
Dans notre cas on va identifier notre système en étudiant la réponse de notre système à échelon de tension.
Le modèle Simulink permettant de réaliser l’acquisition de la réponse du système à un échelon de tension est le suivant :
Figure 26 – Modèle Simulink pour la détermination de la réponse indicielle
6.3 Détermination de la fonction de transfert G(z)
Après avoir déterminer la réponse du système, on passe à la détermination de la fonction de transfert G(z).
- Ouvrir l’outil System identification Tool
Figure 27 – L’interface de l’outil System identification
- Cliquer sur import data et choisir Time domain data.
Figure 28 – Choix des types des données ”Time Domain Data”
- Entrer le nom de la variable Input et la variable Output ainsi que tempsde starting time et sample time qu’on a utiliser lors de l’identification avec Simulink.Enfin cliquer sur Import.
Figure 29 – Saisie des données relatives aux Input et Output du système
- Cliquer sur Estimate et choisir Transfer Function Models
Figure 30 – Choix de la description du système à estimer”Tranfer Function”
- Entrer le nombre de pôle et de zéro et cliquer sur Discrete-Time ensuite cliquer sur Estimate.
Figure 31 – Choix du nombre des pôles et zéros de la fonction de transfert à estimer
- Revenir à l’interface System Identification Tool et cliquer deux fois sur tf1.
Figure 32 – Visualisation du résultat de l’estimation