دیگر

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

ماژول شتابسنج 3 محوره gy61 زاویه و شیب را بادقت ±3 درجه اندازه گیری می کند و کار با آن برای پروژه هایی که نیاز به دقت زیاد ندارند ساده و مناسب است. منظور از 3 محوره بودن این است که زاویه را برای 3 مولفه فضایی در جهت محور x ها، y ها و z ها محاسبه می کند.

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

لینک دیتاشیت ماژول

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

وسایل مورد نیاز:

آردوینو(که در این جا از uno استفاده می کنیم)
ماژول gy61
مقداری سیم بردبوردی (3 عدد نری به مادگی)
اتصال پایه ها:
Vcc به 5 ولت آردوینو
Gnd به Gnd آردوینو
X_out به پایه A0 آردوینو (در این پروژه فعلا از همین یک محور استفاده می کنیم)

حال ابتدا کد سمت آردوینو را آپلود کرده و سپس یک اجرا از برنامه پایتونمان می گیریم.

کد سمت آردوینو:

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

شرح کد:

در خط سوم تابع نوشته شده برای برقراری ارتباط سریال آردوینو می باشد که ما از طریق کامپیوتر به آن دسترسی داریم. علاوه بر آن پایه های 1 و 0 آردوینو uno نیز به ترتیب شامل این ارتباط می شوند که به ترتیب Tx و Rx خوانده می شوند و به همین ترتیب اطلاعات فرستاده و دریافت می شوند. عدد 9600 نیز درواقع سرعت باند برقراری ارتباط می باشد که استاندارد آن همین 9600 می باشد. اما می توان به جای آن اعداد دیگری مانند ۳۰۰, ۶۰۰, ۱۲۰۰, ۲۴۰۰, ۴۸۰۰, ۹۶۰۰, ۱۴۴۰۰, ۱۹۲۰۰, ۲۸۸۰۰, ۳۸۴۰۰, ۵۷۶۰۰ و ۱۱۵۲۰۰ به عنوان آرگمان قرار داد.

در خط هشتم نیز یک عدد اعشاری به نام a تعریف می شود که درواقع پایه A0 ما را به صورت آنالوگ میخواند و 264 واحد از آن کم می کند.
در خط بعدی یک شرط داریم که ملاحظه می کنید. در واقع این عدد طولانی هنگامی که در a ضرب بشود زاویه را برحسب درجه می دهد. ضریب a با قرار دادن ماژول در زاویه ای مشخص مثلا 180 درجه و طرفین وسطین عددی که در این حالت از پایه آنالوگ خوانده می شود با این اعداد به دست می آید و ممکن است کمی متفاوت با مال شما باشد و به هر حال بهتر است این عدد را خودتان با همین روش قراردهی در یک زاویه مشخص (که خودتان از میزان آن مطلع اید) و عددی که به دست می آید بیابید.

در نهایت اگر a ضرب در این عدد از 90 درجه بیشتر شد یعنی کاربر ماژول را به سمت راست گرفته است و عکس ما نیز باید به سمت راست برود پس در سریال (از سوی آردوینو) عبارت high را می فرستیم که نهایتا قرار است آن را در پایتون بخوانیم و عکس خود را به سمت راست ببریم. اما اگر این عدد از 90 درجه کمتر بود لازم است عکس ما به سمت چپ یعنی همان جهتی که کاربر ماژول را گرفته است برود و برای این کار عبارت low را به پایتون می فرستیم و اگر هم ماژول خود، در 90 قرار داشت می خواهیم عکس ما سر جایش ثابت بماند پس چیزی به پایتون نمی فرستیم. عمل فرستادن نیز با تابع print از Serial انجام می شود. تابع print مقدار ورودی را در ادامه آن چه قبلا ارسال کرده می فرستد. (تفاوت آن با println نیز در همین است. println خروجی را در خط بعد و در واقع با یک enter یا همان کد اسکی “\n” چاپ می کند.) برای مشاهده خروجی و برای به دست آوردن ضریب a می توانید از سریال مانیتور خود محیط آردوینو نیز استفاده کنید.

نهایتا مقدار delay یا همان ping خود را برابر 10 میلی ثانیه قرار می دهیم. لازم به ذکر است که این مقدار را باید عینا در برنامه پایتون خود قرار دهیم.

کد سمت پایتون:

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

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

شرح کد:

در خط اول و دوم کتابخانه پایگیم import می شوند و در خط سوم مقداردهی های اولیه از این کتابخانه با دستور init انجام می شوند. در خط بعدی ابعاد صفحه را یک مقدار دلخواه 700 در 700 تعین می کنیم و در خط بعدی نیزاسم پنجره را مقداری دلخواه قرار می دهیم؛ در خط بعد رنگ مشکی با کد rgb 0،0،0 به نام black تعریف می شود. در خط بعد عکس new-shape.png را load کرده و متغیر s را برای آن در نظر میگیریم؛ در واقع ما از این عکس به عنوان تصویری که می خواهیم آن را به راست و چپ ببریم استفاده می کنیم و می بایست در محل ذخیره فایل .py ما حضور داشته باشد.

در خط 8 کتابخانه serial نیز import می شود. پایتون به طور پیش فرض این کتابخانه را دارا نمی باشد و باید آن را دریافت نمایید.

لینک دانلود کتاب خانه pyserial

در خط 9 سریال مورد نظر را مشخص میکنیم و متغیرser را برای آن در نظر میگیریم. تابع پیش رو 3 ورودی دریافت می کند. مقدار اول نام سریالی می باشد که قصد دارید با آن ارتباط برقرار کنید. این اسم همان پورت آردوینو است که در محیط برنامه آردوینو نیز در گوشه پایین سمت راست نوشته می شود. مقدار دوم نیز همان سرعت باندی است که در برنامه آردوینو آن را برابر با 9600 قرار دادیم. مقدار سوم این تابع نیز همان تایم اوت است که مادر اینجا آن را برابر 0 قرار می دهیم.

در خط بعد کتابخانه تایم به منظور قرار دادن delay مناسب و هماهنگی بین ارسال و دریافت اطلاعات import می شود. در خطوط بعد متغیر x و y مختصات تصویر مقدار دهی اولیه (350،350 که وسط صفحه 700 در 700 ما می شود) می شوند یعنی تصویر ما در ابتدا در وسط صفحه قرار دارد.

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

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

در خط 20 با استفاده از دستور try -که اگر کاری که درون بلاک آن است بدون اعتراض باشد انجام می دهد و در غیر این صورت کاری که درون بلاک except بعد از آن می آید را بدون اعتراض از دستورات try انجام می دهد- با استفاده از تابع readline سریالی که به شی تعریف شده ما (ser) می رسد را می خوانیم و آن را درون متغیر m -که از جنس رشته است-می ریزیم و در except یک نشانه برای داشتن این اعتراض مانند چاپ کردن عبارت Data could not be read می گذاریم. در واقع به علت این که ما با دریافت و ارسال اطلاعات سر و کار داشته باشیم امکان این می باشد که بین زمان این دو عمل (همان delay ما در این جا) ناهماهنگی ایجاد شود یا حتی فرستنده چیزی نفرستد یا دیر بفرستد یا حتی ارتباط برای لحظه ای قطع شود و این اتفاقات چون می تواند فقط در برهه ای از زمان باشد و دوباره ارتباط برقرار گردد ما از try و except استفاده می کنیم تا برنامه با دادن یک ارور تمام نشود.

در نهایت ما شرط به راست رفتن تصویر را همان مقداری که آردوینو در صورت به راست کج شدن سنسور به ما می دهد (high) و سمت چپ را هم به همین صورت (low) تنظیم می کنیم (از آن جا که ممکن است برنامه در قسمت try بالا ارور داشته باشد و m تریف نشده باشد آن را در خط 13 یک رشته تهی مقدار دهی می کنیم.)که مقدار x باید به ترتیب 30+ و 30- شود و عکس را در پنجره گرافیکی خود (در این جا شی a) نمایش می دهیم و سپس با تابع sleep از کتابخانه time مقدار delay خود را برابر 0.01 ثانیه یا همان 10 میلی ثانیه (که در برنامه آردوینو هم همینطور تنظیم شده بود) قرار می دهیم و دستور display.update را در انتهای حلقه برای آپدیت شدن تصویر پنجره گرافیکی در هر بار اجرا شدن کد درون حلقه اصلی قرار می دهیم.

با اجرا کردن برنامه، آردوینو ریستارت می شود و شروع به ارسال اطلاعت می کند.حال اگر gy61 به راست کج شود تصویر ما به راست و اگر به چپ خم شود تصویر به چپ می رود وگرنه ثابت باقی می ماند.

ارسال شده توسط: حمیدرضا شفیع زاده اسفندآبادی

سیدرضا بازیار

به وب سایت شخصی من خوش آمدید! من سیدرضا بازیار هستم، متولد 1374 شهرستان کازرون. در حال حاضر دانشجوی رشته مهندسی فناوری اطلاعات هستم، مسلط به زبان های: HTML5 - CSS3 - JavaScript در حال یادگیری زبان های PHP و Python هستم و علاقه بسیار زیادی به برنامه نویسی تحت وب ، هوش مصنوعی و زمینه امنیت اطلاعات دارم.

مطالب مرتبط

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

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

بستن