1. 회로

- PORTF1 : 조도 센서 InOut VCC GND
- PORTD.7 : LED
2. 프로그램 설계
- 기본 아무 동작을 하지 않고 타이머를 동작 시키지 않았을 때 LCD에 나와야 하는 값입니다.
- 다른 동작을 하다 다시 처음 상태로 돌아오게 되면 기본 동작인 조도 값을 계속 읽게 됩니다.
- 주위 밝기가 어두우면 LED를 ON하고 밝으면 OFF를 하게 됩니다.
[조도 센서 필요 기능]
LCD 출력 | 기본적으로 센서 값을 계속 받아들여 LCD에 출력해야 하는 값입니다. 타이머 동작 전 기본 화면입니다. |
LED ON/OFF | 조도 센서를 통해 값을 지속적으로 받아 들이며 어둡게 되면 LED를 ON하고 밝으면 LED를 OFF한 상태롤 유지합니다 |
일정 시간마자 센서값 읽기 | Timer를 통해 0.2초마다 센서값 읽습니다. |
3. 동작 방식
- 조도 센서 또한 아날로그로 입력을 받으므로 ADC를 사용합니다.
- 온도 센서와는 다르게 단일 신호로 보내기 때문에 MUX를 다르게 처리해야 합니다.
4. 프로그램
[adc.c]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#include "lcd.h"
#include "header.h"
#include "adc.h"
void Init_adc(void)
{
ADCSRA = 0x00;
ADMUX = ADC_AVCC_TYPE | (0 << ADLAR) | (0 << MUX0);
ADCSRA = (1<<ADEN) | (1<<ADFR) | (3<<ADPS0);
}
unsigned int Read_ADC_data(unsigned char adc_input)
{
unsigned int adc_Data = 0;
ADMUX &= ~(0x1F);
ADMUX |= (adc_input & 0x07);
ADCSRA |= (1<<ADSC);
while(!(ADCSRA & (1<<ADIF)));
adc_Data = ADCL;
adc_Data |= ADCH << 8;
return adc_Data;
}
float light_parsing(float adcVoltage){
return -0.0354 * pow(adcVoltage,6)
+0.5534 * pow(adcVoltage,5)
-3.3318 * pow(adcVoltage,4)
+9.7896 * pow(adcVoltage,3)
-14.712 * pow(adcVoltage,2)
+12 * adcVoltage
- 0.2201;
}
|
[adc_activate.c]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#include "header.h"
#include "lcd.h"
#include "adc.h"
#include <stdio.h>
void ls(){
/*
* 조도센서
*/
int adcRaw=0;
int dummy = 0;
float adcVoltage = 0;
float light_Step;
char message[50];
char message2[50];
dummy = Read_ADC_data(1); //ADC 2개 사용 오류로 인해 더미로 데이터 가져가봤습니다.
adcRaw = Read_ADC_data(1);
adcVoltage = ((((float)(adcRaw + 1) * 5) / 1024));
light_Step = light_parsing(adcVoltage);
if(adcVoltage < 3)
{
PORTD |= 0x80; // 1000 0000
}
else
{
PORTD &= 0x7f; // 0111
}
sprintf(message, "RawData : %4d " ,adcRaw);
sprintf(message2, " %04d V, %02d ", (int)adcVoltage * 1000, (int)(light_Step * 10+4)/10);
disp_some(message, message2, 0);
}
|
5. 결과


'C (Atmega128)' 카테고리의 다른 글
6. UART 통신 (HC - 06) (0) | 2022.02.27 |
---|---|
5. 불꽃 감지 센서 및 모터 개발 (0) | 2022.02.27 |
3. Light Sensor (LM35) (0) | 2022.02.27 |
2. FND & Timer (0) | 2022.02.26 |
1. LCD (0) | 2022.02.26 |