نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
أَللّهُمَّ ارْزُقْنی شَفاعَةَ الْحُسَیْنِ یَومَ الْوُرُودِ
محمدرضا اسلامی

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

421

به نام خدا : آموزش ساخت ماشین کنترلی دوربین دار با رزبری پای ؛ تو این مطلب می خوایم یه ماشین کنترلی کنترل شونده توسط کامپیوتر درست کنیم که هم زمان، تصویر دوربین رو به روی کامپیوتر منتقل کنه. یک کامپیوتر متصل به شبکه وای فای ( مثلا مودم  wifi ) داریم برای کنترل رزبری پای و مشاهده تصویر دوربین، و یک رزبری پای وای فای دار ( رزبری پای 3b و یا مدل های پایین تر به همراه دانگل وای فای رزبری ) برای دریافت و اعمال کنترل بر روی موتور ها و همچنین ارسال تصویر ویدئو.
ماشین کنترلی دوربین دار با رزبری پای

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

  1. رزبری پای 3B و یا مدل های پایین تر به همراه دانگل وای فای مناسب
  2. یه کامپیوتر متصل به شبکه ( مودم وای فای دار )
  3. تخته سه لایه به عنوان شاسی ربات ( مثلا 10 * 25 سانتیمتر )
  4. دو عدد موتور DC به همراه درایور مناسب ( بنده از دو تا مینی موتور 300 دور بر دقیقه استفاده کردم.درایور هم ماژول l298 استفاده کردم )
  5. باتری مناسب با موتور ها ( بنده از دو تا سلول باتری لیتیوم یون استفاده کردم جمعا 8.4 ولت )
  6. ماژول رگولاتور dc به dc برای تغذیه رزبری پای ( خروجی 5 ولت )
  7. دوربین رزبری پای با کابل دیتای مناسب.
  8. پایه نگهدارنده دوربین و پیچ و …
  9. دو عدد چرخ مناسب موتورها و اتصالات لازم
  10. یک عدد هرزگرد برای نقطه اتکای سوم ربات
  11. یک عدد کلید راکر برای قطع و وصل تغذیه و سیم برد بوردی نری به مادگی و مادگی به مادگی
  12. چند تا تای رپ برای فیکس کردن باتری و …

 

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

اول، چرخ ها، موتور ها و هرزگرد رو به شاسی وصل کنید؛ برای یاد آوری ترتیب پایه های رزبری پای به تصویر زیر دقت کنید :
ترتیب پایه های رزبری پای
پایه های درایور موتور l298 ما هم به صورت زیره :
درایور موتور l298
ما برای کنترل موتورها، از چهارتا پایه 26 و 27 و 28 و 29 استفاده کردیم.این پایه ها رو به چهار تا پایه کنترلی درایور وصل کنید ( logic input )؛ پایه های output B و  output A رو به موتور ها وصل کنید؛ مثبت باتری رو بعد از عبور دادن از کلید راکر، به +12 power و همچنین به ورودی مثبت رگولاتور وصل کنید. و سیم منفی باتری رو به power gng  و همچنین،ورودی منفی رگولاتور وصل کنید؛ ولتاژ خروجی رگولاتور رو روی ولتاژ 5 تا 5.2 ولت تنظیم کنید و سیم های خروجی رگولاتور رو به پایه +5 ولت و زمین رزبری پای وصل کنید؛ یه سیم هم از 3.3 ولت رزبری پای،به 3.3 ولت درایور وصل کنید ( برای مشخص کردن سطح ولتاژ 1 منطقی )
توجه : جامپر 5v enable رو بردارید ( رو بورد نوشته con5 )
دوربین رو هم به رزبری وصل کنید و مدار کلید راکر رو وصل کنید تا رزبری روشن بشه.
توسط کامپیوتر و با یکی از روش های زیر به رزبری پای متصل بشید ( روشهای اتصال رزبری پای به کامپیوتر ) :

  1. روش xrdp
  2. روش ultra vnc
  3. با استفاده از  نرم افزار های putty و xlunch به صورت همزمان.

توجه : سایر روش ها، در نمایش پنجره ها مشکل دارن.
 
کتابخونه های مورد نیاز برای پروژه :
1) کتابخونه wiringpi که یه کتابخونه به زبان c هست برای استفاده از gpio رزبری پای ( 1) آموزش نصب کتابخانه gpio برای رزبری پای؛  2) نحوه استفاده از کتابخانه wiringpi )
2) کتابخونه opencv برای کار با دوربین ( آموزش نصب کتابخونه در مورد شماره 1 )
3) کتابخونه مورد نیاز دوربین ( آموزش نصب کتابخونه در مورد شماره 6 )
4) کتابخونه gtk برای تشخیص کلید های کیبورد جهت کنترل ربات؛ برای نصب gtk روی رزبری پای، تو ترمینال تایپ کنید :

5) کتابخونه pthread برای پردازش موازی؛ برای نصب این کتابخونه، دستورات زیر رو وارد کنید :

تاحالا پیش نیاز ها نصب شد؛ حالا بریم سراغ کد و برنامه؛ تو ترمینال یه فایل با پسوند cpp درست کنید و کد زیر رو توش بنویسید :

تشریح کد پروژه بالا
خط 1 : دستور کامپایل کردن کد و ساختن فایل خروجی
خط 4 تا 13 : فراخوانی کتابخونه های مورد نیاز
خط 15 : بازکردن فضای نام std برای کار با توابع نمایش متن
خط 16 : تعیین حرکت ربات درجهت چپ و راست
خط 17 : تعیین حرکت ربات در جهت جلو و عقب
خط 18 : متغیری برای تعیین خروج از حلقه تابع thread0
خط 19 تا 39 : تابعی که به صورت موازی اجرا میشه.
خط 22 و 23 : ساختن از کلاس دوربین و باز کردن دوربین
خط 24 : ماتریس حاوی تصویر دریافتی از دوربین
خط 27 : حلقه با شرط ،برای خروج از برنامه
خط 29 : آماده سازی تصویر دوربین
خط 30 : دریافت تصویر و ذخیره اون،در ماتریس cam
خط 32 : نمایش ماتریس cam (تصویر دوربین)  در پنجره camera
خط 33 : تاخیر مخصوص opencv ( لازم برای نمایش تصویر )
خط 37 : در صورت برقراری شرط خروج از برنامه،پیام مورد نظر رو نمایش میده.
خط 38 : بستن دوربین ( اگر این دستور رو هنگام خروج استفاده نکنید،برای استفاده دوباره از دوربین،باید رزبری رو ریست کنید )
خطوط 41 تا 91 : میگه که وقتی کلیدی از کیبورد فشرده شد،چه کاری انجام بشه:
خط 43 : رشته حاوی اسم کلید فشرده شده رو میریزه تو متغیر از نوع string به نام pressed_key
خط 45 : متغیر رشته ای به نام key برای اینکه از توابع مقایسه ای بشه استفاده کرد
خط 46 تا 47 : کپی کردن نام کلید دریافتی در متغیر key
خط 48 و 49 : میگه اگر کلید فشرده شده Enter بود،متغیر خروج از برنامه رو یک کن.
توجه : وقتی کلید enter فشرده بشه،رشته متناظرش که تو متغیر press_key ریخته میشه، Return هست.
خط 50 تا 58 : میگه اگر کلید فشرده شده،جهت بالا بود و جهت حرکت قبلی به سمت جلو نبود اون وقت،کارای زیر رو انجام بده ( تا خط 58 )
توجه : تابع strcmp دو  تا رشته رو با هم مقایسه میکنه اگر دو تا رشته با هم یکی بود،عدد 0 رو بر میگردونه وگرنه عددی غیر صفر رو برمیگردونه .
خط 52 : رشته jelo رو بریز توی متغیر رشته ای jahat
خط 53 : متغیر رشته ای jahat  رو چاپ کن
خط 54 تا 57 : هم میگه موتور ها به سمت جلو بچرخن.
خط 59 تا 68 : میگه اگر کلید فشرده شده، جهت عقب بود و جهت حرکت قبلی،عقب نبود اون وقت،کارای زیر رو انجام بده ( تا خط 68 )
خط 61 : رشته aghab رو  بریز توی متغیر رشته ای jahat
خط 62 : متغیر رشته ای  jahat روچاپ می کنه
خط 63 تا 66 : موتور ها به سمت عقب بچرخن
تا خط 91 به همین صورت مشابه دو مورد بالا ست.
خطوط 93 تا 138 : تعیین میکنه که وقتی کلید کیبورد رها شد،چه کاری انجام بده!!!
توجه : تابع قبلی، تعیین می کرد که وقتی کلید فشرده شد،چه کاری انجام بده ولی این یکی تابع،تعیین می کنه وقتی کلید رها شد چه کار کنه.
برای اینکه وقتی کلید جلو فشرده شد،بره جلو و وقتی کلید رها شد، ربات بایسته.
خطوط 95 تا 138 هم مشابه تابع قبلیه.
خط 141 : شروع بدنه اصلی برنامه
خط 143 : مقدار پیش فرض  ist رو میریزه تو متغیر رشته ای  jahat ( مقدار اولیه بعد از هر بار اجرای برنامه )
خط 144 : فرا خوانی تنظیمات gpio
خط 145 تا 148 : پایه های 26 و 27 و 28 و 29 رو خروجی تعریف می کنه ( برای اتصال به درایور موتور ها )
خط 151 : ساخت یک پنجره به نام camera
خط 153 : تعریف یک فرآیند پردازش موازی به نام a0
خط 154 : ساختن یک فرآیند پردازش موازی ( پارامتر اول، آدرس فرآیند به نام a0 و تابع اجرایی موازی به نام thread0 )
خطوط 156 تا 163 : ساختن یک پنجره برای دریافت کلید های صفحه کلید و معرفی توابع فشردن و رها کردن کلید ها به اون پنجره.
خط 156 : تعریف یک ویجت  به نام window
خط 157 : غیر فعال کردن وارنینگ های نمایش پنجره(که کار نمی کنه!!!)
خط 159 : تابع تنظیم برای دریافت کلید ها ( پارامتر هاش با پارامتر های تابع  main یکیه )
خط 160 : مقدار دهی به ویجت window ( ساخت پنجره جدید با ویژگی رو بودن پنجره )
خط 161 : سیگنال کلید فشرده شده رو که از پنجره  دریافت میشه به تابع فشردن کلید که اون بالا نوشتیم وصل می کنه.
خط 162 : سیگنال کلید رها شده رو که از پنجره دریافت میشه به تابع رها کردن کلید که اون بالا نوشتیم وصل می کنه.
خط 163 : پنجره ای که برای دریافت کلید ساختیم رو نمایش میده.
خط 165 : صبر می کنه تا فرآیند پردازش موازیمون تموم بشه ( وقتی مقدار متغیر  exit_flag برابر یک بشه: با فشردن کلید enter )
فایل رو ذخیره کنید و با دستور اول کد، اونو کامپایل و بیلد کنید و با دستور زیر برنامه رو اجرا کنید :

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

 
 






 
 

یه کمی هم حساب و کتاب کنیم ببینیم دنیا کدوم سمتی میره؟!!!!
اگر بررسی کرده باشید، کل بودجه کشور در سال 97 که چند وقتی میشه مجلس و دولت رو درگیر خودش کرده، مبلغی بالغ بر یازده بیلیارد و نهصد و چهل و نه بیلیون و سیصد و پنجاه و چهار میلیارد و ششصد و هفتاد و چهار میلیون (۱۱,۹۴۹,۳۵۴,۶۷۴,۰۰۰,۰۰۰ ) ریال هست.
به زبون ساده،حدود 1194000 میلیارد تومان هست!!!
کل بودجه دفاعی کشور ( وزارت دفاع، ارتش، سپاه، بسیج ) حدود 41000 میلیارد تومان هست.
با یه حساب ساده، کل بودجه دفاعی ما، حدود 3.4% از کل بودجه کشوره!!!
اینجا کاری به مقایسه با بقیه کشورها نداریم!!!! بحث یه جای دیگه هست...
سوال اینجاست که چرا متولیان بخش دفاعی، با این بودجه، نیاز های تسلیحاتی رو پوشش می دن ،به کشورهای منطقه کمک لجستیکی و تسلیحاتی می کنن، و در کل، اهرم قدرت ایجاد کردند ( شرایط آماده برای توسعه و پیشرفت اقتصادی کشور ) ولی دولت های ما که 97 درصد از بودجه رو در اختیار دارند، در مدیریت منابع عاجزند؟!!!!
و جالب اینجاست که فحش  کم کاری دولت رو سازمان های دفاعی میل می کنن!!!!!!!
*******************************
نکته :
1.بنده به بسیاری از فعالیت های سپاه انتقاد دارم ( مثل نظام بانکی مشابه بقیه بانک های ربوی و... )
2.یک نظر هست که میگه 20 درصد از اقتصاد ایران دست سپاهه.برای این عدد و اعداد مشابه،هیچ منبعی ندیدم!!!!
که البته با محاسبه کل بودجه عمرانی کشور،میشه پی برد که این فعالیت های اقتصادی،انقدر ها هم زیاد نیست.
انتقاد دومم به سپاه ( و تقریبا همه  نهاد های کشور!!! مجلس،دولت، قوه قضائیه و ... ) همین عدم شفافیت در همه امور هست.
 
جهت هر چه مستحکم تر شدن مقام ولایت فقیه،و ظهور بابای خوبمون مهدی(عج) صلوات…

تعداد مطالب : 30 تا
دانش آموخته (فارغ التحصیل سابق) کارشناسی الکترونیک هستم. سه سال اول دانشگاه رو به نحو احسن هدر دادم رفت!! تا پایان ترم هفتم داشتم فکر می کردم که چی کار کنم و چی کار نکنم؟ ترم هشتم اساتید خوبی داشتم و تصمیم گرفتم،یه تکونی به خودم بدم. الان هم در حال یاد گیری علایقم هستم...
بقیه جلسات :
این مطلب هیچ طبقه بندی یی ندارد!
ارسال دیدگاه
11
نظرات این مطلب بسته شده است.
  1. farideh

    مهمان

    farideh

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

    مشاهده پاسخ ها (1)
    • محمدرضا اسلامی

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

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

      سلام.
      تا حالا در این باره مطلبی تو سایت نذاشتم.(برای ارسال به تلگرام مطلب داشتم که تعطیل شد!!)
      اگر با ماژول gsm بخواید کار کنید،می تونم کمکتون کنم.(بارگزاری فایل)
      قبلا عکس هم با رزبری روی وب ارسال کردم ولی مشاهده اطلاعات متنی رو کار نکردم.

  2. MaHdIiRaNmAnEsH

    مهمان

    MaHdIiRaNmAnEsH

    سلام
    من تو محیط netbeans کار میکنم و وقتی برنامه رو اجرا میکنم بدون هیچ مشکلی کامپایل میشه اما موقع اجرا یه ارور میده
    Unable to init server: Could not connect: Connection refused
    (cppapplication_1:3488): Gtk-WARNING **: cannot open display:
    RUN FAILED (exit value 1, total time: 203ms)
    کسی میدونه مشکل از کجاست ؟

    مشاهده پاسخ ها (1)
    • محمدرضا اسلامی

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

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

      با چه نرم افزاری به رزبری وصل میشید؟
      Ultra vnc رو امتحان کنید.

  3. mahdi

    مهمان

    mahdi

    سلام. من وقتی که دستور اجرای برنامه رو وارد میکنم ارور Permission denied رو میده باید چیکارکنم؟

    مشاهده پاسخ ها (1)
    • محمدرضا اسلامی

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

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

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

  4. علی

    مهمان

    علی

    سلام. واقعا ممنون بابت همه اموزشاتون.
    اگه امکانش هست اون کد نوشته شده رو یه کم درمودش توضیح بدید, واسه ما مبتدی ها یه کم تجزیه تحلیلش سخته.

    مشاهده پاسخ ها (1)
    • محمدرضا اسلامی

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

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

      سلام.
      تشریح کد،زیر کد اصلی نوشته شده.

  5. keivan

    مهمان

    keivan

    سلام خسته نباشید
    خیلی مفید بود و ازش میشه الگو گرفت
    راجب کد هم اگر توضیح میدادی دیگه عالی میشد
    خیلی ممنون

    مشاهده پاسخ ها (1)
    • محمدرضا اسلامی

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

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

      سلام.
      کدش خیلی ساده هست .و مطلبش،پیش نیاز مطلب(مطالب) بعدی برای پردازش تصویره.
      ولی باز هم چشم،اگر خدا بخواد،خط به خط هم توضیح میدم.

  6. معین صابری

    نویسنده سایت

    معین صابری

    مهندس خسته نباشی عالی بود
    روشی که برای انتقال تصویر استفاده کردین عالی بود