این برد یک ماژول بر پایه چیپ BMI160 می باشد . BMI160 توانایی اندازه گیری شتاب و زاویه ژیرو با دقت 16 بیتی و در سه محور را دارد . همچنین این سنسور دارای تکنولوژی MEMS با مصرف انرژی بسیار پایین می باشد که در جهت استفاده های پرتابل ساخته شده است . یکی از مزیت های این برد پشتیبانی آن از رابط های I2C و SPI است که می توان آن را توسط انواع مختلی از MCU ها و یا توسط برد های آردوینو راه اندازی نمود . این ماژول قابلیت تنظیم دقت در اندازه گیری شتاب و نیز تعداد نمونه برداری در زاویه ژیروسکوپی را دارد .

 

پین های ماژول BMI160 :

VIN پین تغذیه ماژول می باشد که می توان به 3.3 یا 5 ولت متصل کرد .

3V3 خروجی 3.3 ولت رگولاتور ماژول

GND زمین ماژول

SCL و SDA پین های ارتباط I2C ماژول

CS پین انتخاب یا فعال ساز ماژول در ارتباط SPI

 

 

مشخصات :

  • ولتاژ تغذیه 3.3 ولابخا
  • اندازه گیری شتاب در سه محور
  • اندازه گیری زاویه ژیرسکوپ در سه محور
  • دارای دقت های ±2g ، ±4g  ، ±8g و ±16g در اندازه گیری شتاب
  • دارای سرعت نمونه برداری زاویه ژیرو ±125/±250/±500/±1000/±2000
  • دارای 8Kbyte حافظه FIFO
  • دارای رابط ارتباطی I2C و SPI
  • دارای وقفه خارجی ضربه

 راه اندازی توسط آردوینو :

ابتدا لازم است کتابخانه این ماژول را از لینکزیر دانلود کنید و آن را در آردوینو IDE نصب کنید :

https://github.com/hanyazou/BMI160-Arduino/archive/master.zip

پس از نصب کتابخانه پین های ماژول را مطابق شکل زیر به آردوینو متصل کرده و کد های زیر را بر روی برد خود آپلود کنید . مقادیر شتاب در Serial monitor آردوینو IDE چاپ می شود :

#include <BMI160Gen.h>

void setup() {
  Serial.begin(9600); // initialize Serial communication
  while (!Serial);    // wait for the serial port to open

  // initialize device
  Serial.println("Initializing IMU device...");
  BMI160.begin(BMI160GenClass::SPI_MODE, /* SS pin# = */10);
  //BMI160.begin(BMI160GenClass::I2C_MODE);
  uint8_t dev_id = BMI160.getDeviceID();
  Serial.print("DEVICE ID: ");
  Serial.println(dev_id, HEX);

   // Set the accelerometer range to 250 degrees/second
  BMI160.setGyroRange(250);
  Serial.println("Initializing IMU device...done.");
}

void loop() {
  int gxRaw, gyRaw, gzRaw;         // raw gyro values
  float gx, gy, gz;

  // read raw gyro measurements from device
  BMI160.readGyro(gxRaw, gyRaw, gzRaw);

  // convert the raw gyro data to degrees/second
  gx = convertRawGyro(gxRaw);
  gy = convertRawGyro(gyRaw);
  gz = convertRawGyro(gzRaw);

  // display tab-separated gyro x/y/z values
  Serial.print("g:\t");
  Serial.print(gx);
  Serial.print("\t");
  Serial.print(gy);
  Serial.print("\t");
  Serial.print(gz);
  Serial.println();

  delay(500);
}

float convertRawGyro(int gRaw) {
  // since we are using 250 degrees/seconds range
  // -250 maps to a raw value of -32768
  // +250 maps to a raw value of 32767

  float g = (gRaw * 250.0) / 32768.0;

  return g;
}

 

 

Tags:
About Author: USER_4