مقدمه
حتما همه واژه التراسونیک را شنیده ایم. سنسورهایی که با امواج التراسونیک کار می کنند ، کاربردهای بسیاری در صنعت دارند. یکی از کاربردهای التراسونیک تشخیص فاصله است. در بسیاری از پروژه ها نیاز به دانستن فاصله با دقت میلیمتری هستیم. برای مثال در کاربردهایی نظیر سنجش ارتفاع آب ، فاصله دو جسم از یکدیگر ، سنسورهای دنده عقب خودرو و … از این سنسورها استفاده می شود. در این آموزش با استفاده از سنسور SRF05 یک فاصله سنج دقیق خواهیم ساخت با ما همراه باشید.
التراسونیک چیست ؟
کلمه آلتراسونیک Ultrasonic به معنای مافوق صوت است. محدوده فرکانس شنوایی انسان 20 هرتز تا 20 هزار هرتز است. محدوده فرکانسی امواج مافوق صوت 40 کیلو هرتز تا چندین مگا هرتز میباشد. امواج مافوق، کاربردهای فراوانی از جمله در لیزر، تخلیه الکتریکی برای بهبود خواص سطحی و افزایش نرخ باربرداری، سنجش فاصله، عمق مخزن، شستشوی دقیق ظروف آزمایشگاهی، تعیین فشار خون بیمار، همگن کردن مواد مذاب، جوشکاری مواد غیر هم جنس، ریخته گری، تراشکاری، فرزکاری، سوراخکاری و غیره دارد.
سنسور های آلتراسونیک
برای استفاده از امواج فرا صوت از حسگر هایی استفاده میشود که این حسگرها بر اساس محدوده فرکانسی خود به دو دسته صنعتی و غیر صنعتی تقسیم بندی میشوند. حسگرهای فرا صوت غیر صنعتی در محدوده فرکانسی 40 کیلو هرتز و حسگرهای صنعتی در حد مگا هرتز هستند. حسگرهای آلتراسونیک معمولا دارای یک فرستنده و یک گیرنده آلتراسونیک هستند. امواج فرستاده شده از حسگر پس از برخورد با یک مانع به حسگر بر میگردند و توسط گیرنده حسگر دریافت میشوند. از این طریق و با در نظر گرفتن زمان بازگشت موج و کیفیت امواج بازتابی میتوان به اطلاعاتی راجع به عمق، نوع و سرعت مانع به دست آورد. حسگرهای فرا صوت مزیتهای فراوانی دارند مانند نویز پذیری کم، استفاده در شرایط نوری مختلف و…
امواج فرا صوت همانند امواج دیگر خواص شکست، پراش، بازتاب و عبور دارند. این امواج به سه روش مکانیکی، مغناطیسی و الکتریکی ایجاد میشوند.
معرفی ماژول فاصله سنج SRF05
SRF05 یک فاصله سنج التراسونیک بوده و با استفاده از این ماژول قادر خواهید بود فاصله دقیق یک مانع را مشخص نمایید. این ماژول به نوعی مدل تکامل یافته SRF04 است. در این ماژول انعطاف طراحی بالا رفته و برد مفید فاصله سنجی ارتقاء یافته است. SRF05 با SRF04 کاملا تطابق داشته و برد آن از 3 متر به 4 متر افزایش یافته است. برای صرفه جویی در پایه های I/O ی میکروکنترلر یا هر سیستم میزبان دیگر امکان جدیدی در SRF05 تعریف شده است. در این حالت میتوانید از طریق یک پایه پالس تریگر را ارسال و سیگنال اکو را دریافت کنید.
لینک خرید مستقیم ماژول SRF05 از فروشگاه الکترو ولت
ویژگی های ماژول SRF05
ولتاژ کاری : 4.5 تا 5.5 ولت
جریان مصرفی : 10 تا 40 میلی آمپر
حئاکثر زاویه اندازه گیری : 15 درجه
مسافت قابل سنجش: 2cm تا 450cm
دقت اندازه گیری : 3mm
سیگنال تریگر ( ورودی ) : پالس دیجیتال 10us
سیگنال اکو ( خروجی ) : پالس دیجیتال که بستگی به فاصله اندازه گیری شده دارد
توضیح عملکرد ماژول SRF05
ترتیب قرار گرفتن پایه های این ماژول همان طور که از روی تصویر مشخص می باشد از قرار زیر است:
- VCC
- TRIG
- ECHO
- OUT
- GND
تغذیه این ماژول +۵ ولت می باشد و برای راه اندازی این ماژول باید پایه های TRIG و ECHO به میکروکنترلر وصل شود و عملکرد این پایه ها از قرار زیر می باشد.
ابتدا باید یک پالس با طول ۱۰ میکرو ثانیه به پایه TRIG اعمال شود. ماژول به صورت اتوماتیک ۸ عدد پالس با فرکانس ۴۰ کیلو هرتز ارسال میکند. وقتی که پالس ها ارسال شد پایه ECHO یک می شود و تا زمانی که برگشت پالس ها از جسم را دریافت نکند این پایه یک باقی میماند. پس با اندازه گیری مدت زمانی که این پایه در سطح منطقی ۱ بوده است میتوان زمان رفت و برگشت صوت را بدست آورد. برای اندازه گیری پالس روی پایه ECHO باید از واحد تایمر میکروکنترلر استفاده کرد. بعد از اطلاع از زمان رفت و برگشت سیگنال اولتراسونیک با استفاده از رابطه های زیر فاصله سنسور تا مانع به راحتی محاسبه می شود.
نکته: سرعت صوت در شرایط آب و هوایی مختلف، متفاوت است اما به صورت پیش فرض میتوان سرعت صورت را 340 متر بر ثانیه ( 29.155 میکروثانیه بر سانتی متر ) در نظر گرفت.
پروژه ساخت فاصله سنج التراسونیک با AVR
مرحله اول : طراحی سخت افزار در پروتئوس
سخت افزار این پروژه را در نرم افزار پروتئوس به صورت فوق رسم کردیم. یک LCD کاراکتری 2 در 16 برای نمایش مسافت در نظر گرفتیم. پایه های تریگر و اکو از ماژول SRF05 نیز به ترتیب به پایه های PC.0 و PC.1 متصل شده اند. پایه های Vcc و GND ماژول نیز به Vcc و GND میکرو و هر دو به یک رگولاتور 7805 وصل هستند.
مرحله دوم : طراحی نرم افزار در کدویژن
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
#include <mega32.h> #include <delay.h> #include <stdio.h> #include <alcd.h> int timer; float d = 0.0; char str[20]; interrupt [TIM0_OVF] void timer0_ovf_isr(void) { TCNT0=0; timer++; } void main(void) { PORTC=0x00; DDRC=0x01; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 1000.000 kHz // Mode: Normal top=0xFF // OC0 output: Disconnected TCCR0=0x02; TCNT0=0; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x01; // Alphanumeric LCD initialization // Connections specified in the // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTA Bit 0 // RD - PORTA Bit 1 // EN - PORTA Bit 2 // D4 - PORTA Bit 4 // D5 - PORTA Bit 5 // D6 - PORTA Bit 6 // D7 - PORTA Bit 7 // Characters/line: 16 lcd_init(16); lcd_putsf("Welcome..."); delay_ms(1000); lcd_clear(); // Global enable interrupts #asm("sei") while(1) { PORTC.0=1; TCNT0=0; TCCR0=0x02; while(TCNT0<10); PORTC.0=0; TCCR0=0x00; while(PINC.1==0); timer=0; TCNT0=0; TCCR0=0x02; while(PINC.1 == 1); TCCR0=0x00; d = ((timer*256.0+TCNT0)/58.31); if( d > 450 ) { lcd_clear(); lcd_gotoxy(0,0); lcd_puts("Out Of Range"); delay_ms(500); } else { sprintf(str,"d = %3.1f cm",d); lcd_clear(); lcd_gotoxy(0,0); lcd_puts(str); delay_ms(150); } } } |
توضیح عملکرد برنامه :
برای اندازه گیری دقیق زمان از واحد تایمر شماره صفر میکروکنترلر استفاده کردیم و فرکانس آن را روی 1Mhz قرار دادیم. بنابراین به ازای هر واحد افزایش رجیستر تایمر صفر ، یک میکروثانیه زمان سپری می شود و سر ریز شدن آن 256 میکرو ثانیه طول می کشد. برای اینکه پالس 10 میکروثانیه را به ماژول SRF05 اعمال کنیم ، بعد از اینکه پورت PC0 را یک کردیم ، تایمر را راه اندازی کرده و تا زمانی که رجیستر تایمر 10 نشده است صبر می کنیم. سپس PC0 را صفر کرده و منتظر یک شدن PC1 برای دریافت پالس اکو می مانیم. به محض یک شدن PC1 تایمر را راه اندازی کرده سپس تا زمانی که PC1 یک می باشد تایمر را فعال و به محض صفر شدن PC1 تایمر را غیر فعال می کنیم. یک متغیر کمکی برای شمارش زمان تایمر از نوع int تعریف کردیم که هر بار که تایمر پر می شود ( پس از سپری شدن 256 میکروثانیه ) ، یک واحد به آن اضافه می گردد. بنابراین برای تعیین کل زمان عملکرد تایمر از فرمول زیر استفاده می کنیم که در آن فاصله بر حسب سانتی متر بدست می آید و T نیز از رابطه زیر آن بر حسب میکروثانیه بدست می آید.
یعنی زمان کل بر حسب میکروثانیه برابر است با مقدار کنونی عدد شمارش شده در تایمر صفر ( TCNT0 ) به اضافه ی تعداد مرتبه هایی که تایمر پر شده است ( timer ) ضربدر 256 میکروثانیه .
سپس برنامه این مقدار را در صورتی که در بازه مجاز قرار داشته باشد رویLCD نشان می دهد و دوباره کار را از سر میگیرد.
مرحله سوم : طراحی PCB و پیاده سازی عملی پروژه
دانلود سورس برنامه شامل :
- گزارش کامل انجام پروژه در قالب pdf
- سورس برنامه به زبان C در نرم افزار کدویژن
- سورس شبیه سازی در پروتئوس
- سورس پروژه PCB در نرم افزار آلتیوم
- دیتاشیت های مورد نیاز
دیدگاه (18)
سلام
اطلاعی از نحوه کار سنسور های پارک خودرو ( التراسونیک) و طریقه اتصالشون به میکرو رو دارین?
این سنسور ها فقط دو سیم مثبت و منفی دارن و خبری از Vcc و GND و تریگر نیست!
سلام دوست عزیز هیچ وقت یک سنسور بدون منبع تغذیه ( یعنی VCC و GND ) کار نمی کند مگر اینکه به صورت القایی و با سیم پیچ ( از راه دور ) تغذیه صورت گیرد نظیر کارت های RFid
سلام
من خط 52رو نیفهمم میشه بگی برا ی این خط نوشتی
اون عد 30000از کجا اومده سپاس
سلام دوست عزیز این ماژول حداکثر تا 4.5 متر برد داره و در صورتی که جلوی ماژول تا 4.5 متر چیزی قرار نگرفته باشه ، یعنی زمانی بیشتر از 30000 سپری شده و اینگونه تشخیص داده می شود
سلام.
ببخشید مگر پایه ی اکو رو به PD.1 وصل نکردین؟
پس چرا در خط 46 و 50، PINC.1 نوشته شده؟
سلام دوست عزیز این برنامه که در این آموزش هست غلط زیاد داره لطفا از لینک انتهای مطلب برنامه اصلی را تهیه فرمایید
سلام
ببخشید من نفهمیدم در خط 60 اون بعلاوه 100 برای چی هست؟
سلام دوست عزیز اون بعلاوه 100 برای تنظیمات کالیبراسیون هست یعنی باید در عمل طول یک جسمی که اندازه دقیق آن را می دانیم نظیر یک خط کش را اندازه بگیریم و میزان خطای اندازه گیری شده توسط ماژول را به فرمول اضافه ( یا کم ) کنیم.
سلام خسته نباشید
ببخشید تو کدوم قسمت این کد تریگ رو اعمال کردید؟
سلام دوست عزیز سلامت باشید خط 43 تا 45
سلام میخواستم این پروژه رو واسم کسی درست کنه حالا یا خود ادمین یا کسی ک بتونه درستش کنه هزینشم میدم
سلام دوست عزیز برای انجام این پروژه و گرفتن قیمت آن در تلگرام پیام دهید
سلام وقت بخیر خدا قوت و خسته نباشید
برای اندازه گیری نرخ سوزش میل سوخت جامد استوانه ای شکل که بصوزت سیگاری در محفظه تحت فشار دما بالا میسوزه میخواستم ببینم میشه با روش التراسونیک سرعت سوختن رو اندازه گیری کنم اگه میشه چه سنسوری رو پیشنهاد میکنین؟
ممنون میشم راهنماییم کنید
سلام دوست عزیز ممنون سلامت باشید
با استفاده از این ماژول تنها میتوان ارتفاع مایعات درون مخزنی را اندازه گیری کرد و با داشتن مساحت سطح مقطع مخزن ، حجم مخزن در لحظه را محاسبه نمود. با داشتن حجم مخزن در دو لحظه میتوان مقدار متوسط مصرف مایع را نیز محاسبه کرد. البته این ماژول ضد آب نمی باشد و به محض رسیدن مایعات به آن می سوزد.
با عرض سلام و خسته نباشید، ایا با همه پین های دیجیتال میتوان التدا سونیک را راه اندازی کرد؟
سلام دوست عزیز ممنونم بله میشه
باسلام وتشکر آزآقای مهندس(ادمین) سورس پروژهsrf05را از طریق ایمیل دریافت نمودم تشکر نوروزی
سلام ادمین محترم.ببخشید چجوری میشه کاری کرد ک فاصله بیشتری رو بسنجه این سنسور