ساخت پروژه
0 محصولات نمایش سبد خرید

هیچ محصولی در سبد خرید نیست.

آموزش ارتباط I2C در میکروپایتون برای خواندن داده از سنسور MPU6050

آموزش ارتباط I2C در میکروپایتون برای خواندن داده از سنسور MPU6050

آموزش ارتباط I2C در میکروپایتون برای خواندن داده از سنسور MPU6050 ، آیا تا به حال فکر کرده‌اید چطور می‌شود با چند سیم ساده، داده‌های شتاب و زاویه را از یک سنسور پیشرفته در میکروپردازنده دریافت کرد؟ در این مقاله، قصد داریم به زبان ساده و کاربردی، پروتکل I2C در میکروپایتون را بررسی کنیم و با تمرکز بر MPU6050، راهنمایی دقیق برای خواندن داده‌ها از آن ارائه دهیم. هدف‌مان این نیست که صرفاً دستوری به خواننده بدهیم، بلکه می‌خواهیم دقیقاً همان احساسی را به شما منتقل کنیم که یک مهندس با تجربه در حال انتقال تجربه‌اش است.


1. چیستی I2C و انتخاب میکروپایتون

I2C (Inter-Integrated Circuit) یک پروتکل ارتباطی دو سیمه (SDA و SCL) است که امکان ارتباط چندین دستگاه را روی یک باس فراهم می‌کند. یکی از دلایل محبوبیت آن، مصرف پایین سیم و سادگی‌اش است. ابزارهایی مثل سنسورها و EEPROMها معمولاً از آن پشتیبانی می‌کنند.
در مقابل، میکروپایتون یک پیاده‌سازی سبک پایتون برای میکروکنترلرها به‌دلیل سادگی، خوانایی و سرعت توسعه‌اش، امروزه محبوبیت زیادی پیدا کرده. ترکیب این دو، یعنی میکروپایتون روی پلت‌فرم‌هایی مثل Raspberry Pi Pico با ارتباط I2C، قدرتی واقعی برای پروژه‌های DIY و آموزشی فراهم می‌کند.


2. سنسور MPU6050؛ چرا محبوب است؟

این سنسور کوچک، یک ماژول 6‌محوره (شتاب‌سنج + ژیروسکوپ) است که امکاناتی مثل اندازه‌گیری زاویه و شتاب را در قالب دیتاهای خام ارائه می‌دهد. با قیمت مناسب، مصرف انرژی کم و دقت قابل قبول، در بسیاری از پروژه‌ها مثل پهپادها، ماشین‌هایی که تعادل دارند و دستگاه‌های پوشیدنی کاربرد دارد


3. اتصالات فیزیکی

بر اساس تجربه منابع معتبر:

  • Raspberry Pi Pico (یا Pico W) به‌صورت گسترده استفاده می‌شود؛ اتصال‌های پایه معمولی شامل VCC، GND، SDA و SCL هستند
    • VCC → VBUS (پین 40)
    • GND → GND (پین 38)
    • SCL → GP15
    • SDA → GP14
  • برای Pico 2، از GP4 (SDA) و GP5 (SCL) با فرکانس 400kHz استفاده شده
مقاله پیشنهادی  راه‌اندازی و برنامه‌نویسی میکروکنترلر STM32 نصب و راه‌اندازی STM32CubeIDE و نوشتن اولین برنامه

4. راه‌اندازی I2C در میکروپایتون

مثالی از SunFounder (ساده و مناسب اولیه):

from machine import I2C, Pin
import utime
from imu import MPU6050

i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000)
mpu = MPU6050(i2c)

با این تنظیمات می‌توانید به شکل زیر داده‌ها را بخوانید:

ax, ay, az = mpu.accel.x, mpu.accel.y, mpu.accel.z
gx, gy, gz = mpu.gyro.x, mpu.gyro.y, mpu.gyro.z

و مقادیر شتاب و سرعت زاویه را دریافت کنید؛ توضیحات مفصل، توالی خواندن و کنترل خطا با منابع معتبر همخوانی دارد


5. نمونه کد کامل

from machine import I2C, Pin
import utime
from imu import MPU6050

# راه‌اندازی I2C روی پیکو
i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000)
print("I2C devices found:", i2c.scan())

# راه‌اندازی MPU6050
mpu = MPU6050(i2c)
utime.sleep(0.5)

while True:
    ax, ay, az = mpu.accel.x, mpu.accel.y, mpu.accel.z
    gx, gy, gz = mpu.gyro.x, mpu.gyro.y, mpu.gyro.z
    print(f"Accel (g): X={ax:.3f}, Y={ay:.3f}, Z={az:.3f}")
    print(f"Gyro (°/s): X={gx:.3f}, Y={gy:.3f}, Z={gz:.3f}")
    print("-" * 40)
    utime.sleep(0.5)

این اسکریپت در هر نیم ثانیه، داده‌های محورهای شتاب و ژیروسکوپ را چاپ می‌کند روند ساده‌ای که دید روشنی برای شروع فراهم می‌کند.


6. نکات نرم‌افزاری و خطاهای رایج

چند نکته که هر آدم باتجربه‌ای از قبل به آن دقت می‌کند:

  • اگر اسکن I2C دستگاه را نشناخت، اول اتصالات را بررسی کن مشکل ممکن است از breadboard یا سیم‌های نامرغوب باشد.
  • بیت SLEEP در رجیستر PWR_MGMT_1 باید خاموش (0) باشد؛ در غیر این صورت، دستگاه در حالت خواب می‌ماند و دیتایی نمی‌دهد (یا صفر می‌دهد)، جز WHO_AM_I که مقدار ‘h’ را نشان می‌دهد.
  • تمیزکاری لحیم‌ها (برای جلوگیری از اتصال کوتاه) ممکن است احتمال خطا را کاهش دهد

7. تحلیل رقابتی و مزیت‌ها

منابع موجود مثل Medium یا SunFounder آموزش قوی و کاربردی بودند، اما این مقاله تلاش کرده:

  • انواع پلت‌فرم‌ها (Pico W، Pico 2) را پوشش دهد.
  • نکات عملی و خطاهای رایج را با جزئیات بیان کند مثل بیت SLEEP یا مشکلات لحیم‌کاری.
  • کد ملموس‌تر و انسانی‌تری ارائه دهد، با توضیحات روان و واقعی‌تر گویی که نویسنده کنار شماست و تجربه‌اش را با شما در میان می‌گذارد.
مقاله پیشنهادی  آموزش کتابخانه‌های HAL و LL در میکروکنترلر STM32 بررسی و مقایسه

9. سوالات متداول (FAQ)

چرا فقط WHO_AM_I داده می‌دهد و بقیه‌اش صفر است؟

احتمالاً بیت SLEEP روشن است باید آن را در رجیستر PWR_MGMT_1 صفر کنید تا دستگاه بیدار شود

اتصال I2C شناسایی نمی‌شود چه باید کرد؟

ابتدا با i2c.scan() بررسی کن که آدرس دستگاهش برگردد. اگر نشد، سیم‌کشی، breadboard یا اتصالات را ارزیابی کن. گاهی تمیزکاری لحیم کمک‌کننده است

چه پایه‌هایی بهترند برای SDA/SCL؟

مثال Medium از GP14/15 استفاده کرده؛ SunFounder از GP4/5 پیشنهاد می‌دهد مهم است پایه‌ها در سخت‌افزار و نرم‌افزار مطابقت داشته باشند


نتیجه‌گیری

خب، حالا که پایه‌ها را گرفتید، زمان آن است که وارد عمل شوید! یک ماژول MPU6050، برد Pico یا Pico W بردارید، طبق کد بالا، اجرا کنید و نتایج را ببینید. این تجربه کوچک می‌تواند درب ورود شما به دنیای هواپیماهای بدون سرنشین، ربات‌های خودبالانس یا پروژه‌های واقعیت افزوده باشد.


اگر این مقاله آموزش ارتباط I2C در میکروپایتون برای خواندن داده از سنسور MPU6050 برای شما مفید بود، آن را با دوستان خود به اشتراک بگذارید و برای مشاهده آموزش‌های بیشتر به سایت ما سر بزنید.


مطلب پیشنهادی

زبان برنامه‌ نویسی میکروپایتون مقدمه و آشنایی برای میکروکنترلر ها

امتیاز دادن به مطلب
0
دیدگاه‌های نوشته

  1. دیدگاه‌های محترمانه: لطفاً نظرات خود را با رعایت احترام به دیگران و به صورت محترمانه ارسال کنید. از به‌کار بردن زبان توهین‌آمیز، تهدیدآمیز یا نژادپرستانه خودداری کنید.

  2. حفظ حریم خصوصی: از درج اطلاعات شخصی خود یا دیگران مانند شماره تماس، آدرس و هرگونه اطلاعات حساس خودداری کنید.

  3. محتوای تبلیغاتی: ارسال دیدگاه‌های تبلیغاتی، لینک‌های خارجی یا هر نوع محتوای تجاری که مرتبط با موضوع نباشد، ممنوع است.

  4. موافقت با قوانین: با ارسال دیدگاه خود، شما تأیید می‌کنید که قوانین فوق را خوانده و با آن‌ها موافقید. تیم ما حق دارد نظرات غیرمجاز را حذف کند.


*
*