آموزش رزبری پایپروژه رزبری پای

راه اندازی سنسور شتاب سنج MPU6050 با رزبری پای

سلام. آموزش راه اندازی سنسور شتاب سنج MPU6050 با رزبری پای را آماده کردیم. این پروژه قابلیت شتاب سنج، و دماسنج را دارد.

پروژه اتصال ژیروسکوپ و شتاب سنج MPU6050 به رزبری پای

سنسور MPU6050 ویژگی های بسیاری دارد. این قطعه شامل یک شتاب سنج MEMS ، یک ژیروسکوپ MEMS و یک سنسور دما است. این ماژول هنگام تبدیل مقادیر آنالوگ به دیجیتال بسیار دقیق است زیرا برای هر کانال یک سخت افزار مبدل آنالوگ به دیجیتال 16 بیت دارد. این ماژول قادر است همزمان کانال x ، y و z را حس کند. این ماژول از پروتکل I2C برای برقراری ارتباط با میکروکنترلر استفاده میکند. ماژول MPU6050 یک تراشه جمع و جور است که دارای شتاب سنج و ژیروسکوپ است. این قطعه برای بسیاری از پروژه ها مانند هواپیماهای بدون سرنشین ، روبات ها ، سنسورهای حرکتی بسیار مفید است.

در این پروژه رزبری پای قصد داریم سنسور MPU6050 را با Raspberry pi راه اندازی کنیم و مقادیر آن را روی ال سی دی کاراکتری نمایش دهیم. فیلم عملکرد در انتهای صفحه قرار داده شده است. ما با استفاده از MPU6050، دما را میخوانیم و مقدار دما و x,y,z را روی LCD نشان می دهیم. ژیروسکوپ و شتاب سنج سنسور MPU6050 هر دو برای تشخیص موقعیت و جهت یابی هر دستگاه استفاده می شوند. Gyro از نیروی جاذبه زمین برای تعیین موقعیت های محور x ، y و z و شتاب سنج بر اساس سرعت تغییر حرکت استفاده می کند.

فیلم زیر نحوه کار پروژه راه اندازی شتاب سنج، ژیروسکوپ و دماسنج سنسور MPU6050 را نشان میدهد.

در این پروژه ابتدا مقدار دما را از طریق LCD نشان داده ایم و بعد از مدتی مقادیر ژیروسکوپ را نشان می دهیم.

پروژه اتصال ژیروسکوپ و شتاب سنج MPU6050 به Raspberry pi

مشخصات سنسور شتاب سنج MPU6050

مشخصات سنسور شتاب سنج و ژیروسکوپ MPU6050

ماژول سنسور MPU-6050 دارای شتاب سنج سه محوره و ژیروسکوپ سه محوره  با دقت بسیار بالا است. همچنین دارای بافر FIFO و سنسور دما با رنج اندازه گیری 40- تا +85 درجه سانتی گراد است. ماژول شتاب و ژایرو MPU6050 از یک چیپ سیلیکونی با قابلیت پردازش دیجیتال بهره می برد. ماژول سنسور شتاب و ژایرو MPU6050 توانایی ترسیم الگوریتم های پیچیده 9 محوری را دارد.

 مدار راه اندازی شتاب سنج MPU6050 با رزبری پای

شماتیک مدار پروژه راه اندازی شتاب سنج با رزبری پای بسیار ساده است. ما فقط از یک ال سی دی کاراکتری و سنسور MPU6050 استفاده کردیم. یک پتانسیومتر 10 کیلو اهم برای تنظیم کنتراست ال سی دی استفاده میشود. در ارتباط سنسور ژیروسکوپ با رزبری پای، ما 4 اتصال انجام داده ایم. در آن منبع تغذیه 3.3 ولت و GND سنسور شتاب سنج را به 3.3 ولت و  gnd رزبری پای متصل میکنیم. پین SCL و SDA سنسور به پین GPIO2 و GPIO3 برد Raspberry pi متصل میشود.

راه اندازی سنسور شتاب سنج MPU6050

قطعات مورد نیاز

  1. برد رزبری پای
  2. سنسور ژیروسکوپ و شتاب سنج MPU6050
  3. پتانسیومتر 10 کیلو اهم
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

پیکربندی رزبری پای برای سنسور MPU6050

قبل از شروع برنامه نویسی ، باید i2c در Raspberry Pi را با استفاده از روش مشخص شده فعال کنیم:

مرحله 1: ارتباط I2C را فعال کنید.

برای انجام این کار :

sudo raspi-config

و سپس یک صفحه آبی ظاهر می شود. اکنون گزینه interface option را انتخاب کنید

پیکربندی رزبری پای برای سنسور MPU6050

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

پس از این ، ما نیاز به انتخاب I2C داریم

راه اندازی ارتباط I2C در رزبری پای

پس از این ، ما باید yes را انتخاب کنیم و کلید enter و سپس ok را بزنیم.

آموزش راه اندازی سنسور ژیروسکوپ با رزبری پای

پس از این ، ما باید با دستور زیر raspberry pi را راه اندازی مجدد کنیم :

sodo reboot

مرحله 2: آدرس OLED I2C را پیدا کنید و آن را به روز کنید.

سپس باید با استفاده از دستور داده شده ، آدرس OLED I2C را پیدا کنیم و شما یک آدرس hex را خواهید دید.

sudo i2cdetect –y 1

سپس Raspberry Pi را با استفاده از دستور داده شده به روز کنید:

sudo apt-get update

مرحله 3: کتابخانه python-pip و GPIO را نصب کنید.

باید pip را با استفاده از دستور داده شده نصب کنیم:

sudo apt-get install build-essential python-dev python-pip

و کتابخانه Raspberry Pi GPIO را نصب می کنیم.

sudo pip installs RPi.GPIO

مرحله 4: کتابخانه smbus را نصب کنید

باید با استفاده از دستور داده شده ، کتابخانه smbus را در Raspberry Pi نصب کنیم:

sudo apt-get install python-smbus

مرحله 5: کتابخانه MPU6050 را نصب کنید

پس از این ما باید کتابخانه MPU6050 را با استفاده از دستور زیر نصب کنیم

sudo pip install mpu6050

کتابخانه MPU6050

برنامه نویسی رزبری پای برای سنسور شتاب سنج

کد کامل پروژه در انتهای صفحه در فایل دانلودی قرار داده شده است. در اینجا بعضی از قسمت های کد را بررسی میکنیم.

در برنامه پایتون، ما برخی کتابخانه های مورد نیاز مانند time، smbus و GPIO را وارد کرده ایم.

import smbus
import time

import RPi.GPIO as gpio

پس از این آدرس I2C را وارد میکنیم و بعضی از متغیر ها را در نظر میگیریم.

PWR_M   = 0x6B
DIV   = 0x19
CONFIG       = 0x1A
GYRO_CONFIG  = 0x1B
INT_EN   = 0x38
ACCEL_X = 0x3B
ACCEL_Y = 0x3D
ACCEL_Z = 0x3F
GYRO_X  = 0x43
GYRO_Y  = 0x45
GYRO_Z  = 0x47
TEMP = 0x41
bus = smbus.SMBus(1)

Device_Address = 0x68   # آدرس دستگاه
AxCal=0
AyCal=0
AzCal=0
GxCal=0
GyCal=0
GzCal=0

سپس برخی از توابع را برای کنترل 16x2LCD مانند def start () ، def cmd (ch) ، def write (ch) ، def print (str) ، def clear () و … مینیوسیم.

پس از این ، ما باید ماژول MPU6050 را پیکربندی کنیم.

def InitMPU():
     bus.write_byte_data(Device_Address, DIV, 7)
     bus.write_byte_data(Device_Address, PWR_M, 1)
     bus.write_byte_data(Device_Address, CONFIG, 0)
     bus.write_byte_data(Device_Address, GYRO_CONFIG, 24)
     bus.write_byte_data(Device_Address, INT_EN, 1)
     time.sleep(1)

پس از این ، ما باید برخی از توابع را برای خواندن مقادیر از MPU6050 بنویسیم و بتوانیم آنها را بر روی LCD نمایش دهیم. عملکرد داده شده برای خواندن داده ها از MPU6050 استفاده می شود.

def readMPU(addr):
     high = bus.read_byte_data(Device_Address, addr)
     low = bus.read_byte_data(Device_Address, addr+1)
     value = ((high << 8) | low)
     if(value > 32768):
           value = value - 65536
     return value

تابع زیر برای خواندن داده های شتاب سنج و ژیرومتر استفاده می شود.

def accel():
     x = readMPU(ACCEL_X)
     y = readMPU(ACCEL_Y)
     z = readMPU(ACCEL_Z)
     Ax = (x/16384.0-AxCal)
     Ay = (y/16384.0-AyCal)
     Az = (z/16384.0-AzCal)
     #print "X="+str(Ax)
     display(Ax,Ay,Az)
     time.sleep(.01)
    
def gyro():
      global GxCal
      global GyCal
      global GzCal
      x = readMPU(GYRO_X)
      y = readMPU(GYRO_Y)
      z = readMPU(GYRO_Z)
      Gx = x/131.0 - GxCal
      Gy = y/131.0 - GyCal
      Gz = z/131.0 - GzCal
      #print "X="+str(Gx)
      display(Gx,Gy,Gz)
      time.sleep(.01)

پس از این ، ما یک تابع برای خواندن دما مینویسیم.

def temp():
  tempRow=readMPU(TEMP)
  tempC=(tempRow / 340.0) + 36.53
  tempC="%.2f" %tempC
  print tempC
  setCursor(0,0)
  Print("Temp: ")
  Print(str(tempC))
  time.sleep(.2)

تابع def calibrate () برای کالیبراسیون MPU6050 استفاده می شود و از عملکرد def () برای نمایش مقادیر روی LCD استفاده می شود.

پس از این کار ، LCD را راه اندازی میکنیم ، MPU6050 را تنظیم و کالیبراسیون می کنیم و سپس در Loop()، هر سه مجموعه مقادیر را از MPU6050 یعنی دما ، شتاب سنج و ژیروسکوبی فراخوانی می کنیم و آنها را از طریق LCD نشان می دهیم.

begin();
Print("MPU6050 Interface")
setCursor(0,1)
Print("Circuit Digest")
time.sleep(2)
InitMPU()
calibrate()

while 1:
  InitMPU()
  clear()

  for i in range(20):
    temp()
  clear()
  Print("Accel")
  time.sleep(1)
  for i in range(30):
    accel()
  clear()
  Print("Gyro")
  time.sleep(1)
  for i in range(30):
  gyro()

موارد موجود در فایل : شماتیک کامل مدار ، سورس کامل

5 (4 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *