آردوینو arduino, پروژه, پروژه آردوینو, پروژه های سیسوگ, توصیه شده

ساخت رادار آلتراسونیک به همراه نمایشگر رنگی با آردوینو

رادار سیسوگ

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

اگر شما از آن دسته افرادی هستید با آردوینو مخالف هستند، پیشنهاد می‌کنم این پروژه را صرف نظر از آردوینو بودن پلت فرم مطالعه فرمایید. شما در این پروژه می‌توانید به خوبی هماهنگی و اتصال چند ماژول، سنسور و نمایشگر با یکدیگر، و در عین حال سادگی را به‌وسیله یک میکروکنترلر 8 بیتی ببینید. این پروژه به جهت سادگی و عمومی بودن بر روی پلت فرم آردوینو اجرا شده است. شما می‌توانید با توجه به عملکرد برنامه، آن را برای میکروکنترلر های دیگر تعمیم دهید.

 

مدار و شماتیک رادار آلتراسونیک

شماتیک مدار رادار آلتراسونیک

راه اندازی حس‌گر HC-SR04

قبلاً در سیسوگ پستی کامل در رابطه با راه اندازی حس‌گر HC-SR04 منتشر شده است، اما به‌صورت اجمالی، این حس‌گر شامل چهار پایه است. دو پایه برای تغذیه (GND, VCC)، که این حس‌گر با پنج ولت کار می‌کند. برای راه اندازی سنسور شما می‌بایست یک پالس با مدت زمان مشخص به پایه Trigger بدهید تا سیگنال رفت را در هوا منتشر کند. سیگنال منتشر شده، پس از برخورد با مانع مجدداً به سمت حس‌گر بازتاب می‌شود. ما از طریق پایه‌ی Echo منتظر برگشت سیگنال می‌مانیم و مدت زمان رفت و برگشت سیگنال را محاسبه می‌کنیم. اگر این مدت زمان را تقسیم بر دو کنیم، فاصله زمانی حس‌گر تا مانع به‌دست می‌آید. از آنجایی که سرعت انتشار صوت در محیط را می‌دانیم، می‌توانیم با محاسبات ریاضی ساده فاصله طولی مانع تا حس‌گر را به‌دست بیاوریم.

در خطوط ابتدایی برنامه، پایه‌های تری گر و اکو را برای آردوینو مشخص می‌کنیم:

همچنین در تنظیمات اولیه، پایه تریگر را بصورت خروجی، و پایه اکو را بصورت ورودی تعریف می نماییم:
عملیات محاسبه فاصله را به‌صورت تابعی درون برنامه تعریف کرده‌ایم. خروجی این تابع یک عدد بر حسب سانتی متر، و از جنس Long می‌باشد. همچنین اگر شما فاصله را برحسب میلی متر یا اینچ احتیاج داشته باشید، می‌توانید داخل تابع، محاسبه Cm را توضیح (کامنت) کرده و به‌جای آن خط مربوط به محاسبه‌ی واحدهای دیگر را از توضیح خارج کنید. در هر قسمت از برنامه که نیاز به دانستن فاصله داشته باشید، می‌توانید خیلی راحت، این تابع را صدا بزنید.

راه اندازی سرو موتور

آموزش راه اندازی سرو موتور توسط آردوینو نیز قبلاً در پستی جداگانه و به‌صورت کامل در سیسوگ آموزش داده شده است. به‌صورت خلاصه، Servo Motor یک موتور الکتریکی با سیستم کنترل بازخورد با دقت بسیار بالاست که می‌توان شافت آن را در جهت و زاویه دلخواه برای رادارمان تنظیم کرد. سرو موتور در دو نوع DC و AC وجود دارد. سرو مورد استفاده در این پروژه SG90  می‌باشد که از نوع DC بوده و قابلیت چرخش 180 درجه‌ای و تحمل وزن تا 9 گرم را دارد. به لطف کتابخانه‌ها و توابع از پیش نوشته شده آردوینو، نیازی نیست شما با جزئیات تولید PWM توسط میکرو کنترلر درگیر شوید.

 

تنظیمات اولیه مربوط به شماره پین متصل به سرو، درون تابع setup آردوینو

حال در هر قسمت از برنامه که نیاز داشته باشید، می‌توانید به کمک این تابع زاویه ای از 0 تا 180 به سرو بدهید:

بهتر است پس از زاویه دادن به سرو، مقداری تاخیر در برنامه اضافه کنیم تا مطمئن شویم سرو در موقعیت خود قرار گرفته است.

 

راه اندازی نمایشگر رنگی نوکیا

قبلاً در سیسوگ آموزش راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن منتشر و در مدت کوتاهی به یکی از پربحث ترین مطالب سیسوگ تبدیل شد. پیشنهاد می‌کنم حتماً این مقاله را نیز مطالعه بفرمایید. کتابخانه نوشته شده توسط زئوس، برای AVR، ARM و آردوینو قابل استفاده می‌باشد.

 

ترتیب اتصال پایه‌های ال سی دی نوکیا به آردوینو:

 

Arduino
NOKIA LCD
GND
GND
3.3
3.3
3.3
BL
13
SCL
11
SDA
10
CS
9
RS

توابع پر استفاده این کتابخانه:

راه اندازی اولیه نمایشگر:

تنظیم زاویه چرخش نمایشگر:

در ورودی تابع بالا، می‌توانید مقادیر زیر را استفاده کنید:

دیگر توابع مورد استفاده در برنامه:

 

توضیح الگوریتم برنامه اصلی رادار آلتراسونیک

در این پروژه قرار است ما یک رادار آلتراسونیک بسازیم که از زاویه صفر تا 180 درجه را به وسیله سنسور آلتراسونیک اسکن کند و پس از اینکه هر زاویه را اسکن کرد، بر روی نمایشگر با رسم خط وضعیت وجود مانع را نمایش دهد. سپس مجدداً از 180 تا صفر این کار را تکرار نماید. در واقع خطوط رسم شده روی نمایشگر، شعاع‌های یک نیم دایره هستند که برای هر زاویه رسم می‌شوند. برای اینکه نیم دایره رادار ما روی صفحه نمایشگر بهتر رسم شود، پس از راه اندازی، آن را 90 درجه می‌چرخانیم. ابعاد نمایشگری که در این پروژه بکار برده‌ایم 128*160 پیکسل می‌باشد. ممکن است نمایشگری که شما انتخاب می‌کنید ابعاد دیگری داشته باشد. برای درک بهتر مختصات شکل زیر را ببینید:

راهنمای مختصات LCD نوکیا

نقطه شروع رسم شعاع را دقیقا در پایین و مرکز LCD قرار می‌دهیم. با توجه به ابعاد نمایشگر این نقطه (80,128) بدست می‌آید. حداکثر طول این شعاع را 78 پیکسل در نظر می‌گیریم تا هنگامی که زاویه این شعاع صفر و یا 180 درجه باشد، از نمایشگر بیرون نزند.

با استفاده از تابع زیر می‌توانید روی نمایشگر خود کمان ها را برای زاویه دلخواه رسم نمایید:

h و k مختصات شروع رسم شعاع هستند که آن را (80,128) بدست آوردیم.

r شعاع کمان است که حداکثر آن برای این نمایشگر 78 می‌باشد. برای نمایشگر های دیگر پس از محاسبه می‌توانید آن را داخل متغیر زیر در خطوط اول برنامه تغییر دهید:

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

radar_range محدوده ای‌ است که شما برای رادار خود تعیین می‌کنید و اسکن آن را محدود به این ناحیه می‌کنید. در خطوط اولیه برنامه شما می‌توانید این مقدار را تغییر بدهید.

float angle نیز اندازه زاویه ای است که می‌خواهیم شعاع در آن زاویه رسم شود. دقت کنید که این تابع اندازه زاویه را برحسب رادیان می‌گیرد. پس لازم است تا اندازه زاویه را در عدد 0.0174 ضرب نماییم. با توجه به تصویر بالا، چون ما برای نیم دایره، قسمت بالایی آن را لازم داریم، برای به‌دست آمدن زوایه درست، این مقدار را در -1 نیز ضرب می‌کنیم.

حال که راه اندازی تمام قسمت های رادار را می‌دانید، ما با استفاده از یک حلقه for از شماره 0 تا 180 را می‌شماریم و باز می‌گردیم. در هر بار شمارش، ابتدا زاویه را به سرو موتور می‌دهیم تا سنسور ما را به آن زاویه ببرد. سپس با کمک سنسور آلتراسونیک فاصله مدار تا مانع را اندازه می‌گیریم. پس از اندازه گیری، متناسب با این فاصله شعاع دایره را در آن زاویه رسم می کنیم.

کد هایی که هر بار در حلقق For اجرا می شوند، در اینجا j زاویه مورد نظر ماست:

به‌جای اینکه دو حلقه شمارنده برای 0 تا 180 و سپس مجددا از 180 تا 0 بنویسیم، یک شمارنده از 0 تا 361 نوشتیم و در خط ششم، متغیر j را تصحیح می‌کنیم.

توضیح خط 14:

radar_range همانطور که بالاتر نیز اشاره کردیم، محدوده ای است که برای رادار خود در نظر می‌گیرید. مقدار این متغیر در خطوط اولیه برنامه قابل تغییر است. اگر distance (فاصله بدست آمده تا مانع) از این مقدار بیشتر باشد، مقدار آن را با خود radar_range برابر قرار می‌دهیم. زیرا وجود مانع در خارج از محدوده تعریف شده، برای ما اهمیت ندارد. همچنین اگر این مقدار از صفر کمتر باشد، نشان دهنده محاسبات غلط یا عدم توانایی تشخیص توسط سنسور آلتراسونیک می‌باشد. در این صورت نیز مقدار distance را حداکثر (radar_range) قرار می‌دهیم.

توضیح خط 16:

اگر مانع از فاصله ای که ما برای آن تعریف کرده ایم نزدیک تر شد، بازر شروع به جیغ زدن می‌کند. مقدار active_buzzer در ابتدای کد قابل ویرایش می‌باشد. پین مربوط به بازر نیز در همان ابتدای برنامه در buzzerPin تعریف شده است. پایه پیش فرض شماره 6 می‌باشد. استفاده از بازر اختیاری می‌باشد.

نکات عملی

با توجه به جریان محدود USB و وجود چندین المان مصرف کننده در مدار، USB پاسخگوی جریان مدار نیست و شما می‌بایست از طریق یک منبع خارجی جریان مناسب با ولتاژ 5 ولت را به پایه Vin آردوینو تزریق کنید. اگر این جریان کمکی را متصل نکنید، رادار شروع به کار می‌کند، اما به محض اینکه سرو موتور شروع به کار کند، کل مدار ریست می کند.

همچنین شما باید سرور موتور را بر روی سطحی محکم نمایید و سپس سنسور آلتراسونیک را بر روی آن بگونه‌ای سوار کنید تا بتواند به راحتی گردش نماید.

 

فیلم عملکرد رادار آلتراسونیک

دانلود ها


انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.  همکاری با سیسوگ

 

پاسخی بگذارید

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

4 دیدگاه در “ساخت رادار آلتراسونیک به همراه نمایشگر رنگی با آردوینو

  1. هادی گفت:

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

  2. حسین گفت:

    سلام .
    سپاس خیلی جالب بود.

    1. Digi Boy Digi Boy گفت:

      ممنون، خواهش می‌کنم.