مطالب علمی

راه اندازی ماژول آلتراسونیک SRF05 و SR04 با AVR

اساس کار ماژول های آلتراسونیک:

این ماژول امواج صوتی با فرکانس بالا ایجاد می‌کنند و موج بازتاب شده را دریافت و تحلیل می‌کنند. این ماژول با محاسبهٔ زمان بین فرستادن سیگنال و گرفتن بازتاب، فاصلهٔ جسم را محاسبه می‌کنند.

تفاوت ماژول آلتراسونیک SRF05 و SR04:

این دو ماژول در بسیاری از ویژگی ها مشابه هم هستند ماژول SRF05 در واقع تکمیل شده و اصلاح شده ماژول SR04 می باشد. پایه ها و نوع طراحی این ماژول ها به طوری است که می توان با یک برنامه از هر دو ماژول استفاده کرد در زیر تصویر هر دو ماژول را می بینید.

hy-srf05-top

hy-srf05-%d8%a7%d9%84%da%a9%d8%aa%d8%b1%d9%88%d9%84%d8%a8

همان طور که در تصویر هم مشخص است پایه ی out به ماژول SRF05 اضافه شده که این پایه در ماژول دیگر موجود نیست از این پایه برای تعیین عملکرد ماژول اشتفاده می شود. در ادامه بیشتر در مورد این پایه بحث می کنیم.

راه اندازی ماژول با Trigger و Echo جداگانه (سازگار با ماژول SR04):

در این حالت از پایه های جداگانه برای Trigger و Echo استفاده می شود و ساده ترین حالت استفاده از این ماژول می باشد. در ابن حالت تمام کد های موجود برای SR04 با SRF05 نیز کار می کند. برای استفاده از این مد کافی است این پایه OUT را به جایی وصل نکنید در ماژول SRF05 این پایه با مقاومت به صورت داخلی pull up شده است.

عملکرد این ماژول در این حالت :

%d8%b1%d8%a7%d9%87-%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c-%d9%85%d8%a7%da%98%d9%88%d9%84-%d8%a2%d9%84%d8%aa%d8%b1%d8%a7%d8%b3%d9%88%d9%86%db%8c%da%a9-srf05-%d9%88-sr04-%d8%a8%d8%a7-avr

ابتدا باید یک پالس با طول حداقل ۱۰ میکرو ثانیه به پایه TRIG اعمال شود. ماژول به صورت اتوماتیک ۸ عدد پالس با فرکانس ۴۰ کیلو هرتز ارسال میکند. وقتی که پالس ها ارسال شد پایه ECHO یک میشه و تا زمانی که برگشت پالس ها از جسم را دریافت نکند این پایه یک باقی میماند. پس با اندازه گیری مدت زمانی که این پایه در سطح منطقی ۱ بوده است میتوان زمان رفت و برگشت صوت را بدست آورد. برای اندازه گیری پالس روی پایه ECHO باید از تایمر استفاده کرد. بعد از اطلاع از زمان رفت و برگشت سیگنال اولتراسونیک با استفاده از رابطه زیر فاصله سنسور تا مانع به راحتی محاسبه می شود.

راه اندازی ماژول با پایه ی مشترک برای Trigger و Echo :

در این حالت از یک پایه برای تریگر و اکو استفاده می شود این حالت برای صرفه جویی در پایه های I/O ی میکروکنترلر یا هر سیستم دیگری طراحی شده است. برای استفاده از این باید پایه ی OUT به زمین وصل شود. و از پایه ی Echo برای تریگر و گرفتن پالس اکو استفاده می شود. نمودار برای استفاده از این حالت در عکس زیر مشخص است.

srf

من در ادامه از روش اول برای راه اندازی ماژول استفاده می کنم تا برای هر دونوع ماژول قابل استفاده باشد.

شماتیک لازم برای راه اندازی ماژول آلتراسونیک SRF05 و SR04 با AVR:

screenshot-32

برنامه راه اندازی ماژول آلتراسونیک 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 اطلاعات مورد نظر از تریق ارتباط سریال فرستاده می شود.

نویسنده: علی عزتی

نوشته های مشابه

2 دیدگاه

  1. سلام
    من این برنامه رو یکبار به‌صورت عملی و هم در پروتئوس تست کردم
    بار اول جواب داد ولی از دفعه دوم نه
    غیر منطقی هست ولی واقعته

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا