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 :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.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
En espérant avoir été assez clair, bien à vous
N2ico.
-----