در این پست از سایت اِمیک, ماژول سنسور لرزش و ویبره SW-18010P را با استفاده از میکروکنترلر AVR راه اندازی خواهیم کرد. این ماژول زمانی که کوچکترین لرزش یا حرکت سریع ناگهانی را احساس کند خروجی ان فعال می شود, بنابراین می توان از این ماژول در پروژه های مختلفی مانند دزدگیرها, تشخیص زلزله و… استفاده کرد. در زیر تصویر این ماژول را مشاهده می کنید که ترتیب پایه های ان نیز مشخص شده است:
این ماژول دارای دو خروجی دیجیتال و انالوگ می باشد که با توجه به نیاز می توان از خروجی دیجیتال یا انالوگ یا هر دو استفاده کرد. با استفاده از پتانسیومتر روی برد که در تصویر بالا نیز مشخص است می توان میزان حساسیت خروجی دیجیتال ماژول را تنظیم کرد. این ماژول دارای چهار پایه به صورت زیر است:
پایه 1: اتصال به VCC (مثبت تغذیه)
پایه 2: اتصال به GND (منفی تغذیه)
پایه 3: خروجی دیجیتال ماژول (D0)
پایه 4: خروجی انالوگ ماژول (A0)
زمانی که ماژول هیچگونه لرزش یا حرکت ناگهانی را تشخیص نداده, خروجی دیجیتال (D0) ماژول 1 منطقی است و زمانی که ماژول لرزش یا حرکت ناگهانی را تشخیص داد خروجی ان از وضعیت 1 منطقی به 0 منطقی تغییر می کند. پس از اینکه لرزش ها تمام شد خروجی ماژول دوباره به وضعیت قبلی خود باز می گردد.
خروجی انالوگ (A0) نیز با توجه به میزان لرزش ولتاژ ان بین 0 تا 5 ولت (بین 0 تا VCC) تغییر می کند که برای اندازه گیری میزان لرزش باید با استفاده از ADC در میکروکنترلر AVR این ولتاژ را اندازه گیری کنیم.
پروژه راه اندازی ماژول سنسور لرزش و ویبره با میکروکنترلر AVR :
در این پروژه ما از هر دو خروجی دیجیتال و انالوگ ماژول استفاده خواهیم کرد. هدف این پروژه اشنایی شما با این ماژول و نحوه راه اندازی ان می باشد و شما می توانید این پروژه را به دلخواه تغییر دهید و برای اهداف مختلفی از ان استفاده کنید. در این پروژه ما از میکروکنترلر ATmega16 به همراه ماژول سنسور لرزش و ویبره SW-18010P و یک LCD کاراکتری 2*16 برای نمایش میزان لرزش استفاده کرده ایم.
عملکرد این پروژه به این صورت است که با هرگونه لرزش یا تغییر ناگهانی ماژول, یک بازر هشدار دهنده فعال می شود و همچنین بر روی LCD میزان لرزش از 0 تا 100 درصد نمایش داده می شود. در انتهای مطلب می توانید کلیپ تست عملی پروژه را مشاهده کنید. در ادامه شماتیک ان را مشاهده می کنید:
پتانسیومتر RV1 برای تنظیم کنتراست یا روشنایی LCD کاراکتری استفاده شده, در صورتی که نخواستید استفاده کنید باید پایه 3 ال سی دی را به زمین (GND) متصل کنید. نحوه اتصال ماژول به میکرو ATmega16 در شماتیک بالا مشخص است که پایه خروجی انالوگ ماژول (A0) به پین 40 (پین 0 پورت A) متصل شده و پایه خروجی دیجیتال ماژول (D0) نیز به پین 1 میکرو (پین 0 پورت B) متصل شده است.
بازر نیز که از نوع 5 ولت است از طریق مقاومت R1 و ترانزیستور Q1 به پین 2 میکرو (پین 1 پورت B) متصل شده, که مقاومت و ترانزیستور به منظور درایو یا راه اندازی بازر استفاده شده اند.
توجه کنید که پایه های تغذیه میکروکنترلر (پایه 10 و 11) را که در شماتیک بالا نیست, فراموش نکنید به تغذیه 5 ولت متصل کنید و همچنین پایه های 30 و 32 میکرو را هم بدلیل استفاده از ADC باید به مثبت تغذیه متصل کنیم.
برنامه کدویژن :
در این پروژه فرکانس میکروکنترلر 1 مگاهرتز تنظیم شده است. در زیر برنامه نوشته شده به زبان C و کامپایلر کدویژن را مشاهده می کنید:
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 |
////////// WWW.EMIC.IR ////////// #include <mega16a.h> #include <delay.h> #include <alcd.h> #include <stdio.h> // sprintf براي استفاده از تابع stdio فراخواني کتابخانه // /* ايجاد مي شوند adc که توسط خود کدويژن با فعالسازي adc از خط 7 تا 16 دستورات مربوط به */ #define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR)) unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | ADC_VREF_TYPE; delay_us(10); ADCSRA|=(1<<ADSC); while ((ADCSRA & (1<<ADIF))==0); ADCSRA|=(1<<ADIF); return ADCW; } void main(void) { float i ; //از خط 20 تا 22 سه متغير تعريف شده است که در برنامه از انها استفاده مي شود// int VS ; unsigned char lcd[16]; DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (0<<DDB0); PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (1<<PORTB0); DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0); PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); ADMUX=ADC_VREF_TYPE; /* که با توجه به تنظيمات ما در محيط کدويزارد ايجاد مي شوند adc از خط 33 تا 35 رجيسترهاي مربوط به */ ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0); SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0); lcd_init(16); while (1) { PORTB.1=~PINB.0; // مي ريزد B بود را برعکس مي کند و در پين 1 پورت B دستور روبرو هر مقداري که در پين 0 پورت // i=read_adc(0); // i خواندن عددي بين 0 تا 1023 که نشان دهنده مقدار ولتاژ انالوگ روي ان پين ميکرو است و ريختن ان در متغير // VS=100-(i*100)/1023 ; // دستور روبرو عدد خوانده شده بين 0 تا 1023 را در بازه ي 0 تا 100 تبديل مي کند // sprintf(lcd,"vibration=%d",VS); // براي نمايش روي ال سي دي کاراکتري lcd به رشته اي از کاراکتر و ذخيره ان در متغير VS تبديل مقادير موجود در متغير // lcd_gotoxy(0,0); // رفتن به ستون 0 و سطر 0 از ال سي دي کاراکتري // lcd_puts(lcd); //ذخيره کرده بوديم lcd نمايش ميزان لرزش (بين 0 تا 100) که به صورت کاراکتر در متغير// lcd_putsf("%"); // % نوشتن کاراکتر // lcd_gotoxy(2,1); lcd_putsf("WWW.EMIC.IR"); delay_ms(500); lcd_clear(); } } |
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می تونید در قسمت نظرات مطرح کنید.
- در صورتی که با ADC در میکروکنترلر AVR و نحوه راه اندازی ان اشنا نیستید این پست را مطالعه کنید
- برای اشنایی با LCD کاراکتری و نحوه راه اندازی ان این پست را مطالعه کنید
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…