در این آموزش از ماژول MPU6050 با ESP32 برای اندازه گیری مقادیر شتاب سنج، ژیروسکوپ را با استفاده از سیستم عامل MicroPython استفاده کنیم. در این آموزش نحوه آپلود کتابخانه MPU-6050 MicroPython را با استفاده از uPyCraft IDE یا Thonny IDE روی بردهای ESP آموزش خواهم داد. همچنین، نحوه دریافت شتاب سنج، ژیروسکوپ را از ماژول MPU-6050 با ESP32 خواهیم دید. در ادامه آموزش MPU6050 با میکروپایتون با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
سنسور ژیروسکوپ چیست؟
سنسور ژیروسکوپ (Gyroscope Sensor) یک قطعه الکترونیکی است که برای اندازهگیری سرعت یا جهت چرخش یک جسم در فضا استفاده میشود. ژیروسکوپها بر اساس اصل تدوین ژیروسکوپی کار میکنند که بر اساس آن، چرخش بدنی یک جسم حول محوری ثابت نگه داشته میشود.در سنسورهای ژیروسکوپ، یک سیستم معمولی شامل یک صفحه چرخان است که دارای جرم است. وقتی جسمی در حال چرخش است، صفحه چرخان متحرک شده و این تغییر در حرکت با استفاده از اصل تدوین ژیروسکوپی به عنوان یک سیگنال خروجی اندازهگیری میشود.
این سیگنال خروجی سپس توسط الکترونیک مربوطه تقویت میشود و به عنوان دادههای ورودی به سیستمهای کنترلی و محاسباتی ارسال میشود. سنسورهای ژیروسکوپ در بسیاری از دستگاههای الکترونیکی مورد استفاده قرار میگیرند، از جمله تلفنهای همراه، دستگاههای ناوبری، رباتها، بالپرندهها، اتومبیلها و دستگاههای مجازی واقعیت افزوده. این سنسورها میتوانند به طور خاص در کاربردهایی که نیاز به تشخیص و کنترل حرکت و جهت دستگاه دارند، بسیار مفید باشند.
نحوه ی کار و عملکرد سنسور ژیروسکوپ
سنسور ژیروسکوپ برای اندازهگیری سرعت و جهت چرخش یک جسم در فضا استفاده میشود. نحوه کار این سنسور به شرح زیر است: سنسور ژیروسکوپ شامل یک صفحه چرخان است که دارای جرم است. این صفحه چرخان به صورت محوری درون یک حلقه ثابت قرار دارد و قابلیت چرخش آزاد دارد.بر اساس اصل تدوین ژیروسکوپی، هر چرخشی که یک جسم داشته باشد، محور چرخش آن جسم نسبت به یک نقطه ثابت در فضا ثابت میماند. به عبارت دیگر، جسمی که در حال چرخش است، تمایل دارد محور چرخش خود را حفظ کند.وقتی جسمی حول محوری ثابت چرخش میکند، صفحه چرخان سنسور ژیروسکوپ نیز حرکت میکند به دلیل اصل تدوین ژیروسکوپی. این حرکت تغییرات زاویهای صفحه چرخان را تولید میکند. سنسور ژیروسکوپ با استفاده از سیستم الکترونیکی خود، تغییرات زاویهای صفحه چرخان را تشخیص میدهد. این تغییرات به عنوان سیگنال خروجی از سنسور دریافت میشوند.
سیگنال خروجی از سنسور ژیروسکوپ توسط یک میکروکنترلر یا چیپ پردازشگر قابل پردازش است. در این مرحله، سیگنالها تقویت و فیلتر میشوند. با توجه به سیگنالهای دریافتی از سنسور ژیروسکوپ، میکروکنترلر یا چیپ پردازشگر محاسباتی روی آنها انجام میدهد تا زاویهای که صفحه چرخان سنسور ژیروسکوپ در آن دورانده شده است را تخمین بزند. این زاویه میتواند زاویه چرخش یا سرعت زاویهای باشد، بسته به نیاز کاربرد خاص. مقادیر زاویه یا سرعت زاویهای که توسط سنسور ژیروسکوپ تخمین زده شدهاند، به عنوان خروجی داده به سیستم یا دستگاه مورد استفاده ارسال میشوند.
این دادهها میتوانند برای کنترل حرکت، پیگیری موقعیت، تعیین جهت یا هر کاربرد دیگری که نیاز به اندازهگیری و کنترل چرخش دارد، استفاده شوند.در کل، سنسور ژیروسکوپ با استفاده از اصل تدوین ژیروسکوپی، تغییرات زاویهای در یک جسم را تشخیص داده و آن را به صورت سیگنال الکتریکی خروجی میدهد. این سیگنالها سپس توسط یک میکروکنترلر یا چیپ پردازشگر پردازش میشوند تا به صورت دادههای زاویه یا سرعت زاویهای استفاده شوند.
ماژول MPU6050
حالا زمان این رسیده با سخت افزار اصلی این آموزش، یعنی MPU6050 بیشتر آشنا بشیم. Mpu6050 دارای یک شتاب سنج سه محوره و یک ژیروسکوپ سه محوره MEMS میباشد. دقت ماژول مبدل آنالوگ به دیجیتال ۱۲ بیت بوده و میتواند مقادیر X ، Y ، Z را در یک زمان اندازه گیری کند. بافر این ماژول از نوع FIFO با ظرفیت ۱۰۲۴ بایت میباشد. این ماژول به عنوان Slave به آردوینو توسط پایههای SCL و SDA متصل میشود.
با استفاده از پردازشگر دیجیتال، ۴ خروجی برای دستیابی به دقت قابل توجه، در حرکتهای کند و سریع در سنسور فراهم کرده است. با این روش کاربر میتواند بازه اندازه گیری را متناسب با شتاب یا سرعت تغییر دهد. به همین منظور در قسمت ژیروسکوپ سنسور چهار بازه ۲۵۰±، ۵۰۰±، ۱۰۰۰± و ۲۰۰۰± درجه بر ثانیه و در قسمت شتاب سنج سنسور چهار بازه ۲g، ±۴g، ±۸g، ±۱۶g± برای کاربر قابل انتخاب خواهد بود. توجه داشته باشید که ولتاژ کاری این ماژول ۳ الی ۵ ولت میباشد.
سنسور MPU6050 یک سنسور ژیروسکوپ و شتابسنج (Accelerometer) است که توسط شرکت InvenSense (اکنون بخشی از TDK Corporation) تولید شده است. این سنسور یکی از محبوبترین سنسورهای استفاده شده در پروژهها و دستگاههای الکترونیکی مختلف است.MPU6050 یک ترکیبی از ژیروسکوپ سه محوره و شتابسنج سه محوره است. این سنسور میتواند سرعت و جهت چرخش (در حالت ژیروسکوپ) و شتاب (در حالت شتابسنج) را اندازهگیری کند.
با استفاده از این دو حسگر، میتوان مقادیر سرعت زاویهای و شتاب خطی را در سه جهت (سه محور X، Y و Z) اندازهگیری کرد.MPU6050 از رابط ارتباطی I2C برای ارتباط با میکروکنترلرها و دستگاههای دیگر استفاده میکند. این سنسور دارای قابلیت کانفیگپذیری بالاست و اجازه میدهد تا پارامترهای مختلفی مانند دامنهی اندازهگیری و فرکانس نمونهبرداری تنظیم شوند.با استفاده از سنسور MPU6050 میتوان در بسیاری از پروژههای الکترونیکی از جمله رباتیک، دستگاههای پوشیدنی، بازیهای ویدیویی و دستگاههای مجازی واقعیت افزوده (AR) و واقعیت مجازی (VR) استفاده کرد.
- محورها: سه محور ژیروسکوپ (X، Y، Z) و سه محور شتابسنج (X، Y، Z)
- دامنه اندازهگیری ژیروسکوپ: ±۲۵۰، ±۵۰۰، ±۱۰۰۰، ±۲۰۰۰ در °/ثانیه
- دامنه اندازهگیری شتابسنج: ±۲g، ±۴g، ±۸g، ±۱۶g
- رزولوشن ژیروسکوپ: تا ۱۳۱ لرزش/ثانیه
- رزولوشن شتابسنج: تا ۱۶۳۸۴ تسا/ثانیه
- ولتاژ تغذیه: ۳٫۳ ولت (ولتاژ کاری) و ۵ ولت (ولتاژ تغذیه)
- رابط ارتباطی: I2C (سرعت ارتباطی قابل تنظیم تا ۴۰۰ کیلوبیت بر ثانیه)
- دمای عملکرد: -۴۰ درجه سانتیگراد تا +۸۵ درجه سانتیگراد
- مصرف انرژی: بسیار پایین و بهینه
تراشه ESP32
ESP32 می تواند به عنوان یک سیستم کامل مستقل یا به عنوان یک دستگاه MCU عمل کند و بار اضافی ارتباطات را در پردازنده اصلی برنامه کاهش دهد. ESP32 می تواند با سیستم های دیگر ارتباط برقرار کند تا از طریق SPI عملکرد Wi-Fi و بلوتوث را ارائه دهد. ESP32 با سوئیچ های آنتن داخلی، RF balun، تقویت کننده قدرت، تقویت کننده دریافت، فیلترها و ماژول های مدیریت توان یکپارچه شده است. ESP32 با حداقل الزامات برد مدار چاپی (PCB) ، عملکرد و تطبیق پذیری بی نظیری را به برنامه های شما اضافه می کند. برد ESP32 نسل پیشرفته ESP8266 است. یکی از تفاوتهای آن بلوتوث داخلیاش میباشد. همچنین دارای هسته وایفای ۲,۴ گیگا هرتزی و بلوتوث داخلی تولید شده با تکنولوژی ۴۰ نانومتری شرکت TSMC میباشد. این ماژول دارای بهترین پرفورمنس در مصرف انرژی میباشد یعنی با کمترین مصرف انرژی بهترین نتیجه را برای ما به همراه دارد. اگر بخواهیم دقیقتر به این برد نگاه کنیم باید بگوییم که این یک chip است که پلتفرم NodeMCU در اون پیاده سازی شده که به این نوع چیپ ها System on a chip microcontrollers هم گفته میشود.
شرح پروژه MPU6050 با میکروپایتون
MPU6050 دادههای خروجی را در یک گذرگاه I2C ارائه میکند. بنابراین، میتوانیم از رابط باس ۱۲C MPU6050 برای انتقال مقادیر شتابسنج ۳ محوره و ژیروسکوپ ۳ محوره به ESP3 استفاده کنیم. در پروژه MPU6050 با میکروپایتون ابتدا کتابخانه های مورد نیاز را به محیط نرمافزاری خود اضافه میکنیم و در ادامه با استفاده از یک فایل جدید اقدام به راهاندازی سناریو اصلی برای دریافت اطلاعات مورد نیاز از MPU6050 خواهیم کرد.
وسایل مورد نیاز
اتصالات پروژه MPU6050 با میکروپایتون
MPU6050 دارای ۸ پین برای راهاندازی است، اما برای اتصال به ESP32 و NodeMCU، تنها به چهار پایه اول نیاز داریم. یعنی VCC، GND، SCL و SDA که برای انتقال دیتا با استفاده از پروتکل i2c و همچنین تغذیه ماژول استفاده میشوند. جدول اتصالات بین دو ماژول را نشان می دهد. پین VCC با ولتاژ ۳٫۳ ولت از ماژول به ESP32 برای تغذیه متصل میشود. پایه SCL و پایه SCL به ESP32 متصل خواهند شد. به همین ترتیب، پایه SDA به پایه GPIO21 و SDL به GPIO22 بردهای ESP متصل میشود.
کتابخانه MPU6050
import machine class accel(): def __init__(self, i2c, addr=0x68): self.iic = i2c self.addr = addr self.iic.start() self.iic.writeto(self.addr, bytearray([107, 0])) self.iic.stop() def get_raw_values(self): self.iic.start() a = self.iic.readfrom_mem(self.addr, 0x3B, 14) self.iic.stop() return a def get_ints(self): b = self.get_raw_values() c = [] for i in b: c.append(i) return c def bytes_toint(self, firstbyte, secondbyte): if not firstbyte & 0x80: return firstbyte << 8 | secondbyte return - (((firstbyte ^ 255) << 8) | (secondbyte ^ 255) + 1) def get_values(self): raw_ints = self.get_raw_values() vals = {} vals["AcX"] = self.bytes_toint(raw_ints[0], raw_ints[1]) vals["AcY"] = self.bytes_toint(raw_ints[2], raw_ints[3]) vals["AcZ"] = self.bytes_toint(raw_ints[4], raw_ints[5]) vals["Tmp"] = self.bytes_toint(raw_ints[6], raw_ints[7]) / 340.00 + 36.53 vals["GyX"] = self.bytes_toint(raw_ints[8], raw_ints[9]) vals["GyY"] = self.bytes_toint(raw_ints[10], raw_ints[11]) vals["GyZ"] = self.bytes_toint(raw_ints[12], raw_ints[13]) return vals # returned in range of Int16 # -۳۲۷۶۸ to 32767 def val_test(self): from time import sleep while 1: print(self.get_values()) sleep(0.05)
بررسی کد و آپلود
در این قسمت پروژه MPU6050 با میکروپایتون نوبت به اجرای سناریوی اصلی MicroPython برای MPU6050 است تا مقادیر سنسور را دریافت کنیم. کد زیر را با نام main.py ذخیره و در ادامه main.py را در برد ESP32 خود آپلود کنید. این کد میکروپایتون مقادیر شتابسنج، ژیروسکوپ را از MPU6050 با استفاده I2C میخواند و آنها را در کنسول MicroPython نمایش میدهد.
محدودیت در دسترسی کامل به این مجموعه آموزش
دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندسهای دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید. |
نتیجه نهایی
در نهایت پس از آپلود کد های این پروژه از جمله فایل کتابحانه و کد اصلی پروژه و برقراری اتصالات ذکر شده، مقادیر سنسور MPU6050 در ترمینال نرمافزار upycraft نمایش داده خواهد، با استفاده از آموزش های قبلی قادر خواهید به این پروژه قابلیت های جدید اضافه کنید مانند نمایشگر oled و یا کنترل موتور dc با استفاده مقادیر ژایرو.
کلام آخر با سایفر
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.