Tutoriel Arduino Simulink Matlab
![Tutoriel Arduino Simulink Matlab](/images/remos_downloads/id-10688.10688.pdf_thumb_prev.jpg)
Tutoriel Arduino Simulink Matlab
...
Commande d’un système thermique à l’aide de la carte ARDUINO UNO
Comment établir une communication série Arduino/Matlab ?
L’utilisation des fonctions Arduino/Matlab pour la communication série :
Pré-programmer la carte Arduino pour l’envoie et l’acquisition des données
Exploiter les fonctions pour la communication série sous
Matlab ou bien Simulink
Les fonctions permettant la communication série pour Arduino
Les fonctions pour la communication série :
![](/images/remos_downloads/detail/106/id-10688.10688.pdf-000.jpg)
Serial : établir la
communication série (via USB) available() : obtenir le nombre de bit disponible pour la lecture read() : permet la lecture des bits entrants
write() : permet l’écriture des bits sur le port série
Les fonctions permettant la communication série pour Matlab/Simulink
M-files : fscanf : fprintf :
Modèle Simulink :
Instrument control toolbox
Serial configuration : configurer les paramétrés du port série
Serial Receive : Acquisition des données
Serial Send : Envoie des données via le port série
![](/images/remos_downloads/detail/106/id-10688.10688.pdf-001.jpg)
ArduinoIO Library
L’utilisation du package ArduinoIO :
1 Pré-charger le programme ’’ dans la carte
Arduino (Analog and Digital Input and Output Server)
2 Exploiter la bibliothèque ArduinoIO Library sous Simulink ou bien Matlab
Exemple d’exploitation sous Matlab :
»a=arduino(’port’) ? accès à la carte et aux commandes spécifiques d’arduino
»a.analogWrite(3,127) ;? envoyer sur la pin 3 un signal PWM de rapport cyclique 127/255
Exemple d’exploitation sous Simulink :
Installation du package ArduinoIO
![](/images/remos_downloads/detail/106/id-10688.10688.pdf-002.jpg)
Pré-chargement du programme dans la carte Arduino :
1 Télécharger le package ArduinoIO
2 Décompresser vers “par exemple E :\arduinoio” 3 Ouvrir le dossier décompressé.
4 Aller vers : ”ArduinoIO\pde\adiosrv” *
5 Charger le fichier vers le logiciel Arduino.
6 Televerser !
Installation du package ArduinoIO :
1 Lancer Matlab et placer vous sous “E :\arduinoio”
2 Exécuter la commande : install-arduino
3 Fermer et relancer Matlab puis Simulink
![](/images/remos_downloads/detail/106/id-10688.10688.pdf-003.jpg)
4 Dans les bibliothèques se trouvent maintenant Arduino IO library.
Exploitation d’ArduinoIO Library sous Simulink
Les blocs nécessaires pour notre objectif d’asservissement :
Real-Time Pacer : Ralentir le temps de simulation de sorte qu’il synchronise avec le temps réel écoulé.
Arduino IO Setup : Pour configurer sur quel port la carte Arduino UNO est connectée.
Arduino Analog Read : Pour configurer à partir de quel pin on va acquérir les données du capteur.
Arduino Analog Write : Pour configurer à partir de quel pin on va envoyer la commande PWM vers l’actionneur.
Plan de l’exposé
Arduino Target
Arduino Target :
![](/images/remos_downloads/detail/106/id-10688.10688.pdf-004.jpg)
Cette solution consiste à utiliser la carte Arduino comme une cible.
Matlab compile le programme saisi depuis Simulink.
Transfert ce programme directement dans la carte Arduino.
Présentation du ADC
Caractéristique :
6 entrées analogiques A0..A5.
1 seul
CAN, durée de conversion 100 µs.
Résolution 10 bits
? valeur numérique entre 0 et 1023.
![](/images/remos_downloads/detail/106/id-10688.10688.pdf-005.jpg)
Acquisition de distance : HC SR04
Présentation du capteur :
4 pins : V cc, Trig, Echo, GND
Alimenation 5V
Gamme de mesure de distance entre 2cm et 4m.
Fonctionnent du capteur :
Envoyer une impulsion niveau haut
(+5v) pendant au moins 10µ sur la broche ‘Trig’? déclenche la mesure.
Si le module détecte un objet, la pin ‘Echo’, va fournir une impulsion (+5v) dont la durée est proportionnelle à la distance.
Acquisition de température : LM35
![](/images/remos_downloads/detail/106/id-10688.10688.pdf-006.jpg)
Présentation du capteur :
Alimenter les pattes VCC et GND.
Brancher la patte centrale à une entrée analogique.
Lecture du capteur :
10mV ? Co
1V ? 100Co
La lecture analogique d’un signal de 0 à 5V étant codée de 0 à 1023.
Temp = V olt ?(5/1023)?100 V olt est entre 0 et 1023
Acquisition de température : LM35
Exploitation du package ArduinoIO Library sous Simulink
![](/images/remos_downloads/detail/106/id-10688.10688.pdf-007.jpg)
Acquisition de température : LM35
Exploitation de la bibliotheque Instrument control toolbox sous Simulink
1 Pré-programmation de la carte Arduino UNO :
int temp; void setup()
{
Serial.begin(9600); } void loop()
{ temp = analogRead(A0);//lecture CAN (valeur entre 0 et 1023) Serial.write(temp); //envoie de la donnee via le port serie delay(1000); //delai de 1s avant nouvelle acquisition
}
Présentation des sorties analogiques (mode PWM)
La carte Arduino Uno dispose :
6 sorties (3,5,6,9,10 et 11) qui peuvent être utilisées en mode PWM.
![](/images/remos_downloads/detail/106/id-10688.10688.pdf-008.jpg)
C’est quoi un signal PWM ?
des signaux logiques binaires. de fréquence constante (500Hz).
de rapport cyclique variable.
=?
une tension continue ajustable entre 0V (rapport cyclique=
0) et 5V (rapport cyclique=255). ?
;avec : ?c = 2ms
Commande PWM d’un moteur à courant continu
Utilisation du shield 2A Motor pour Arduino :
Avantage du shield 2A Motor :
Ajouter directement sur la carte Arduino UNO
![](/images/remos_downloads/detail/106/id-10688.10688.pdf-009.jpg)
Équipé du CI L298 qui permet la commande du moteur dans les deux sens
Branchement du shield 2A Motor
Branchement pour la commande de la lampe
Exploitation de la bibliotheque Instrument control toolbox sous Simulink
void setup()
{
Serial.begin(9600);//ouvre le port s rie, fixe le d bit 9600 bauds pinMode(6,OUTPUT); //Configuration du pin 6 comme sortie
} void loop()
{ if (Serial.available())// si des donn es entrantes sont prsentes
{ ();//lecture des donn es arriv es analogWrite(6,cmd);//Transfert de ces donn es sur la pin 6 pour g n rer le signal
} delay(100); //delai de 100ms avant la nouvelle acquisition }
Exploitation de la bibliotheque ArduinoIO Library sous Simulink
![](/images/remos_downloads/detail/106/id-10688.10688.pdf-010.jpg)
Réponse à un échelon :System Identification sous Matlab
Choix de la commande P,PI :PID Tuning sous Matlab
Commande du procédé thermique
… … …
Implémentation de la commande sous Simulink
La boucle d’asservissement à implémenter sur Simulink se traduit par le schéma suivant :
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.
Implémentation de la commande sur la carte Arduino
Dans cette partie on va utiliser les fonctions offert par Arduino pour envoyer (la commande) et acquérir (la température instantanée). L’implémentation du régulateur se fera directement sur la carte Arduino.
![](/images/remos_downloads/detail/106/id-10688.10688.pdf-013.jpg)
…
L’implémentation du régulateur PID
Le code suivant permet d’implémenter le régulateur PID sur la carte Arduino.
f l o a t d el t a _ e r r e u r =0 ;
f l o a t somme_erreur = 0 ; // Somme de s e r r e u r s pour l ’ i n t g r a t e u r
f l o a t kp = 1.0886 ; // C o e f f i c i e n t p r o p o r ti o n n el
f l o a t ki = 0.005317 ; // C o e f f i c i e n t i n t g r a t e u r
f l o a t kd =0.27182 ; // C o e f f i c i e n t d r i v a t e u r
f l o a t ep , up , temp , u , e , i n t e g r a l , cmd ;
f l o a t d e ri v e ;
![](/images/remos_downloads/detail/106/id-10688.10688.pdf-015.jpg)
i n t c o n si g n e ;
void se tup ( ) {
S e r i a l . b egi n (9600 ) ;
}
void loo p ( )
{
temp=analogRead ( 0 ) ;
temp=temp∗ 0.48828125 ;
e=35−temp ;
d el t a _ e r r e u r = ( e−ep ) / 0 . 5 ;
![](/images/remos_downloads/detail/106/id-10688.10688.pdf-016.jpg)
somme_erreur=somme_erreur+e ∗ 0. 5 ;
cmd = kp∗ e + ki ∗somme_erreur + kd∗ d el t a _ e r r e u r ;
analogW ri te ( 6 , cmd∗(255/12 ) ) ;
ep=e ;
d ela y (500 ) ;// p e ri o d e d ’ e c h a n t i l l o n a g e
S e r i a l . w ri t e ( analogRead ( 0 ) ) ; / / e n voi e de l a donnee s u r l e po r t s e r i e
}
Il suffit d’exploiter la bibliothèque Instrument Control Toolbox pour la lecture de la température instantanée.