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

آموزش ساخت کوادکوپتر با رزبری پای قسمت 2

به نام خالق عزم و اختیار : در قسمت قبلی ( آموزش ساخت کوادکوپتر با رزبری پای قسمت 1 )، یه موتور براشلس رو با درایورش راه انداختیم و کد زاویه سنجی با MPU6050 رو گذاشتیم؛ در این مطلب، ابتدا یه اصلاحیه داریم برای راه اندازی موتور، و در ادامه، به دو مبحث پردازش موازی در رزبری پای و دریافت کلید از صفحه کلید در رزبری پای  می پردازیم ( آموزش ساخت کوادکوپتر با رزبری پای قسمت 2 )
آموزش ساخت کوادکوپتر با رزبری پای قسمت 2

آموزش ساخت کوادکوپتر با رزبری پای قسمت 2


اصلاحیه از این قراره که ما اومدیم چهار تا موتور کوادکوپتر رو به چهار تا پایه pwm رزبری پای وصل کردیم، و موتور ها رو روشن کردیم ولی متاسفانه موتورها حین کار ریپ می زدن!!! از یه کتابخونه دیگه استفاده کردیم، حتی زبون برنامه نویسی رو عوض کردیم ( پایتون ) و حتی pwm نرم افزاری ساختیم ولی باز هم موتورها ریپ میزد این ریپ زدن، باعث ناپایداری کواد می شد؛ محیط کاری ما به این شکل بود :
پردازش موازی در رزبری پای
نتیجه اش ( فاجعه ) رو در ویدئو زیر مشاهده می کنید : http://www.aparat.com/v/ijwNU

به همین دلیل، مجبور شدیم برای کنترل موتورها از یه ATmega32 استفاده کنیم؛ این میکرو کنترلر دارای 4 واحد pwm می باشد که ما از هر چهار تاش استفاده می کنیم.
موضوع دیگه ای که متوجه شدیم، این بود که درایور موتور براشلس به دو صورت راه اندازی میشود :

  1. فرکانس ثابت : فرکانس ثابته؛ برای تغییر سرعت، دیوتی سایکل رو تغییر می دیم ( از این به بعد، از این استفاده می کنیم )
  2. دیوتی سایکل ثابت : دیوتی سایکل ثابته؛ برای تغییر سرعت، باید فرکانس رو تغییر بدیم ( این مورد در قسمت اول بررسی شد )

یک نکته اساسی دیگه، برای اینکه از خالی شدن باتری حین پرواز (یعنی سقوط کواد) جلو گیری بشه،از ADC میکرو هم استفاده می کنیم تا وقتی باتری از یه حدی کمتر شد، اخطار بده یا اتوماتیک خودش بشینه رو زمین ( رزبری پای، adc داخلی نداره !!! )
ساخت سیگنال برای تست درایور و موتور براشلس رو با میکروکنترلر درکد ویزارد ببینید : http://www.aparat.com/v/mPTK6

این هم کد تست موتور براشلس با میکروکنترلر atmega32 که در ویدئو بالا شبیه سازی شد.

بریم سر اصل مطلب؛ ابتدا تشخیص کلید های صفحه کلید؛ برای این کار چند روش پیدا کردم که بهینه ترینش استفاده از کتابخونه gtk است، برای نصب این کتابخونه، دستورات زیر رو در ترمینال وارد کنید :

سپس برنامه زیر رو بنویسید و کامپایل کنید :

نتیجه رو در ویدئو زیر مشاهده فرمایید : http://www.aparat.com/v/eRVB1

 

پردازش موازی در رزبری پای

بخش بعدی، پردازش موازی؛ پردازش موازی چیست؟ و به چه دردی میخوره؟
پردازش موازی، یعنی اینکه چند تابع مختلف رو به صورت همزمان اجرا کنیم؛ وقتی بخوایم چند تا کار مختلف رو به صورت همزمان توسط یک CPU ( یک یا چند هسته ای ) انجام بدیم، از پردازش موازی استفاده می کنیم؛ مثلا تابعی شامل یک حلقه بی نهایت، برای دریافت کلید از صفحه کلید و یک تابع دیگر برای دریافت تصویر از دوربین،ویک تابع دیگر برای زاویه سنجی و دیگری،برای کنترل موتورها…که وقتی تابع صفحه کلید،منتظر فشرده شدن کلید است،بقیه توابع،بدون مشکل به کار خودشون ادامه می دن و کواد،سقوط نمیکنه!!!
برای نصب کتابخونه pthread ( همون کتابخونه برای پردازش موازی ) در ترمینال تایپ کنید :

یه مثال کوچیک از پردازش موازی  به زبان ++C با رزبری پای :

نتیجه کد بالا رو در ویدئو زیر ببینید : http://www.aparat.com/v/6ef9n

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

هزینه مطلب بالا، خوندن متن 18+ زیره !!!
کمترین فایده تک دوره ای شدن دولت یازدهم، اینه که دولت بعدی، هر کی که باشه، حساب کار خودشو می کنه و بعد از چهار سال، از خواب بیدار نمیشه بگه :
ما نگفتیم!!!!؛ دیدن ویدئو زیر هم خالی از لطف نیست، دلیل واردات بی رویه کالا در دولت یازدهم !!!
http://www.aparat.com/v/0lY4a

 
اپلیکشن اندرویدی "شرمنده نیستیم" رو هم دانلود کنید...عملکرد دولت یازدهم رو در حوزه های مختلف جمع وجورکرده.

اطلاع رسانی، وظیفه همه ماست.

 
به امید خدا،در قسمت بعدی، ارتباط ( سریال ) بین میکرو و رزبری رو راه می ندازیم و برنامه موتور ها رو کامل می کنیم؛ احتمالا به همراه مدار پی سی بی شامل میکرو و متعلقاتش…
جا داره تشکر ویژه ای از آقای ملااسماعیلی به جا بیارم به خاطر کمک و وقتی که گذاشتن و بنده رو یاری کردن.
جهت هرچه مستحکم تر شدن مقام ولایت فقیه و تعجیل در ظهور بابای خوبمون مهدی عج صلوات

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

1) تعداد حروف فارسی از حروف غیر فارسی بیشتر باشه دیدگاه جفنگ/اسپم محسوب میشه.

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

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

  1. مهمان

    مهدی

    سلام.چه جوری میشه توی اون بخش gtk بگیم که مثلا اگه فلان کلید روی کیبرد خورد تو فلان کارو بکن؟
    یعنی مثلا اگه کلید O خورد پایه 17 یک شه.
    help

    1396/11/08
    11:42
    • نویسنده این مطلب

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

      سلام
      در تابع key_event
      بایید if بنویسید
      تو شرط if هم باید از تابع
      gdk_keyval_name
      استفاده کنید.

      1396/11/08
      11:50
  2. مهمان

    .محمد

    در ضمن وقتی کد LIBS=’pkg-config –libs gtk+-3.0’ رو میزنم این -bash: –libs: command not found
    ارورو میده.چرا؟

    1396/08/13
    04:21
    • نویسنده این مطلب

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

      سلام.
      قبل از دستور
      Sudo apt-get update
      دستور زیر رو وارد کنید
      Sudo apt-get upgrade
      ********
      اگر نشد،یه عکس بعد از وارد کردن دستورات،از ترمینال آپلود کنید.

      1396/08/15
      05:48
  3. مهمان

    محمد

    سلام اون کدی رو که مال کتابخونه gtk است رو میشه تشریحش کنین.متوجه نمیشم توش چه اتفاقاتی افتاده

    1396/08/13
    04:04
    • نویسنده این مطلب

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

      سلام
      خط ۱ تا ۶:فراخوانی کتابخونه ها وباز کردن فضای نام و تعریف متغیر .
      خط ۷ تا ۱۱،تعریف تابع برای تشخیص و چاپ کلید فشرده شده.
      خط ۱۲:شروع تابع اصلی با دو آرگومان(آرگومان های مربوط به فشردن کلید)
      خط ۱۴:ساختن یک اشاره گر که به شی پنجره اشاره می کند.
      خط ۱۵:تنظیمات اولیه توابع تشخیص کلید.
      خط ۱۶:ساخت پنجره برای دریافت کلید
      خط ۱۷:اتصال سیگنال کلید به پنجره.
      خط ۱۸:نمایش پنجره.
      خط ۱۹:فراخوانی تابع کار با کلیدها(درونش حلقه بینهایت استفاده شده)
      یه پنجره می سازه و آرگومانهای تابع main رو بهش می دیم.
      با فشردن کلید،تابع key_event

      1396/08/15
      06:29