راه اندازی سنسور شتاب سنج 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
ماژول سنسور 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
- پتانسیومتر 10 کیلو اهم
پیکربندی رزبری پای برای سنسور MPU6050
قبل از شروع برنامه نویسی ، باید i2c در Raspberry Pi را با استفاده از روش مشخص شده فعال کنیم:
مرحله 1: ارتباط I2C را فعال کنید.
برای انجام این کار :
sudo raspi-config
و سپس یک صفحه آبی ظاهر می شود. اکنون گزینه interface option را انتخاب کنید
پس از این ، ما نیاز به انتخاب 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
برنامه نویسی رزبری پای برای سنسور شتاب سنج
کد کامل پروژه در انتهای صفحه در فایل دانلودی قرار داده شده است. در اینجا بعضی از قسمت های کد را بررسی میکنیم.
در برنامه پایتون، ما برخی کتابخانه های مورد نیاز مانند 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()
موارد موجود در فایل : شماتیک کامل مدار ، سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود