1. 회로
- PORTF4 : 불꽃 감지 센서
- PORTB.5 : 모터
2. 프로그램 설계
- 불꽃이 감지되면 비상상황이라 생각하여 모터를 활용하여 집 문을 열고 해당 상태로 유지합니다.
- UART를 통해 <EOFF>패킷을 입력 받으면 해당 상태가 끝납니다.
- 이때 해당 센서는 UART 패킷으로 센서를 OFF하여 나머지 센서가 동작 안되게 하더라도 불꽃 감지 센서는 동작이 되어야 합니다.
[불꽃 감지 센서 필요 기능]
불꽃 감지 | 조도 센서와 같이 읽어온 값을 처리한 후 처리한 데이터의 단계를 통해 일정 단계 이하이면 모터 동작하게 합니다 |
모터 동작 (문 열림) | 불꽃 감지를 통하여 값을 읽어온 후 읽어온 값이 일정 이상일때 모터 동작하여 문을 열게합니다. 이후 감지가 안되더라도 문은 닫히지 않습니다. 또한 Emergency NOW라는 문구 LCD에 출력 |
모터 동작 (문 닫힘) | 비상 상황으로 인해 열린 문은 사용자가 직접 uart로<EOFF> 패킷을 전달하여 끄지 않는 한 닫히지 않습니다 |
3. 동작 방식
3.1 불꽃 감지 센서 동작 방식
- 불꽃 감지 센서의 경우 디지털과 아날로그 값을 둘다 가져올 수 있도록 핀이 있습니다.
- 본 센서 테스트 중 디지털을 통한 센서 값을 받아오지 못해 아날로그로 가져왔습니다.
- 아날로그로 가져온 값은 ADC로 가져오고 단일입력을 사용할 것이기에 조도센서와 동작 방식이 같았습니다.
3.2 모터 동작 방식
모터의 경우 16bit의 타이머1을 사용했으며 타이머1의 고속PWM을 사용합니다.
4. 프로그램
[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
|
#include "header.h"
#include "lcd.h"
#include "adc.h"
#include <stdio.h>
int ky(){
int adcRaw=0;
float adcVoltage = 0;
float light_Step;
char message[50];
char message2[50];
int dummy = 0;
dummy = Read_ADC_data(4);
adcRaw = Read_ADC_data(4);
adcVoltage = ((((float)(adcRaw + 1) * 5) / 1024));
light_Step = light_parsing(adcVoltage);
sprintf(message, "FireData : %4d " ,adcRaw);
sprintf(message2, " %04d V, %02d ", (int)adcVoltage * 1000, (int)(light_Step * 10+4)/10);
disp_some(message, message2, 0);
return light_Step;
}
|
[timer.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
|
#include "header.h"
#include "timer.h"
void init_motor_Timer1(void)
{
// 고속 PWM , TOP = ICR1;, 64분주
TCCR1A |= (1<<COM1A1) | (0<<COM1A0) | (1<<WGM11);
TCCR1B |= (1<<WGM13) | (1<<WGM12) | (1<<CS11) | (1<<CS10);
ICR1=4999; //TOP
OCR1A=375; //0도
}
void emergency_motor_degree(){
OCR1A=500; //90도
}
void end_emergency(){
OCR1A=250; //-90도
}
void init_Timer(void)
{
init_motor_Timer1();
}
|
5. 결과
'C (Atmega128)' 카테고리의 다른 글
6. UART 통신 (HC - 06) (0) | 2022.02.27 |
---|---|
4. 조도 센서 (KY-018) (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 |