برد آردوینو نانو ۳۳ 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
نصب کتابخانه LSM9DS1
برای استفاده از این سنسور بایستی کتابخانه Arduino_LSM9DS1 را نصب کنید. برای نصب کتابخانه از مسیر زیر اقدام کنید.
#include <Arduino_LSM9DS1.h> //فراخوانی کتابخانه
با نمایش پیغام 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);
سریال مانیتور را باز کنید. دیتا در هر سه محور نمایش داده میشود.
همچنین از سریال پلاتر هم میتوانید استفاده کنید.
راه اندازی ژایروسکوپ سنسور 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 برای نمایش ژایرو مشخص شده است.
در سریال پلاتر دیتا به صورت زیر نمایش داده میشود.
راه اندازی سنسور مغناطیسی 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 برای نمایش میدان مغناطیسی مشخص شده است.
در سریال پلاتر هم به صورت زیر است.
جمع بندی لیدی پای
سنسور IMU-LSM9DS از سنسورهای امبدد برد آردوینو مدل NANO 33 SENSE است که به تنهایی میتواند چندین ماهیت مختلف را تشخیص دهد. از قابلیت های این سنسور تشخیص شتاب خطی، ژایروسکوپ و مغناطیس سنج است که در این آموزش هر کدام جداگانه آموزش داده شده است. کد آردوینو هر بخش به صورت جداگانه در آموزش قرار گرفته شده است. از سنسورهایی که کاربرد ویژه ای در اجرای پروژه های اینترنت اشیا دارد.
وسایل مورد نیاز
چنانچه در مراحل راه اندازی برد ARDUINO NANO 33 SENSE BLE و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
سلام
آیا تمامی این ها را میتواند همزمان در سریال مانیتور نمایش داد؟
با سلام
بله دقیقا مشابه دیگر بردها است و توسط نرم افزار arduino ide میتوانید دیتا را در سریال مانیتور مانیتورینگ کنید.
salam
yani meydan meghnatisiii ro tashkhis mide?
با سلام
بله سنسور lsm9ds قابلیت تشخیص میدان مغناطیسی را دارد. مساعدت فرمایید و سوالات خود را فارسی تایپ کنید.
سلام
این سنسور LSM9DS1 عملا همون سنسور ژایرو و همون کارو میکنه درسته ؟
با سلام
بله عملکرد به همان صورت است و دقت اندازه گیری دقیق تر است.
سلام من یک گرادیومتر دارم که با یک سنسور کارمیکند ومن میخوام که با ۲تا سنسور کار کند نوع سنسور flc100هست آیا نیاز به برنامه نویسی دارد اگر راهنمایی کنید ممنون میشم
سلام
این مورد توسط بنده تست نشده است.