freeParksey
밥세공기
freeParksey
전체 방문자
오늘
어제
  • 분류 전체보기 (150)
    • JAVA (32)
      • 자바스터디 (21)
      • Java in action (6)
      • OOP (1)
      • test (2)
    • 알고리즘 문제 (51)
      • 백준 (49)
    • C (Atmega128) (7)
    • 인공지능 (11)
    • 운영체제 (8)
    • 디자인패턴 (5)
    • 잡다한것 (2)
    • 사용기 (3)
      • 도커 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 상속
  • Python
  • 프리코스
  • 분류
  • dto 변환 위치
  • 자바스터디
  • 그리드
  • Thread 동작
  • 운영체제
  • Thread #JVM #자바스터디 #
  • 자바
  • 백트래킹
  • 딥러닝
  • Collection
  • 후기
  • 동적계획법
  • 3주차
  • 백트랙킹
  • Iterator
  • 우테코
  • dto 변환
  • 우아한테크코스
  • java
  • 알고리즘
  • 동작 파라미터화
  • 재귀기초
  • generic
  • 백준
  • 집합과 맵
  • 스트림

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
freeParksey

밥세공기

5. 불꽃 감지 센서 및 모터 개발
C (Atmega128)

5. 불꽃 감지 센서 및 모터 개발

2022. 2. 27. 01:18

1. 회로

  • PORTF4    : 불꽃 감지 센서
  • PORTB.5    : 모터

 

2. 프로그램 설계

  • 불꽃이 감지되면 비상상황이라 생각하여 모터를 활용하여 집 문을 열고 해당 상태로 유지합니다.
  • UART를 통해 <EOFF>패킷을 입력 받으면 해당 상태가 끝납니다.
  • 이때 해당 센서는 UART 패킷으로 센서를 OFF하여 나머지 센서가 동작 안되게 하더라도 불꽃 감지 센서는 동작이 되어야 합니다.

[불꽃 감지 센서 필요 기능]

불꽃 감지 조도 센서와 같이 읽어온 값을 처리한 후 처리한 데이터의 단계를 통해 일정 단계 이하이면 모터 동작하게 합니다
모터 동작 (문 열림) 불꽃 감지를 통하여 값을 읽어온 후 읽어온 값이 일정 이상일때 모터 동작하여 문을 열게합니다. 이후 감지가 안되더라도 문은 닫히지 않습니다. 또한 Emergency NOW라는 문구 LCD에 출력
모터 동작 (문 닫힘) 비상 상황으로 인해 열린 문은 사용자가 직접 uart로<EOFF> 패킷을 전달하여 끄지 않는 한 닫히지 않습니다

 

3. 동작 방식

 

3.1 불꽃 감지 센서 동작 방식

  • 불꽃 감지 센서의 경우 디지털과 아날로그 값을 둘다 가져올 수 있도록 핀이 있습니다.
  • 본 센서 테스트 중 디지털을 통한 센서 값을 받아오지 못해 아날로그로 가져왔습니다.
  • 아날로그로 가져온 값은 ADC로 가져오고 단일입력을 사용할 것이기에 조도센서와 동작 방식이 같았습니다.

 

3.2 모터 동작 방식

모터의 경우 16bit의 타이머1을 사용했으며 타이머1의 고속PWM을 사용합니다.

( 고속&amp;nbsp; PWM&amp;nbsp; 동작 방식 )

 

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. 결과

( OFF )
( ON )

 

'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
    'C (Atmega128)' 카테고리의 다른 글
    • 6. UART 통신 (HC - 06)
    • 4. 조도 센서 (KY-018)
    • 3. Light Sensor (LM35)
    • 2. FND & Timer
    freeParksey
    freeParksey
    Github: https://github.com/parksey

    티스토리툴바