در این پروژه سنسور اولتراسونیک HC-SR04 را به شما معرفی می کنم. سنسور التراسونیک امواج صوتی را ارسال میکند، این امواج پس از برخورد با یک جسم به سنسور بازگردانده میشوند. با محاسبه زمان رفت و برگشت موج از طریق فرمول شما میتوانید فاصله را بدست آورید.
مدار اندازه گیری فاصله با آردوینو
اتصالات مدار فاصله سنج با آردوینو بسیار ساده هستند:
VCC به 5 ولت
GND به GND
TRIG به پین 9
ECHO به پین 10
شما در واقع می توانید پایه های Trig و Echo ماژول التراسونیک را به هر پایه ای از برد آردوینو متصل کنید. من برای کد و پروژه خودم پایه 9 و 10 را در نظر گرفته ام.
کد فاصله سنج التراسونیک آردوینو
ابتدا پین هایی را که Trig و Echo به آن وصل شده اند تعریف می کنیم.
const int trigPin = 9; const int echoPin = 10;
سپس 2 داده از نوع float برای مدت زمان و فاصله ایجاد می کنیم که طول موج صوتی و فاصله جسم را نگهداری می کنند.
float duration, distance;
در مرحله بعد در تابع Setup، پایه Trig را به عنوان خروجی و پین Echo را به عنوان ورودی تعیین می کنیم و ارتباط سریال را با نرخ باود 9600 شروع می کنیم.
void setup() { pinMode (trigPin، OUTPUT)؛ pinMode (echoPin، INPUT)؛ Serial.begin(9600); }
اکنون در loop، کاری که ما انجام می دهیم این است که ابتدا trigPin را برای 2 میکروثانیه پایین می آوریم (Low میکنیم) تا مطمئن شویم که در ابتدا پین در حالت LOW یا همان 0 ولت است. سپس، آن را برای 10 میکروثانیه روی بالا تنظیم می کنیم (HIGH میکنیم)، که یک موج صوتی 8 سیکلی از سنسور ارسال می کند. این موج ارسالی سپس به یک جسم برخورد می کند، دوباره باز میگردد و به گیرنده (که به پین اکو متصل است) برخورد می کند.
void loop() { digitalWrite (trigPin، LOW)؛ delayMicroseconds(2); digitalWrite (trigPin، HIGH)؛ delayMicroseconds (10); digitalWrite (trigPin، LOW)؛
هنگامی که موج صوتی به گیرنده برخورد می کند، پین اکو در حالت HIGH تنظیم میشود. برای دریافت لحظه HIGH شدن پین اکو، می توانیم از یک تابع مفید به نام pulseIn() استفاده کنیم. برای استفاده از این تابع باید 2 پارامتر را تعیین کنید یعنی شماره پین و یک حالت (HIGH یا LOW). این تابع منتظر میماند تا پین مورد نظر شما به حالتی که تعیین کردید برسد. این تابع مدت زمانی که منتظر مانده تا حالت پین تغییر کند را بدست می آورد. ما زمان بدست آمده را در متغیر duration ذخیره میکنیم.
duration = pulseIn (echoPin، HIGH);
حالا که زمان را داریم می توانیم از معادله سرعت = مسافت/زمان استفاده کنیم. ما این معادله را به شکل مسافت = زمان/سرعت مینویسیم. ما سرعت را داریم، سرعت صدا در هوا تقریبا 340 متر بر ثانیه است. تابع pulseIn() زمان را بر حسب میکروثانیه بدست می آورد. بنابراین سرعت را نیز به میکروثانیه تغییر میدهیم که میشود 0.0343 و حالا فرمول کامل است. شما باید نتیجه نهایی را تقسیم بر 2 کنید زیرا زمان ارسال و دریافت موج را محاسبه کردید که میشود فاصله رفت و برگشت اما برای بدست آوردن فاصله ما فقط به زمان ارسال یا دریافت نیاز داریم.
در نهایت مقدار فاصله را در متغیر distance ذخیره میکنیم و آن را روی سریال مانیتور چاپ میکنیم.
distance = (duration*.0343)/2; Serial.print("Distance: "); Serial.println(distance); delay(100); }
کد کامل
const int trigPin = 9; const int echoPin = 10; float duration, distance; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration*.0343)/2; Serial.print("Distance: "); Serial.println(distance); delay(100); }