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

پروژه راه اندازی سنسور دما LM35 با استفاده از مجموعه آموزشی AVR WIZARD به زبان C

راه-اندازی-سنسور-lm35-با-avr

فهرست مطالب

راهنمای راه‌اندازی سنسور دما LM35 با استفاده از مجموعه آموزشی AVR WIZARD به زبان C.

هدف از این آموزش راه‌اندازی واحد ADC میکروکنترلر AVR  به زبان  C  توسط مجموعه آموزشی AVR WIZARD می‌باشد. ( شما می‌توانید سنسور‌های آنالوگ مشابه را به این روش راه‌اندازی نمایید. )

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

سنسور دما LM35

ولتاژ خروجی سنسور LM35 متناسب با درجه سانتیگراد است. وضوح LM35 10 میلی‌ولت است.بدین معنی که 10 میلی‌ولت نشان‌دهنده یک درجه سانتیگراد است. بنابراین اگر خروجی  LM35 صدمیلی‌ولت شود ، دمای معادل آن در سانتیگراد، 100/10 = 10 درجه سانتیگراد خواهد بود. LM35 می تواند از 50- تا 150 درجه سانتیگراد اندازه‌گیری کند.

 
شکل 1. پایه های سنسور LM35

تصویر زیر بلوک عملکردی یک سنسور LM35 معمولی است که می‌توانید در برگه اطلاعات آن پیدا کنید:

 
شکل 2. بلوک عملکرد LM35

آنچه این بلوک دیاگرام نمایش می‌دهد این است:

1) یک ولتاژ وابسته به دما را در ترمینال N دیود با استفاده از تقویت‌کننده A2 ایجاد می‌کند تا خروجی را به پین Vout دهد.

2) از این دو ترانزیستور برای ایجاد یک مرجع ولتاژ پهنای‌باند یعنی یک مرجع ولتاژ ثابت، صرف نظر از تغییرات دما و منبع تغذیه استفاده می‌شود.

3) و به همین دلیل است که می‌توانید LM35 را با استفاده از هر ولتاژ بین 4 تا 20 ولت تغذیه کنید.

 

مدار سنسور LM35

از آنجا که خروجی این سنسور آنالوگ بوده، با هر‌یک از کانال‌های ADC میکرو می‌توان آن را خواند.

محل قرارگیری  سنسور LM35 در برد SENSOR SHIELD مجموعه آموزشی AVR

در برد‌شیلد سنسور موسوم به SENSOR SHIELD مدار راه‌انداز این سنسور طراحی شده‌است و کاربر به راحتی شروع به کد‌نویسی می‌کند.

 
شکل 3. محل قرار گیری سنسور LM35

نحوه برنامه‌نویسی و خواندن مقادیر سنسور LM35

فرض کنید از پین Vout مقدار دیجیتال 65 را از ADC میکرو بدست می‌آوریم. می‌دانیم که 1023 مطابق 5v است. بنابراین 350 با (5/1023) * 65 مطابقت دارد که ولتاژ خروجی را به ما می‌دهد.

 
شکل 4. خروجی سنسور LM35

برای تبدیل این ولتاژ به دما در درجه سانتیگراد ، می‌خواهیم از ضریب مقیاس افزایش 0.01 ولت در درجه سانتیگراد استفاده‌کنیم . هریک ولت صد درجه سلسیوس را به ما می‌دهد بنابراین ولتاژ محاسبه شده: ولتاژ ضرب شده در 100 را محاسبه می‌کند که دمای اطراف به درجه سانتیگراد است.

 
شکل 5. مقدار محاسبه‌شده دما‌ی LM35

کد C برنامه

				
					#include <mega16a.h>
 
#include <delay.h>
 
// Alphanumeric LCD functions
#include <alcd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Declare your global variables here       
//unsigned  char temp[30];     
char i = 0;
char lm35[10];
float lm35_value = 0.00;
float lm35_av  = 0;
// Voltage Reference: AVCC pin
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
 
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
 
   // select the corresponding channel 0~7
  // ANDing with ’7' will always keep the value
  // of �ch’ between 0 and 7
  adc_input &= 0b00000111;  // AND operation with 7
  ADMUX = (ADMUX & 0xF8)|adc_input; // clears the bottom 3 bits before ORing
  
  // start single convertion
  // write ’1' to ADSC
  ADCSRA |= (1<<ADSC);
  
  // wait for conversion to complete
  // ADSC becomes ’0' again
  // till then, run loop continuously
  while(ADCSRA & (1<<ADSC));
  
  return (ADCW);
}
 
void main(void)
{
 
// Declare your local variables here
 
// Input/Output Ports initialization
// Port A 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) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
| (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);
 
// ADC initialization
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: ADC Stopped
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
// 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
// D4 - PORTA Bit 4
// D5 - PORTA Bit 5
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7
// Characters/line: 16
lcd_init(16);
// Global enable interrupts
#asm("sei")
 lcd_clear();
 lcd_putsf("   HI Welcome");   
 
while (1)
      {  
 
               for (i = 0 ; i<100;i++)                    //we want to sampelling 100 times
               {    
               lm35_value = read_adc(1);   
               lm35_av +=  lm35_value; 
               delay_ms(20);  
               }   
               lm35_av =lm35_av/100;                //average of 100 sample 
               lm35_value=lm35_value / 2.083;   //now we change to cantigerad
               ftoa(lm35_value,0,lm35);    
                lcd_gotoxy( 0 ,1); 
                lcd_putsf("LM35:"); 
                lcd_gotoxy(9 ,1);             
                lcd_puts(lm35);      
                lcd_gotoxy(12,1); 
                lcd_putsf("C");   
                delay_ms(5000); 
              
          }
 
 
}
				
			

خروجی برنامه

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

پروژه راه اندازی سنسور دما LM35 با استفاده از مجموعه آموزشی AVR WIZARD به زبان C

نوشته های مشابه

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

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