اندازه گیری دما با حسگر LM35
در این بخش دانلود پروژه اندازه گیری دما با حسگر LM35 و میکروکنترلر AVR, توسط تیم الکترونیک وبرنامه نویسی الکترونیک ۹۸ برای شما علاقه مندان به پروژه های میکروکنترلر AVR آماده شده است. در این پروژه می خواهیم با ساخت دماسنج میزان دما را با استفاده از حسگر دمای LM35 اندازه گیری کنیم. بدین منظور خروجی حسگر را به کانال مبدل آنالوگ به دیجیتال وصل می کنیم و با اندازه گیری میزان ولتاژ خروجی حسگر, دما را بدست می آوریم.
نقشه شماتیک پروژه اندازه گیری دما با حسگر LM35 و میکروکنترلر AVR
مدار پروژه پروژه شامل یک میکروکنترلر ATmega8, یک LCD کاراکتری 2 در 16 و یک سنسور دما LM35 است. حسگر دما LM35 دارای 3 پایه است که پایه های شماره 1 و 3 آن به ترتیب به Vcc و GND وصل می شوند و پایه شماره 2 به پایه PORTC.2 میکروکنترلر متصل می گردد که در حقیقت یکی از کانال های مبدل آنالوگ به دیجیتال است. مدار شماتیک راه اندازی این حسگر در شکل زیر نشان داده شده است.
قطعات مورد نیاز
:: میکروکنترلر ATmega8 | خرید
:: یک عدد پتانسیومتر خوابیده 10 کیلو اهم | خرید
:: LCD کاراکتری 2*16 | خرید
:: سنسور دما LM35 | خرید
توجه : مدار مربوط به ال سی دی کاراکتری, برای برنامه نویسی میکروکنترلر در محیط نرم افزار BASCOM-AVR پیکربندی شده است. به منظور استفاده از این مدار برای نرم افزار Code Vision AVR پایه ها را مطابق آنچه در محیط Code Wizard AVR نشان داده شده اند, به ال سی دی LCD متصل کنید.
برنامه پروژه در محیط Code Vision AVR
ابتدا با استفاده از محیط برنامه نویسی Code Wizard AVR تنظیمات نوع میکروکنترلر را (ATmega8) و فرکانس کاری آنرا (8MHz) در زبانه Chip انجام دهید و در زبانه LCD پورت B را به عنوان پورتی که ال سی دی کاراکتری به آن وصل می شود، انتخاب کنید. سپس در زبانه ADC مبدل آنالوگ به دیجیتال را به صورت شکل زیر فعال و پیکربندی کنید.
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 |
#include <mega8.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x18 ;PORTB #endasm #include <lcd.h> #include <delay.h> #include <stdlib.h> #define ADC_VREF_TYPE 0x00 // Read the AD conversion result unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCW; } // Declare your global variables here long int adc1, adc2, adc3, adc4; float adc0; char *str; void main(void) { // ADC initialization // ADC Clock frequency: 125.000 kHz // ADC Voltage Reference: AREF pin ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x86; // LCD module initialization lcd_init(16); lcd_putsf("Temprature is:"); while (1) { delay_ms(250); adc1=read_adc(2); delay_ms(250); adc2=read_adc(2); delay_ms(250); adc3=read_adc(2); delay_ms(250); adc4=read_adc(2); adc0=adc1+adc2; adc0=adc0+adc3; adc0=adc0+adc4; adc0=adc0/4; adc0=adc0/2.046; adc0=adc0+2; lcd_putsf(" "); itoa(adc0,str); lcd_puts(str); lcd_putsf(" "); }; } |
برنامه پروژه در محیط 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 |
$regfile = "m8def.dat" $crystal = 8000000 Config Adc = Single , Prescaler = Auto Stop Adc Config Portc = Output Config Lcd = 16 * 2 Config Lcdpin = Pin , Db7 = Pb.7 , Db6 = Pb.6 , Db5 = Pb.5 , Db4 = Pb.4 , Rs = Pb.0 , E = Pb.1 Cursor Off Cls Dim Adc1 As Word , Adc2 As Word , Adc3 As Word , Adc4 As Word Dim Adc0 As Single Cls Lcd "Temperature is:" Do Start Adc Waitms 250 Adc1 = Getadc(2) Waitms 250 Adc2 = Getadc(2) Waitms 250 Adc3 = Getadc(2) Waitms 250 Adc4 = Getadc(2) Stop Adc Adc0 = Adc1 + Adc2 Adc0 = Adc0 + Adc3 Adc0 = Adc0 + Adc4 Adc0 = Adc0 / 4 Adc0 = Adc0 / 2.046 Adc0 = Adc0 + 2 Home Lower Lcd " " ; Adc0 ;" " Loop End 'end program |
شرح برنامه میکروکنترلر به زبان بیسیک و زبان C
در این برنامه برای دقیقتر شدن اندازه گیری و ثابت بودن عدد نمایش داده شده, ولتاژ خروجی سنسور دمای LM35DZ, چهار بار در ثانیه نمونه برداری می گردد و میانگین این چهار عدد به عنوان ولتاژ اصلی در نظر گرفته می شود و چون امکان دارد میانگین این اعداد یا دمای محاسبه شده, عددی اعشاری باشد, متغیری که برای ذخیره آن در نظر گرفته شده از نوع Single در BASCOM-AVR و Float در Code Vision AVR می باشد. با تقسیم ولتاژ به دست آمده به 2.046 و سپس جمع آن با 2, میزان دمای اندازه گیری شده به دست می آید.
سلام
دلیل اینکه در انتهای برنامه Adc0 را با 2 جمع کردهاید چیست؟