Arduino->matlan simulink
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Arduino->matlan simulink



  1. #1
    invite1d14c8e2

    Arduino->matlan simulink


    ------

    Bonjour à tous,

    Pour mon projet je dois prendre certaine mesure sur un moteur stirling. Je veux donc transferer les données de mon capteur de pression/température sur matlab afin d'avoir un graphique.

    Je me suis renseigné sur le net pour le matlab simulink et ça a l'air plus au moins facile d'accès et j'ai donc 2/3 questions dessus.

    Déjà, simulink génèrerait des codes automatiques ? pouvez vous m'expliquez comment ?
    Autant pour des lectures d'une tension au analogue c'est assez compréhensible, et pas mal fourni sur le net, mais j'ai un capteur qui ne dépend pas des analogues mais de SDA et SCL ( voici le capteur que je souhaite programmer : http://docs-europe.electrocomponents...6b81308df0.pdf . Il me fournit la température et la pression ). J'arrive à avoir des données correcte sur le programme arduino avec un code trouvé sur le net, mais j'avoue ne pas trop comprendre les connexions qu'il fait. Je comprends le code de calcule pour la pression au température mais pas tout ce qui est wire etc ( si vous pouvez m'éclairer ? ça m'aiderait peut etre pour le simulink du coup.. )

    Voici le code :
    Code:
    #include "Wire.h"
    #define addrs 0x6C // I2C bus address
    int P;
    int I;
    float T;
    
    int initialize(int i2c_addr)
    {
      //INITIALIZATION AFTER POWER UP
      Wire.beginTransmission(i2c_addr);
      Wire.write(0x0B); 
      Wire.write(0x00);
      int x = Wire.endTransmission();
      return x;
    }
    
    int pressure(int i2c_addr)
    {
      //MCU MODE
      Wire.beginTransmission(i2c_addr);
      Wire.write(0x00);   
      Wire.write(0xD0);  // reg 0 - address register high byte
    //  Wire.write(0x51);  // reg 1 - address register low byte
      Wire.write(0x40);  // reg 1 - address register low byte
      Wire.write(0x18);  // reg 2  - serial control register - indicate # bytes among others (page 7 bottom)
      Wire.write(0x06);  // reg 3 - value to be written to SENS control register
      int x = Wire.endTransmission();
    
      delay(33);
    
      //WRITE
      Wire.beginTransmission(i2c_addr);
      Wire.write(0x00);   
      Wire.write(0xD0);
      Wire.write(0x51);
      Wire.write(0x2C);
      x = Wire.endTransmission();
     
      //READ
      Wire.beginTransmission(i2c_addr);
      Wire.write(0x07);
      x = Wire.endTransmission();
    
      Wire.requestFrom(i2c_addr, 2);
      byte hibyte = Wire.read();
      byte lobyte = Wire.read();
      long raw = word( hibyte, lobyte); 
      //Serial.print("raw pressure:\t ");
      //Serial.println(raw);
     
      // D6F-PH5050AD3 ==> rangeMode=500 ==> int rd_pressure =  ((raw - 1024) * rangeMode * 2 / 60000L) - rangeMode
      // D6F-PH0505AD3 ==> rangeMode=50  ==> int rd_pressure =  ((raw - 1024) * rangeMode * 2 / 60000L) - rangeMode
      // D6F-PH0025AD1 ==> rangeMode=250 ==> int rd_pressure=(raw - 1024) * rangeMode / 60000L
      int rangeMode = 500;
      int rd_pressure =  ((raw - 1024) * rangeMode * 2 / 60000L) - rangeMode
      ;return rd_pressure;
    }
    
    float temperature(int i2c_addr)
    {
      //MCU MODE
      Wire.beginTransmission(i2c_addr);
      Wire.write(0x00);   
      Wire.write(0xD0);  // reg 0 - address register high byte
      // Wire.write(0x51);  // reg 1 - address register low byte
      Wire.write(0x40);  // reg 1 - address register low byte 
      Wire.write(0x18);  // reg 2  - serial control register - indicate # bytes among others (page 7 bottom)
      Wire.write(0x06);  // reg 3 - value to be written to SENS control register
      int x = Wire.endTransmission();
    
      delay(15);
     
      //WRITE
      Wire.beginTransmission(i2c_addr);
      Wire.write(0x00);   
      Wire.write(0xD0);
      Wire.write(0x61);
      Wire.write(0x2C);
      x = Wire.endTransmission();
     
      //READ
      Wire.beginTransmission(i2c_addr);
      Wire.write(0x07);
      x = Wire.endTransmission();
    
      Wire.requestFrom(i2c_addr, 2); 
      byte hibyte = Wire.read();
      byte lobyte = Wire.read();
      long raw = word( hibyte, lobyte); 
      //Serial.print("raw temperature:\t ");
      //Serial.println(raw);
      int temp = round((float)(raw - 10214) / 3.739);  // this is the temperature multiplied by 10...
      return (temp/10.0);             // ...and the function returs the float temperature with 0.1°C resolution
    }
    
    void setup()
    {  // Open serial communications
     Wire.begin();
      Serial.begin(9600);
      Serial.println("CLEARDATA");  // on efface les données déjà présentes, s'il y a lieu
      Serial.println("LABEL,Temps,Pression"); // titre des colonnes, dans Excel
    
     I=initialize (addrs); // start wire connection
    
    }
    
    void loop()
    {
        P=pressure(addrs);
        Serial.print("DATA,TIME,");
        Serial.print("pressure:\t ");
        Serial.println(P);
        T=temperature(addrs);
        Serial.print("temperature:\t ");
        Serial.println(T);
        delay(500); //delay for 30 seconds
    Voilà , comme vous pouvez le voir je suis assez perdu pour le moment par rapport à tous ça. C'est la première fois que je dois utiliser le simulink sur matlab et comme tous est en anglais j'ai un peu du mal à tout comprendre correctement.

    En espérant avoir été assez clair, bien à vous

    N2ico.

    -----

  2. #2
    Jack
    Modérateur

    Re : Arduino->matlan simulink

    Comme tu l'as remarqué, le capteur communique au moyen d'un bus I2C. wire est une "variable" permettant de représenter et de communiquer avec ce bus dans ton programme.

    Pour comprendre comment exploiter le capteur, la doc que tu as fournie est insuffisante. Je te recommande de charger la note d'application sur le site du fabricant qui va t'expliquer comment exploiter ce capteur.

  3. #3
    invite1d14c8e2

    Re : Arduino->matlan simulink

    Ok, merci, je lis ça et je reviens vers vous si j'ai des questions de compréhension , merci.

  4. #4
    invite1d14c8e2

    Re : Arduino->matlan simulink

    Re,
    https://www.omron.com/ecb/products/s...PH-01EN_r1.pdf
    à la page 6 il met tout un tas de fonction ? Je ne comprends pas vraiment ce qu'elle représente ? et sur quelles cables elles sont ? Et est-ce que je dois les représente sur simulink?

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : Arduino->matlan simulink

    et sur quelles cables elles sont ?
    Tu parles du registre de configuration C'est purement logiciel. Les fonctions de ce registre sont détaillées à la page suivante et un exemple de trame est donné à la page 9.

Discussions similaires

  1. Carte Arduino UNO R3 ou Arduino Mega 2560 R3 ?
    Par invite94b5085f dans le forum Électronique
    Réponses: 10
    Dernier message: 11/03/2015, 16h36
  2. Arduino anti rebond avec arduino
    Par invited0bffa74 dans le forum Électronique
    Réponses: 13
    Dernier message: 23/10/2014, 18h04
  3. Communication arduino-arduino avec module Xbee
    Par inviteda9a8a4b dans le forum Électronique
    Réponses: 2
    Dernier message: 23/12/2013, 18h24
  4. [simulink simscape] transcription d'un code simulink en simscape
    Par invite9ab57653 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 27/11/2012, 15h58
  5. Simulink
    Par invitedc3cc90b dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 01/03/2008, 00h30