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

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

اگر شما از آن دسته افرادی هستید با آردوینو مخالف هستند، پیشنهاد می‌کنم این پروژه را صرف نظر از آردوینو بودن پلت فرم مطالعه فرمایید. شما در این پروژه می‌توانید به خوبی هماهنگی و اتصال چند ماژول، سنسور و نمایشگر با یکدیگر، و در عین حال سادگی را به‌وسیله یک میکروکنترلر 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 آردوینو تزریق کنید. اگر این جریان کمکی را متصل نکنید، رادار شروع به کار می‌کند، اما به محض اینکه سرو موتور شروع به کار کند، کل مدار ریست می کند.

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

 

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

دانلود ها

حمایت از Digi Boy

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

0 نفر

پــــســنــدیـده انـد

توجه

Digi Boy

به دانش فزای و به یزدان گرای، که او باد جان تو را رهنمای (فردوسی)

دیدگاه ها

6 دیدگاه

  • احسان
    ۶ شهریور ۱۴۰۰

    سلام وقت بخیر
    ممنون برای آموزش‌های خوب و خصوصا رایگانتون
    میشه به جای نمایشگر نوکیا از نمایشگر TFT استفاده کرد؟ شیوه ی درست راه اندازیش را هم توضیح میدید؟ خیلی از سایت‌ها توضیحهاتی دادن ولی در عمل قابل اجرا نیست

    • Digi Boy
      Digi Boy
      ۶ شهریور ۱۴۰۰

      درود.
      بله، میشه از TFT هم در این پروژه استفاده کرد. اگر فرصت شد، آموزش TFT رو هم مد نظر قرار میدم. این آموزش هم از قبل هست، البته برای ARM
      https://8bi.ir/r4yty

  • هادی
    ۱۶ آذر ۱۳۹۸

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

  • حسین
    ۱۴ آذر ۱۳۹۸

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

    • Digi Boy
      Digi Boy
      ۱۴ آذر ۱۳۹۸

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

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

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

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 11 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 1 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک