راهنمای کامل سنسورفاصله سنج اولتراسونیک HC-SR04 و HC-SR05
در این آموزش قصد داریم تا توضیح کاملی در مورد خانواده سنسور اولتراسونیک که شامل دو سنسور پرکاربرد HC-SR04 و HC-SR05 می شود به شما ارایه دهیم. شما می آموزید که چگونه این سنسور را به برد آردوینو وصل کنید و با استفاده از کتابخانه های موجود به راحتی از قابلیت های آن استفاده کنید. این آموزش از سری آموزش های مخترع شوید می باشد و شما میتوانید در نهایت یک متر التراسونیک که مشابه متر لیزری می باشد داشته باشید.
توصیف سنسور اولتراسونیک HC-SR04 و HC-SR05
سنسور HC-SR04 یا HC-SR05 از ویژگی سونار جهت تشخیص فاصله تا یک شی استفاده میکند، این همان کاری است که یک خفاش انجام می دهد. این سنسور دقت بسیار بالا و پایداری خوبی ارایه می دهد و در یک پیک فرستنده و گیرنده تعبیه شده است.
سنسور اولتراسونیک از سونار استفاده میکند. نحوه کار این سنسور فاصله سنج به صورت زیر است :
- فرستنده یک سیگنال فرکانس بالای صوتی ارسال می کند.(trig pin)
- سیگنال به یک جسم برخورده کرده و بازتاب آن به سمت سنسور و گیرنده حرکت می کند
- گیرنده سیگنال بازتابی را دریافت می کند.(echo pin)
- پردازنده با محاسبه زمان بین ارسال و دریافت سیگنال و سرعت صوت در هوا فاصله تا جسم را تخمین می زند.
پایه های HC-SR04
شکل زیر پشت و روی یک سنسور اولتراسونیک از نوع HC-SR04 را نشان میدهد پایه های این سنسور عبارتند از:
شما میتوانید جهت خرید سنسور اولتراسونیک با قیمت خوب از فروشگاه ایوینک استفاده کنید.
یک پروژه ساده آردوینو با سنسور HC-SR04
HC-SR04 ماژول شناخته شده بین برنامه نویسان آردوینو می باشد از این رو ما در اینجا با یک پروژه ساده نحوه استفاده از سنسور اولتراسونیک جهت تشخیص فاصله با استفاده از آردوینو را به شما آموزش می دهیم.
شماتیک مدار
با استفاده از مدار زیر اتصالات برد آردوینو و حسگر HC-SR04 را وصل نمایید.
جدول زیر نحوه اتصال پین ها را مشخص کرده است در صورتی که اتصال پین ها در شکل بالا واضح نیست میتوانید از جدول زیر استفاده کنید.
حال یک پروژه جدید باز کنید و کد زیر را در آن بنویسید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
void loop() { // The sensor is triggered by a HIGH pulse of 10 or more microseconds. // Give a short LOW pulse beforehand to ensure a clean HIGH pulse: digitalWrite(trigPin, LOW); delayMicroseconds(5); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW);</p> <p style="text-align: center;">// Read the signal from the sensor: a HIGH pulse whose // duration is the time (in microseconds) from the sending // of the ping to the reception of its echo off of an object. pinMode(echoPin, INPUT); duration = pulseIn(echoPin, HIGH);</p> <p style="text-align: center;">// Convert the time into a distance cm = (duration/2) / 29.1; // Divide by 29.1 or multiply by 0.0343 inches = (duration/2) / 74; // Divide by 74 or multiply by 0.0135</p> <p style="text-align: center;">Serial.print(inches); Serial.print("in, "); Serial.print(cm); Serial.print("cm"); Serial.println();</p> <p style="text-align: center;">delay(250); } |
توضیح کد
- ابتدا ما دو متغیر جهت trigger و echo تعریف میکنیم این متغیر ها نشان دهنده پایه های مورد استفاده هستند.
1 2 |
int trigPin = 11; int echoPin = 12; |
- بنابر این پایه تریگر به پین 11 و پایه اکو به پین 12 باید وصل شود.سپس ما سه متغیر جهت ذخیره داده ها تعریف میکنیم، نوع این متغیر ها long می باشد جهت آشنایی بیشتر با متغیر long به لینک آشنایی با متغیرها در آردوینو مراجعه کنید.
1 |
long duration, cm, inches; |
- در تابع ()setup پورت سریال را راه اندازه کرده و بادریت یا نرخ ارسال را روی 9600 تنظیم میکنیم، همچنین پین تریگر را به عنوان پین خروجی یا output و پین اکو را به عنوان پین ورودی یا input تعریف میکنیم.
1 2 3 4 5 |
//Serial Port begin Serial.begin (9600); //Define inputs and outputs pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); |
- در تابع ()loop جهت داشتن یک پالس تمیز ابتدا خروجی تریگر را به مدت 5 میلی ثانیه صفر یا LOW کرده و سپس به مدت 10 میلی ثانیه آن را HIGH میکنیم و در نهایت مجدد به مدت 5 میلی ثانیه آن را LOW میکنیم.
1 2 3 4 5 |
digitalWrite(trigPin, LOW); delayMicroseconds(5); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); |
- سپس میتوانیم سیگنال ارسالی را دریافت کرده و بازه زمانی ارسال تا دریافت آن را محاسبه کنیم دقت کنید که این بازه زمانی در حد میکروثانیه می باشد.
1 |
duration = pulseIn(echoPin, HIGH); |
- در نهایت ما تنها نیاز داریم که فاصله را با دانستن زمان رفت و برگشت سیگنال ارسالی و سرعت صوت به دست آوریم
1 2 |
&lt;strong&gt;distance = (traveltime/2) x speed of sound &lt;/strong&gt; |
- با در نظر گرفتن سرعت صوت برابر با 343 متر بر ثانیه یا 1/29.1 سانتی متر بر میکرو ثانیه یا 1/74 اینچ برمیکرو ثانیه نحوه محاسبه فاصله به صورت سانتی متر یا اینچ به فرم زیر می باشد.
1 2 |
cm = (duration/2) / 29.1; inches = (duration/2) / 74; |
- در نهایت ما مقادیر محاسبه شده را در سریال مانیتور نمایش می دهیم برای این کار کافیست از دستور Serail.print استفاده کنیم.
1 2 3 4 5 |
Serial.print(inches); Serial.print("in, "); Serial.print(cm); Serial.print("cm"); Serial.println(); |
جهت آشنایی با دستور Serial.print کافیست به راهنمای استفاده از سریال مانیتور مراجعه کنید.
یکی از بهترین آموزش ها، ممنون بابت آمورش های مرتب و عالی شما
درسته آموزش خِلی مرتب و کامل هستند
ممنون بابت آموزش فقط کاش زودتر تمام قطعات مورد نیاز رو در سایت موجود کنید که اگر یکی خواست سفارش بده به صورت کامل و بدون دردسر سفارش بده