حسگر اولتراسونیک
در این بخش دانلود پروژه ساخت فاصله سنج با ماژول حسگر اولتراسونیک و میکروکنترلر AVR, توسط تیم الکترونیک و برنامه نویسی الکترونیک ۹۸ برای شما علاقه مندان به پروژه های میکروکنترلر AVR آماده شده است. در این پروژه هدف بدست آوردن فاصله توسط ماژول حسگر اولتراسونیک است. همان طور که می دانید یکی از روش های آسان محاسبه فاصله استفاده از سنسورها یا حسگرهای اولتراسونیک می باشد. در این روش برای اندازه گیری فاصله, ابتدا باید یک موج فراصوت ارسال گردد و مدت زمان رفت و برگشت آن اندازه گیری شود. هدف اصلی در این برنامه, به دست آوردن زمان مذکور است.
قطعات مورد نیاز
:: میکروکنترلر ATmega8 | خرید
:: LCD کاراکتری 2*16 | خرید
:: یک عدد پتانسیومتر خوابیده 10 کیلو اهم | خرید
:: ماژول اولتراسونیک | خرید
نقشه شماتیک ساخت فاصله سنج با ماژول حسگر اولتراسونیک و AVR
این مدار شامل یک میکروکنترلر ATmega8 یک LCD کاراکتری 2 در 16 و یک ماژول حسگر اولتراسونیک است. ماژول اولتراسونیک استفاده شده در این پروژه دارای چهار پایه است که دو پایه شماره 3 و 1 به ترتیب به VCC و GND متصل می شوند. پایه شماره 2 به پایه D6 میکروکنترلر AVR متصل می گردد و در صورت دریافت امواج صفر می شود. پایه شماره 4 نیز که به پایه B7 میکروکنترلر وصل است, برای فرستادن امواج فراصوت به کار می رود. مدار شماتیک راه اندازی این ماژول حسگر اولتراسونیک را در شکل زیر مشاهده می کنید.
توجه : در این پروژه جهت اندازه گیری فاصله از ماژوهای آماده اولتراسونیک استفاده شده که می توانید به راحتی آن ها را با قیمتی بسیار مناسب از فروشندگان قطعات الکترونیکی تهیه نمائید. این موضوع به این معنا می باشد که دیگر نیازی نیست تا مدار اضافی با هزینه زیاد برای تولید فرکانس جهت راه اندازی سنسورهای اولتراسونیک طراحی نمائید. همچنین به یاد داشته باشید از روش ارائه شده در این پروژه می توانید برای راه اندازی تمامی مدل های ماژول های اولتراسونیک توسط میکروکنترلر AVR استفاده کنید.
توجه : شماتیک ارائه شده در تصویر بالا مربوط به LCD برای برنامه نویسی میکروکنترلر در محیط نرم افزار BASCOM-AVR پیکربندی شده است. به منظور استفاده از این مدار برای نرم افزار Code Vision AVR, پایه ها را مطابق آنچه در محیط نرم افزار Code Wizard AVR نشان داده شده است, به ال سی دی lcd وصل کنید. همچنین از پایه d7 میکروکنترلر به جای پایه b7 استفاده نمایید.
برنامه در محیط Code Vision AVR
ابتدا با استفاده از محیط برنامه نویسی Code Wizard AVR تنظیمات نوع میکروکنترلر را (ATmega8) و فرکانس کاری آنرا (8MHz) در زبانه Chip انجام دهید و در زبانه LCD پورت B را به عنوان پورتی که ال سی دی کاراکتری به آن وصل می شود، انتخاب کنید. سپس در زبانه Timer1 تنظیمات را به صورت شکل زیر انجام دهید تا در حالت تایمر پیکربندی شود.
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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
#include <mega8.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x18 ;PORTB #endasm #include <lcd.h> #include <delay.h> #include <stdlib.h> // Timer 1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) { TCCR1A=0x00; lcd_gotoxy(2,1); lcd_putsf("Fail"); delay_ms(10); TCNT1=0; PORTD.7=1; delay_us(30); PORTD.7=0; // Start Timer TCCR1B=0x01; } // Declare your global variables here char *str; void main(void) { // Declare your local variables here // Port D initialization // Func7=Out Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=0 State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x80; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 8000.000 kHz // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: On // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x01; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x04; // LCD module initialization lcd_init(16); // Global enable interrupts #asm("sei") // Stop Timer TCCR1A=0x00; lcd_clear(); lcd_putsf(" Timer is:"); while (1) { PORTD.7=1; delay_us(30); PORTD.7=0; // Start Timer TCCR1B=0x01; do { } while (PIND.6); TCCR1A=0x00; lcd_putsf(" "); itoa(TCNT1,str); lcd_puts(str); lcd_putsf(" "); TCNT1=0; delay_ms(500); }; } |
برنامه در محیط Bascom-AVR
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 |
$regfile = "m8def.dat" $crystal = 8000000 Config Timer1 = Timer , Prescale = 8 Enable Interrupts Enable Timer1 On Timer1 Cs Stop Timer1 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db7 = Pb.1 , Db6 = Pb.2 , Db5 = Pb.3 , Db4 = Pb.4 , Rs = Pb.0 , E = Pb.5 Cursor Off Config Pind.6 = Input Config Pinb.7 = Output Cls Lcd " Timer is : " Do Portb.7 = 1 Waitus 30 Portb.7 = 0 Start Timer1 Do Loop Until Pind.6 = 0 Stop Timer1 Home Lower Lcd " " ; Timer1 ; " " Timer1 = 0 Waitms 500 Loop End 'end program Cs: Stop Timer1 Home Lower Lcd " Fail" Waitms 10 Timer1 = 0 Portb.7 = 1 Waitus 30 Portb.7 = 0 Start Timer1 Return |
شرح برنامه میکروکنترلر به زبان بیسیک و زبان C
ابتدا تایمر یک Timer1 را در حالت تایمر, پیکربندی و به صورتی تنظیم می نمائیم که تقریبا هر 30ms وقفه ای ایجاد کند. یک پایه را به عنوان خروجی و پایه دیگر را به عنوان ورودی تعیین می کنیم. خروجی میکروکنترلر را به فعالساز فرستنده فراصوت و ورودی آن را به خروجی مدار حسگر اولتراسونیک متصل می کنیم.
توجه : در مداری که این برنامه بر حسب آن نوشته شده است. خروجی مدار فراصوت هنگام دریافت امواج فراصوت صفر می شود. ممکن است این مقدار در موارد دیگر متفاوت باشد.
برای ارسال امواج فراصوت, پایه خروجی میکروکنترلر را حدود 30us میکرو ثانیه فعال می سازیم. سپس تایمر را فعال می کنیم تا اندازه گیری زمان از همان لحظه آغاز شود. تایمر باید تا صفر شدن ورودی میکروکنترلر فعال باشد. اگر زمان برگشت امواج فراصوت بیشتر از حدود 70ms میلی ثانیه شود, تایمر سرریز می گردد و با ایجاد وقفه, عبارت Fail روی ال سی دی LCD به نمایش در می آید. در غیر اینصورت صفر شدن ورودی میکروکنترلر, بدین معناست که امواج فراصوت دریافت شده اند و محتوای تایمر به نمایش در خواهد آمد. برای پیشگیری از تداخل ارسال امواج جدید با امواج قبلی, تاخیری 10ms میلی ثانیه ای بین دو ارسال ایجاد می گردد. سپس روند ارسال از ابتدا تکرار می شود و امواج فراصوت دوباره به مدت 30us میکرو ثانیه در محیط منتشر می گردند و تایمر از مقدار صفر شروع به کار می کند.
تا چه فاصله ای رو اندازه میگیره
بین دو الی سه متر
سلام. در این قسمت برنامه بین دستور while
while (PIND.6); نباید PIND.6=1بشه؟
سلام دوست عزیز
به هر دو شیوه نیز می توانید دستور را بنویسید.
سلام و عرض ادب خدمت شما
من داشتم سایتتون رو برسی میکردم که به این نتیجه رسیدم که همینجا ازتون تشکر کنم
بابت چند مورد
یکی اینکه اموزشاتون رایگانه
اموزشای خیلی خوبی دارید
عمده ی فعالیتتون توی عرصه های مهم برق مثل صنعتی و الکترونیک و تاسیساتی هستش
پروژه هاتون رایگانه
مثلا پی ال سی
اردوینو
ای وی ار
سایتتون نرم افزار ها رو داره ( البته مهم هارو )
در مجموع ممنونم از سایت خیلی خوبتون
شاید این کامنت زیر پست مناسب نیست ولی گفتم همینجا ازتون تشکر کنم
انشالله همیشه موفق و پیروز باشید
دنیا به ادمای خیر خواهی مثل شماها زیاد نیاز داره .
با عرض سلام و احترام
بسیار ممنونیم از شما که وقت گذاشتید و نظر خودتون را در رابطه با سایت به همراه دلایل آن به صورت کامل ذکر کردید. نظرات دوستان و کاربران عزیزی همچون شما، همیشه باعث دلگرمی ما در این راه بوده و همین موضوع سبب شده، که بیش از 5 سال این مسیر را ادامه دهیم.
به امید موفقیت شما در تمامی مراحل زندگی و همه کسانیکه برای هدف و علاقه خود تلاش می کنند.