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

0

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

هدف از این آموزش راه‌اندازی سنسور HS1101 و خواندن تغییرات فرکانس توسط ورودی میکروکنترلر به زبان  C  توسط مجموعه آموزشی AVR WIZARD می‌باشد.

(شما می‌توانید سنسور‌های مشابه دیجیتال که خروجی آنها تغییرات فرکانس می‌باشد را به این روش راه‌اندازی نمایید. )

لوازم مورد نیاز:

سنسور HS1101

سسنسور رطوبت خازنی HS1101 بر اساس تغییر ظرفیت خازن عمل می‌کند. یعنی با تغییر رطوبت محیط اطراف سنسور، ظرفیت خازنی سنسور تغییر کرده و از این طریق می‌توان مقدار رطوبت را اندازه‌گیری نمود.

سنسور‌های رطوبت کاربردهای وسیعی در صنعت داشته و دارند، برای مثال در سیستم های کنترل تهویه کارخانجات و انبارها  استفاده می‌شوند.

 
شکل 1. سنسور HS1101

مدار سنسور HS1101

برای راه‌اندازی سنسورهای خازنی باید آنها را در یک مدار اسیلاتور قرار داد، بدین‌صورت که با تغییر رطوبت، مقدار خازن سنسور تغییر کرده و فرکانس خروجی نوسان‌ساز تغییر می‌کند.

یکی از بهترین و راحت‌ترین روش‌های ساخت نوسان‌ساز استفاده از آیسی معروف 555 است. تغییر رطوبت باعث تغییر خازن، و تغییر مقدار خازن باعث تغییر فرکانس خروجی تولید شده توسط 555 خواهد شد.

یک نمونه مدار پیشنهادی توسط سازنده به صورت زیر می‌باشد:

 
شکل 2. مدار راه‌انداز HS1101

نحوه اتصال  سنسور HS1101 به برد SENSOR_SHIELD مجموعه اموزشی AVR WIZARD

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

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

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

برای خواندن فرکانس خروجی از سنسور HS1101 در اینجا از تایمر 0 و وقفه خارجی میکرو استفاده کرده‌ایم.

بدین‌صورت که با محاسبه بازه زمانی یک و صفر بودن پالس ورودی با استفاده از تایمر 0 ، میزان فرکانس را بدست آورده و بر‌روی LCD نمایش می‌دهیم:

 

شکل 4.

کد برنامه به زبان  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
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) | (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);

// 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) | (0<<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);

}
} 

خروجی برنامه:

Choose your Reaction!
دیدگاه خود را بنویسید

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

DelfinSync

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

آخرین پست ها

redronic.com