آردوینو آردوینو نانو Nano

آموزش راه اندازی برد آردوینو NANO 33 بخش پنجم: سنسور IMU LSM9DS

getting-started-with-arduino-nano33-sense-ble-part-five-lsm9ds-digispark
نوشته شده توسط پریسا پوربلورچیان

برد آردوینو نانو ۳۳ Sense قابلیت های بسیار زیادی دارد. سنسورهای پرکاربرد این برد آن را به انتخاب اول پروژه‌های زیادی تبدیل کرده است. پنجمین بخش از سری آموزش های برد آردوینو نانو Arduino Nano 33 Sense بررسی یکی از کاربردی ترین سنسورهای امبدد برد است. سنسور ۹ محوره با تراشه LSM9DS1 قابلیت تشخیص شتاب، ژایرو و مغناطیس را دارد. در این آموزش به معرفی این سنسور و راه اندازی این سنسور خواهیم پرداخت. در ادامه راه اندازی سنسور IMU LSM9DS با مرجع تخصصی آردوینو نانو به زبان فارسی، دیجی اسپارک همراه باشید.

 


سنسور IMU LSM9DS


سنسور LSM9DS1 یک سنسور ۳D با قابلیت تشخیص شتاب خطی، ژایروسکوپ و مغناطیس سنج است. سنسور LSM قابلیت تشخیص شتاب خطی با اسکیل ±۲g/±۴g/±۸/±۱۶ g است. قابلیت تشخیص میدان مغناطیسی با اسکیل ±۴/±۸/±۱۲/±۱۶  و نرخ زاویه ±۲۴۵/±۵۰۰/±۲۰۰۰ dps است. سنسور LSD9DS1 از رابط باس ۱۰۰ kHz and 400 kHz  سریال  I2C بهر میبرد. همچنین از SPI هم پشتیبانی می‌کند. ماهیت مغناطیسی، شتاب سنج، ژایروسکوپ میتواند در مود کم مصرف برای مدیریت هوشمندانه مصرف انرژی تنظیم کرد. این سنسور به صورت پکیج LGA بسته بندی شده و در محدوده دمایی – ۴۰ تا  +۸۵ درجه کار می‌کند. از این سنسور در ساخت Indoor navigation, ساخت رابط های هوشمندانه کاربری، تشخیص حرکات، جهت نمایش نفشه استفاده می‌شود.

• ±۲/±۴/±۸/±۱۶  linear acceleration full scale
• ±۴/±۸/±۱۲/±۱۶ gauss magnetic full scale
• ±۲۴۵/±۵۰۰/±۲۰۰۰ dps angular rate full scale
• دارای خروجی ۱۶ بیتی
• پشتیبانی از پروتکل SPI I2C
• ولتاژ آنالوگ ۱٫۹ V to 3.6 V
• دارای اینتراپت قابل برنامه ریزی
•دارای سنسور امبدد داخلی دما
• Embedded FIFO

سنسور IMU LSM9DS برد آردوینو نانو 33 sense - دیجی اسپارک

 


نصب کتابخانه LSM9DS1


برای استفاده از این سنسور بایستی کتابخانه Arduino_LSM9DS1 را نصب کنید. برای نصب کتابخانه از مسیر زیر اقدام کنید.

 

#include <Arduino_LSM9DS1.h> //فراخوانی کتابخانه 

روند نصب کتابخانه سنسور IMU LSM9DS آردوینو 2 - دیجی اسپارک

با نمایش پیغام INSTALLED کتابخانه نصب شده و آماده ی به کار است.

 


راه اندازی شتاب سنج LSM9DS


سنسور LSM9DS1 قابلیت تشخیص شتاب در سه محور X ,Y , Z را دارد. برای راه اندازی این قابلیت از کدنویسی و استفاده از توابع مورد نیاز برای فراخوانی آن استفاده می‌کنیم. برای کدنویسی از نرم افزار آردوینو استفاده می‌کنیم. آن را انتخاب و کد را کپی و به نرم افزار انتقال دهید.

  //Arduino LSM9DS1 - Simple Accelerometer

#include <Arduino_LSM9DS1.h> //فراخوانی کتابخانه 

void setup() {
  Serial.begin(9600); //فعال سازی سریال مانیتور
 //اگر ارتباط برقرار نبود با پیغام نمایش دهد
  while (!Serial);
  Serial.println("Started");

  if (!IMU.begin()) {
    Serial.println("Failed to initialize IMU!");
    while (1);
  }

  Serial.print("Accelerometer sample rate = ");
//دیتای سمپل ریت
  Serial.print(IMU.accelerationSampleRate());
  Serial.println(" Hz"); // نمایش Hz
  Serial.println();
  Serial.println("Acceleration in G's");
  Serial.println("X\tY\tZ"); // دیتای هر سه محور X Y Z
}

void loop() {
  float x, y, z;

  if (IMU.accelerationAvailable()) {
    IMU.readAcceleration(x, y, z); //خواندن دیتا از سنسور در سه محور

    Serial.print(x);
    Serial.print('\t');
    Serial.print(y);
    Serial.print('\t');
    Serial.println(z);
  }
}

 

 


تحلیل کد آردوینو شتاب سنج LSM9DS


سپس بایستی مشخص کنیم که در صورتیکه ارتباط سنسور قطع شده باشد، با یک پیغام به ما نمایش دهد.

Serial.begin(9600); //فعال سازی سریال مانیتور
 //اگر ارتباط برقرار نبود با پیغام نمایش دهد
  while (!Serial);
  Serial.println("Started");

  if (!IMU.begin()) {
    Serial.println("Failed to initialize IMU!");
    while (1);

 

برای خواندن دیتای سمپل ریت از سنسور از تابع زیر استفاده می‌کنیم.

IMU.accelerationSampleRate()

 

سپی دیتای  سمپل دریافت شده را در سریال مانیتور نمایش میدهیم.

Serial.print("Accelerometer sample rate = ");
  // برای خواندن دیتای شتاب از تابع زیر استفاده می‌کنیم که همزمان برای نمایش دیتا در سریال مانیتور هم نوشته شده است.
  Serial.print(IMU.accelerationSampleRate());
  Serial.println(" Hz"); // نمایش Hz
  Serial.println();
  Serial.println("Acceleration in G's");
  Serial.println("X\tY\tZ"); // دیتای هر سه محور X Y Z

 

برای دریافت دیتای شتاب در سه محور X ,Y ,Z از تابع زیر استفاده شده است. سه متغیر به دلخواه در برنامه تعریف کرده و مختصات دیتا را دریافت می‌کنیم.

 float x, y, z;

  if (IMU.accelerationAvailable()) {
    IMU.readAcceleration(x, y, z); //خواندن دیتا از سنسور در سه محور

 

برای چاپ دیتا در هر سه محور در سریال مانیتور از دستور زیر استفاده می‌کنیم.

 Serial.print(x);
    Serial.print('\t');
    Serial.print(y);
    Serial.print('\t');
    Serial.println(z);

 

سریال مانیتور را باز کنید. دیتا در هر سه محور نمایش داده می‌شود.

نمایش اطلاعات سنسور IMU LSM9DS در سریال مانیتور - دیجی اسپارک

 

همچنین از سریال پلاتر هم میتوانید استفاده کنید.

نمایش اطلاعات سنسور IMU LSM9DS در سریال پلاتر - دیجی اسپارک

 


راه اندازی ژایروسکوپ سنسور LSM9DS


از دیگر قابلیت های سنسور IMU LSM9DS اندازه گیری پارامتر ژایرو است. مختصات ژایرو در سه محور X,Y,Z نمایش داده می‌شود. برای بررسی مختصات ها کد زیر را در به نرم افزار آردوینو انتقال دهید.

//Arduino LSM9DS1 - Simple Gyroscope

#include <Arduino_LSM9DS1.h> //فراخوانی کتابخانه 

void setup() {
  Serial.begin(9600); //فعال شدن سریال مانیتور 
  while (!Serial);
  Serial.println("Started");

  if (!IMU.begin()) {
    Serial.println("Failed to initialize IMU!");
    while (1);
  }
  Serial.print("Gyroscope sample rate = ");
  Serial.print(IMU.gyroscopeSampleRate()); //خواندن سمچل ریت از ژایرو
  Serial.println(" Hz");
  Serial.println();
  Serial.println("Gyroscope in degrees/second");
  Serial.println("X\tY\tZ"); //نمایش دیتا از سه محور XYX
}

void loop() {
  float x, y, z; // تعریف سه متغیر برای سه محور  X Y Z

  if (IMU.gyroscopeAvailable()) { //اگر دیتای ژایرو در دسترس بود
    IMU.readGyroscope(x, y, z); // دیتا را از سه محور  X Y Z بخواند

    Serial.print(x); // نمایش دیتای محور X
    Serial.print('\t');
    Serial.print(y); // نمایش دیتای محور Y
    Serial.print('\t');
    Serial.println(z); //نمایش دیتای محور Z
  }
}

 


 تحلیل کد آردوینو ژایروسکوپ LSM9DS


سپس در سریال مانیتور جهت اطمینان از ارتباط سنسور یک پیغام مشخص شده قرار میدهیم.

Serial.begin(9600); //فعال شدن سریال مانیتور 
  while (!Serial);
  Serial.println("Started");

  if (!IMU.begin()) {
    Serial.println("Failed to initialize IMU!");
    while (1);

 

توسط تابع زیر یک سمپل ریت از سنسور خوانده می‌شود.

IMU.gyroscopeSampleRate()

 

سمپل ریت در سه محور X ,Y ,Z نمایش داده شده است.

Serial.println("X\tY\tZ"); //نمایش دیتا از سه محور XYX

 

سه متغیر جداگانه برای  X, Y , Z در برنامه تعریف کرده و سپس دیتا را نمایش میدهیم. برای خواندن دیتا از تایع زیر استفاده می‌کنیم.

float x, y, z; // تعریف سه متغیر برای سه محور  X Y Z

  if (IMU.gyroscopeAvailable()) { //اگر دیتای ژایرو در دسترس بود
    IMU.readGyroscope(x, y, z); // دیتا را از سه محور  X Y Z بخواند

 

سپس دیتای دریافتی را در سریال مانیتور مشاهده می‌کنیم.

Serial.print(x); // نمایش دیتای محور X
    Serial.print('\t');
    Serial.print(y); // نمایش دیتای محور Y
    Serial.print('\t');
    Serial.println(z); //نمایش دیتای محور Z

 

سریال مانیتور را باز کنید. دیتای دریافتی از سنسور در سه محور X , Y ,Z برای نمایش ژایرو مشخص شده است.

سنسور ژایرو برد nano 33 sense - دیجی اسپارک

 

در سریال پلاتر دیتا به صورت زیر نمایش داده می‌شود.

اطلاعات سنسور ژایروسکوپ در سریال پلاتر IDE2 - دیجی اسپارک

 


راه اندازی سنسور مغناطیسی LSM9DS


سنسور LSM9DS1 قابلیت اندازه گیری میدان مغناطیسی است. کد را کپی و به نرم افزار آردوینو انتقال دهید.

//Arduino LSM9DS1 - Simple Magnetometer
#include <Arduino_LSM9DS1.h> //فراخوانی کتابخانه 

void setup() {
  Serial.begin(9600); //فعال سازی سریال مانیتور 
  while (!Serial);
  Serial.println("Started");

  if (!IMU.begin()) {
    Serial.println("Failed to initialize IMU!");
    while (1);
  }
  Serial.print("Magnetic field sample rate = ");
  Serial.print(IMU.magneticFieldSampleRate()); // خواندن دیتای سمپل ریت میدان مغناطیسی
  Serial.println(" uT");
  Serial.println();
  Serial.println("Magnetic Field in uT");
  Serial.println("X\tY\tZ");
}

void loop() {
  float x, y, z; //فراخوانی سه متغیر 

  if (IMU.magneticFieldAvailable()) { // اگر دیتا در دسترس بود
    IMU.readMagneticField(x, y, z); // توسط این تابع میدان مغناطیسی از سنسور خوانده می‌شود

    Serial.print(x); //نمایش دیتا در محور X
    Serial.print('\t'); 
    Serial.print(y); //نمایش دیتا در محور Y
    Serial.print('\t');
    Serial.println(z); //نمایش دیتا در محور Z
  }
}

 


تحلیل کد آردوینو مغناطیس LSM9DS


سپس در سریال مانیتور جهت اطمینان از ارتباط سنسور یک پیغام مشخص شده قرار میدهیم.

Serial.begin(9600); //فعال سازی سریال مانیتور 
  while (!Serial);
  Serial.println("Started");

  if (!IMU.begin()) {
    Serial.println("Failed to initialize IMU!");
    while (1);

 

توسط تابع زیر یک سمپل ریت از سنسور خوانده می‌شود.

IMU.magneticFieldSampleRate()

 

سمپل ریت در سه محور X ,Y ,Z نمایش داده شده است.

 Serial.print(IMU.magneticFieldSampleRate()); // خواندن دیتای سمپل ریت میدان مغناطیسی
  Serial.println(" uT");
  Serial.println();
  Serial.println("Magnetic Field in uT");
  Serial.println("X\tY\tZ");

 

سه متغیر جداگانه برای  X, Y , Z در برنامه تعریف کرده و سپس دیتا را نمایش میدهیم. برای خواندن دیتا از تایع زیر استفاده می‌کنیم.

float x, y, z; //فراخوانی سه متغیر 

  if (IMU.magneticFieldAvailable()) { // اگر دیتا در دسترس بود
    IMU.readMagneticField(x, y, z); // توسط این تابع میدان مغناطیسی از سنسور خوانده می‌شود

 

سپس دیتای دریافتی را در سریال مانیتور مشاهده می‌کنیم.

Serial.print(x); //نمایش دیتا در محور X
    Serial.print('\t'); 
    Serial.print(y); //نمایش دیتا در محور Y
    Serial.print('\t');
    Serial.println(z); //نمایش دیتا در محور Z

 

سریال مانیتور را باز کنید. دیتای دریافتی از سنسور در سه محور X , Y ,Z برای نمایش میدان مغناطیسی مشخص شده است.

سنسور مغناطیسی LSM9DS آردوینو نانو 33 - دیجی اسپارک

 

در سریال پلاتر هم به صورت زیر است.

 

سنسور سه کاره IMU LSM9DS آردوینو نانو 33 - دیجی اسپارک

 


جمع بندی لیدی پای


سنسور IMU-LSM9DS از سنسورهای امبدد برد آردوینو مدل NANO 33 SENSE است که به تنهایی میتواند چندین ماهیت مختلف را تشخیص دهد. از قابلیت های این سنسور تشخیص شتاب خطی، ژایروسکوپ و مغناطیس سنج است که در این آموزش هر کدام جداگانه آموزش داده شده است. کد آردوینو هر بخش به صورت جداگانه در آموزش قرار گرفته شده است. از سنسورهایی که کاربرد ویژه ای در اجرای پروژه های اینترنت اشیا دارد.

 


وسایل مورد نیاز


برد آردوینو نانو ۳۳ SENSE

 

چنانچه در مراحل راه اندازی برد ARDUINO NANO 33 SENSE BLE و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

درباره نویسنده

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۸ دیدگاه

    • با سلام
      بله دقیقا مشابه دیگر بردها است و توسط نرم افزار arduino ide میتوانید دیتا را در سریال مانیتور مانیتورینگ کنید.

    • با سلام
      بله سنسور lsm9ds قابلیت تشخیص میدان مغناطیسی را دارد. مساعدت فرمایید و سوالات خود را فارسی تایپ کنید.

  • سلام من یک گرادیومتر دارم که با یک سنسور کارمی‌کند ومن می‌خوام که با ۲تا سنسور کار کند نوع سنسور flc100هست آیا نیاز به برنامه نویسی دارد اگر راهنمایی کنید ممنون میشم