پروژه های AVR, پروژه‌ها

پروژه راه اندازی ماژول سنجش مسافت آلتراسونیک SR-04 با استفاده از مجموعه آموزشی AVR WIZARD توسط برد پلاریس به زبان C

پروژه-التراسونیک-با-VR

فهرست مطالب

هدف از این آموزش راه اندازی ماژول آلتراسونیک SR-04 و سنجش مسافت، به زبان برنامه نویسی C توسط مجموعه آموزشی AVR WIZARD میباشد .

قطعات مورد نیاز:

آلتراسونیک

کلمه آلتراسونیک Ultrasonic به معنای مافوق صوت است. محدوده فرکانس شنوایی انسان 20 هرتز تا 20 هزار هرتز است. محدوده فرکانسی امواج مافوق صوت 40 کیلو هرتز تا چندین مگا هرتز می‌باشد. امواج مافوق، کاربردهای فراوانی از جمله در لیزر، تخلیه الکتریکی برای بهبود خواص سطحی و افزایش نرخ باربرداری، سنجش فاصله، عمق مخزن، شستشوی دقیق ظروف آزمایشگاهی، تعیین فشار خون بیمار، همگن کردن مواد مذاب، جوشکاری مواد غیر هم جنس، ریخته گری، تراشکاری، فرزکاری، سوراخکاری و غیره دارد. برای استفاده از امواج فرا صوت از حسگرهایی استفاده می‌شود که این حسگرها بر اساس محدوده فرکانسی خود به دو دسته صنعتی و غیر صنعتی تقسیم بندی می‌شوند. حسگرهای فرا صوت غیر صنعتی در محدوده فرکانسی 40 کیلو هرتز و حسگرهای صنعتی در حد مگا هرتز هستند. حسگرهای آلتراسونیک معمولا دارای یک فرستنده و یک گیرنده آلتراسونیک هستند. امواج فرستاده شده از حسگر پس از برخورد با یک مانع به حسگر بر می‌گردند و توسط گیرنده حسگر دریافت می‌شوند. از این طریق و با در نظر گرفتن زمان بازگشت موج و کیفیت امواج بازتابی می‌توان به اطلاعاتی راجع به عمق، نوع و سرعت مانع به دست آورد. حسگرهای فرا صوت مزیت‌های فراوانی دارند مانند نویز پذیری کم، استفاده در شرایط نوری مختلف و…

شکل 1. موارد استفاده از آلتراسونیک

سنسور HC-SR04 Ultrasonic

سنسور HC-SR04 Ultrasonic دارای 4 پین به نام های Vcc ، Trigger ، Echo و Ground می باشدکه برای اندازه گیری دقیق فاصله بسیار مفید است و به طور عمده روی امواج صوتی کار می کند.

بعد از اتصال ماژول به 5 ولت ، سنسور با استفاده از پین Trig شروع به انتقال امواج صوتی از طریق هوا  کرده و به جسم مورد نظر ضربه می زنند. این امواج از جسم پرتاب و منتشر می شوند و سپس توسط پین Echo گیرنده ماژول دریافت می شوند.

شکل 2. سنسور SR04

نحوه اتصال سنسور HC-SR04 Ultrasonic به برد SENSOR SHIELD از مجموعه آموزشی AVR WIZARD

در برد شیلد ربات موسوم به ROBO SHIELD از مجموعه آموزشی AVR WIZARD کافی است سنسور التراسونیک مورد نظر را (HC-04 یا HC-05) در سوکت مربوطه قرار دهیم.

شکل 3. سنسور آلتراسونیک در SENSOR SHIELD

نحوه برنامه نویسی سنسور HC-SR04 Ultrasonic

برای تولید موج باید پین Trig را به مدت 10 میکرو ثانیه در حالت High قرار دهید. این موج شامل 8 سیکل صوتی که با سرعت صوت حرکت می کند می باشد که بازخورد آن در پین اکو دریافت می شود. پین اکو مدت زمانی را که موج صوتی طی کرده است، به میکرو ثانیه زمان می گیرد.

شکل 4 . امواج التراسونیک

به عنوان مثال ، اگر جسم از سنسور 10 سانتی متر فاصله داشته باشد ، و سرعت صدا 340 متر بر ثانیه یا 0.034 cm / µs باشد ، موج صوتی باید در حدود 294 u ثانیه حرکت کند. اما آنچه از پین اکو دریافت خواهید کرد ، دو برابر خواهد بود زیرا موج صوتی یکبار مسیر را به جلو حرکت کرده و بار دیگر همان مسیر را برمی گردد. بنابراین برای بدست آوردن فاصله به سانتی متر ، باید مقدار زمان محاسبه شده از پین اکو را با 0.034 ضرب کرده و آن را به 2 تقسیم کنیم.

شکل 5. محاسبه مسافت با آلتراسونیک

در ادامه نحوه محاسبه مسافت با سنسور آلتراسونیک را در تابع MAIN مشاهده می کنید:

				
					#include <delay.h>
// Alphanumeric LCD functions
#include <alcd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int timer_ovf=0;
float distance=0.0;
char dist_str[20];
// Declare your global variables here

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
  timer_ovf++;
  TCNT0=0;
}

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization

// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (1<<DDA1) | (0<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 2000.000 kHz
// Mode: Normal top=0xFF
// OC0 output: Disconnected
// Timer Period: 0.128 ms
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (1<<CS01) | (0<<CS00);
TCNT0=0x00;
OCR0=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (1<<TOIE0);

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTB Bit 0
// RD - PORTB Bit 1
// EN - PORTB Bit 2

// D5 - PORTA Bit 5
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7
// Characters/line: 16
lcd_init(16);
lcd_clear();
lcd_gotoxy( 0 , 0 );
lcd_putsf( "WWW.REDRONIC.COM" ) ;
delay_ms(2000);

// Global enable interrupts
#asm("sei")
while (1)
      {
       PORTA.1=1;               // set trig pulse
       TCNT0= 0;  
       TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (1<<CS01) | (0<<CS00);
       while(TCNT0<20);
       PORTA.1=0;               //reset trig pulse
       TCCR0=0;
       while(PINA.2==0);      //listen to echo puls
       timer_ovf=0;
       TCNT0=0;
       TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (1<<CS01) | (0<<CS00);
       while(PINA.2==1);     //listen to echo puls
       TCCR0=0;
       distance=((timer_ovf*256+TCNT0)/116.62) ;   // calculate distance
       if(distance>450) 
        { 
               //lcd_clear();
               lcd_gotoxy(0,1);  
               lcd_putsf("             ");
               lcd_gotoxy(0,1); 
               lcd_putsf("Out of Range");
               delay_ms(500);
        }
       else 
        {
         //sprintf(dist_str,"Distance = %3.1f cm",distance);  
         ftoa(distance,1,dist_str);
         lcd_gotoxy(0,1);  
         lcd_putsf("Distance:");   
         lcd_gotoxy(9,1); 
         lcd_puts(dist_str); 
         lcd_gotoxy(14,1);  
         lcd_putsf("cm"); 
         delay_ms(1000); 
         lcd_gotoxy(9,1);
         lcd_putsf("   ");
        }

      }
}
				
			

خروجی برنامه

نظرتان را درباره این مقاله بگویید 9 نظر

پروژه راه اندازی ماژول سنجش مسافت آلتراسونیک SR-04 با استفاده از مجموعه آموزشی AVR WIZARD توسط برد پلاریس به زبان C

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

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