مقدمه
آنچه در این آموزش یاد می گیرید
- ماژول جهت یاب چیست و چگونه کار میکند؟
- ارتباط ماژول جهت یاب و آردوینو
- ساخت قطب نما به کمک ماژول GY-511 و آردینو
اطلاعاتی درباره ماژول جهت یاب
نکته
لوازمی که به آن احتیاج دارید
سخت افزارهای مورد نیاز
نرم افزارهای مورد نیاز
راهاندازی ماژول جهت یاب GY-511 با آردینو
نکته
کالیبراسیون ماژول قطب نمای GY-511
سیم بندی
کد
در برنامه زیر به کتابخانههای Wire.h، مربوط به ارتباط I2C و LMS303.h ، مربوط به ماژول جهت یاب، نیاز خواهید داشت. میتوانید این کتابخانهها را از لینکهای زیر دانلود کنید:
نکته
/*
Compass Calibration
by Hanie Kiani
Home
*/
#include <Wire.h>
#include <LSM303.h>
LSM303 compass;
LSM303::vector<int16_t> running_min = {32767, 32767, 32767}, running_max = {-32768, -32768, -32768};
char report[80];
void setup() {
Serial.begin(9600);
Wire.begin();
compass.init();
compass.enableDefault();
}
void loop() {
compass.read();
running_min.x = min(running_min.x, compass.m.x);
running_min.y = min(running_min.y, compass.m.y);
running_min.z = min(running_min.z, compass.m.z);
running_max.x = max(running_max.x, compass.m.x);
running_max.y = max(running_max.y, compass.m.y);
running_max.z = max(running_max.z, compass.m.z);
snprintf(report, sizeof(report), "min: {%+6d, %+6d, %+6d} max: {%+6d, %+6d, %+6d}",
running_min.x, running_min.y, running_min.z,
running_max.x, running_max.y, running_max.z);
Serial.println(report);
delay(100);
}
compass.enableDefault();
آماده سازی و مقدار دهی اولیه ماژول
compass.read();
خواندن مقادیر خروجی ماژول جهت یاب
running_min.z = min(running_min.z, compass.m.z);
running_max.x = max(running_max.x, compass.m.x);
یافتن کمترین و بیشترین رنج اندازه گیری ماژول با مقایسه مقادیر اندازهگیری شده
ساخت یک قطب نمای دیجیتال
سیم بندی
کد
در این قسمت علاوه بر کتابخانه های قبلی به کتایخانه Servo.h نیز نیاز دارید. این کتابخانه به صورت پیشفرض روی نرم افزار آردینو شما قرار دارد.
/*
Compass Heading
by Hanie Kiani
Home
*/
#include <Wire.h>
#include <LSM303.h>
#include <Servo.h>
LSM303 compass;
int servoPin = 3;
Servo Servo1;
void setup() {
Serial.begin(9600);
Wire.begin();
Servo1.attach(servoPin);
compass.init();
compass.enableDefault();
compass.m_min = (LSM303::vector<int16_t>){-32767, -32767, -32767};
compass.m_max = (LSM303::vector<int16_t>){+32767, +32767, +32767};
}
void loop() {
compass.read();
float heading =compass.heading((LSM303::vector<int>){0, 0, 1});
Serial.println(heading);
Servo1.write(180-heading);
delay(100);
}
Servo Servo1;
معرفی سروموتور
Servo1.attach(servoPin);
compass.init();
compass.enableDefault();
Servo1.attach()
شماره پینی است که سروموتور را به آن متصل کردهایم. compass.m_min = (LSM303::vector){-32767, -32767, -32767};
compass.m_max = (LSM303::vector){+32767, +32767, +32767};
در این قسمت مینیمم و ماکزیمم رنجی که در قسمت قبل به دست آوردهایم را برای آردوینو تعریف میکنیم.
float heading =compass.heading((LSM303::vector){0, 0, 1});
تابع heading() زاویه محورهای مختصات را نسبت به یک محور ثابت میخواند. شما میتوانید محور ثابت خود را توسط برداری در آرگومان تابع تعریف کنید. به طور مثال در اینجا با معرفی(LSM303::vector<int>){0, 0, 1} محور Z به عنوان محور ثابت در نظر گرفته شده است.
Servo1.write(heading);
Servo1.write()
مقدار زاویه خوانده شده توسط ماژول جهت یاب، به سروموتور اعمال میشود. نکته
یگ گام جلوتر
- با اضافه کردن ماژول ESP8266 این قابلیت را به سیستم اضافه کنید که موقعیت شما را در هر لحظه به تلفن همراه شما گزارش کند.
Comments (4)
سلام.
کاربرد شتاب سنج تو این ماژول چیه ؟
چه تاثیری در روند اندازه گیری قطب نما داره؟؟
سلام.
یه ویژگی دیگه این ماژول شتاب سنجی هست، برای پیدا کردن قطب زمین همون مگنتومترش کافیه.
این ماژول میزان زاویه برحسب درجه نشون میده؟
اگر بخوایم سروو موتور نسبت به سطح زمین توسط ماژول شتاب سنج در زاویه های های ۰ و ۳۰ و ۶۰ و ۹۰ و ۱۲۰ و ۱۵۰ و ۱۸۰ تنظیم کنیم باید چیکار کنیم؟
سلام.
این ماژول یک مقدار به عنوان زاویه برمیگردونه که الزاما دقیقا بر حسب درجه نیست. در واقع باید کالیبراسیون رو خودتون انجام بدید. روش کالیبراسیون هم برای همه سنسورها مشابه همدیگه ست، یک بار ماژول رو در یک حالت که از نظر خودتون زاویه 0 هست قرار میدید. مقداری که ماژول برمیگردونه رو یاداشت میکنید. یکبار هم ماژول رو در حالت 90 درجه قرار میدید و مقدار برگردونده شده توسط ماژول رو یادداشت میکنید. بعد با داشتن این دو مقدار میتونید فرمول لازم برای اینکه مقدار برگردونده شده توسط ماژول رو به زاویه تبدیل کنید، بدست بیارید. یعنی در واقع باید mapping لازم رو انجام بدید.