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

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

0

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

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

لوازم مورد نیاز

  1. برد اصلی AVR WIZZARD
  2. برد ROBO-SHIELD
  3. LCD2X16
  4. ماژول آلتراسونیک SR-04
  5. تغذیه 9 ولت

آلتراسونیک

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

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

سنسور HC-SR04 Ultrasonic

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

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

 pinout سنسور SR04
سنسور SR04

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

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

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

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

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

امواج آلتراسونیک
امواج آلتراسونیک

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

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

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

[cpp]
#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(" ");
}

}
}
[/cpp]

خروجی برنامه

پروژه آلتراسونیک با avr wizzard
پروژه آلتراسونیک با avr wizzard
Choose your Reaction!
دیدگاه خود را بنویسید

آدرس ایمیل شما منتشر نخواهد شد.

redronic.com