نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
Avatar

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

به نام خدا : در این مطلب از سری مطالب آموزش رزبری پای قصد داریم :1) آموزش راه انداری پروتکول I2C رزبری پای 2) آموزش راه اندازی ماژل MPU6050 با رزبری پای ، رو بگم.

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

تنظیمات i2c در رزبری پای

قسمت اول : تنظیمات i2c در رزبری پای؛ برای آشنایی با ارتباط i2C ،به لینک زیر مراجعه فرمایید:
آموزش جامع آردوینو جلسه ۱۶ پروتکول i2c twi
برای آشنایی با نحوه خواندن و نوشتن اطلاعات، توسط i2c، با آردینو به دو لینک زیر مراجعه فرمایید :
خوندن اطلاعات از i2c
نوشتن اطلاعات در i2c
روند کار کاملا مشابه آردینو هست فقط سینتکست(املا)متفاوته.
خب برای فعال سازی i2c در رزبری پای، مسیر زیر رو طی کنید :
آموزش راه انداری پروتکول i2c رزبری پای
سیستم را ریبوت کنید. بعدش ترمینال رو باز کنید و درش تایپ کنید :

سپس :

نتیجه کد قبلی شبیه زیر است :
ترمینال رزبری
خب حالا ماژول زاویه سنج mpu6050 رو به صورت زیر به رزبری وصل کنید :
راه اندازی ماژول mpu6050 با رزبری پای
سپس در ترمینال رزبری کد زیر رو وارد کنید :

نتیجه زیر رو خواهید دید :
ترمینال رزبری پای
عدد 68، آدرس ماژول ما در باس i2c(به هگز) است که بعدا در برنامه نویسی به کار میره.
 

حکمتی از نهج البلاغه(حکمت 114) - جایگاه خوشبینی و بد بینی در جامعه

هرگاه نیکوکاري، بر روزگار و مردم آن غالب آیـد، اگرکسـی به دیگري گمان بد برد، درحالیکه از او عمل زشتی آشـکار نشـده سـتمکار است و اگر بـدي بر زمـانه و مردم آن غـالب شود، و کسی به دیگري خوش گمان باشد،خود را فریب داده.

 

راه اندازی ماژول mpu6050 با رزبری پای

قسمت دوم:خب حالا میریم سراغ کدی به زبان c++ برای راه اندازی ماژول mpu6050 با رسپری پای
ماژول نام برده شده،یک مجموعه شامل ژیروسکوپ و شتاب سنج است.که دارای ابعاد کوچک است.خروجی ژیروسکوپ،مقدار زاویه بر حسب ثانیه در جهت هر یک از بردارهای xوyوz است.و خروجی شتاب سنج،مقدار شتاب لحظه ای بر حسب g است(9.8 m/s*s)  از ژیروسکوپ و شتاب سنج،به صورت مجزا میتوان انحراف از محور های مختصات(pitch وroll وyaw) رو بدست آورد.جهت جلوگیری از نویز و همچنین دقت بیشتر در اندازه گیری زوایا،از هر دو استفاده می کنیم.برای مثال در کنترل کواد کوپتر،برای جلو گیری از پدیده دریفت و یا مقدار اولیه خطا از ژیروسکوپ و شتاب سنج،به طور همزمان استفاده می شود.ما در این پروژه فقط از شتاب سنج استفاده می کنیم.(شما هم یه کمی تکون به خودتون بدید ) برای استخراج زاویه از ژیروسکوپ،نیاز به محاسبه زمان است .کافی است، مقدار ژیروسکوپ را بخوانیم و در زمان حرکت ضرب کنیم تا زاویه به دست آید.
ابتدا ماژول رو تست می کنیم ببینیم کار میکنه یا نه؟
ترمینال رزبری رو باز کنید و یک فایل با پسوند cpp بسازید.

و قطعه کد زیر رو در اون بنویسید :

 
خروجی برنامه یه مثل شکل زیره :
راه اندازی ماژول mpu6050 با رزبری پای
 
ویدئو زیر هم تغییرات این اعداد بنا بر تغییر زاویه ماژول رو نشون میده و در ادامه، کد های نوشته شده رو خط به خط توضیح میده :
http://www.aparat.com/v/iMFL3
 
خب تغییرات زیر رو هم اعمال کنید تا دو زاویه pitch و roll بر حسب درجه نمایش داده بشه.

 
نتیجه رو در ویدئو زیر می بینید :
http://www.aparat.com/v/vjSGM
 
توضیح زوایای pitch و roll وyaw رو در شکل زیر مشاهده می فرمایید ( در کنترل پایداری پهبادها، زاویه yaw بی تاثیر است. ما هم اونو حساب نکردیم. از این محور برای جهت یابی استفاده میشه. ) :
زاویه سنج mpu6050 با رسپری پای
 
منبع جهت محاسبه زوایا : brokking.net
 
به امید خدا در مطلب بعدی، با ابزار QT به برنامه نویسی گرافیکی در رزبری پای می پردازیم.
جهت هرچه مستحکم تر شدن مقام ولایت فقیه و ظهور بابای خوبمون مهدی(عج) صلوات
 

پسورد فایل های سایت :
www.dmf313.ir
Avatar دانش آموخته (فارغ التحصیل سابق) کارشناسی الکترونیک هستم. سه سال اول دانشگاه رو به نحو احسن هدر دادم رفت!! تا پایان ترم هفتم داشتم فکر می کردم که چی کار کنم و چی کار نکنم؟ ترم هشتم اساتید خوبی داشتم و تصمیم گرفتم،یه تکونی به خودم بدم. الان هم در حال یاد گیری علایقم هستم...
ارسال دیدگاه
17

1) تعداد حروف غیر فارسی از حروف فارسی بیشتر باشه دیدگاه به صورت خودکار حذف میشه.

2) به موارد درخواست پروژه/کد آماده و سوالاتی که بلد نباشم پاسخ داده نمیشه.

3) برای گزاشتن کدهاتون از این سایت استفاده کنید : debian

  1. Avatar

    مهمان

    میلاد

    سلام و احترام فراوان خدمت استاد عزیز یک سوالی تفاوت زاویه ای که از طریقaccle بدست میاریم با زاویه ای که Gyro به ما میده چیه چکار کنیم که مقدار زاویه دقیق داشته باشیم
    ممنونم البت ببخشید دو تا شد. smile

    1396/03/08
    12:19
    • Avatar

      نویسنده این مطلب

      محمدرضا اسلامی

      سلام.
      در حالت سکون،تفاوت در عدد زاویه نیست.شتاب سنج،در لرزش،مقدارش نویز داره و ژیروسکوپ هم دریفت داره.برای رفع این دوتا مشکل،دوتا داده رو ترکیب می کنیم.
      دوتاویدئو مربوط به زاویه سنجی موجود در مطلب کوادکوپتر با رزبری-قسمت۱ رو مشاهده فرمایید.

      1396/03/08
      08:24
  2. Avatar

    مهمان

    میلاد

    ax = wiringPiI2CReadReg8(fd, MPU6050_ACCEL_XOUT_H ) << ۸ |wiringPiI2CReadReg8(fd,MPU6050_ACCEL_XOUT_L);
    ممکنه توضیح بدین دقیق چی کار میکنه

    1396/01/09
    01:56
    • Avatar

      نویسنده این مطلب

      محمدرضا اسلامی

      سلام
      چون رجیستر های مورد نظر ما در ماژول، هشت بیتی هستند
      و مقدار هر محور ما،شانزده بیتی است.هشت بیتر کم ارزشL و هشت بیت پر ارزشH رو با کد بالا کنار هم قرار میدیم تا شانزده بیت بشه.
      به این ترتیب که مقدار پر ارزش رو می خونیم و هشت واحد به چپ شیفت میدیم و با هشت بیت کم ارزش or می کنیم تا در نهایت، عدد کامل هر محور رو داشته باشیم

      1396/01/09
      03:08
  3. Avatar

    مهمان

    میهمان

    سلام میخوام با ماژول mpu60 یه قطب نما بسازم ماژولو راه اندازی کردم ولی موندم چطوری زاویه بهش بدم وچطوری در یه lcd گرافیکی طرفه قبله رو نشون بدم اگ کمک کنید ممنون میشم

    1395/10/09
    07:38
    • Avatar

      نویسنده این مطلب

      محمدرضا اسلامی

      سلام
      مدل دقیق ماژلتون رو بفرستید ترجیها با لینک فروشگاه یا دیتا شیت
      چون mpu6050 قطب نما نداره!!!(احتمالا)

      1395/10/09
      11:56
  4. Avatar

    مهمان

    حسین

    سلام واسه من آدرس i2c 68 هست همین کد رو زدم ولی wiringPiI2Csetup مقدار -1 رومیده چه کنم ؟

    1395/08/19
    08:31
    • Avatar

      نویسنده این مطلب

      محمدرضا اسلامی

      salam
      code zir ro compile konid bebinid mishe ya na
      http://s8.picofile.com/file/8274062750/mpu.cpp.html
      اگر جواب نداد،فایل cppکدی که نوشتید رو آپلود کنید و لینکش رو بذارید.

      1395/08/19
      09:14
      • Avatar

        مهمان

        حسین

        البته من دارم از mpu9250 استفاده میکنم ولی خب این دستور باید برای ارتباط i2c جواب بده دیگه؟

        1395/08/20
        07:22
        • Avatar

          نویسنده این مطلب

          محمدرضا اسلامی

          احتمالا baud rate واحد i2c رسپری شما،100 کیلو بیت بر ثانیه نیست.برای تنظیم اون،در ترمینال تایپ کنید
          sudo nano /boot/config.txt
          خط زیر رو به محل اشاره شده در عکس زیر اضافه کنید و ذخیره کنید
          http://s9.picofile.com/file/8274184600/i2cd.jpg
          dtparam=i2c1_baudrate=100000
          اگر این خط از قبل وجود داره،فقط مقدارش رو تغییر بدید
          بعدش ریبوت کنید ببینید درست میشه یا نه

          1395/08/20
          09:49
          • Avatar

            مهمان

            حسین

            این خط اونجا وجود نداشت ، اضافه کردم ولی بازم درست نشد sad

            1395/08/20
            10:59
    • Avatar

      نویسنده این مطلب

      محمدرضا اسلامی

      ظاهرا نحوه کار ماژول شما،با ماژول این مطلب متفاوت است.
      حدس میزنم که baudrate ماژول شما 100کیلو بیت بر ثانیه نباشه.(احتمال ضعیف چون در کد avr مقدارش 100 کیلو هست)
      مثلا شاید 400000 باشه تغییرش بدید شاید درست شد
      …سعی کنید کد پایتون براش پیدا کنید.تا از سالم بودن ماژولتون مطمئن بشید.
      در لینک زیر،ماژول رو با جاوا راه انداخته.هیچ سر رشته ای از جاوا ندارم.نمیدونم چجوری میشه ازش استفاده کرد.
      https://github.com/miniben-90/mpu9250
      ویا اگر میکرو avr دارید،اونا با کد زیر پروگرم کنید.
      http://www.avrfreaks.net/forum/zero-output-mpu9250-atmega32-i2c-codevision

      1395/08/21
      12:15
  5. Avatar

    مهمان

    hossein

    salam
    man in code ro run kardam vali errore ziro mide :
    /tmp/ccIYffJi.o: In function main':
    test1.cpp:(.text+0x78): undefined reference to
    wiringPiI2CSetup’
    test1.cppsad.text+0xa4): undefined reference to wiringPiI2CWriteReg16'
    test1.cpp:(.text+0xb4): undefined reference to
    wiringPiI2CWriteReg16′
    test1.cppsad.text+0xf0): undefined reference to wiringPiI2CReadReg8'
    test1.cpp:(.text+0x108): undefined reference to
    wiringPiI2CReadReg8′
    test1.cppsad.text+0x128): undefined reference to wiringPiI2CReadReg8'
    test1.cpp:(.text+0x140): undefined reference to
    wiringPiI2CReadReg8′
    test1.cppsad.text+0x160): undefined reference to wiringPiI2CReadReg8'
    /tmp/ccIYffJi.o:test1.cpp:(.text+0x178): more undefined references to
    wiringPiI2CReadReg8′ follow
    collect2: error: ld returned 1 exit status
    che konam?

    1395/08/19
    06:50
    • Avatar

      نویسنده این مطلب

      محمدرضا اسلامی

      سلام. این ارور موقع ران نیست.ارور کامپایله…
      همون طور که در ویدئو آورده شده،با دستور زیر کامپایل کنید
      g++ -o exename project_name.cpp -l wiringPi
      به جای exename،نام دلخواه فایل خروجی و به جای project_name ،
      نام فایل cpp رو بذارید.

      1395/08/20
      12:11
  6. Avatar

    مهمان

    مرتضی

    اشتباه نکن الکترونیک تو ایران بدرد نمیخوره اگه ئنبال پیشرفتی برو یه کار دیگه

    1395/08/14
    06:05
    • مهدی دمرچیلو

      مدیر سایت

      مهدی دمرچیلو

      حرف شما رو تصحیح میکنم : الکترونیک تو ایران به درد افراد … نمیخوره.

      1395/08/14
      06:32
    • Avatar

      نویسنده این مطلب

      محمدرضا اسلامی

      سلام.بستگی داره،ایران رو کجا در نظر بگیرید و دیگه اینکه پیشرفت رو چی تعریف می کنید.
      بنده منتظر “یه روز خوب میاد…”نیستم.به امید خدا،روز خوبم رو خودم می سازم…

      1395/08/16
      11:56