دوستان من با یه سنسور رطوبت سنج یه مدار درست کردم.
با دو تا ترانزیستور تقویتش کردم و وقتی رطوبت زیاد میشه ، نور یه ال ای دی افزایش پیدا می کنه.
حالا تونستم یه کاریش کنم که به ورودی صفر ADC مگا هشت وصلش کنم و میکرو با افزایش رطوبت 5 تا ال ای ادی رو روشن می کنه(وقتی رطوبت کمه یه ال ای دی و وقتی زیاد میشه ، دو و سه و چهار و در نهایت 5 تا ال ای دی روشن میشه)
حالا یه کاریش کردم که 10 تا ال ای دی را روشن کنه . ولی ال ای دی ها هی روشن خاموش می شه. و اصلا نظمی نداره(مشکل نویزه؟)
اینم کد برنامه میکرو:
کد php:
#include <mega8.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x60
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
float volt ;
// Input/Output Ports initialization
// Port D initialization
// Func7=In Func6=In Func5=In Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=T State5=T State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0;
DDRD=0xFF;
DDRB=(1<<DDB7)|(1<<DDB6);
PORTB=0;
// ADC initialization
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AVCC pin
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
while (1)
{
volt=read_adc(0);
volt=volt*5/256;
if(volt<=0.1) { PORTD=0;PORTB.6=0;PORTB.7=0;}
else if(volt<=0.5 && volt >0.1) { PORTD=0b1;PORTB.6=0;PORTB.7=0;}
else if(volt<=1 && volt >0.5) { PORTD=0b11;PORTB.6=0;PORTB.7=0;}
else if(volt<=1.5 && volt >1) { PORTD=0b111;PORTB.6=0;PORTB.7=0;}
else if(volt<=2 && volt >1.5) { PORTD=0b1111;PORTB.6=0;PORTB.7=0;}
else if(volt<=2.5 && volt >2) { PORTD=0b11111;PORTB.6=0;PORTB.7=0;}
else if(volt<=3 && volt >2.5) { PORTD=0b11111;PORTB.6=1;PORTB.7=0;}
else if(volt<=3.5 && volt >3) { PORTD=0b11111;PORTB.6=1;PORTB.7=1;}
else if(volt<=4 && volt >3.5) { PORTD=0b111111;PORTB.6=1;PORTB.7=1;}
else if(volt<=4.5 && volt >4) { PORTD=0b1111111;PORTB.6=1;PORTB.7=1;}
else if(volt >4.5) { PORTD=0b11111111;PORTB.6=1;PORTB.7=1;}
delay_ms(10);
}
}
چرا ال ای دی ها هی روشن خاموش میشه؟؟؟؟؟
چرا برای 5 تا ال ای دی مشکلی نبود؟
توضیح : در مدار با 5 تا LED ، کاری کرده بودم که با افزایش هر یک ولت در ADC ، یه LED روشن بشه و در این پروژه با 10 تا LED به ازای افزایش هر 0.5 ولت یه LED روشن میشه .
ولی پروژه دومی اصلا خوب جواب نمی ده و LED ها هی روشن خاموش میشه.
اینم شکل مدار:
(جالبه که توی پروتئوس با 10 تا led راحت کار می کنه)