ماژول آلتراسونیک SRF04 یک سنسور فاصلهسنج غیر تماسی است که از تکنولوژی آلتراسونیک برای اندازهگیری فاصله بین خود و یک جسم استفاده میکند. این سنسور میتواند فاصله را با دقت بالا اندازهگیری کند و برای پروژهها و انواع دیگری از نیازهای الکترونیکی و رباتیکی مورد استفاده قرار میگیرد. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
ماژول آلتراسونیک srf04
ماژول آلتراسونیک SRF04 یک سنسور فاصلهسنج غیر تماسی است که از تکنولوژی آلتراسونیک برای اندازهگیری فاصله بین خود و یک جسم استفاده میکند. این سنسور میتواند فاصله را با دقت بالا اندازهگیری کند و برای پروژهها و انواع دیگری از نیازهای الکترونیکی و رباتیکی مورد استفاده قرار میگیرد.ساختار عملکردی سنسور SRF04 به این صورت است که با ارسال یک سیگنال صوتی با فرکانس بالا (در حدود ۴۰ کیلوهرتز) به فضا، سنسور منتظر دریافت بازتاب سیگنال صوتی میماند. با توجه به زمانی که طول میکشد تا سیگنال بازتابی به سنسور برگردد، این سنسور میتواند فاصله را با توجه به سرعت صوت در هوا (حدود ۳۴۳ متر بر ثانیه در دمای ۲۰ درجه سلسیوس) محاسبه کند.
مشخصات فنی ماژول آلتراسونیک srf04
مشخصات فنی برای ماژول آلتراسونیک SRF04 به شرح زیر است:
- محدوده اندازهگیری: بین ۲ سانتیمتر تا ۴۰۰ سانتیمتر (ممکن است محدودههای دقیقتری نیز وجود داشته باشد).
- فرکانس تراشه آلتراسونیک: حدود ۴۰ کیلوهرتز (ممکن است برخی ماژولها دارای فرکانسهای دیگر باشند).
- ولتاژ کاری: ۵ ولت DC (در بیشتر موارد، این ماژول با ولتاژ ۵ ولت تغذیه میشود).
- زمان پاسخدهی: در حدود ۳۰ میکروثانیه (microseconds).
- رابط کاربری: دارای دو پین ارتباطی، یک پین Trigger (تریگر) برای فعالسازی ارسال سیگنال صوتی و یک پین Echo (اکو) برای دریافت بازتاب سیگنال صوتی.
- خروجی: ممکن است سیگنال پالسی باشد که عرض پالس نشاندهندهی فاصلهی اندازهگیری شده است. همچنین ممکن است خروجی آنالوگ باشد که مقدار ولتاژ آن نشاندهندهی فاصله است.
- مصرف جریان: مصرف کمی از جریان برای حفظ عمر باتری در کاربردهای پرتابل.
بررسی پایه های ماژول آلتزاسونیک SRF04
- VCC یا VCC+ (قدرت مثبت): این پین برای تغذیه ماژول با ولتاژ مثبت ۵ ولت استفاده میشود. این ولتاژ از منبع تغذیه خارجی یا پین تغذیه میکروکنترلر/آردوینو ارائه میشود.
- GND (مثبت): این پین به زمین متصل میشود و از منبع تغذیه خارجی یا پین زمین میکروکنترلر/آردوینو به آن وصل میشود.
- Trigger: این پین وظیفه فعالسازی ارسال سیگنال صوتی را دارد. برای اندازهگیری فاصله، این پین به حالت High (1) برده میشود تا یک سیگنال صوتی ارسال شود.
- Echo: این پین وظیفه دریافت بازتاب سیگنال صوتی ارسالی را دارد. پس از فعالسازی سیگنال صوتی، این پین به حالت High (1) میرود و پس از دریافت بازتاب، به حالت Low (0) تغییر میکند. مدت زمانی که این پین در حالت High میماند، برابر با زمان پاسخدهی سنسور به فاصله است و با توجه به آن، فاصلهی اندازهگیری شده محاسبه میشود.
روش محاسبه فرمول فاصله سنج Ultrasonic
ماژول آلتراسونیک SRF04 با استفاده از موجهای صوتی (آلتراسونیک) فاصله را اندازهگیری میکند. برای محاسبه فاصله بر اساس زمان بازگشت سیگنالهای صوتی، میتوان از رابطهی سادهی زیر استفاده کرد:
فاصله (Distance) = (زمان پاسخدهی * سرعت صوت در هوا) / ۲
توجه داشته باشید که فرمول فوق فقط به صورت تقریبی فاصله را محاسبه میکند و در نتیجه از نقاطی مشخص در هوا و دما وابسته است.در مرحلهی اول، باید مدت زمان پاسخدهی را به دست آورید. برای این منظور، زمانی که پین Echo در حالت High است را به ثانیه یا میکروثانیه (microseconds) اندازهگیری میکنید.در مرحلهی دوم، باید سرعت صوت در هوا را بدانید. سرعت صوت در هوا حدود ۳۴۳ متر بر ثانیه در دمای ۲۰ درجه سلسیوس است. این مقدار ممکن است بر اساس دما و شرایط هوایی مختلف تغییر کند.
نکته مهم: در محاسبهی فاصله، زمان پاسخدهی به دست آمده به صورت زمان برگشت موجهای صوتی است. به این دلیل که موجها برای اندازهگیری فاصله ارسال شده و پس از برخورد با جسم بازتاب میشوند.در نهایت، با جایگذاری مقادیر به فرمول فوق، میتوانید فاصلهی مورد نظر را محاسبه کنید. اگر فاصلهی حاصل به متر باشد، ممکن است نیاز به تبدیل آن به واحد دیگری مثل سانتیمتر داشته باشید. برای تبدیل به سانتیمتر، کافیست مقدار فاصله را در ۱۰۰ ضرب کنید.
کد آردینو راه اندازی SRF04 با نمایشگر LCD کاراکتری
در ادامه کد آردوینو برای راه اندازی سنسور فاصله سنج آلتراسونیک با SRF04 نوشته شده است. فاصله اندازه گیری شده و سپس بر روی نمایشگر ال سی دی کاراکتری نمایش داده میشود. کد را کپی و به نرم افزار Arduino IDE انتقال دهید. سپس اتصالات را انجام دهید.
#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 باشد ، تابع منتظر می ماند تا پین مورد نظر ۱ منطقی شود ، سپس شروع به شمارش زمان میکند و هنگامی که این پین دوباره به وضعیت ۰ منطقی تغییر کرد ، شمارش را متوقف میکند و مقدار زمان محاسبه شده را بر حسب میکرو ثانیه بر میگرداند.
تحلیل کد آردوینو
- #include <LiquidCrystal.h>: این دستور کتابخانهی LCD را به برنامه اضافه میکند تا بتوانیم از توابع مربوط به نمایشگر LCD استفاده کنیم.
- LiquidCrystal lcd(6, 7, 8, 9, 10, 11, 12);: در این خط، شیء lcd با استفاده از کلاس LiquidCrystal تعریف شده است. پینهای متصل به نمایشگر LCD به ترتیب RS, E, D4, D5, D6 و D7 بوده و در اینجا به شیء lcd تخصیص داده شدهاند.
- #define triger 2 و #define echo 3: این دو خط مقادیر ثابتی برای پینهای تریگر و اکو تعریف میکنند. این پینها بهترتیب به پینهای ۲ و ۳ از میکروکنترلر متصل هستند.
- double duration = 0; و double distance = 0;: این دو متغیر محلی برای ذخیرهسازی مدت زمان پاسخدهی سنسور و محاسبه فاصله به کار میروند.
- void setup(): این تابع مربوط به تنظیمات اولیه برنامه است و تنها یک بار در زمان راهاندازی برنامه اجرا میشود.
- a. Serial.begin(9600);: با استفاده از این خط، ارتباط سریال با سرعت ۹۶۰۰ بیت در ثانیه (baud rate) برقرار میشود. این امکان را به ما میدهد که نتایج اندازهگیری را از طریق پورت سریال به محیط توسعهی Arduino IDE یا هر محیط سریال مشابهی نمایش دهیم.
- b. pinMode(2, OUTPUT); و pinMode(3, INPUT);: این دو خط تنظیم حالت پینهای تریگر و اکو به ترتیب به حالت خروجی (OUTPUT) و ورودی (INPUT) تنظیم میکند.
- c. lcd.begin(16, 2);: با استفاده از این خط، نمایشگر LCD را با ابعاد ۱۶ در ۲ راهاندازی میکنیم.
- void loop(): این تابع دستورات اصلی برنامه را به صورت تکراری اجرا میکند.
- a. delayMicroseconds(2);: این دستور ۲ میکروثانیه تاخیر دارد. این تاخیر مفید است تا هر بار قبل از فعالسازی تریگر، یک مدت زمان کوتاهی منتظر بمانیم.
- b. digitalWrite(triger, LOW); و delayMicroseconds(10); و digitalWrite(triger, HIGH);: این دستورات به ترتیب، پین تریگر را ابتدا به حالت پایین (LOW) و سپس به حالت بالا (HIGH) قرار میدهند، که به این ترتیب یک سیگنال صوتی ارسال میشود.
- c. duration = pulseIn(echo, HIGH);: این دستور زمان پاسخدهی سنسور به فاصلهی اندازهگیری شده را در متغیر duration ذخیره میکند. تابع pulseIn بر حسب میکروثانیه مدت زمانی را که پین اکو در حالت High است، اندازهگیری میکند.
- d. distance = (duration / 58);: این دستور محاسبه فاصله را بر اساس زمان پاسخدهی و با استفاده از فرمول مربوطه انجام میدهد. (۱ میکروثانیه = ۱/۱,۰۰۰,۰۰۰ ثانیه و ۱ ثانیه = ۱۰۰ سانتیمتر، بنابراین تقسیم بر ۵۸ باعث تبدیل زمان به سانتیمتر میشود)
- e. lcd.print(“distance:”);, Serial.println(distance);, lcd.print(distance); و lcd.print(“cm”);: این دستورات فاصله را بر روی نمایشگر LCD و در محیط سریال نمایش میدهند. همچنین، پس از هر بار نمایش فاصله، نمایشگر LCD را پاک میکنند تا فاصله بار دیگر نمایش داده شود.
- f. delay(500);: این تاخیر ۵۰۰ میلیثانیه انجام میدهد و بعد از آن کلیدها همهی دستورات این حلقه را دوباره اجرا میکند. این تاخیر برای کنترل نرخ تغییرات نمایش فاصله میان دو بار اندازهگیری مفید است.
- g. lcd.clear();: این دستور نمایشگر LCD را پاک میکند تا اطلاعات قبلی نمایش داده شده بر روی آن حذف شود.
جمع بندی
سنسور فاصلهسنج آلتراسونیک (مانند ماژول SRF04) یک سنسور غیر تماسی است که بر اساس تکنولوژی آلتراسونیک (صدا با فرکانس بالا) عمل میکند. این سنسور با ارسال سیگنالهای صوتی به فضا و دریافت بازتاب آنها، فاصلهی بین خود و جسمهای اطراف را اندازهگیری میکند.
- سنسور فاصلهسنج آلتراسونیک با استفاده از موجهای صوتی فاصلهی بین خود و اجسام را اندازهگیری میکند.
- این سنسور غیر تماسی است، به این معنی که برای اندازهگیری فاصله نیازی به تماس مستقیم با جسمها ندارد.
- از دو پین ارتباطی به نامهای تریگر (Trigger) و اکو (Echo) برای ارتباط با میکروکنترلر یا بردهای الکترونیکی استفاده میشود.
- با ارسال سیگنال تریگر، سنسور موجهای صوتی را به جهت جسم مورد نظر ارسال میکند.
- با دریافت بازتاب موجهای صوتی از جسم، سنسور زمان پاسخدهی به آن را اندازهگیری میکند.
- با استفاده از زمان پاسخدهی و سرعت صوت در محیط، فاصلهی بین سنسور و جسم محاسبه میشود.
- این سنسور در کاربردهای مختلفی مانند رباتیک، اتوماسیون خانگی، سامانههای امنیتی و اندازهگیری فواصل مختلف مورد استفاده قرار میگیرد.
کاربرد در آردوینو:
در آردوینو و دیگر بردهای الکترونیکی، میتوان از سنسور فاصلهسنج آلتراسونیک برای اندازهگیری فاصلهها و اجسام مختلف استفاده کرد. این سنسور به دلیل دقت بالا و قابلیت کارکرد در محدودههای فاصله مختلف، برای پروژههای رباتیکی، خودروهای هوشمند، دریافت وضعیت اشیاء در محیط، اندازهگیری فاصله از موانع، ایجاد سامانههای تشخیص حضور و غیره استفاده میشود. با اطلاعات بهدستآمده از این سنسور، میتوان اقدامات متناسبی را برای کنترل و عملیاتهای هوشمند در پروژههای الکترونیکی انجام داد.
خیلی عالی بود مرسی
mite be man kodak konid ye seri etelaat mikhastam dar mored sr04
سلام
مشکلتون رو بفرمایید
با سلام و خسته نباشید.یک سوال داشتم اینه که اگه بخوایم تو برناممون از delaymicrosesond استفاده نکینم باید چیکار کنیم ، چون من نمیخوام تو برنامم تاخیر به وجود بیاد.با تشکر
سلام زنده باشین
میتونین از تایمر استفاده کنید .در همین سایت پست آموزش تایمر در آردوینو را ملاحظه کنید.
البته کتابخونهای هم مخصوص این آلتراسونیک میباشد که با استفاده از تایمر این کار را انجام میدهد.
موفق و موید باشید
سلام و تشکر
امکانش هست در مورد این کتابخونهه بیشتر توضیح بدین؟
بازم ممنون
سلام تو برنامه اموزشی قرارش میدم اگه شد تو این هفته آموزشش میدم
با سلام
ببخشید من یه سوال کوچیک داشتم اینکه کد زیر برای چیه و دقیقا چه کارش چیه؟ (duration = pulseIn(echo , HIGH
;(( distance = (duration / (58
با تشکر
سلام
در این خط پایه Echo فعال میشود. سپس سنسور تشخیص فاصله، فاصله را تشخیص داده و طبق فرمولی که برای تشخیص فاصله تعریف شده است، فاصله را محاسبه خواهد کرد.
با سلام
این ماژول رو بنده تازه دریافت کردم ولی الان با کد شما همیشه مقدار صفر را نشان می دهد مشکل از چیست ؟
با تشکر
با سلام
کاربر گرامی از جدیدترین آموزش زیر استفاده کنید.
راه اندازی srf
سلام و ممنون بابت سایتتون.
یه سوال داشتم اگه به جای ۱۰ میکرو ثانیه مثلا ۱ میلی ثانیه به پایه ی تریگ اعمال کنیم چه اتفاقی میوفته؟
با سلام
طبق اطلاعات گفته شده در دیتاشیت سیگنال تریگر ورودی ۱۰ میکرو ثانیه است و این مورد تست نشده است.