كد راه اندازي سنسور mpu9250 در آردواينو

با سلام و احترام

بنده فردا براي داده برداري به كارگاه ميرم لطفا كدي را كه نوشتم نگاهي كنيد اگر مشكلي داره يا براي افزايش دقت بايد تنظيمات كد اصلاح بشه بفرماييد. باتشكر

#include <MPU9250_WE.h>
#include <Wire.h>
#define MPU9250_ADDR 0x68

MPU9250_WE myMPU9250 = MPU9250_WE(MPU9250_ADDR);

void setup() {
Serial.begin(115200);
Wire.begin();
if(!myMPU9250.init()){
Serial.println(“MPU9250 does not respond”);
}
else{
Serial.println(“MPU9250 is connected”);
}

Serial.println(“Position you MPU9250 flat and don’t move it - calibrating…”);
delay(1000);
myMPU9250.autoOffsets();
Serial.println(“Done!”);

myMPU9250.setSampleRateDivider(5);

/* MPU9250_ACC_RANGE_2G 2 g

  • MPU9250_ACC_RANGE_4G 4 g
  • MPU9250_ACC_RANGE_8G 8 g
  • MPU9250_ACC_RANGE_16G 16 g
    */
    myMPU9250.setAccRange(MPU9250_ACC_RANGE_16G);

myMPU9250.enableAccDLPF(true);

/* Digital low pass filter (DLPF) for the accelerometer, if enabled

  • MPU9250_DPLF_0, MPU9250_DPLF_2, … MPU9250_DPLF_7
  • DLPF Bandwidth [Hz] Delay [ms] Output rate [kHz]
  • 0           460               1.94           1
    
  • 1           184               5.80           1
    
  • 2            92               7.80           1
    
  • 3            41              11.80           1
    
  • 4            20              19.80           1
    
  • 5            10              35.70           1
    
  • 6             5              66.96           1
    
  • 7           460               1.94           1
    

*/
myMPU9250.setAccDLPF(MPU9250_DLPF_6);

/* Set accelerometer output data rate in low power mode (cycle enabled)

  • MPU9250_LP_ACC_ODR_0_24 0.24 Hz
  • MPU9250_LP_ACC_ODR_0_49 0.49 Hz
  • MPU9250_LP_ACC_ODR_0_98 0.98 Hz
  • MPU9250_LP_ACC_ODR_1_95 1.95 Hz
  • MPU9250_LP_ACC_ODR_3_91 3.91 Hz
  • MPU9250_LP_ACC_ODR_7_81 7.81 Hz
  • MPU9250_LP_ACC_ODR_15_63 15.63 Hz
  • MPU9250_LP_ACC_ODR_31_25 31.25 Hz
  • MPU9250_LP_ACC_ODR_62_5 62.5 Hz
  • MPU9250_LP_ACC_ODR_125 125 Hz
  • MPU9250_LP_ACC_ODR_250 250 Hz
  • MPU9250_LP_ACC_ODR_500 500 Hz
    */
    //myMPU9250.setLowPowerAccDataRate(MPU9250_LP_ACC_ODR_500);

/* sleep() sends the MPU9250 to sleep or wakes it up.

  • Please note that the gyroscope needs 35 milliseconds to wake up.
    */
    //myMPU9250.sleep(true);

/* If cycle is set, and standby or sleep are not set, the module will cycle between

/* You can enable or disable the axes for gyroscope and/or accelerometer measurements.

  • By default all axes are enabled. Parameters are:
  • MPU9250_ENABLE_XYZ //all axes are enabled (default)
  • MPU9250_ENABLE_XY0 // X, Y enabled, Z disabled
  • MPU9250_ENABLE_X0Z
  • MPU9250_ENABLE_X00
  • MPU9250_ENABLE_0YZ
  • MPU9250_ENABLE_0Y0
  • MPU9250_ENABLE_00Z
  • MPU9250_ENABLE_000 // all axes disabled
    */
    //myMPU9250.enableAccAxes(MPU9250_ENABLE_XYZ);

}

void loop() {
xyzFloat accRaw = myMPU9250.getAccRawValues();
xyzFloat accCorrRaw = myMPU9250.getCorrectedAccRawValues();
xyzFloat gValue = myMPU9250.getGValues();
float resultantG = myMPU9250.getResultantG(gValue);
/*
Serial.println(“Raw acceleration values (x,y,z):”);
Serial.print(accRaw.x);
Serial.print(" “);
Serial.print(accRaw.y);
Serial.print(” “);
Serial.println(accRaw.z);
/*
Serial.println(“Corrected (‘calibrated’) acceleration values (x,y,z):”);
Serial.print(accCorrRaw.x);
Serial.print(” “);
Serial.print(accCorrRaw.y);
Serial.print(” ");
Serial.println(accCorrRaw.z);
*/
Serial.print("x= “);
Serial.print(gValue.x);
Serial.print(” y= “);
Serial.print(gValue.y);
Serial.print(” z= ");
Serial.println(gValue.z);

// Serial.print("Resultant g: “);
// Serial.println(resultantG); // should always be 1 g if only gravity acts on the sensor.
// Serial.println(” ");

delay(200);
}

سلام وقت بخیر

مهندس جان شما سوالات خودتون رو اینقدر پراکنده پرسیدید که اصلا مشخص نیست الان الین کدی که زدید برای چه کاری هست؟؟!!!

و در کد تنها چیزی که من مشاهده میکنم ، اثری از الگوریتمی که بخواد کار خاصی انجام بده نیست و شما از توابع آماده خود لایبراری جهت راه اندازی mpu استفاده کردید همین!!!

اینقده منظور شما از افزایش دقت چیه ؟؟؟ باید بیشتر توضیح بدید که چی رو میخوایید کنترل کنید که این دقت باید برای چه پارامتری بهتر بشه؟

لطفا تموم سوالات خودتون رو در یک جا و منسجم بپرسید والا با این روند به نتیجه ایی نمیرسید

 

سلام ممنون مهندس 

من فقط میخوام در سه جهت شتاب رو بر حسب متر بر مجذور ثانیه یک ماشینی رو اندازه بگیرم البته فقط کد باید طوری نوشته بشه که محدوده شتاب، فرکانس و مواردی از این قبیل که در نتایج تاثیر داره قابل تنظیم باشه تا بتونم بهینه ترین حالت رو پیدا کنم.

اگر کد خاصی مد نظرت هست لطفا کمک کنید ممنون

با سلام

شما مشکل راه‌اندازی سنسور رو نداری، و ما اینجا به شما کمک میکنیم بتوانید راه‌اندازی کنید، از اینجا به بعدش مطالعه می خواد، باید بررسی کنید دینامیک سیستم شما چه چیزی می باشد، که بر اساس اون نرخ نمونه برداری، دقت نمونه برداری، فرکانس قطع فیلترهای پایین گذر، رنج اندازه گیری و ... رو انتخاب کنید.

 

راه دیگر این می باشد که از ChatGPT سؤال کنی.

سلام ممنون مهندس
من فقط میخوام در سه جهت شتاب یک ماشینی رو اندازه بگیرم البته فقط کد باید طوری نوشته بشه که محدوده شتاب، فرکانس و مواردی از این قبیل که در نتایج تاثیر داره قابل تنظیم باشه تا بتونم بهینه ترین حالت رو پیدا کنم

مشکلی که دارم اینه که سنسور adxl 345 همون شتاب رو مثلا ۵۰ متر بر مجذور ثانیه نشون میده ولی mpu9250 همون شتاب رو ۷ متر بر مجذور ثانیه نشون میده.
مگر میشه یک وسیله که شتابش مشخص هست با دو سنسور اندازه بگیریم و اینقدر اختلاف وجود داشته باشه.
درضمن طبق مطالعه چند مقاله عددی که سنسور adxl345 نشون داده به مقاله ها نزدیکتر هست ولی دقتش پایین هست و به کارم نمیاد.
به همین دلیل میخوام mpu9250 استفاده کنم که روند خوبی داره و در مراحل مختلف با منطق مقاله ها همخوانی داره ولی عددی که نشون میده خیلی با عدد مقاله ها فاصله داره.