در این آموزش از ماژول MPU6050 با ESP32 برای اندازه گیری مقادیر شتاب سنج، ژیروسکوپ را با استفاده از سیستم عامل MicroPython استفاده کنیم. در این آموزش نحوه آپلود کتابخانه MPU-6050 MicroPython را با استفاده از uPyCraft IDE یا Thonny IDE روی بردهای ESP آموزش خواهم داد. همچنین، نحوه دریافت شتاب سنج، ژیروسکوپ را از ماژول MPU-6050 با ESP32 خواهیم دید. در ادامه آموزش MPU6050 با میکروپایتون با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
ماژول MPU6050
حالا زمان این رسیده با سخت افزار اصلی این آموزش، یعنی MPU6050 بیشتر آشنا بشیم. Mpu6050 دارای یک شتاب سنج سه محوره و یک ژیروسکوپ سه محوره MEMS میباشد. دقت ماژول مبدل آنالوگ به دیجیتال ۱۲ بیت بوده و میتواند مقادیر X ، Y ، Z را در یک زمان اندازه گیری کند. بافر این ماژول از نوع FIFO با ظرفیت ۱۰۲۴ بایت میباشد. این ماژول به عنوان Slave به آردوینو توسط پایههای SCL و SDA متصل میشود. با استفاده از پردازشگر دیجیتال، ۴ خروجی برای دستیابی به دقت قابل توجه، در حرکتهای کند و سریع در سنسور فراهم کرده است. با این روش کاربر میتواند بازه اندازه گیری را متناسب با شتاب یا سرعت تغییر دهد. به همین منظور در قسمت ژیروسکوپ سنسور چهار بازه ۲۵۰±، ۵۰۰±، ۱۰۰۰± و ۲۰۰۰± درجه بر ثانیه و در قسمت شتاب سنج سنسور چهار بازه ۲g، ±۴g، ±۸g، ±۱۶g± برای کاربر قابل انتخاب خواهد بود. توجه داشته باشید که ولتاژ کاری این ماژول ۳ الی ۵ ولت میباشد.
تراشه 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 با استفاده مقادیر ژایرو.
کلام آخر با سایفر
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.