پروژه AVR فاصله سنج با ماژول SRF05 و SRF04

27

در این پست از سایت اِمیک, اموزش راه اندازی ماژول های فاصله سنج التراسونیک SRF05 و SRF04 با استفاده از میکروکنترلر AVR قرار داده شده است. برنامه این پروژه به زبان C و با استفاده از نرم افزار کامپایلر کدویژن (CodeVisionAVR) نوشته شده است. در ادامه با ماژول های SRF05 و SRF04 بیشتر اشنا خواهیم شد.

ماژول های فاصله سنج التراسونیک SRF05 و SRF04 :

این ماژول ها برای اندازه گیری فاصله, امواج صوتی با فرکانس بالا تولید و ارسال می کنند و موج بازتاب شده را دریافت می کنند. با اندازه گیری زمان ارسال تا دریافت امواج می توانیم فاصله مورد نظر را محاسبه کنیم. دو ماژول SRF04 و SRF05 تفاومت چندانی با هم ندارد و در واقع ماژول SRF05 ارتقاء یافته ماژول SRF04 می باشد. مسافت قابل سنجش توسط این ماژولها از 2cm تا 450cm می باشد.

این دو ماژول به گونه ای طراحی شده اند که می توان از انها بجای یکدیگر بدون نیاز به تغییر برنامه یا شماتیک پروژه استفاده کرد. در زیر تصویر این دو ماژول را مشاهده می کنید که تنها تفاوت ظاهری انها اضافه شدن یک پایه به نام OUT به ماژول SRF05 می باشد.

Ultrasonic-Module-SRF-PIN-EMIC

برای راه اندازی ماژول SRF05 دو مد وجود دارد, اما برای راه اندازی SRF04 یک مد یا روش وجود دارد که در ادامه مد یک و مد دو توضیح داده می شوند (مد یک برای راه اندازی هر دو ماژول می باشد و مد دو فقط برای SRF05 می باشد)

مد یک :

ماژول SRF05 دارای 5 پایه می باشد

  • پایه VCC که باید به 5 ولت متصل شود
  • پایه GND که به زمین (منفی تغذیه) متصل می شود
  • پایه Trig
  • پایه Echo
  • پایه OUT

در ماژول SRF04 تعداد پایه ها 4 عدد می باشد و تنها تفاوت نسبت به SRF05 نداشتن پایه OUT است.

برای راه اندازی در مد یک ابتدا باید به پایه Trig ماژول یک پالس به طول حداقل 10 میکرو ثانیه اعمال کنیم. در ادامه ماژول به طور خودکار 8 پالس با فرکانس 40K هرتز به محیط ارسال می کند. بعد از ارسال پالس ها توسط ماژول پایه Echo یک می شود و تا زمانی که پالس های برگشتی (بازتاب شده) را دریافت نکرده یک باقی می ماند. زمانی که ماژول پالس های برگشت شده را دریافت کرد پایه Echo دوباره صفر می شود.

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

SRF05&04-mode1-emic

همانطور که در دیاگرام بالا مشاهده می کنید طول پالس روی پایه Echo از 100 میکرو ثانیه تا 25 میلی ثانیه می باشد و در صورتی که طول پالس دریافتی از 30 میلی ثانیه بیشتر شد, یعنی ماژول هیچ جسمی را تشخیص نداده است.

همانطور که در بالا گفته شد از این روش یا مد می توان برای راه اندازی هر دو ماژول SRF05 و SRF04 استفاده کرد و در این روش به راحتی می توان از دو ماژول بجای یکدیگر بدون نیاز به تغییر برنامه یا شماتیک استفاده کرد.

توجه کنید که در این مد نیازی به استفاده از پایه OUT در ماژول SRF05 نیست و لازم نیست بجایی متصل شود.

مد دو :

در این روش از یک پایه برای تریگر (Trig) و اکو (Echo) استفاده می شود. این روش برای صرفه جویی در پایه های ورودی/خروجی(I/O) میکروکنترلر یا برد های اردوینو یا… طراحی شده است.

در این روش که فقط برای ماژول SRF05 می باشد باید پایه OUT را به زمین متصل کنیم و دیگر نیازی به پایه Echo نداریم و نیازی نیست بجایی متصل کنیم. در این مد پالس را مانند مد اول به پایه Trig اعمال می کنیم, ولی پالس برگشتی را هم از همین پایه دریافت میکنیم در صورتی که در مد اول از پایه Echo پالس برگشتی را دریافت میکردیم. در زیر دیاگرام برای مد دو را مشاهده می کنید:

SRF05&04-mode2-emic

پروژه AVR فاصله سنج با ماژول SRF05 و SRF04 :

در این پروژه ما با استفاده از ماژول فاصله سنج SRF05 و میکروکنترلر ATmega16 فاصله تا جسم را محاسبه می کنیم و روی یک LCD کاراکتری 2*16 نمایش می دهیم. ما از روش اول یا مد یک برای راه اندازی SRF05 استفاده می کنیم, بنابراین شما می توانید بدون نیاز به تغییر در برنامه یا شماتیک پروژه از ماژول SRF04 نیز استفاده کنید.

P-SRF05&04-Test-with-avr-emic

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

SRF05&04-Test-with-avr-emic

همانطور که در شماتیک بالا مشاهده می کنید پایه Echo در ماژول NRF05 به پین 39 میکروکنترلر (پین 1 از پورت A) و پایه Trig به پین 40 میکرو (پین 0 از پورت A) متصل شده است.

پایه های تغذیه میکروکنترلر (پایه های 10 و 11) که در تصویر بالا وجود ندارند را فراموش نکنید به تغذیه 5 ولت متصل کنید.

برنامه کدویژن :

در این پروژه فرکانس میکروکنترلر 8 مگاهرتز تنظیم شده است. در زیر برنامه نوشته شده به زبان C و کامپایلر کدویژن را مشاهده می کنید:

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

SRF05&04-FMD-emic

نکته: از اونجایی که ما زمان رفت تا برگشت را در فرمول میذاریم باید بر 2 تقسیم کنیم تا فاصله ما دو برابر محاسبه نشود.

سرعت صوت در دمای 20 درجه سانتی گراد 343.2 متر بر ثانیه می باشد و همانطور که در فرمول مشاهده می کنید باید ان را تبدیل به سانتی متر بر میکروثانیه کنیم که بعد از تبدیل سرعت صوت برابر با 0.03432 سانتی متر بر میکروثانیه می شود و ما از این مقدار در برنامه بالا استفاده کرده ایم.

ما از تایمر 0 میکرو استفاده کرده ایم که یک تایمر 8 بیتی هست, بنابراین این تایمر می تواند از 0 تا 255 بشمارد (2 به توان 8) هر بار که تایمر از 0 شروع می کند و تا 255 می شمارد, از اونجایی که بیشتر از این نمیتواند بشمارد به اصطلاح سر ریز می کند و دوباره برمی گردد و از 0 شروع می کند و تا زمانی که فعال است این روند را ادامه می دهد. با هر بار سر ریز تایمر یک وقفه اتفاق می افتد (وقفه در خط 12 برنامه) و همانطور که دستورات درون وقفه را مشاهده می کنید با هر بار اجرای وقفه یک واحد به متغیر overflow اضافه می شود. یعنی هر بار که تایمر صفر 256 واحد می شمارد یک واحد به متغیر overflow اضافه می شود.

بنابراین ما در خط 59 برنامه برای بدست اوردن مقدار شمارش تایمر, متغیر overflow را در 256 ضرب کرده ایم و حاصل ان را با مقدار حال شمارنده (رجیستر TCNT0) نیز جمع کرده ایم تا مقدار شمارش کامل ما بدست بیاید. و از اونجایی که فرکانس کاری تایمر را 1 مگاهرتز تنظیم کرده ایم هر بار شمارش تایمر 1 میکرو ثانیه طول می کشد. در نتیجه می توانیم مقدار شمارش کامل تایمر 0 را که در خط 59 بدست اوردیم درون فرمول بالا به عنوان زمان رفت تا برگشت سیگنال قرار دهیم.

توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می تونید در قسمت نظرات مطرح کنید.

کلیپ تست عملی پروژه :

 

دانلود فایل ها

پسورد فایل زیپ : www.emic.ir

نظر یادتون نره …

27 دیدگاه‌ها

  1. با سلام و عرض ادب
    اگه میشه راهنمایی کنید که برای دقت بیشتر پروژه
    چگونه ماژول DHT22 را به پروژه بالا اضافه کنیم
    و کد برنامه چه تغییراتی می کند.
    و اگر مقدور است کد برنامه که سنسور دما و رطوبت DHT22 را داره به پروژه اضافه کنید
    سپاس فراوان از زحمات جنابعالی

  2. خسته نباشید
    من از این ماژول در حالتی استفاده کردم که فرستنده و گیرنده روبه روی هم باشند و در برنامه هم اون تقسیم بر 2 را برداشتم اما خروجی آن عدد درستی نیست یعنی تمامی فاصله ها را حدود 3 سانتی متر کمتر نشان میدهد
    میشه لطفا راهنمایی ام کنید چیکار کنم که درست بشه
    آیا خود این ماژول فقط در حالتی که فرستنده و گیرنده کنار هم باشند کارکرد داره؟
    یعنی این مشکل مربوط به ذات خود ماژول هست یا قابل حله؟
    البته میدونم اگر توی فرمول یک 3+ بزنم درست میشه فاصله ها اما میخوام اصولی حلش کنم

  3. سلام خوبین مهندس
    خسته نباشید خیلی ممنون از مطالب خوب تون
    مهندس من این برنامه رو ریختم رو attiny13تنظیمات پورت و تایمرشم درست کردم
    ولی کار نکرد و التراسونیک ویز ویز می کرد

    • سلام, بررسی کنید که فرکانس میکرو را روی 8 مگ تنظیم کرده باشید. برای تست پروژه فایل هگز موجود در فایل های انتهای مطلب را روی میکرو پروگرام کنید و برنامه را هم تغییر ندهید

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

    • سلام, یه فرمول ساده هست نیاز به توضیح نداره, در مورد سرعت صوت که توضیح داده شده که دارای یک مقدار ثابت هست و زمان هم توسط تایمر میکرو محاسبه میشه

  5. سلام خسته نباشین اگه بخوام بگم اگر فاصله کمتر از 7 سانت شد ال ای دی رو روشن کن اینجوری بنویسم درسته ؟ :
    بعد از if(Counter<30000) بنویسم if ( distance7) ال ای دی روشن در غیر این صورت خاموش ؟ این درسته ؟ چون هر چی تست میکنم جواب نمیده

    • سلام, بعد از محاسبه distance (خط 61) یک شرط if بنویسید که اگر Counter کمتر از 410 شد (410 تقریبا میشه 7 سانت که باتوجه به فرمول موجود در خط 60 برنامه برای هر فاصله ای خودتون می تونید عددشو بدست بیارید) کار مورد نظرتون را بکنه مثلا روشن شدن یک led و اخر شرط if هم یک else اضافه کنید که در غیر این صورت مثلا led خاموش باشه

  6. یک سلام پر انرژی و تشکر از زحماتتون
    خواستم برای دوستانی که میگن چرا فرکانس میکرو اول برنامه 8 مگ هست ولی بعد مگه 1 مگ
    اون 1 مگ برای فرکانس تایمر هست نه میکرو

  7. سلام واقعا ممنون از پروژه ای جالبتون.
    من این دستگاه رو درست کردم اما فاصله رو درست نشون نمیده، مثلا فاصله ۵سانت باشه یه عددی حدود ۴۰ نشون میده و واحدcm هم نداره مشکل از کجا میتونه باشه؟
    با تشکر

  8. سلام
    اولا میخوام یه خسته نباشید پر انرژی بهتون بگم
    چون واقعا سایتتون جامع هستش و توضیحاتش مختصر اما کامل و عالی
    و دوما در متن سایت بالای برنامه کد ویژن نوشتید فرکانس 8 Mhz اما در برنامه 1Mhz در نظر گرفتید گفتم شاید بعضیا دچار مشکل بشن
    ممنون

  9. سلام من این پروژه رو پیاده سازی کردم اما روی lcd فقط مربع نمایش داده میشه و مشکل از چی میتونه باشه ؟
    با تشکر از سایت خوبتون

      • با همون اتصالات برنامه دیگه ای رو تست کردم و بازم چیزی نمایش داده نمی شد روی LCD ، مربع نشون دادن بخاطر تنظیم نبودن کنتراست بود اما کلا چیزی نمایش داده نمیشه

ارسال دیدگاه

لطفا دیدگاه خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید