آردوینو, پروژه آردوینو

آموزش راه اندازی ماژول فاصله سنج اولتراسونیک SRF04 با آردوینو

آموزش راه اندازی ماژول فاصله سنج اولتراسونیک SRF04 با آردوینو

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

فهرست مطالب

این ماژول می‌تواند اشیاء قرار گرفته تا فاصله تقریباً 4 متری را تشخیص دهد. یکی از چندین کاربرد SRF04 آن است که می‌توانید آن را در ربات خود قرار دهید تا مانع از برخورد آن با دیوار یا موانع موجود در مسیر شوید.

موج اولتراسونیک چیست؟

موج اولتراسونیک صدای بسیار بلندی است که فرکانس آن برای سیستم شنوایی انسان بسیار بالاست و به همین دلیل نمی‌توان آن را شنید.

موج اولتراسونیک چیست؟
موج اولتراسونیک چیست؟

انسان‌ها می‌توانند امواج صوتی را بشنوند که در رنج 20 تا 20000 هزار بار در ثانیه می‌لرزند. این در حالی است که امواج اولتراسونیک فرکانس بیش از 20000 هرتزی دارند و در نتیجه توسط انسان‌ها قابل شنیدن نیستند.

آشنایی با ماژول اولتراسونیک SRF04

ماژول SRF04 دارای دو بخش اولتراسونیک است. یکی از آنها به عنوان فرستنده و مبدل سیگنال‌های الکتریکی به پالس‌های اولتراسونیکی 40 هرتزی و دیگری به عنوان گیرنده پالس‌های ارسال شده فعالیت می‌کنند.

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

این سنسور می‌تواند به صورت از راه دور، اشیاء قرار گرفته در فاصله تقریبی 2 سانتی‌متری تا 4 متری را با دقت 3 میلی‌متر تشخیص دهد.

از آن جایی که اس آر اف 04 برای فعالیت به ولتاژ 5 ولت نیاز دارد، می‌توانید آن را مستقیماً به آردوینو و یا هر میکروکنترلر منطقی 5 ولتی وصل کنید.

مشخصات فنی ماژول اولتراسونیک SRF04

ابعاد

45 × 20 × 15 میلی‌متر

ولتاژ کاری

5 ولت DC

جریان کاری

15 میلی‌آمپر

فرکانس کاری

40 کیلوهرتز

حداکثر فاصله پوشش

4 متر

حداقل فاصله پوشش

2 سانتی‌متر

دقت فاصله پوشش

3 میلی‌متر

زاویه اندازه‌گیری

15 درجه

محرک سیگنال ورودی

TTL پالس 10 میکرو ثانیه

آشنایی با پین‌های ماژول فاصله سنج اولتراسونیک SRF04 با آردوینو

پین‌های ماژول SRF04
پین‌های ماژول SRF04
  • VCC: تأمین‌کننده نیروی ماژول. امکان اتصال این پین به پین خروجی 5 ولت آردوینو وجود دارد.
  • Trig (Trigger): محرک پالس‌های امواج اولتراسونیک. با تنظیم این پین روی وضعیت HIGH و 10 میکرو ثانیه، سنسور امواج اولتراسونیک ارسال می‌کند.
  • Echo: این پین فرستنده امواج اولتراسونیک را دریافت و در وضعیت High قرار می‌گیرد تا وقتی بازتاب به وجود آمد، وضعیت آن به حالت Low درآید. با بررسی زمان، Echo در وضعیت High قرار خواهد گرفت تا فاصله اندازه‌گیری شود.
  • اتصال به زمین (GND): امکان اتصال به پین اتصال به زمین (GND) آردوینو.

لوازم مورد نیاز برای پروژه راه اندازی ماژول فاصله سنج اولتراسونیک SRF04 با آردوینو

ماژول اولتراسونیک SRF04 چگونه کار می‌کند؟

زمانی که پین محرک در وضعیت High و 10 میکرو ثانیه قرار می‌گیرد، فرآیند محاسبه مسافت آغاز می‌شود. در پاسخ، سنسور اس آر اف 04 تعداد هشت پالس 40 کیلوهرتزی را می‌فرستد. این تعداد پالس مشخصاً ایجاد شده‌اند تا گیرنده بتواند پالس‌های دریافتی را از نویزهای اولتراسونیک اطراف شناسایی کند.

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

اگر پالس‌های اولتراسونیک بازتاب نداشته باشند، پس از 38 میلی‌ثانیه سیگنال اکو منقضی شده و وضعیت پین به حالت Low در خواهد آمد. بر این اساس، یک پالس 38 میلی‌ثانیه‌ای یعنی اینکه هیچ مانعی بین شیء و موج وجود ندارد.

فعالیت ماژول SRF04 در مواقعی که مانع وجود ندارد
فعالیت ماژول SRF04 در مواقعی که مانع وجود ندارد

در سمت دیگر، چنان‌چه پالس‌ها بازگردانده شوند، پین اکو به محض دریافت سیگنال Low می‌شود. این اتفاق روی پین اکو پالس به وجود می‌آورد که عرض آنها با توجه به زمان دریافت سیگنال، بین 150 میکرو ثانیه تا 25 میلی‌ثانیه خواهد بود.

فعالیت ماژول SRF04 در مواقعی که مانع وجود دارد
فعالیت ماژول SRF04 در مواقعی که مانع وجود دارد

محاسبه مسافت توسط ماژول اولتراسونیک SRF04

عرض پالس دریافتی بدین منظور استفاده می‌شود تا فاصله نسبت به شیء محاسبه گردد. می‌توان نحوه فعالیت SRF04 را با استفاده از فرمول زیر متوجه شد.

نحوه محاسبه مسافت توسط SRF04
نحوه محاسبه مسافت توسط SRF04

سیم‌کشی مدار پروژه راه اندازی ماژول فاصله سنج اولتراسونیک SRF04 با آردوینو

حالا که تقریباً به صورت تمام و کمال با سنسور اولتراسونیک SRF04 آشنا شده‌ایم، می‌توانیم پروژه راه اندازی ماژول فاصله سنج اولتراسونیک SRF04 با آردوینو را آغاز کنیم.

وصل کردن این ماژول به آردوینو بسیار آسان است. اول SRF04 را روی برد بورد بگذارید. سپس پین VCC را به پین 5 ولت آردوینو و پین‌های اتصال به زمین (GND) را به یکدیگر وصل کنید. اینک پین‌های محرک (trig) و اکو (echo) را به ترتیب به پین‌های شماره 9 و 10 آردوینو بزنید.

زمانی که سیم‌کشی پروژه راه اندازی ماژول فاصله سنج اولتراسونیک SRF04 با آردوینو به پایان رسید، مدار شما باید چیزی شبیه تصویر زیر باشد.

سیم‌کشی مدار پروژه راه اندازی ماژول فاصله سنج اولتراسونیک SRF04 با آردوینو
سیم‌کشی مدار پروژه راه‌اندازی ماژول فاصله سنج اولتراسونیک SRF04 با آردوینو

نصب کتابخانه برای پروژه راه اندازی ماژول فاصله سنج اولتراسونیک SRF04 با آردوینو

تحریک کردن سنسور اولتراسونیک و اندازه‌گیری سیگنال پالس دریافتی به صورت دستی بسیار زمان‌بر است اما خوشبختانه کتابخانه‌های زیادی برای انجام این کار وجود دارند. یکی از محبوب‌ترین آنها، کتابخانه NewPing است.

کتابخانه NewPing بسیار پیشرفته است به طوری که در لحظه توانایی پشتیبانی از 15 سنسور اولتراسونیک را دارد و می‌تواند خروجی‌ها بر حسب سانتی‌متر، اینچ و یا بازه‌های زمانی مختلف ارائه کند.

این کتابخانه در نرم‌افزار Arduino IDE وجود ندارد بنابراین باید خودتان آن را نصب کنید.

برای انجام این کار ابتدا به مسیر Sketch> Include Libraries… بروید. سپس منتظر Library Manager بمانید تا کتابخانه را دانلود و لیست کتابخانه‌های نصب شده را آپدیت کند.

مدیریت کتابخانه‌ها در آردوینو
مدیریت کتابخانه‌ها در آردوینو

جستجوی خود را با نوشتن newping فیلتر کنید. اینک روی اولین مورد یافت شده کلیک نمایید تا کتابخانه نصب شود.

نصب کتابخانه NewPing در آردوینو
نصب کتابخانه NewPing در آردوینو

کدهای پروژه راه اندازی ماژول فاصله سنج اولتراسونیک SRF04 با آردوینو

در ادامه کدهایی را می‌بینید که با استفاده از مانیتور سریال، فاصله اندازه‌گیری شده را بر حسب سانتی‌متر ارائه می‌کنند.

				
					// Include NewPing Library
#include "NewPing.h"

// Hook up HC-SR04 with Trig to Arduino Pin 9, Echo to Arduino pin 10
#define TRIGGER_PIN 9
#define ECHO_PIN 10

// Maximum distance we want to ping for (in centimeters).
#define MAX_DISTANCE 400	

// NewPing setup of pins and maximum distance.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {
	Serial.begin(9600);
}

void loop() {
	Serial.print("Distance = ");
	Serial.print(sonar.ping_cm());
	Serial.println(" cm");
	delay(500);
}
				
			

زمانی که کدهای داده شده در نرم‌افزار آردوینو آپلود شدند، باد ریت را روی 9600bpm تنظیم کنید. اینک اشیاء مختلفی را به سمت سنسور بگیرید تا فاصله آنها را ببینید.

نمایش داده‌ها در سریال مانیتور
نمایش داده‌ها در سریال مانیتور

توضیحات کد پروژه راه اندازی ماژول فاصله سنج اولتراسونیک SRF04 با آردوینو

این کدها با معرفی کتابخانه تازه نصب شده NewPing آغاز می‌شوند.

				
					#include "NewPing.h"
				
			

اولین پین‌های آردوینو نیز نشان داده شده‌اند تا به ما بگویند که پین‌های محرک و اکو SRF04 به کجا وصل هستند. در اینجا همچنین، یک مقدار به نام Max_Distance ایجاد شده تا بیشترین فاصله‌ای که سنسور می‌تواند تشخیص دهد، اعلام گردد. در واقع اشیایی که خارج از رنج پوششی سنسور قرار می‌گیرند، پینگ دریافت نمی‌کنند یا اصطلاحاً clear هستند. لازم به ذکر است که مقدار فعلی Max_Distance روی 400 تنظیم شده حال آنکه مقدار پیش‌فرض آن 500 سانتی‌متر است.

				
					#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define MAX_DISTANCE 400
				
			

در ادامه یکی از مقادیر کتابخانه NewPing یعنی Sonar ایجاد شده است.

				
					NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
				
			

در قسمت Setup، ارتباط سریال با رایانه شروع می‌شود.

				
					void setup() {
	Serial.begin(9600);
}
				
			

در بخش Loop، تابع ping_cm() ایجاد و نتیجه روی سریال مانیتور پخش می‌شود. این تابع یک پینگ می‌فرستد و فاصله را بر حسب سانتی‌متر نشان می‌دهد.

				
					void loop() {
	Serial.print("Distance = ");
	Serial.print(sonar.ping_cm());
	Serial.println(" cm");
	delay(500);
}
				
			

سایر توابع کاربردی در کتابخانه NewPing

در ادامه می‌توانید برخی توابع کاربردی موجود در کتابخانه NewPing را مشاهده کنید و با آنها آشنا شوید.

کدهایی که در قسمت قبل ارائه کردیم، فاصله را بر حسب سانتی‌متر مشخص می‌کنند. اگر می‌خواهید نتیجه بر حسب اینچ باشد، از تابع sonar.ping_in() استفاده کنید.

				
					Serial.print(sonar.ping_in());
				
			

کد بالایی فاصله را گرد کرده و به صورت عددی صحیح نشان می‌دهد. چنان‌چه می‌خواهید نتیجه به شکل یک عدد اعشاری باشد، می‌توانید به جای حالت فاصله‌ای، از حالت مدت‌دار کتابخانه NewPing استفاده کنید. برای انجام این کار کد زیر را حذف نمایید:

				
					Serial.print(sonar.ping_cm());
				
			

و به جای آن کد زیر را قرار دهید:

				
					Serial.print((sonar.ping() / 2) * 0.0343);
				
			

در این کتابخانه روشی به نام ping_median(iterations) وجود دارد تا دقت سنسور SRF04 را افزایش دهد. این روش چندین شیوه اندازه‌گیری را به کار می‌گیرد، داده‌های مربوط به اشیاء قرار گرفته خارج از رنج را کنار می‌گذارد و از اطلاعات کسب شده میانگین می‌گیرد. به صورت پیش‌فرض، این کتابخانه 5 نوع داده ذخیره می‌کند ولی شما می‌توانید تعداد آنها را زیاد کنید.

				
					int iterations = 5;
Serial.print((sonar.ping_median(iterations) / 2) * 0.0343);
				
			

راه اندازی ماژول فاصله سنج اولتراسونیک SRF04 با آردوینو با حالت 3-Wire

زمانی که پین‌های دیجیتالی I/O محدودی در آردوینو دارید، می‌توانید از حالت 3 سیمه (3-Wire) بهره ببرید. معمولاً وقتی SRF04 را به آردوینو وصل می‌کنید، به دو پین I/O نیاز خواهید داشت ولی در حالت 3-Wire، تنها به یک پین I/O نیاز دارید.

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

در ادامه تصویری را می‌بینید که نحوه سیم‌کشی مدار پروژه راه اندازی ماژول فاصله سنج اولتراسونیک SRF04 با آردوینو در حالت 3 سیمه را نشان می‌دهد.

راه اندازی ماژول فاصله سنج اولتراسونیک SRF04 با آردوینو با حالت 3-Wire
راه‌اندازی ماژول فاصله سنج اولتراسونیک SRF04 با آردوینو با حالت 3-Wire

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

				
					#define TRIGGER_PIN 9 // Trigger and Echo both on pin 9
#define ECHO_PIN 9
				
			

محدودیت‌های استفاده از سنسور فاصله‌سنج SRF04

اس آر اف 04 از نظر دقت و ثبات، در مقایسه با سایر حسگرهای اولتراسونیک ارزان قیمت، سنسور بی‌نظیری است اما این به معنای کارآمد بودن آن در همه شرایط نیست. تصاویر زیر محدودیت‌های سنسور SRF04 را نشان می‌دهند:

فاصله بین شیء و سنسور بیش از 4 متر یا 13 فوت

ناتوانی در تشخیص اشیاء قرار گرفته در فاصله بیش از 4 متری
ناتوانی در تشخیص اشیاء قرار گرفته در فاصله بیش از 4 متری

وجود سطح بازتابنده با زاویه تند بر روی شیء و عدم برگشت به سمت سنسور

وجود مانع در مسیر ماژول SRF04 و ناتوانی در تشخیص اشیاء
وجود مانع در مسیر ماژول SRF04 و ناتوانی در تشخیص اشیاء

کوچک بودن شیء و ناتوانی در بازگرداندن امواج

کوچک بودن اشیاء و ناتوانی در دریافت امواج آنها
کوچک بودن اشیاء و ناتوانی در دریافت امواج آنها

وجود اشیاء نرم بین سنسور و شیء و ناتوانی سنسور در دریافت امواج

وجود اشیاء نرم بین سنسور و شیء و ناتوانی در دریافت امواج
وجود اشیاء نرم بین سنسور و شیء و ناتوانی در دریافت امواج