LSM303C یک سنسور مگنومتر مبتنری بر MEMS شرکت ST می باشد . این سنسور توانایی سنجش میدان های مغناطیسی در سه جهت محور های x ، y و z را دارد . همچنین قابلیت اندازه گیری شتاب با دقت های 2 ، 4 و 8 g را دارد و دما را دارد . با استفاده از این ماژول می توانید زاویه /زیرو را به دست آورید . LSM303C بسیار کم مصرف می باشد و جهت  استفاده در گجت های پرتابل همانند تلفن های همراه را دارد . در این پروژه قصد داریم ماژول LSM303C را با استفاده از آردوینو راه اندازی کنیم و مقادیر به دست آمده از سنسور را در محیط Serial monitor چاپ کنیم . در تصویر زیر پایه های این ماژول نشان داده شده اند :

این ماژول دارای 11 پین به شرح زیر است :

1- VIN ورودی تغذیه ماژول که 3 تا 5 ولت است

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

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

4- CSA پین کنترل ارتباط ماژول برای شتاب سنج می باشد (در حالت عادی Pull up می باشد ) این پین اگر صفر شود ارتباط ماژول SPI خواهد بود و اگر یک باشد ارتباط به صورت I2C هست (تنها در خواندن مقدار شتاب )

5- CSM همانند پین CSA است با این تفاوت که برای خواندن مقدار مگنتومتر است .

6- INTA وقفه مربوط به شتاب

7- این در پایان هر داده برداری مگنتومتر تغییر وضعیت می دهد .

 

شماتیک اتصال ماژول به برد :

 

برنامه آردوینو :

#include "Wire.h"
#include "SparkFunIMU.h"
#include "SparkFunLSM303C.h"
#include "LSM303CTypes.h"

// #define DEBUG 1 in SparkFunLSM303C.h turns on debugging statements.
// Redefine to 0 to turn them off.

LSM303C myIMU;

void setup() {

  Wire.begin();//set up I2C bus, comment out if using SPI mode
  Wire.setClock(400000L);//clock stretching, comment out if using SPI mode

  Serial.begin(57600);//initialize serial monitor, maximum reliable baud for 3.3V/8Mhz ATmega328P is 57600

  if (myIMU.begin() != IMU_SUCCESS)
  {
    Serial.println("Failed setup.");
    while (1);
  }
}

void loop()
{
  //Get all parameters
  Serial.print("\nAccelerometer:\n");
  Serial.print(" X = ");
  Serial.println(myIMU.readAccelX(), 4);
  Serial.print(" Y = ");
  Serial.println(myIMU.readAccelY(), 4);
  Serial.print(" Z = ");
  Serial.println(myIMU.readAccelZ(), 4);

  // Not supported by hardware, so will return NAN
  Serial.print("\nGyroscope:\n");
  Serial.print(" X = ");
  Serial.println(myIMU.readGyroX(), 4);
  Serial.print(" Y = ");
  Serial.println(myIMU.readGyroY(), 4);
  Serial.print(" Z = ");
  Serial.println(myIMU.readGyroZ(), 4);

  Serial.print("\nMagnetometer:\n");
  Serial.print(" X = ");
  Serial.println(myIMU.readMagX(), 4);
  Serial.print(" Y = ");
  Serial.println(myIMU.readMagY(), 4);
  Serial.print(" Z = ");
  Serial.println(myIMU.readMagZ(), 4);

  Serial.print("\nThermometer:\n");
  Serial.print(" Degrees C = ");
  Serial.println(myIMU.readTempC(), 4);
  Serial.print(" Degrees F = ");
  Serial.println(myIMU.readTempF(), 4);

  delay(1000);//slow down output to make it easier to read, adjust as necessary
}

 

 

Tags:
About Author: USER_4