CHELLY NizarCHARED Amine FORMATION ARDUINO↔MATLAB/SIMULINK Commande d’un système thermique à l’aide de la carte Arduino UNO Hammamet 3/4 Mai 2014 TABLE DES MATIÈRES TABLE DES MATIÈRES Table des matières 1 Présentation de la carte Arduino et l’environnement Matlab/Simulink 4 1.1 Le matériel : Arduino UNO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 Le logiciel Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3 Structure d’un programme Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.4 L’environnement Matlab/Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 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 3 Acquisition des données 10 3.1 Présentation du ADC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.2 Acquisition des données : Capteur de distance Ultrason HC-SR04 . . . . . . . . . . . . . . . . . 11 3.2.1 Présentation du module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2.2 Branchement avec la carte Arduino UNO . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2.3 Exploitation de Instrument Control Toolbox . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.3 Acquisition des données : Capteur de température LM35 . . . . . . . . . . . . . . . . . . . . . . 13 3.3.1 Présentation du capteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.3.2 Branchement avec la carte Arduino UNO . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.3.3 Exploitation du package ArduinoIO Library . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.3.4 Exploitation de Instrument Control Toolbox . . . . . . . . . . . . . . . . . . . . . . . . . 14 4 Envoie des données 15 4.1 Présentation des sorties analogiques (mode PWM) . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.2 Commande PWM d’un moteur à courant continu . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.2.1 Présentation du schéma électronique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.2.2 Exploitation du package ArduinoIO Libraray . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.3 Commande d’une résistance chauffante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.3.1 Présentation du schéma électronique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.3.2 Exploitation du package ArduinoIO Libraray . . . . . . . . . . . . . . . . . . . . . . . . . 17 5 Présentation de la maquette 18 6 Modélisation du procédé thermique 19 6.1 Présentation de l’étape d’identification avec Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . 19 6.2 Acquisition de la réponse indicielle du système . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 6.3 Détermination de la fonction de transfert G(z) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 7 Commande du procédé thermique 23 7.1 Synthèse du régulateur numérique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 7.2 Implémentation de la commande sous Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 7.3 Implémentation de la commande sur la carte Arduino . . . . . . . . . . . . . . . . . . . . . . . . 27 7.3.1 Le régulateur PID Numérique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 7.3.2 L’implémentation du régulateur PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 1 TABLE DES FIGURES TABLE DES FIGURES Table des figures 1 Description de la Carte Arduino "Uno" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 L’interface du logiciel Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3 Emplacement de la bibliothèque ”Instrument Control Toolbox” . . . . . . . . . . . . . . . . . . . 7 4 Les blocs pour la communication série . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 5 Paramétrage des blocs pour la communication série . . . . . . . . . . . . . . . . . . . . . . . . . . 8 6 ArduinoIO Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 7 Les Blocs d’ArduinoIO nécessaires pour la commande . . . . . . . . . . . . . . . . . . . . . . . . 9 8 Emplacement COM de la carte Arduino UNO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 9 Type du CAN de la carte Arduino UNO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 10 Capteur de distance HC-SR04 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 11 Branchement du HC-SR04 avec la carte Arduino UNO . . . . . . . . . . . . . . . . . . . . . . . . 11 12 Acquisition de la distance sous Instrument Control Toolbox . . . . . . . . . . . . . . . . . . . . . 12 13 Capteur de température LM35 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 14 Branchement du Capteur LM35 avec Arduino UNO . . . . . . . . . . . . . . . . . . . . . . . . . 13 15 Acquisition de la température sous ArduinoIO Library . . . . . . . . . . . . . . . . . . . . . . . . 14 16 Acquisition de la température sous Instrument Control Toolbox . . . . . . . . . . . . . . . . . . . 14 17 Description du signal PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 18 Exemles de variation du rapport cyclique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 19 Branchement de la carte Arduino UNO avec un moteur DC . . . . . . . . . . . . . . . . . . . . . 16 20 Envoie de la commande PWM sous ArduinIO Library . . . . . . . . . . . . . . . . . . . . . . . . 16 21 Branchement de la carte Arduino UNO avec une lampe . . . . . . . . . . . . . . . . . . . . . . . 17 22 Envoie de la commande PWM sous ArduinIO Library . . . . . . . . . . . . . . . . . . . . . . . . 17 23 Branchement du procédé avec la carte Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 24 Une vue de la maquette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 25 L’utilisation de l’outil System Identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 26 Modèle Simulink pour la détermination de la réponse indicielle . . . . . . . . . . . . . . . . . . . 19 27 L’interface de l’outil System identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 28 Choix des types des données ”Time Domain Data” . . . . . . . . . . . . . . . . . . . . . . . . . . 20 29 Saisie des données relatives aux Input et Output du système . . . . . . . . . . . . . . . . . . . . . 21 30 Choix de la description du système à estimer”Tranfer Function” . . . . . . . . . . . . . . . . . . . 21 31 Choix du nombre des pôles et zéros de la fonction de transfert à estimer . . . . . . . . . . . . . . 22 32 Visualisation du résultat de l’estimation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 33 Récupération de la fonction de transfert estimée . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 34 Emplacement de l’outil PID tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 35 Interface de l’outil ”PID tuning” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 36 Importation du modèle estimé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 37 Interface de l’outil ”Import Linear System” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 38 Choix du régulateur à implémenter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 39 Récupération des paramétrés du régulateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 40 Synoptique de la boucle d’asservissement à implémenter . . . . . . . . . . . . . . . . . . . . . . . 26 41 Modèle Simulink d’asservissement de température . . . . . . . . . . . . . . . . . . . . . . . . . . 26 42 Saisie des paramétrés du régulateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 43 Schéma synoptique de l’asservissement à implémenter . . . . . . . . . . . . . . . . . . . . . . . . 27 2 Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique Formation Arduino ⇔ Matlab/Simulink Commande d’un système thermique CHELLY.com +216 50 02 33 70 Nizar CHELLY-Amine CHARED 3 Hammamet Mai 2014 .com +216 50 48 00 27 CHARED. Amine Ingénieur en Informatique amineaby@gmail. Nizar Ingénieur en Électrique et Automatique chellynizar@gmail. 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.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.Ce logiciel va nous permettre de programmer la Nizar CHELLY-Amine CHARED 4 Hammamet Mai 2014 .11) – Digital read(2-19) – Digital write(2-19) 1.9. amateurs ou professionnels de créer des systèmes électroniques plus ou moins complexes. David Mellis et Nicholas Zambetti. 1.10. C’est un outil qui va permettre aux débutants. composée de six individus : Massimo Banzi. David Cuartielles.5. Le logiciel est gratuit et open source dont la simplicité d’utilisation est remarquable. Gianluca Martino.Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 1 Présentation de la carte Arduino et l’environnement Matlab/Si- mulink Arduino est un projet créé par une équipe de développeurs. Cette équipe a créé le "système Arduino".2 Le logiciel Arduino Arduino IDE ( Integrated Development Environment ).3V Pin :50mA – Flash Memory :32 KB – Clock Speed : 16MHz – Pins assignments : – Analog read(A0-A5) – Analog write[PWM] (3.6. Tom Igoe. Toutes les variables doivent être déclarées. Un paragraphe qui commence par "/*" et qui se termine par "*/" est considéré comme un commentaire 3. Exemple : le programme "Blink" : Nizar CHELLY-Amine CHARED 5 Hammamet Mai 2014 .. Un bloc d’instructions (définition d’une fonction.Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique carte Arduino pour : – Réaliser l’interfacage avec Matlab/simulink – Implémenter la commande directement sur la carte." 4... La fonction "void loop" qui est ensuite exécutée indéfiniment en boucle. 2. boucle "while" ou "if"/"else".) avant d’être utilisées.float.. Remarque : On peut relancer le programme en actionnant le bouton poussoir "reset" sur la carte. 2. Figure 2 – L’interface du logiciel Arduino 1. La fonction de configuration "void setup" exécutée une seule fois au lancement du pro- gramme. Toute ligne d’instruction de code doit se terminer par un point virgule " . 5. Un programme (ou "sketch") Arduino est constitué de 2 fonctions distinctes : 1.) doit être délimité par des accolades ouvrantes "" puis fermantes "". ainsi que leur type (int.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 : 1.. Une ligne qui commence par "//" est considérée comme un commentaire. 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.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 . HIGH) . LOW) . d’analyse de données. et de traitement d’image. OUTPUT) . 2. On a t t e n d un d e l a i de 1000ms ( s o i t 1 s ) . 1. de visualisation. } Et ainsi de suite tant que le circuit est alimenté. Utilisation du package ArduinoIO. 2 L’interfacage Arduino↔Matlab/Simulink Il existe trois possibilités d’interfacer la carte Arduino avec Matlab/Simulink. tel que les systèmes de com- munications.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. de commandes. de traitement visuel. à savoir : 1. d i g i t a l W r i t e (DEL. Utilisation du package Arduino Target.Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique i n t DEL = 5 . On a t t e n d un d e l a i de 1000ms ( s o i t 1 s ) .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 . de traitement des signaux. void setup ( ) { pinMode (DEL. 2. tels que C. 2. et le Fortran. MATLAB est un environnement de programmation pour le développement d’algorithme. Programmation de la carte Arduino Uno comme une carte d’interface. En utilisant MATLAB. SIMULINK est un environnement pour la simulation multidomaiane. 3.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. simuler. d e l a y ( 1 0 0 0 ) . mettre en application.1. la ré- solution des problèmes de calcul complexes se fait plus rapidement qu’avec des langages de programmation traditionnels.Il fournit un environne- ment graphique interactif et un ensemble de bibliothèques de bloc qui permettent de concevoir.Toutes les cartes Arduino ont au moins un port Nizar CHELLY-Amine CHARED 6 Hammamet Mai 2014 . et examiner une variété de systèmes. d e l a y ( 1 0 0 0 ) . et de calcul numérique. C++.4 L’environnement Matlab/Simulink C’est un logiciel de calcul mathématique pour les ingénieurs et les scientifiques créé par Mathworks. / / ouvre l e p o r t s e r i e . // 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) .Serial. s o r t i e ) .(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 . – read() : Permet la lecture des bits entrants sur le port série(acquisition des données). b e g i n ( 9 6 0 0 ) . 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.OUTPUT) . / / 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 ) .1. / / 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 . Les paramétrés à configurer sont : – Communication Port Nizar CHELLY-Amine CHARED 7 Hammamet Mai 2014 . communique sur les pins (0 :RX) et 1 :(TX)) avec l’ordinateur par l’intermédiaire d’USB. – Serial Send : Envoie des données binaires via le port série.Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique série (également connue sous le nom d’UART ou USART). // 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 } 2.Ces données sont stockées dans le buffer qui peut sauvegarder 64 bit. read ( ) . – Serial Receive : Acquisition des données binaires via le port série. // s o r t i e void setup ( ) { S e r i a l . // e n t r e e CAN i n t s o r t i e . 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 . w r i t e ( e n t r e e ) . – available() : Permet d’obtenir le nombre de bit (caractères) disponibles pour lire du port série. f i x e l e d e b i t a 9600 bauds pinMode ( 6 .2 Traitement des données sous Simulink La bibliothèque Instrument Control Toolbox offre les blocs qui permettent l’échange des données binaires. – write() : Permet l’écriture des bits sur le port série. // Envoie de l a donnee s u r l e p o r t USB i f ( S e r i a l . / / 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 . pde vers le logiciel Arduino. Télécharger le package ArduinoIO 2.1 Pré-chargement du programme dans la carte Arduino 1. 4. Aller vers : ”ArduinoIO\pde\adiosrv” * 5. Elle consiste à pré-charger un programme dans la carte Arduino afin que celle-ci fonctionne en serveur. Ouvrir le dossier décompressé. 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.Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 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.2 ArduinoIO Cette solution consiste à utiliser la carte arduino comme une interface d’entrées(Analog Input)/sorties(Analog/Digital Output). 2. 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). Charger le fichier adiosrv. Nizar CHELLY-Amine CHARED 8 Hammamet Mai 2014 . Décompresser à la racine de votre disque dur. exemple E :\arduinoio 3.Ce package permet de communiquer Matlab ou Simulink avec la carte Arduino via un câble USB. 4.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é. (1) Nizar CHELLY-Amine CHARED 9 Hammamet Mai 2014 . Figure 6 – ArduinoIO Library 2. La carte Arduino UNO est maintenant configuré pour être utiliser comme une carte d’interface Entrées/Sorties.5] on va acquérir les données du capteur.2 Installation du package ArduinoIO 1. – Arduino Analog Write : Pour configurer à partir de quel pin [3.9. Televerser ! * adiosrv est l’abréviation de : Analog and Digital Input and Output Server for MATLAB. Fermer et relancer Matlab puis Simulink 4. 2.10.2.Le coeffecient de ralentissement est contrôlable par l’intermédiaire du paramètre Speedup.6.5. Lancer Matlab2013 et placer vous dans le répertoire E :\arduinoio 2. 2.11] on va envoyer la commande en PWM vers l’actionneur. Dans les bibliothèques se trouvent maintenant les blocs dans Arduino IO library.Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 6.1. Exécuter la commande : install-arduino 3.4 Exploitation du package ArduinoIO sous Matlab Le package ArduinoIO offre une panoplie de commandes permettant d’écrire un programme sous Matlab (M-file).2. Pour cela il suffit de voir dans Gestionnaire des périphériques. 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(0 port0 ).2.2. – Arduino Analog Read : Pour configurer à partir de quel pin [0.voir Figure 4. – Arduino IO Setup : Pour configurer sur quel port la carte Arduino UNO est connectée.3. . 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). // lecture de l’etat de la pin 4 – digitalWrite Exemple :a.1 Présentation du ADC La carte Arduino Uno dispose de 6 entrées analogiques notées A0.pinMode(11.10) . – digitalRead Exemple :val=a..Il a une résolution de 10 bits. la durée d’une conversion est de l’ordre de 100µs.Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique Figure 8 – Emplacement COM de la carte Arduino UNO Parmi les commandes qui sont accessibles on retrouve : – pinMode Exemple :a. // mettre la pin 13 à l’etat bas 0V – analogRead Exemple :val=a.’output’) // configurer la pin 11 comme sortie. La donnée numérique qu’il fournit après conversion est donc comprise entre 0 et 1024. 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. Figure 9 – Type du CAN de la carte Arduino UNO Nizar CHELLY-Amine CHARED 10 Hammamet Mai 2014 .digitalWrite(13. // lecture de la pin 0 de l’ADC – analogWrite Exemple :a.digitalRead(4) .analogWrite(3. A1.analogRead(0) .A5 mais d’un seul convertisseur analogique/numérique.0) . Dans la suite.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. 3 Acquisition des données 3. // envoyer sur la pin 10 un signal pwm de rapport cyclique 10/255 2. du.haut) × (2) 2 3. s’il détecte un objet devant lui.2 Branchement avec la carte Arduino UNO Figure 11 – Branchement du HC-SR04 avec la carte Arduino UNO Nizar CHELLY-Amine CHARED 11 Hammamet Mai 2014 .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 syntaxe de l’instruction permettant d’acquérir l’entrée analogique est la suivante : analogRead(pin) .2 Acquisition des données : Capteur de distance Ultrason HC-SR04 3. à la fin de la mesure. ECHO.du. 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. TRIG. Et . 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.1 Présentation du module Ce module dispose de 4 pins de sortie : VCC .2.son : 340m/s Distance = (Durée.2. – pin : la pin sur la quelle on souhaite acquérir le signal analogique.Formation Arduino ↔ Matalab/Simulink 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 pin "ECHO" passe au niveau haut (5V).niveau. 3. d i s t a n c e . pinMode ( echoPin . } 2. } void loop ( ) { // Envoyer l e s i g n a l s u r l a p in 8 d i g i t a l W r i t e ( t r i g P i n .3 Exploitation de Instrument Control Toolbox 1. – Un bloc Serial Configuration – Un bloc Serial Receive – Un bloc Display ou Scope pour assurer la lecture de la distance en temps réel. pinMode ( t r i g P i n . Développement du modèle Simulink : Il suffit d’utiliser les blocs offert par Instrument Control Toolbox. delayMicroseconds (2) . INPUT) . void setup ( ) { S e r i a l . delayMicroseconds (10) . // a v o i r l a duree en ms d ur e e = p u l s e I n ( echoPin . OUTPUT) . Figure 12 – Acquisition de la distance sous Instrument Control Toolbox Nizar CHELLY-Amine CHARED 12 Hammamet Mai 2014 . begin (9600) . HIGH) . d i g i t a l W r i t e ( t r i g P i n . // e n v o i e de l a donnee s u r l e p o r t s e r i e Serial . // V i t e s s e du Son 340 m/ s // C a l c u l e r l a d i s t a n c e ( en cm) d i s t a n c e = ( duree / 2 ) ∗ 3 4 0 ∗ 0 . 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 // T r i g g e r Pin l o n g duree . write ( distance ) . LOW) . // D e l a i 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) .Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 3. LOW) . d i g i t a l W r i t e ( t r i g P i n .2. HIGH) . 0 0 0 1 . il suffit : – D’alimenter les pattes VCC et GND – De brancher la patte centrale à une entrée analogique d’Arduino (A0.3.entre.1 Présentation du capteur Le LM35 fait partie des capteurs de température électroniques de précision en structure intégrée.. Figure 14 – Branchement du Capteur LM35 avec Arduino UNO 3... Pré-chargement de adiosrv. La lecture analogique d’un signal de 0 à 5V étant codée de 0 à 1023.. V olt.Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 3. on a la formule : T emp = V olt ∗ (5/1023) ∗ 100.A5).3 Acquisition des données : Capteur de température LM35 3.3.3.pde sur la carte Arduino UNO 2. Développement du modèle Simulink Nizar CHELLY-Amine CHARED 13 Hammamet Mai 2014 .2 Branchement avec la carte Arduino UNO Pour exploiter le capteur LM35.(0et1023) (4) 3. Figure 13 – Capteur de température LM35 D’après la fiche technique : 10mV → C o (3) Autrement un volt correspond à 100 degrés Celsius.3 Exploitation du package ArduinoIO Library 1. 3. } 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 ) . } 2. w r i t e ( temp ) .Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique Figure 15 – Acquisition de la température sous ArduinoIO Library 3. // 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. void setup ( ) { S e r i a l . // 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 . Figure 16 – Acquisition de la température sous Instrument Control Toolbox Nizar CHELLY-Amine CHARED 14 Hammamet Mai 2014 .4 Exploitation de Instrument Control Toolbox 1. Pré-programmation de la carte Arduino UNO i n t temp . begin (9600) . 6. c’est-à-dire en modulation de largeur d’impulsion.9.5. 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.1 Présentation des sorties analogiques (mode PWM) La carte Arduino Uno dispose de 6 sorties (3. – pin : la pin sur la quelle on souhaite envoyer le signal (3.6.Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 4 Envoie des données 4. avec : τc = 2ms (5) τc La syntaxe de l’instruction permettant de générer le signal PWM est la suivante : analogWrite(pin. – valeur : le rapport cyclique entre 0 et 255. Figure 18 – Exemles de variation du rapport cyclique Nizar CHELLY-Amine CHARED 15 Hammamet Mai 2014 . Figure 17 – Description du signal PWM Lorsqu’un moteur ou une lampe est alimenté par ce type de tension.5.10 et 11) qui peuvent être utilisées en mode PWM. τo Vout = Vs × .Ce sont des signaux logiques binaires de fréquence constante (500Hz) mais de rapport cyclique variable. valeur) .9.10 ou 11). 4.2 Exploitation du package ArduinoIO Libraray 1.2.Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 4. Parmi les transistors pouvant satisfaire ces conditions on a choisit le TIP121.2 Commande PWM d’un moteur à courant continu 4. Développement du modèle Simulink Figure 20 – Envoie de la commande PWM sous ArduinIO Library Nizar CHELLY-Amine CHARED 16 Hammamet Mai 2014 . 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. le courant ne peut pas se stopper instantanément.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. Cette diode joue le rôle d’une diode de roue libre qui permet au courant de s’arrêter progressivement. 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).2.pde sur la carte Arduino UNO 2. Pré-chargement de adiosrv. 3 Commande d’une résistance chauffante 4.pde sur la carte Arduino UNO 2. 4.Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 4.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. Pré-chargement de adiosrv.3.3. Développement du modèle Simulink Figure 22 – Envoie de la commande PWM sous ArduinIO Library Nizar CHELLY-Amine CHARED 17 Hammamet Mai 2014 .2 Exploitation du package ArduinoIO Libraray 1. Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 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. Figure 23 – Branchement du procédé avec la carte Arduino La figure ci dessous montre une vue réelle de la maquette utilisée.Le capteur et la lampe sont installés dans une boite en bois avec un couvercle en plexiglass. Figure 24 – Une vue de la maquette Nizar CHELLY-Amine CHARED 18 Hammamet Mai 2014 . 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. 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. 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 Nizar CHELLY-Amine CHARED 19 Hammamet Mai 2014 .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.etc.. l’étude de la réponse d’un système à une entrée.Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 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). Figure 25 – L’utilisation de l’outil System Identification 6.. 6. Dans notre cas on va identifier notre système en étudiant la réponse de notre système à échelon de tension. La deuxième partie est assuré par l’outil System identification sous Matlab.. La première est assuré par l’environnement Simulink et le package ArduinoIO pour l’envoie et l’acquisition des données.1 Présentation de l’étape d’identification avec Matlab Cette étape est constituée de deux parties. Figure 28 – Choix des types des données ”Time Domain Data” Nizar CHELLY-Amine CHARED 20 Hammamet Mai 2014 . on passe à la détermination de la fonction de transfert G(z).Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 6. Ouvrir l’outil System identification Tool Figure 27 – L’interface de l’outil System identification 2. Cliquer sur import data et choisir Time domain data.3 Détermination de la fonction de transfert G(z) Après avoir déterminer la réponse du système. 1. Enfin cliquer sur Import. Figure 29 – Saisie des données relatives aux Input et Output du système 4.Formation Arduino ↔ Matalab/Simulink Commande d’un 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. Cliquer sur Estimate et choisir Transfer Function Models Figure 30 – Choix de la description du système à estimer”Tranfer Function” Nizar CHELLY-Amine CHARED 21 Hammamet Mai 2014 . Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 5. Figure 32 – Visualisation du résultat de l’estimation Nizar CHELLY-Amine CHARED 22 Hammamet Mai 2014 . Figure 31 – Choix du nombre des pôles et zéros de la fonction de transfert à estimer 6. Entrer le nombre de pôle et de zéro et cliquer sur Discrete-Time ensuite cliquer sur Estimate. Revenir à l’interface System Identification Tool et cliquer deux fois sur tf1. Figure 34 – Emplacement de l’outil PID tuning Nizar CHELLY-Amine CHARED 23 Hammamet Mai 2014 .Ki et KD en fonction de notre objectif de commande. Figure 33 – Récupération de la fonction de transfert estimée 7 Commande du procédé thermique L’étape de la commande du procédé thermique est constituée de deux parties. La deuxième partie consiste à implémenter sur Simulink puis sur la carte Arduino le correcteur PID(z). Une fenêtre apparait dans laquelle vous trouvez G(z).Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 7. La première partie consiste à utiliser l’outil Matlab PID Tuning pour déterminer les différents paramétrés de notre régulateur PID à savoir Kp . Ouvrir l’outil PID Tuner Figure 35 – Interface de l’outil ”PID tuning” 2. une nouvelle fenêtre apparait.Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 7. Cliqueur sur Import new plant.1 Synthèse du régulateur numérique 1. Figure 36 – Importation du modèle estimé Nizar CHELLY-Amine CHARED 24 Hammamet Mai 2014 . Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 3. Une nouvelle fenêtre apparait dans laquelle vous allez sélectionner tf1 ensuite cliquer sur import puis close. Figure 37 – Interface de l’outil ”Import Linear System” 4. Figure 38 – Choix du régulateur à implémenter Nizar CHELLY-Amine CHARED 25 Hammamet Mai 2014 . 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. Revenir à la fenêtre PID Tuner. Figure 41 – Modèle Simulink d’asservissement de température Nizar CHELLY-Amine CHARED 26 Hammamet Mai 2014 . le correcteur PID(z).2 Implémentation de la commande sous Simulink La boucle d’asservissement à implémenter sur Simulink se traduit par le schéma suivant : Figure 40 – Synoptique de la boucle d’asservissement à implémenter L’asservissement de notre procédé est assuré par le schéma Simulink ci-dessous qui regroupe la consigne. 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é.Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 5. Figure 39 – Récupération des paramétrés du régulateur 7. le traitement de la température issue du capteur et l’envoie de la commande PWM. le comparateur. Figure 42 – Saisie des paramétrés du régulateur 7.3 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). Figure 43 – Schéma synoptique de l’asservissement à implémenter Nizar CHELLY-Amine CHARED 27 Hammamet Mai 2014 . L’implémentation du régulateur se fera directement sur la carte Arduino.Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 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. // periode d ’ echantillonage S e r i a l . u . somme_erreur=somme_erreur+e ∗ 0 . float somme_erreur = 0 . ep=e . 0 8 8 6 . int consigne .3. float d e l t a _ e r r e u r =0 . w r i t e ( analogRead ( 0 ) ) . cmd .3.005317 . up .1 Le régulateur PID Numérique Ce type de correcteur est défini par l’équation différentielle suivante : Z t d UP ID (t) = Kp × e(t) + Ki × e(τ )dτ + Kd × e(t) (6) 0 dt L’équation de contrôle PID numérique peut être exprimée en de diverses manières. // 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 . float derive . temp . Nizar CHELLY-Amine CHARED 28 Hammamet Mai 2014 .27182 . // Somme des e r r e u r s pour l ’ i n t g r a t e u r float kp = 1 . e . void setup ( ) { S e r i a l . // C o e f f i c i e n t p r o p o r t i o n n e l float ki = 0. 5 . e=35−temp . mais une formulation générale est donnée par l’équation suivante [3] : (erreur − erreurprécédente ) P ID = Kp × erreur + Ki × (erreur × ∆t) + Kd × (7) X ∆t L’implémentation du régulateur PID sur la carte Arduino se fera de la manière suivante [3] : PID : E r r o r = S e t p o i n t − Actual I n t e g r a l = I n t e g r a l + ( E r r o r ∗ dt ) D e r i v a t i v e = ( E r r o r − P r e v i o u s _ e r r o r ) / dt Drive = ( E r r o r ∗kP ) + ( I n t e g r a l ∗ k I ) + ( D e r i v a t i v e ∗kD) Previous_error = Error w a i t ( dt ) GOTO PID 7. cmd ∗ ( 2 5 5 / 1 2 ) ) . / / 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. 4 8 8 2 8 1 2 5 . a n a l o g W r i t e ( 6 .2 L’implémentation du régulateur PID Le code suivant permet d’implémenter le régulateur PID sur la carte Arduino. delay (500) .Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique 7. 5 . temp=temp∗ 0 . begin (9600) . i n t e g r a l . } void loop ( ) { temp=analogRead ( 0 ) . // C o e f f i c i e n t i n t g r a t e u r float kd =0. d e l t a _ e r r e u r = ( e−ep ) / 0 . cmd = kp∗ e + k i ∗ somme_erreur + kd∗ d e l t a _ e r r e u r . arduino.Formation Arduino ↔ Matalab/Simulink Commande d’un système thermique Références [1] http ://www.mathworks.org/w/index. Nizar CHELLY-Amine CHARED 29 Hammamet Mai 2014 . using Arduino.cc/ [3] PID Control : A brief introduction and guide. [4] PID controller http ://en.wikipedia.php ?title=PID controller soldid=547984770.com/ [2] http ://www.