پروژه راه اندازی سنسور دما SMT172

پروژه راه اندازی سنسور دما SMT172

در این مقاله جهت راه اندازی سنسور دما SMT172 توسط میکروکنترلر AVR از برد آموزشی AVR WIZZARD مدل KC-Vela (برای مشاهده مشخصات اینجا کلیک کنید) و شیلد آموزشی سنسورها مدل  KC-Norma (برای مشاهده مشخصات اینجا کلیک کنید) استفاده شده است.

این شیلد آموزشی چندین سنسور مختلف را پشتیبانی می کند که در اینجا به معرفی مختصر این شیلد و در ادامه به پروژه راه اندازی سنسور دما SMT172 و کدهای مربوط به آن می پردازیم.

برد آموزشی AVR WIZZARDمدل KC-Vela

برد آموزشی AVR WIZZARD مناسب برای فراگیری تمامی پریفرالهای میکروکنترلر AVR سری Atmega16-32 طراحی شده است. در این برد اموزشی هر ان چه را که برای آموزش این میکروکنترلر به ان نیاز دارید مانند  SPI   , I2C , UART, PWM , ADC و کار با ال سی دی کاراکتری را خواهید اموخت. از دیگر امکانات این برد می توان به وجود ۳ عدد پوش باتن (کلید) پول اپ ، ۲ عدد LED ، یک عدد بازر ،تغذیه سوئیچینگ LM2576 و سوکت مربوط به LCD کاراکتری اشاره کرد.

شکل۱ : برد شیلد سنسورهای مختلف SENSOR SHIELD مدل KC-Norma

برد شیلد سنسورهای مختلف SENSOR SHIELD مدل  KC-Norma

برد شیلد سنسورهای مختلف SENSOR SHIELD متناسب برد اموزشی AVR WIZZARD مناسب برای فراگیری  پریفرال های TIMER  , ADC  , UART و کار با پورت های IO انواع میکروکنترلرهای مختلف می باشد. این برد توسعه دارای سنسور های دمای LM35 و  SMT172  سنسور رطوبتHS1101  و دو عدد رله برای کنترل وسایل الکتریکی مختلف می باشد . همچنین قابلیت اتصال ماژول های  PT100 و  DHT11/22 و سنسور رطوبت خاک  ۶۹-YL در این برد وجود دارد.

از ویژگی مهم این برد قابلیت اتصال ماژول وای فای  ESP8266 _ ۰۱ بوده تا با استفاده از ان به صورت بی سیم با برد توسعه ارتباط بر قرار کرده و با استفاده از گوشی و یا تبلت خود رله ها را کنترل و اطلاعات دریافتی از سنسور ها را مانیتور کنیم.همچنین از ویژگی های دیگر ان قابلیت اتصال به اردوینو و دیگر برد های میکروکنترلی می باشد.

شکل۲: برد شیلد سنسورهای مختلف SENSOR SHIELD مدل KC-Norma

سنسور دیجیتال دما SMT172

سنسور دیجیتال دما SMT172 یک سنسور اندازه گیری دمای بسیار کم مصرف و دقیق است که در آن کارایی بالا و استفاده آسان با هم تلفیق شده است. به کار گیری جدید ترین فن آوری اندازه گیری دما به وسیله تراشه های سیلیکنی و به کار گیری تکنیک  های پیچیده طراحی و همچنین بهره گیری از فرایند کالیبراسون دقیق، باعث شده است این حسگر دقتی در حد  C°۰٫۲۵ در C°۱۰- تاC °۱۰۰  وC°۰٫۱ در C°۲۰- تاC °۸۰ داشته باشد. میزان رزولوشن این سنسور کمتر ۰٫۰۰۱ ͦ C است. به این مقدار در فرایند هایی که در آن ها اندازه گیری تغییرات دما (نه مقدار مطلق آن) اهمت دارد باید توجه کرد. دامنه ولتاژ تغذیه SMT172 از ۲٫۷V تا ۵٫۵V  و جریان مصرفی آن به طور معمول تنها ۶۰ uA است.

خروجی این سنسور به صورت PWM است و به راحتی بدون نیاز به مبدل آنالوگ به دیجیتال به صورت مستقیم به کمک میکرو کنترلر های معمول در بازار میتوان آن را قرائت کرد. کارایی بالا و سادگی استفاده از این سنسور در طراحی  زمان مورد نیاز برای تبدیل ایده به محصول را کاهش خواهد داد. (برای مشاهده مشخصات این سنسور اینجا کلیک کنید)

شکل ۳: محل قرار گیری سنسور SMT172

برای مشاهده کدهای مربوط به این پروژه اینجا کلیک کنید

بزودی ویدئوی آموزشی مربوط به این پروژه در سایت قرار می گیرد

کدهای پروژه :

/*******************************************************
This program was created by the
CodeWizardAVR V3.12 Advanced
Automatic Program Generator
© Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 05/05/2019
Author :
Company :
Comments:
Chip type : ATmega16A
Program type : Application
AVR Core Clock frequency: 16.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*******************************************************/
#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
char apply_rising=1;
unsigned long int t0_ovf=0;
unsigned long int high_time=0;
unsigned long int low_time=0;
unsigned char freq[30];
// External Interrupt 1 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
TCCR0=0;
if(apply_rising==1)
{
low_time=t0_ovf*256+TCNT0;
// INT1 Mode: Falling Edge
MCUCR=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (0<<ISC00);
apply_rising=0;
}
else
{
high_time=t0_ovf*256+TCNT0;
// INT1 Mode: Rising Edge
MCUCR=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (1<<ISC00);
apply_rising=1;
}
TCNT0=0x00;
t0_ovf=0;
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (1<<CS01) | (1<<CS00);
}
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
t0_ovf++;
}
void main(void)
{
float FREQUENCY,cycle;
// 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
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1)
| (۰<<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)
| (۰<<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)
| (۰<<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) |
(۰<<PORTD1) | (0<<PORTD0);
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Rising Edge
// INT1: Off
// INT2: Off
GICR|=(0<<INT1) | (1<<INT0) | (0<<INT2);
MCUCR=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (1<<ISC00);
MCUCSR=(0<<ISC2);
GIFR=(0<<INTF1) | (1<<INTF0) | (0<<INTF2);
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 250.000 kHz
// Mode: Normal top=0xFF
// OC0 output: Disconnected
// Timer Period: 1.024 ms
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (1<<CS01) | (1<<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) |
(۰<<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
// 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 Welcom”);
delay_ms(2000);
while (1)
{
lcd_clear();
lcd_putsf(“www.redronic.com”);
#asm(“cli”);
cycle=(float)(high_time+low_time)*0.000004; //.000004 TIMER COUNT PRIOD
#asm(“sei”);
FREQUENCY=1/cycle; // frequency calculation
ftoa(FREQUENCY,0,freq);
lcd_gotoxy( 0 ,1);
lcd_putsf(“HS1101:”);
lcd_gotoxy(9 ,1);
lcd_puts(freq);
lcd_gotoxy(14,1);
lcd_putsf(“Hz”);
delay_ms(5000);
//lcd_clear();
// Place your code here

}
}

اشتراک گذاری:

یک دیدگاه بگذارید

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

8 − دو =

0

بالا