پروژه راه اندازی سنسور رطوبت HS1101

پروژه راه اندازی سنسور رطوبت HS1101

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

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

برای مشاهده ویدئو آموزشی این پروژه در آپارات اینجا کلیک کنید.

برد آموزشی 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 و سنسور رطوبت خاک  69-YL در این برد وجود دارد.

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

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

سنسور رطوبت خازنی HS1101LF

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

سنسور رطوبت HS1101 یک سنسور دیجیتال بوده که تغییرات رطوبت را به صورت فرکانس نمایش می دهد. مدار راه انداز این سنسور کامل و دقیق بر روی این برد پیاده شده است. خروجی دیجیتال این سنسور با برچسب HS11 نمایش داده شده است. در تصویر ۶ محل قرار گیری سنسور HS1101 روی برد  SENSOR SHIELD را مشاهده می کنید:

تصویر۳: محل قرار گیری سنسور
تصویر۴ : نتایج روی برد AVR WIZZARD

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

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

کدهای پروژه : 

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

}
}

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

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

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

2 × 1 =

0

بالا