شروع کار با آردوینو و ماژول MPU6050 :
در این پروژه، به شما نشان میدهیم که سنسور MPU6050 چگونه کار میکند و همچنین چگونه با آردوینو ادغام میشود. در این آموزش ماژول MPU6050 را به برد آردوینو UNO متصل کرده و مقادیر شتاب سنج و ژیروسکوپ را دریافت میکنیم.
قبل از اینکه به سراغ پروژه برویم، شما نیاز دارید اطلاعاتپایهای درباره سنسور MPU6050 را بدانید. MPU6050 یک سنسور IMU است که یک شتاب سنج MEMS و ژیروسکوپ MEMS روی تنها یک چیپ را شامل میشود.
در اینجا، سنسور IMU برای واحد اندازهگیری داخلی است، سنسور IMU یک وسیلهای است که با استفاده از شتاب سنج، نیروی خاصی را اندازه میگیرد، همچنین، با استفاده از ژیروسکوپ نرخ زاویهای و با استفاده از مگنتومتر میدان مغناطیسی را اندازهگیری میکند.
سنسورهای IMU در رباتهای خود تعادل، هواپیماها، تلفنهای همراه، تبلتها، فضاپیماها، ماهوارهها، هواپیماهای بدون سرنشین و غیره برای هدایت، مکانیابی، جهتیابی، ردیابی حرکت و کنترل پرواز مورداستفاده قرار میگیرند.
دو نوع از رایجترین IMU ها، شتاب سنج ADXL 335 و MPU6050 هستند. ADXL 335 شامل یک شتاب سنج سه محوری است.
MPU6050، یک دستگاه ردیابی حرکت شش محوری میباشد که ترکیبی از یک شتاب سنج سه محوری و یک ژیروسکوپ سه محوری بر روی یک چیپ است. در ادامه به جزئیات MPU6050 میپردازیم.
مقدمهای بر سنسور MPU6050
MPU6050 یک دستگاه ردیابی حرکت شش محوری است که توسط Inven Sense طراحیشده است. ویژگیهای اصلی دستگاه MPU6050 در ادامه آورده شده است:
شتاب سنج سه محوری
ژیروسکوپ سه محوری
سنسور دمای دیجیتال
شش ADC 16 بیتی (سه تا برای شتاب سنج و سه تا برای ژیروسکوپ)
پردازشگر حرکتی دیجیتال ترکیبی (DMP)
بافر 1024B FIFO
سنسور MPU-6050 شش محوری گاهی بهعنوان دستگاه 6DoF (شش درجه آزادی) شناخته میشود چراکه که این دستگاه شش مقدار خروجی را فراهم میکند. (سه تا از طریق شتاب سنج و سه تا از طریق ژیروسکوپ). MPU-6050 میتواند با استفاده از پروتکل 12C ارتباط برقرار کند. برای اطلاعات بیشتر درباره این نوع از ارتباط به آموزش ” آشنایی با پروتکل های ارتباطی: (I2C) ” و ” ارتباط I2C بین بردهای آردوینو ” مراجعه کنید.
پردازشگر حرکتی دیجیتال یا DMP یک پردازشگر جاسازیشده است که میتواند بار محاسباتی را از پردازشگر میزبان، مانند آردوینو، با جمعآوری و پردازش دادهها از شتاب سنج، ژیروسکوپ و مگنومتر خارجی، کم کند.
اتصال MPU6050 به آردوینو
همانطور که قبلاً اشاره شد، MPU6050 تنها ارتباطات 12C را پشتیبانی میکند، ازاینرو باید فقط به پینهای 12C آردوینو متصل شود. پینهای 12C آردوینو با پینهای ورودی A4 و A5 شناخته میشوند یعنی، A4، SDA و A5، SCL است.
به MPU6050 بازگردیم، ما در این آموزش از یک برد متداول معمولی که هشت پین را فراهم میکند (ماژول GY-521 MPU-6050)، استفاده میکنیم. شکل بالا شماتیکی از برد متداول MPU6050 را نمایش میدهد.
در این سنسور، ما از پینهای SCL, SDA و INT برای اتصال به آردوینو استفاده میکنیم.
قطعات موردنیاز
سختافزار
برد آردوينو و کابل رابط | 1 عدد | |
ماژول GY-521 MPU-6050 | 1 عدد | |
سيم اتصال به بردبورد | 1 عدد |
نرمافزار
آردوینو IDE
پردازشگر IDE (برای نمایش سهبعدی)
دیاگرام مداری
تصویری که در ادامه آمده است دیاگرام مداری را برای اتصال MPU6050 به آردوینو UNO نشان میدهد. همانطور که قبلاً اشاره شد، اتصال بین MPU6050 و آردوینو باید با استفاده از پروتکل 12C انجام شود.
بنابراین، پین SCL آردوینو (A5) به پین SCL مربوط به MPU6050 متصل میشود. بهطور مشابه، پین SDA آردوینو (A4) به پین SDA روی برد MPU6050 وصل میشود.
علاوه بر این، ما از ویژگیهای وقفه (Interrupt) MPU6050 برای آشکار کردن (و یا قطع کردن) آردوینو زمانی که بافر FIFO 1024 بیتی پر است، استفاده میکنیم. بنابراین، پین INT مربوط به MPU6050 را به پین وقفه خارجی 0 آردوینو UNO یعنی پین 2 متصل میکنیم.
توجه: در ارتباطات 12C، MPU6050 همیشه بهعنوان رهرو (slave) عمل میکند.
خواندن مقادیر خام از MPU6050
قبل از آپلود برنامه واقعی، ما میخواهیم یک برنامه ساده برای خواندن مقادیر خام از شتاب سنج، ژیروسکوپ و سنسور دما را ببینیم. سیمهای SCL و SDA مربوط به MPU6050 را به پینهای 12C مشابه در آردوینو بهآسانی متصل کرده و کدی که در ادامه آمده است را آپلود میکنیم.
#include<Wire.h>
const int MPU6050_addr=0x68;
int16_t AccX,AccY,AccZ,Temp,GyroX,GyroY,GyroZ;
void setup(){
Wire.begin();
Wire.beginTransmission(MPU6050_addr);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
Serial.begin(9600);
}
void loop(){
Wire.beginTransmission(MPU6050_addr);
Wire.write(0x3B);
Wire.endTransmission(false);
Wire.requestFrom(MPU6050_addr,14,true);
AccX=Wire.read()<<8|Wire.read();
AccY=Wire.read()<<8|Wire.read();
AccZ=Wire.read()<<8|Wire.read();
Temp=Wire.read()<<8|Wire.read();
GyroX=Wire.read()<<8|Wire.read();
GyroY=Wire.read()<<8|Wire.read();
GyroZ=Wire.read()<<8|Wire.read();
Serial.print(“AccX = “); Serial.print(AccX);
Serial.print(” || AccY = “); Serial.print(AccY);
Serial.print(” || AccZ = “); Serial.print(AccZ);
Serial.print(” || Temp = “); Serial.print(Temp/340.00+36.53);
Serial.print(” || GyroX = “); Serial.print(GyroX);
Serial.print(” || GyroY = “); Serial.print(GyroY);
Serial.print(” || GyroZ = “); Serial.println(GyroZ);
delay(100);
}
اگر شما ترمینال سریال آردوینو را بازکنید، مقادیر خام را از شتاب سنج، ژیروسکوپ و دمای کالیبره شده را از سنسور دما دریافت خواهید کرد. دادهها، چیزی شبیه به زیر هستند:
همانطور که شما مشاهده میکنید، خواندن مقادیر خام از سنسور MPU6050 آسان است، اما ما نیاز داریم که محاسبات اضافی را روی این دادهها انجام دهیم تا YAW، Pitch و Roll را به دست آوریم.
من قبلاً اشاره کردم که در سنسور MPU6050، یک پردازشگر مخصوص به نام DMP یا پردازشگر حرکتی دیجیتال وجود دارد که روی چیپ مشابهی بهعنوان شتاب سنج و ژایرو جاسازیشده است. کاربرد DMP این است که میتواند به کمک یک نرمافزار ثابت برای انجام محاسبات پیچیده روی دادهای سنسورها برنامهنویسی شود.
بااینحال هیچگونه داکیومنت و برگه مشخصات مشخصی درباره DMP از طرف Inven Sense وجود ندارد و درنتیجه، ما انجام محاسبات سریع و مستقیماً روی دادهای سنسورها و روی این چیپ را از دست میدهیم.
Jeff Rowberg و دیگران کارهای بسیار خوبی در مهندسی معکوس روی اطلاعات مربوط به DMP با استفاده از آنالیز سیگنالهای 12C انجام دادهاند.
در قسمت دوم این آموزش و در آموزش ” شروع کار با آردوینو و ماژول MPU6050 (قسمت دوم) ” با نحوه برنامهنویسی برای به دست آوردن مقادیر یاو، پیچ و رول و همچنین مدلسازی سهبعدی در پردازش پایهای روی مقادیر ناشی از اتصال آردوینو و MPU6050 آشنا میشویم.
شروع کار با آردوینو و ماژول MPU6050
شروع کار با آردوینو و ماژول MPU6050
شروع کار با آردوینو و ماژول MPU6050