به نام خدا
دراین مطلب قصد داریم ب آموزش راه اندازی ماژل آلتراسونیک HC-SR04 با استفاده از آردوینو Uno بپردازیم.با دیجی اسپارک همراه باشید
ماژول HC-SR04 یک فاصله سنج آلتراسونیک بوده که فادر است فاصله ۲cm تا ۴۰۰cm را با دقت ۳میلی متر بدون تماس با اجسام اندازه گیری کند.
سخت افزار مورد نیاز
ماژول فاصله سنج hc-sr04
ویژگی ها:
ولتاژ کاری ۵ ولت
فرکانس ۴۰Hz
زاویه قابل اندازه گیری ۱۵ درجه
سیگنال تریگر ورودی ۱۰ میکرو ثانیه است.
سیگنال Echo: سیگنال خروجی TTL PWL
برای راه اندازی ماژول فاصله سنج HC-SR04 ابتدا باید یک پالس به زمان ۱۰ میکروثانیه به پایه تریگر اعمال کنیم. سپس شروع به دریافت پالس از پین echo میکنیم.(به زبان ساده تر،شروع به شمارش زمان تغییر وضعیت پین echo از وضعیت ۱ منطقی به صفر منطقی میکنیم.)
طول پالس دریافتی بین ۱۰۰ میکروثانیه و ۱۸ میلی ثانیه می باشد.اگر پالس دریافتی در محدوده ی ۳۶ میلی ثانیه و یا بیشتر باشد بدین معنی است که در مقابل ماژول مانعی وجود ندارد.
پس از محاسبه زمان برای بدست آوردن فاصله تا شی بر حسب سانتی متر باید زمان محاسبه شده را بر ۵۸ و بر حسب اینچ باید بر ۱۴۸ تقسیم کنیم.(این اعداد در دیتاشیت ماژول ارائه شده است)
ممکن است سوال پیش بیاید که عدد ۵۸ از چه طریقی بدست آورده شده است.؟!
هنگامی که طول پالس دریافتی را محاسبه کردیم باید این عدد را در سرعت صوت در هوا ضرب کنیم ( و اگر امواج در آب فرستاده میشدند بایددر سرعت صوت در آب ضرب کنیم) و سپس بر ۲ تقسیم کنیم( زیرا موج مسیر رفت و برگشت را طی میکند)
کدهای برنامه
#include <LiquidCrystal.h> LiquidCrystal lcd (6, 7, 8, 9, 10, 11, 12); #define triger 2 #define echo 3 double duration = 0; double distance = 0; void setup() { Serial.begin(9600); pinMode(2, OUTPUT); pinMode(3, INPUT); lcd.begin(16, 2); } void loop() { delayMicroseconds(2); digitalWrite(triger , LOW ); delayMicroseconds(10); digitalWrite(triger , HIGH); duration = pulseIn(echo , HIGH); distance = (duration / (58)); lcd.print("distance:"); Serial.println(distance); lcd.print(distance); lcd.print("cm"); delay(500); lcd.clear(); }
تابع pulseIn زمان پالس اعمل شده به پین echo را بر حسب میکروثانیه محاسبه میکند.
فرم کلی این تابع به صورت زیر می باشد.
pulseIn(pin, value) pulseIn(pin, value, timeout)
برای مثال اگر مقدار value برابر high باشد ، تابع منتظر می ماند تا پین مورد نظر ۱ منطقی شود ، سپس شروع به شمارش زمان میکند و هنگامی که این پین دوباره به وضعیت ۰ منطقی تغییر کرد ، شمارش را متوقف میکند و مقدار زمان محاسبه شده را بر حسب میکرو ثانیه بر میگرداند.
برای دانلود کد ها اینجا کلیک کنید
فیلم راه اندازی ماژول hc-sr04
[advanced_iframe securitykey=”e3ac59a02708b32a0e36dd27eecce7b410abc919″ src=”http://www.aparat.com/video/video/embed/videohash/aXQie/vt/frame” allowFullScreen=”true” webkitallowfullscreen=”true” mozallowfullscreen=”true” height=”360″ width=”640″” ]
خیلی عالی بود مرسی
mite be man kodak konid ye seri etelaat mikhastam dar mored sr04
سلام
مشکلتون رو بفرمایید
با سلام و خسته نباشید.یک سوال داشتم اینه که اگه بخوایم تو برناممون از delaymicrosesond استفاده نکینم باید چیکار کنیم ، چون من نمیخوام تو برنامم تاخیر به وجود بیاد.با تشکر
سلام زنده باشین
میتونین از تایمر استفاده کنید .در همین سایت پست آموزش تایمر در آردوینو را ملاحظه کنید.
البته کتابخونهای هم مخصوص این آلتراسونیک میباشد که با استفاده از تایمر این کار را انجام میدهد.
موفق و موید باشید
سلام و تشکر
امکانش هست در مورد این کتابخونهه بیشتر توضیح بدین؟
بازم ممنون
سلام تو برنامه اموزشی قرارش میدم اگه شد تو این هفته آموزشش میدم
با سلام
ببخشید من یه سوال کوچیک داشتم اینکه کد زیر برای چیه و دقیقا چه کارش چیه؟ (duration = pulseIn(echo , HIGH
;(( distance = (duration / (58
با تشکر
سلام
در این خط پایه Echo فعال میشود. سپس سنسور تشخیص فاصله، فاصله را تشخیص داده و طبق فرمولی که برای تشخیص فاصله تعریف شده است، فاصله را محاسبه خواهد کرد.
با سلام
این ماژول رو بنده تازه دریافت کردم ولی الان با کد شما همیشه مقدار صفر را نشان می دهد مشکل از چیست ؟
با تشکر
با سلام
کاربر گرامی از جدیدترین آموزش زیر استفاده کنید.
راه اندازی srf
سلام و ممنون بابت سایتتون.
یه سوال داشتم اگه به جای ۱۰ میکرو ثانیه مثلا ۱ میلی ثانیه به پایه ی تریگ اعمال کنیم چه اتفاقی میوفته؟
با سلام
طبق اطلاعات گفته شده در دیتاشیت سیگنال تریگر ورودی ۱۰ میکرو ثانیه است و این مورد تست نشده است.