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

0

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

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

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

  1. برد اصلی AVR WIZARD
  2. برد جانبی SENSOR SHIELD
  3. LCD2X16
  4. تغذیه 9 ولت

سنسور HS1101

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

سنسور HS1101
سنسور HS1101

مدار سنسور HS1101

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

مدار راه انداز HS1101
مدار راه انداز HS1101

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

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

محل قرار گیری سنسور HS1101
محل قرار گیری سنسور HS1101

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

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

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

HS1101 خروجی سنسور

کد برنامه به زبان  c :

[cpp]

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

}
}

[/cpp]

خروجی برنامه

راه اندازی سنسور hs1101 با avr

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

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

redronic.com