</> Make for Iran – بسازیم برای ایران

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

  • خانه
  • الکترونیک
  • پرینت سه‌بعدی
  • حکاکی و برش لیزری
  • ابزار کارگاهی
  • پهپاد
  • ربات زمینی UGV
  • ربات پرنده UAV
  • صنایع دستی
  • آموزش
  • پروژه‌ها
  • درباره ما
خانه›ربات‌های پرنده (UAV)›ساخت IMU Data Logger با MPU6050 و SD Card: ضبط حرکت پهپاد و UGV (فارسی)
ربات‌های پرنده (UAV) پروژه‌ها

ساخت IMU Data Logger با MPU6050 و SD Card: ضبط حرکت پهپاد و UGV (فارسی)

​ ژوئن 11, 2026 2 دقیقه مطالعه
IMU Data Logger MPU6050 SD Card Arduino

IMU و Data Logger یعنی چه؟ (برای مبتدی)

IMU (Inertial Measurement Unit) یک واحد اندازه‌گیری اینرسی است. ماژول MPU6050 یک IMU ۶-محوره محبوب است که شامل یک ژیروسکوپ ۳ محوره (اندازه‌گیری سرعت چرخش) و یک شتاب‌سنج ۳ محوره (اندازه‌گیری شتاب خطی) است. از این دو داده می‌توان زاویه‌های Roll (کج شدن)، Pitch (خم شدن) و Yaw (چرخش) را محاسبه کرد.

یک Data Logger (لاگر داده) دستگاهی است که داده‌ها را با زمان‌بندی دقیق روی حافظه ذخیره می‌کند. با لاگ کردن IMU پهپاد یا UGV، می‌توانید ارتعاشات موتور، کیفیت PID، و رفتار مکانیکی شاسی را تحلیل کنید.

محصولی که می‌سازید

یک لاگر IMU کوچک که روی پهپاد یا UGV نصب می‌شود، داده‌های Roll/Pitch/Yaw/Acc را با ۱۰۰Hz روی SD Card ثبت می‌کند.

  • زمان ساخت: ۲ تا ۳ ساعت
  • هزینه: ۳۰۰ تا ۵۰۰ هزار تومان
  • نرخ نمونه‌برداری: تا ۱۰۰Hz

MPU6050 I2C → Gyro/Acc Arduino Nano DMP Fusion SD Card SPI CSV لاگ Excel/Python تحلیل گراف IMU Logger — حرکت ضبط → CSV → تحلیل ارتعاش

قطعات لازم (BOM)

قطعه نقش
Arduino Nano پردازشگر اصلی
MPU6050 GY-521 ژیرو + شتاب‌سنج I2C
ماژول SD Card SPI ذخیره CSV
RTC DS3231 (اختیاری) تایم‌استمپ دقیق
کارت microSD 4GB+ FAT32 Format

کد Arduino Data Logger


#include <Wire.h>
#include <MPU6050_light.h>
#include <SD.h>
#include <SPI.h>

MPU6050 mpu(Wire);
File logFile;
const int CS_PIN = 10;
unsigned long lastLog = 0;
const int LOG_INTERVAL = 10;  // هر ۱۰ms = ۱۰۰Hz

void setup() {
  Wire.begin();
  Serial.begin(115200);
  mpu.begin();
  mpu.calcOffsets();  // کالیبراسیون خودکار (روی سطح صاف قرار دهید)

  SD.begin(CS_PIN);
  logFile = SD.open("imu_log.csv", FILE_WRITE);
  if (logFile) {
    logFile.println("time_ms,roll,pitch,yaw,ax,ay,az,gx,gy,gz");
    logFile.flush();
  }
  Serial.println("Logger started");
}

void loop() {
  mpu.update();
  if (millis() - lastLog >= LOG_INTERVAL) {
    lastLog = millis();
    String row = String(millis()) + "," +
                 String(mpu.getAngleX(),2) + "," +
                 String(mpu.getAngleY(),2) + "," +
                 String(mpu.getAngleZ(),2) + "," +
                 String(mpu.getAccX(),3) + "," +
                 String(mpu.getAccY(),3) + "," +
                 String(mpu.getAccZ(),3) + "," +
                 String(mpu.getGyroX(),2) + "," +
                 String(mpu.getGyroY(),2) + "," +
                 String(mpu.getGyroZ(),2);
    logFile.println(row);
    if (millis() % 1000 < LOG_INTERVAL) logFile.flush();  // flush هر ثانیه
  }
}

تحلیل ارتعاش با Python


import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('imu_log.csv')
df['time_s'] = df['time_ms'] / 1000.0

# رسم FFT ارتعاش محور Z
from numpy.fft import fft, fftfreq
import numpy as np

fs = 100  # Hz
N = len(df)
freq = fftfreq(N, 1/fs)
fft_az = np.abs(fft(df['az'] - df['az'].mean()))

plt.figure(figsize=(12,4))
plt.subplot(1,2,1)
plt.plot(df['time_s'], df['roll'], label='Roll')
plt.plot(df['time_s'], df['pitch'], label='Pitch')
plt.legend(); plt.xlabel('زمان (s)'); plt.title('Roll & Pitch')

plt.subplot(1,2,2)
plt.plot(freq[:N//2], fft_az[:N//2])
plt.xlabel('فرکانس (Hz)'); plt.title('FFT ارتعاش محور Z')
plt.tight_layout(); plt.show()

چک‌لیست تست

تست نتیجه
فایل CSV روی SD ایجاد می‌شود؟ بله
در حالت ثابت Roll=Pitch=0? بله (بعد از calcOffsets)
نرخ لاگ ۱۰۰Hz محقق شده؟ بررسی با diff(time_ms)
گراف Python داده بامعنی نشان می‌دهد؟ بله

Roll (آبی) Pitch (سبز) نمونه گراف IMU Logger — ارتعاش موتور قابل مشاهده است

ویدئوهای آموزشی


منابع بیشتر

  • آپارات: MPU6050 آردوینو فارسی
  • MPU6050_light Library GitHub
  • ArduPilot: IMU Logging
برچسب‌ها: Data Logger IMU MPU6050 SD Card آردوینو آموزش گام‌به‌گام ارتعاش پهپاد
​
مطلب بعدی راهنمای کامل Failsafe در RC و ArduPilot: تنظیم RTH و Land خودکار (فارسی) مطلب قبلی ساخت Lap Timer FPV با IR Sensor و Arduino: اندازه‌گیری دور پرواز (فارسی)
</> Make for Iran – بسازیم برای ایران

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

یاد بگیر، بساز، به اشتراک بگذار. جامعه‌ای برای سازندگان، مهندسان و علاقه‌مندان به فناوری در ایران.

دسته‌بندی‌ها

  • پروژه‌ها
  • ربات‌های پرنده (UAV)
  • آموزش
  • ربات‌های زمینی (UGV)
  • الکترونیک
  • پهپاد و مولتی‌روتور

پیوندها

  • خانه
  • درباره ما
  • تماس
  • فید RSS

آخرین مطالب

  • خلاصه دوره ArduPilot/iNAV و گام‌های بعدی (فارسی)
  • رادیو تله‌متری در مقابل LTE/4G برای کنترل از راه دور (فارسی)
  • Ground Station روی موبایل و تبلت — QGroundControl و Solex (فارسی)
  • راه‌اندازی Ground Station با Mission Planner (فارسی)
© 2026 Make for Iran – بسازیم برای ایران. تمامی حقوق محفوظ است.
ساخته شده با ❤️ برای سازندگان ایران  |  ورود