سنسور شتاب و ژایرو MPU6050 با سنسور 3 محوره GY-521
سنسور شتاب و ژایرو MPU6050 با سنسور 3 محوره GY-521
MPU6050 GY-521 یک دستگاه پیگیری حرکت 6 محوره است که شامل یک ژیروسکوپ 3 محوره و یک شتاب سنج 3 محوره در یک تراشهی تکی است. این دستگاه در پروژهها و کاربردهای رباتیک و پروژههای الکترونیکی مختلف برای اندازهگیری حرکت، پیگیری جهتگیری و تشخیص حرکات استفاده میشود.ژیروسکوپ نرخ زاویهای چرخش را در سه محور X، Y و Z اندازهگیری میکند. شتاب سنج شتاب را در سه محور X، Y و Z اندازهگیری میکند. MPU6050 شامل یک DMP داخلی است که محاسبات تلفیق سنسور را بر عهده دارد و خروجی کواترنیونی که جهتگیری دستگاه را نشان میدهد، ارائه میدهد. ماژول GY-521 به طور معمول با استفاده از پروتکل ارتباطی I2C با دستگاههای خارجی مانند میکروکنترلرها یا بردهای آردوینو ارتباط برقرار میکند. ژیروسکوپ محدوده قابل تنظیمی برای محورهای ±250، ±500، ±1000 یا ±2000 درجه در ثانیه (dps) دارد. شتاب سنج محدوده قابل تنظیمی برای محورهای ±2g، ±4g، ±8g یا ±16g دارد.MPU6050 خروجی دیجیتال برای اندازهگیریهای ژیروسکوپ و شتاب سنج را فراهم میکند.ماژول همچنین شامل یک اتصال I2C کمکی است که میتواند برای اتصال حسگرها یا دستگاههای خارجی استفاده شود. ماژول GY-521 در محدوده ولتاژی 3.3 تا 5 ولت عمل میکند.
مشخصات فنی سنسور شتاب و ژایرو MPU6050 با سنسور 3 محوره GY-521
- تامین ولتاژ: 3.3V تا 5V.
- رابط ارتباطی: I2C.
- ژیروسکوپ:
- محدودهی تکمیلی قابل تنظیم: ±250، ±500، ±1000، ±2000 درجه در ثانیه.
- قابلیت اندازهگیری دقت زمان: ۱۶ بیت.
- شتابسنج:
- محدودهی تکمیلی قابل تنظیم: ±2g، ±4g، ±8g، ±16g.
- قابلیت اندازهگیری دقت زمان: ۱۶ بیت.
بررسی پایه های سنسور شتاب و ژایرو MPU6050 با سنسور 3 محوره GY-521
MPU6050 (شتابسنج و ژیروسکوپ):
- VCC: تغذیه (+3.3V تا +5V).
- GND: زمین (GND).
- SDA: خط دادهی سریال (Serial Data Line) برای ارتباط I2C.
- SCL: خط ساعت (Serial Clock Line) برای ارتباط I2C.
- XDA: خروجی ارتباط I2C کمکی (اختیاری).
- XCL: خروجی ارتباط I2C کمکی (اختیاری).
- AD0: پین آدرس ارتباط I2C (میتواند به VCC یا GND متصل شود).
- INT: خروجی قطعهی MPU6050 (میتواند به میکروکنترلر متصل شود).
سنسور 3 محوره (مانند سنسور شتابسنج و ژیروسکوپ):
- VCC: تغذیه (+3.3V تا +5V).
- GND: زمین (GND).
- X_OUT: خروجی محور X.
- Y_OUT: خروجی محور Y.
- Z_OUT: خروجی محور Z.
به همراه ماژول MPU6050 چه اقلامی باید خریداری شود؟
- برد آردوینو
- برد ESP
- کابل فلت
- برد بورد
راه اندازی سنسور MPU6050 با آردوینو
در ادامه روش راه اندازی سنسور MPU6050 با آردوینو آموزش داده شده است.ابتدا کتابخانه Wire را به کد اضافه میکنیم.مقدار ثابتی به نام MPU_addr را با مقدار آدرس I2C سنسور MPU6050 (0x68) تعریف میکنیم.در تابع setup، ارتباط I2C را با شروع کردن Wire.begin() آماده میکنیم.به MPU6050 ارسال پیام Wake-up را میفرستیم تا سنسور از حالت خواب خارج شود.ارتباط سریال با سرعت 9600 بیت بر ثانیه را با استفاده از Serial.begin(9600) شروع میکنیم.
در تابع loop، مراحل خواندن دادههای شتابسنج را تکرار میکنیم.ابتدا با استفاده از Wire.beginTransmission(MPU_addr) و Wire.write(0x3B)، به MPU6050 میگوییم که دادههای شتابسنج را بخواند.سپس با استفاده از Wire.requestFrom(MPU_addr, 6, true)، از MPU6050 درخواست ۶ بایت داده میکنیم.
دادههای شتابسنج را خوانده و در متغیرهای accelerometerX، accelerometerY و accelerometerZ ذخیره میکنیم.سپس مقادیر خوانده شده را در مانیتور سریال با استفاده از Serial.print() و Serial.println() چاپ میکنیم.در انتهای حلقه loop، با استفاده از delay(1000) یک تاخیر ۱ ثانیه ایجاد میکنیم.این کد ساده به شما امکان میدهد دادههای شتابسنج را از سنسور MPU6050 خوانده و آنها را در مانیتور سریال نمایش دهید.
#include <Wire.h>
const int MPU_addr = 0x68; // آدرس I2C سنسور MPU6050
void setup() {
Wire.begin(); // شروع ارتباط I2C
Wire.beginTransmission(MPU_addr);
Wire.write(0x6B); // آدرس ثبت PWR_MGMT_1
Wire.write(0); // روشن کردن MPU-6050
Wire.endTransmission(true);
Serial.begin(9600); // شروع ارتباط سریال
}
void loop() {
Wire.beginTransmission(MPU_addr);
Wire.write(0x3B); // آدرس شروع دادههای شتابسنج
Wire.endTransmission(false);
Wire.requestFrom(MPU_addr, 6, true); // درخواست 6 بایت داده
int16_t accelerometerX = Wire.read() << 8 | Wire.read();
int16_t accelerometerY = Wire.read() << 8 | Wire.read();
int16_t accelerometerZ = Wire.read() << 8 | Wire.read();
// چاپ دادههای شتابسنج
Serial.print("شتابسنج:\t");
Serial.print("X = "); Serial.print(accelerometerX);
Serial.print("\tY = "); Serial.print(accelerometerY);
Serial.print("\tZ = "); Serial.println(accelerometerZ);
delay(1000); // تاخیر ۱ ثانیه
}
راه اندازی سنسور MPU6050 با میکروپایتون
یک کد مایکروپایتون را برای خواندن دادههای سنسور MPU6050 با استفاده از رابط I2C نوشتهایم.
from machine import I2C, Pin: در این خط، ماژولهای I2C و Pin از کتابخانه machine را وارد میکنیم تا بتوانیم از آنها استفاده کنیم.
MPU_addr = 0x68: در این خط، آدرس I2C سنسور MPU6050 را تعیین میکنیم و آن را به متغیر MPU_addr اختصاص میدهیم.
PWR_MGMT_1 = 0x6B و ACCEL_XOUT_H = 0x3B: در این خطوط، آدرس ثبت PWR_MGMT_1 و آدرس شروع دادههای شتابسنج را تعیین میکنیم و به متغیرهای متناظرشان اختصاص میدهیم.
i2c = I2C(scl=Pin(5), sda=Pin(4)): در این خط، یک شیء I2C جدید با استفاده از پینهای SDA و SCL را تعریف میکنیم. در اینجا، پین 5 به عنوان پین SCL و پین 4 به عنوان پین SDA استفاده میشوند.
i2c.start() و i2c.stop(): این دستورات برای شروع و پایان ارتباط I2C استفاده میشوند.
i2c.writeto(MPU_addr, bytearray([PWR_MGMT_1, 0])): با استفاده از این دستور، دستور خام PWR_MGMT_1 برای خاموش کردن حالت خواب سنسور MPU6050 ارسال میشود.
while True:: با استفاده از این حلقه بینهایت، کد به طور مداوم ادامه خواهد داد.
i2c.start() و i2c.stop(): این دستورات برای شروع و پایان ارتباط I2C استفاده میشوند.
i2c.writeto(MPU_addr, bytearray([ACCEL_XOUT_H])): با استفاده از این دستور، دستور خام ACCEL_XOUT_H برای درخواست دادههای شتابسنج از سنسور ارسال میشود.
data = i2c.readfrom(MPU_addr, 6): با استفاده از این دستور، ۶ بایت داده از سنسور MPU6050 خوانده میشود و در متغیر data ذخیره میشود.
accelerometerX = int.from_bytes(data[0:2], 'big', True): با استفاده از این دستور، دادههای خام خوانده شده را به عنوان مقدار عددی شتاب در محور X تبدیل میکنیم.
accelerometerY = int.from_bytes(data[2:4], 'big', True) و accelerometerZ = int.from_bytes(data[4:6], 'big', True): با استفاده از این دستورات، دادههای خام بقیه محورها را به صورت عددی تبدیل میکنیم.
print("شتابسنج:") و print("X =", accelerometerX) و ...: با استفاده از این دستورات، مقادیر شتابسنج را در کنسول چاپ میکنیم.
utime.sleep(1): با استفاده از این دستور، برنامه را برای ۱ ثانیه متوقف میکنیم.
این کد مایکروپایتون به شما امکان میدهد دادههای شتابسنج را از سنسور MPU6050 خوانده و آنها را در کنسول چاپ کنید.
from machine import I2C, Pin
# تعریف آدرسهای ثبت MPU6050
MPU_addr = 0x68
PWR_MGMT_1 = 0x6B
ACCEL_XOUT_H = 0x3B
# آمادهسازی ارتباط I2C
i2c = I2C(scl=Pin(5), sda=Pin(4))
i2c.start()
i2c.writeto(MPU_addr, bytearray([PWR_MGMT_1, 0]))
i2c.stop()
# خواندن دادههای شتابسنج
while True:
i2c.start()
i2c.writeto(MPU_addr, bytearray([ACCEL_XOUT_H]))
data = i2c.readfrom(MPU_addr, 6)
i2c.stop()
# تبدیل دادههای خام به مقادیر شتاب
accelerometerX = int.from_bytes(data[0:2], 'big', True)
accelerometerY = int.from_bytes(data[2:4], 'big', True)
accelerometerZ = int.from_bytes(data[4:6], 'big', True)
# چاپ دادههای شتابسنج
print("شتابسنج:")
print("X =", accelerometerX)
print("Y =", accelerometerY)
print("Z =", accelerometerZ)
utime.sleep(1) # تاخیر ۱ ثانیه
مشخصات
- نوع ماژول
- شتاب و ژایرو
- تعداد قطعات
- 14 عدد
- ابعاد فیبر
- 2 * 1.5 سانتی متر
- ولتاژ مورد نياز
- 3 تا 5 ولت DC
- توان
- در چهار بازه 250±، 500±، 1000± و 2000± درجه در ثانیه برای ژیروسکوپ و در چهار بازه 2g± ±4g، ±8g، ±16g برای شتاب سنج
- دمای نگهداری
- 40- تا 85+ درجه سانتی گراد
- ظرفیت
- ترسیم الگوریتم های 9 محوری
- نوع کانکتور
- پین هدر
- پروتکل ارتباطی
- I2C
- ارتباط UART
- ندارد
- نوع سنسور
- شتاب سنج
ژایرو
توسط همین ماژول هم میتوانید اقدام به اجرای درخواستتان کنید. البته اگر فقط بخواهید یک سلول باتری لیتیومی را مدیریت شارژ کنید، همان گزینه ماژول TP4056 مناسب خواهد بود.
امکان راه اندازی چند سنسور DHT با ESP8266 با استفاده از MicroPython وجود دارد. سنسورهای DHT با پروتکل دیجیتال و از طریق پایههای GPIO قابل اتصال به میکروکنترلرها هستند.
برای ساخت یک سیستم کنترل دما با برد میکروکنترلر ESP32، به موارد زیر نیاز دارید:
یک برد میکروکنترلر ESP32
یک سنسور دما مثل DHT DS18B20
یک المان سرد کننده
با استفاده از کتابخانه DHT.h، میتوانید از سنسور دما برای خواندن دمای محیط استفاده کنید. سپس، میتوانید از این دما برای کنترل المان گرمایشی یا سرمایشی استفاده کنید.
در خصوص برنامه نویسی از کتابخانه DHT و در صورت نیاز کتابخانه وای فای برای ارسال دادهها به پلتفرم IoT باید استفاده کنید.