Beruflich Dokumente
Kultur Dokumente
CHARED Amine
FORMATION ARDUINO↔MATLAB/SIMULINK
2 L’interfacage Arduino↔Matlab/Simulink 6
2.1 Programmation de la carte Arduino Uno comme une carte d’interface . . . . . . . . . . . . . . . 6
2.1.1 Configuration de la carte Arduino UNO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.2 Traitement des données sous Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 ArduinoIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.1 Pré-chargement du programme dans la carte Arduino . . . . . . . . . . . . . . . . . . . . 8
2.2.2 Installation du package ArduinoIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.3 Exploitation de la bibliothèque ArduinoIO sous Simulink . . . . . . . . . . . . . . . . . . 9
2.2.4 Exploitation du package ArduinoIO sous Matlab . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Arduino Target . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5 Présentation de la maquette 18
1
TABLE DES FIGURES TABLE DES FIGURES
2
Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique
CHELLY, Nizar
Ingénieur en Électrique et Automatique
chellynizar@gmail.com
+216 50 48 00 27
CHARED, Amine
Ingénieur en Informatique
amineaby@gmail.com
+216 50 02 33 70
– 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)
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
( n o m m e "DEL" ) comme une s o r t i e .
}
void loop ( )
{
d i g i t a l W r i t e (DEL, HIGH) ;On met l a borne 5 au n i v e a u
l o g i q u e haut (+5V) : l a d i o d e s ’ allume .
d e l a y ( 1 0 0 0 ) ; On a t t e n d 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 n i v e a u l o g i q u e bas ( 0V)
l a d i o d e s ’ teint .
d e l a y ( 1 0 0 0 ) ; On a t t e n d un d e l a i de 1000ms ( s o i t 1 s ) .
}
Et ainsi de suite tant que le circuit est alimenté.
2 L’interfacage Arduino↔Matlab/Simulink
Il existe trois possibilités d’interfacer la carte Arduino avec Matlab/Simulink, à savoir :
1. Programmation de la carte Arduino Uno comme une carte d’interface.
2. Utilisation du package ArduinoIO.
3. Utilisation du package Arduino Target.
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 ( )
{
S e r i a l . b e g i n ( 9 6 0 0 ) ; / / ouvre l e p o r t s e r i e , f i x e l e d e b i t a 9600 bauds
pinMode ( 6 ,OUTPUT) ; // C o n f i g u r a t i o n de l a pi n 6 comme s o r t i e
}
void loop ( )
{
e n t r e e=analogRead (A0) ; / / l e c t u r e du CAN ( v a l e u r e n t r e 0 e t 1024)
S e r i a l . w r i t e ( e n t r e e ) ; // Envoie de l a donnee s u r l e p o r t 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 s o n t p r e s e n t e s
{
s o r t i e=S e r i a l . read ( ) ; / / l e c t u r e des donnees a r r i v e s
a n a l o g W r i t e ( 6 , s o r t i e ) ; / / T r a n s f e r t de c e s d o n n e s s u r l a p i n 6
pour g e n e r e r l e s i g n a l PWM
}
d e l a y ( 1 0 0 ) ; // d e l a i de 100ms avant l a n o u v e l l e a c q u i s i t i o n
}
La bibliothèque Instrument Control Toolbox offre les blocs qui permettent l’échange des
données binaires.
– 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).
6. 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.
Les blocs nécessaires pour notre objectif d’asservissement sont les suivants :
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.
Il n’est pas nécessaire d’initialiser ces entrées analogiques qui n’ont que cette seule fonction.
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
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)
2
10mV → C o (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)
void loop ( )
{
// l e c t u r e de l a donnee a p a r t i r du CAN ( v a l e u r e n t r e 0 e t 1023)
temp = analogRead (A0 ) ;
// e n v o i e de l a donnee v i a l e p o r t s e r i e
S e r i a l . w r i t e ( 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) ;
}
Le modele Simulink qui va traiter les données transmises à partir de la carte Arduino UNO.
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.
τo
Vout = 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.
– 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.
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.
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.
3. 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.
5. Entrer le nombre de pôle et de zéro et cliquer sur Discrete-Time ensuite cliquer sur Estimate.
6. Revenir à l’interface System Identification Tool et cliquer deux fois sur tf1.
3. Une nouvelle fenêtre apparait dans laquelle vous allez sélectionner tf1 ensuite cliquer sur
import puis close.
4. Revenir à la fenêtre PID Tuner, vous pouvez choisir le type de régulateur à implémenter et
les objectifs de la commande en boucle fermé et voir la réponse de la sotie du système.
5. Cliquer sur la flèche de show parameter pour voir les paramétrés utilisés de votre régulateur
ainsi que les performances du système en boucle fermé.
L’asservissement de notre procédé est assuré par le schéma Simulink ci-dessous qui regroupe la
consigne, le comparateur, le correcteur PID(z), le traitement de la température issue du capteur
et l’envoie de la commande PWM.
L’appui deux fois sur le bloc PID(z) permet d’introduire les paramétrés Kp Ki Kd et de
configurer le régulateur selon notre objectif de commande.
f l o a t ep , up , temp , u , e , i n t e g r a l , cmd ;
float derive ;
int consigne ;
void setup ( ) {
S e r i a l . begin (9600) ;
}
void loop ( )
{
temp=analogRead ( 0 ) ;
temp=temp∗ 0 . 4 8 8 2 8 1 2 5 ;
e=35−temp ;
d e l t a _ e r r e u r = ( e−ep ) / 0 . 5 ;
somme_erreur=somme_erreur+e ∗ 0 . 5 ;
cmd = kp∗ e + k i ∗ somme_erreur + kd∗ d e l t a _ e r r e u r ;
a n a l o g W r i t e ( 6 , cmd ∗ ( 2 5 5 / 1 2 ) ) ;
ep=e ;
delay (500) ;// periode d ’ echantillonage
S e r i a l . w r i t e ( analogRead ( 0 ) ) ; / / e n v o i e de l a donnee s u r l e p o r t s e r i e
}
Il suffit d’exploiter la bibliothèque Instrument Control Toolbox pour la lecture de la tempéra-
ture instantanée.
Références
[1] http ://www.mathworks.com/
[2] http ://www.arduino.cc/
[3] PID Control : A brief introduction and guide, using Arduino.
[4] PID controller http ://en.wikipedia.org/w/index.php ?title=PID controller soldid=547984770.