راه اندازی ماژول آلتراسونیک SRF05 و SR04 با AVR
در این آموزش از وبسایت الکترولب به مقایسه دو ماژول آلتراسونیک SRF05 و SR04 می پردازیم و نحوه ی راه اندازی این دو ماژول رو با هم بررسی می کنیم.
اساس کار ماژول های آلتراسونیک:
این ماژول امواج صوتی با فرکانس بالا ایجاد میکنند و موج بازتاب شده را دریافت و تحلیل میکنند. این ماژول با محاسبهٔ زمان بین فرستادن سیگنال و گرفتن بازتاب، فاصلهٔ جسم را محاسبه میکنند.
تفاوت ماژول آلتراسونیک SRF05 و SR04:
این دو ماژول در بسیاری از ویژگی ها مشابه هم هستند ماژول SRF05 در واقع تکمیل شده و اصلاح شده ماژول SR04 می باشد. پایه ها و نوع طراحی این ماژول ها به طوری است که می توان با یک برنامه از هر دو ماژول استفاده کرد در زیر تصویر هر دو ماژول را می بینید.
همان طور که در تصویر هم مشخص است پایه ی out به ماژول SRF05 اضافه شده که این پایه در ماژول دیگر موجود نیست از این پایه برای تعیین عملکرد ماژول اشتفاده می شود. در ادامه بیشتر در مورد این پایه بحث می کنیم.
راه اندازی ماژول با Trigger و Echo جداگانه (سازگار با ماژول SR04):
در این حالت از پایه های جداگانه برای Trigger و Echo استفاده می شود و ساده ترین حالت استفاده از این ماژول می باشد. در ابن حالت تمام کد های موجود برای SR04 با SRF05 نیز کار می کند. برای استفاده از این مد کافی است این پایه OUT را به جایی وصل نکنید در ماژول SRF05 این پایه با مقاومت به صورت داخلی pull up شده است.
عملکرد این ماژول در این حالت :
ابتدا باید یک پالس با طول حداقل ۱۰ میکرو ثانیه به پایه TRIG اعمال شود. ماژول به صورت اتوماتیک ۸ عدد پالس با فرکانس ۴۰ کیلو هرتز ارسال میکند. وقتی که پالس ها ارسال شد پایه ECHO یک میشه و تا زمانی که برگشت پالس ها از جسم را دریافت نکند این پایه یک باقی میماند. پس با اندازه گیری مدت زمانی که این پایه در سطح منطقی ۱ بوده است میتوان زمان رفت و برگشت صوت را بدست آورد. برای اندازه گیری پالس روی پایه ECHO باید از تایمر استفاده کرد. بعد از اطلاع از زمان رفت و برگشت سیگنال اولتراسونیک با استفاده از رابطه زیر فاصله سنسور تا مانع به راحتی محاسبه می شود.
راه اندازی ماژول با پایه ی مشترک برای Trigger و Echo :
در این حالت از یک پایه برای تریگر و اکو استفاده می شود این حالت برای صرفه جویی در پایه های I/O ی میکروکنترلر یا هر سیستم دیگری طراحی شده است. برای استفاده از این باید پایه ی OUT به زمین وصل شود. و از پایه ی Echo برای تریگر و گرفتن پالس اکو استفاده می شود. نمودار برای استفاده از این حالت در عکس زیر مشخص است.
من در ادامه از روش اول برای راه اندازی ماژول استفاده می کنم تا برای هر دونوع ماژول قابل استفاده باشد.
شماتیک لازم برای راه اندازی ماژول آلتراسونیک SRF05 و SR04 با AVR:
برنامه راه اندازی ماژول آلتراسونیک SRF05:
/***************************************************** Chip type : ATmega32 Program type : Application AVR Core Clock frequency: 8.000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 512 *****************************************************/ #include <mega32.h> #include <stdio.h> #include <delay.h> volatile int T_Counter; float T = 0.0; float d = 0.0; interrupt [TIM0_OVF] void timer0_ovf_isr(void) { TCNT0 = 0; T_Counter++; } void main(void) { DDRA=0xff; PORTC=0x00; DDRC=0x01; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 8000.000 kHz // Mode: Normal top=0xFF // OC0 output: Disconnected TCCR0=0x01; TCNT0=0x00; OCR0=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x01; // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM); UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8); UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL); UBRRH=0x00; UBRRL=0x33; // Global enable interrupts #asm("sei") while (1) { delay_ms(150); T_Counter = 0; PORTC.0 = 1; delay_us(20); PORTC.0 = 0; while(PINC.1 == 0); TCNT0 = 0; TCCR0=0x01; while(PINC.1 == 1) { }; TCCR0=0x00; T = 0; d = 0; T = (float)T_Counter*(256.0/8000.0) + (float)TCNT0/8000.0; // Time in ms d = (float)T*340.0/2.0; printf("time = %f dis = %f\n",T,d); if(d<75) PORTA=0xff; if(d>75)PORTA=0x00; } }
توضیح برنامه ی ماژول آلتراسونیک SRF05:
عملکرد این برنامه به این صورت است که اگر جسمی فاصله ای کمتر از 75 میلی متر داشته باشد کل پورت A یک می شود و اگر بیشتر از 75 سانت بود کل پورت A صفر می شود.
علاوه بر این عملکرد فاصله اندازه گیری شده و مدت زمان رفت و برگشت صوت با ارتباط سریال فرستاده می شود اگر با ماژول usb به سریال میکروکنترلر را به کامپیوتر تون وصل کنید می توانید به وسیله ترمینال سریال مثل هایپر ترمینال فاصله اندازه گیری شده و مدت زمان رفت و برگشت را مشاهده کنید.
نکاتی در مورد برنامه:
- در سطر 14 متغییر به صورت volatile تعریف شده که در پست قبلی در مورد ایم موضوع بحث کردیم.
- سطر 18 برنامه وقفه ی تایمر است به این خاطر تعریف شده تا تعداد سر ریز تایمر تا رفت و برگشت صوت مشخص شود برای اندازه گیری زمان لازم است.
- سطر 52 تا 56 تنظیمات مورد نیاز ارتباط سریال است.
- سطر 60 وقفه را به طور سراسری رو شن می کند.
- سطر 72 تا 79 برای اندازه گیری زمان رفت و برگشت استفاده می شود به این صورت که از زمانی که پایه ی Echo صفر است تایمر شروع به شمارش می کند و تا زمانی که پایه ی Echo دوباره صفر نشده شمارش ادامه پیدا می کند با صفر شدن دوباره ی تایمر شمارش قطع می شود.
- در سطر 84 زمان رفت برگشت محاسبه می شود.
- در سطر 85 زمان رفت و برگشت تقسیم بر 2 شده و در سرعت صوت ضرب می شود.
- و در سطر 86 اطلاعات مورد نظر از تریق ارتباط سریال فرستاده می شود.
- این برنامه رو از فروم وبسایت eca گرفتم و کمی تغییرش دادم.
سلام اقای عزتی
بنده با srf05 تست کردم فاصله های سه و نیم متر ب بالا رو نوسان داره تو نمایش
مثلن تو چهار متری عدد یهو صفر میشه بعد یک میشه بعد چهار
البته من رو السیدی نمایش میدم که بعدن میخام با nrf بفرستم جای دیگه
ماژول های اصلی این پرش و بی دقتی رو ندارن ؟
اگه srf05 رو توی گوگل سرچ کنید دو نوع ماژول میاد ماژول اصلی و ماژول چینی که در بازار ایران هم هستش . srf05 ای هم که من امتحان کردم همین عملکرد رو داشت بشتر از 3 متر رو تشخیص نمیداد با ماژول sr04 هم این نتیجه رو گرفتم که شما گفتید . با ماژول دیگه ای به غیر از این ها کار نکردم تا بیبنم چه طور هست کارایشون
متسفانه هیچکی کار نکرده ،برام مهمه که بدونم دقیق هستن که برم هزینه کنم
بهرحال ممنونم بابت پاسخگویی
می تونید توی یوتیوب فیلم های تست شون رو ببینید
یه مسئله ای پیش اومد
فک کنم یه لحظه vcc به زمین میکرو وصل شد بعدش کار نکرد ، دوباره پروگرمش کردم اما فاصله رو دوبرابر نشون داد!! یعنی دو متر رو چهار متر نشون میده
و ابنکه پرش عدد هم خیلی کمتر شد
گیجم کرده اصلن
یکم استراحت کنید و با فکر آسوده کار کنید و گرنه سخت به نتیجه می رسید و خودتون هم اذیت میشین
توی فرمول یدونه تقسیم 2 بزار 🙂
بله حتما
سلام
من توی این کار تازه واردم
به دنبال نحوه فعال سازی SRF8 یا SRF10 هسنم
میتونید کمکی بهم بکنید؟؟
سلام
دوستان کسی اطلاع داره سنسور های پارک ماشین رو چطوری با میکرو راه اندازی میکنن??
این سنسور ها دوتا سیم مثبت و منفی دارن فقط و از Vcc و GND و تریگر خبری نیست!
یه لینکی عکسی چیزی میدید منم نگاه کنم
سلام من باهمین ماژول التراسونیک میخوام سرعت جسم رو بدست بیارم بطوری که دوتا فاصله باتاخیر از ماژول بگیرم تقسیم به زمان کنم سرعت بدست بیاد میشه راهنمایی کنید ممنون
سلام ممنون.آیا ماژولی هست که فاصلهی بیشتر از 5متر رو اندازه بگیره؟ و آیا این ماژول ها باید در موقع اندازه گیری. با جسم در یک راستا با شند مثلا اگه نسبت به هم اختلاف سطح داشته باشند باز هم میتونه اندازه رد نشون بده یا خیر؟اگه میتونه تا چه میزان اختلاف سطح ؛رومیتونه اندازه ب؟گیره
سلام اول از همه بابت سایت عالی و پربارتون تشکر میکنم…خدا قوت
ی مشکلی تو برنامه راه اندازی بود با اجازتون یک سری تغییرات هم دادم اگه مایل بودید قرار بدید تو سایت
تو یک خط قبل از خواندن متغییر رو صفر میکنید
http://s8.picofile.com/file/8324603626/test_sfr04.rar.html
بازم ازتون تشکر میکنم
حتما بررسی می کنم و اصلاحش میکنم خیلی لطف کردید
سلام.
اگه بخوایییم فرکانس 40khz رو عوض کنیم چکار باید کرد و رابطش چیه؟؟؟؟
سلام
کد هارو که دادید کجا بریزیم چجوری وباچی
لطفا بگید
تو خط 84 دقیقا چه عملیاتی رخ میده من چرا 256 تقسیم بر 8000 شده؟
همینطور چرا tcnt تقسیم بر 8000 شده؟؟ ممنون میشم این خطو کامل توضیح بدی.
سلام وقتتون بخیر
من میخوام دو عدد ماژول التراسونیک رو با میکرو اتمگا 32 راه اندازی کنم در محیط کدویژن دقیقا باید چه کاری انجام داد؟
لطفا راهنمایی کنید ممنون
خوب کد پروژه به صورت کامل گزاشته شده دیگه اگر راهنمایی بیشتری می خواید در انجمن مطرح کنید electrolab.org