본문 바로가기
임베디드

[오제이 튜브의 임베디드 강의] 38강. 고추건조기 완성!!!!

by 덤더리덤떰 2025. 2. 20.

1. 더블클릭 오류 해결

  • 1번 int 일어나면 gap을 두도록(0.2초정도)
    => 0.2초 내에 신호가 들어오면 그 신호는 무시하도록
  • m_button_before_time = HAL_GetTick(); 추가
    ( 이때 200으로 수정 )



2. on 스위치 키면 led 켜지도록

  • PB12_START-SW-PIN를 gpio input으로 
  • buttonController.c에서 getSwState 함수 생성(이때, 헤더파일엔 controlType.h  include)
  • 이 함수는 TIM3에서 온도 정보를 읽어올 때 호출되도록 (사진3처럼)



3. fix 스위치를 누르면 화면이 깜빡이도록

  • 사진1~4처럼 소스코드 작성 후 defines.h#define TOGGLE_TIME 10000 지정

 


  • 계속 깜빡이기때문에 4번정도만 깜빡이도록 사진1처럼 작성 후 헤더파일에도 함수 원형 추가 
  • 사진2처럼 주석처리 후 startToggle();로 대체 
  • 이때, oledController.c에서 static uint8_t m_toggle_count = 0; 선언 
  • 실행하면 m_toggle_count의 overflow 발생하므로 사진3처럼 수정 

 


  • m_toggle_count가 1 감소한 상태에서 바로 다시 스위치가 더블클릭이 되면 startToggle이 호출되어서 계속해서 껌뻑이는 버그가 발생 가능하므로 사진1처럼 수정
  • printDefault함수가 처음 킬 때만 동작하도록 하기 위해 사진2처럼 함수 추가 
  • 사진3처럼 함수 추가 후 heaterController.h include시키기 


 


4. 현재 동작상태를 oled에 표현하는 코드 

  • oledController.h"controlType.h" include
  • 사진1처럼 함수 추가 후 해당 파일에서 내부적으로 쓰기 위해 void printTemperNoUpdate(int temper); 선언 
  • 일단은 잘 작동하는지 확인하기 위해 사진3처럼 소스코드 작성 


  • 추가로, oled 초기화면에 00.0도가 아닌 우리가 디폴트로 설정한 온도가 뜨도록 사진1처럼 작성 
  • 히터를 끄고 킬 때 led도 껐다켜지고 oled에도 표시되도록 설정
    (이때, #include "ledController.h"해주기)



cf. 온도 가져오는데 시간이 너무 오래걸려서 아래사진과 같이 소스코드 수정



5. 스위치 on/off 제어

  • 스위치를 켰을 때만 온도가 낮을 때 히터가 돌아가도록 설정  
  • 만약 히터가 돌아가고 있다가 내가 그냥 스위치를 끄는 경우 히터가 동작 하지 않도록 


6. 히터 제어 
ex) 만약 30도로 설정했는데 보니까 40도까지 올라간 상황을 방지하기위해 미리 끄도록 설정

    • 히터가 켜져있는 상태일 때, 현재 온도가 목표 온도와의 차이가 5도 이하일 때 히터를 끄도록
    • 그 이외엔 히터를 키도록


7. 최종 결과

 

  • 처음 디폴트 설정 온도인 25도가 화면에 출력이 되고 히터상자 내부에 온도센서를 넣어놔서 실시간 내부 온도를 측정하여 fnd 모듈에 표시한다
  • start switch를 통해 히터 동작을 on시키고 oled에 온도 초기 설정화면이 뜨면 up/down/fix 스위치를 통해 원하는 히터 내부 온도를 설정한다
  • 오차범위 ±2~3도 정도로 내가 원하는 온도를 설정하고 fix 스위치를 누르면 현재 내부온도와 목표 온도의 차이를 측정하여 릴레이의 동작을 on/off 시킨다
  • 만약 목표 온도와 현재 내부온도의 차이가 오차범위를 벗어나는 경우 릴레이를 동작시켜 드라이기를 키도록 제어한다
  • 예를 들어, 현재 내부온도가 30도인 상황에서 목표 온도를 35도로 설정할 경우 현재 측정되는 내부온도가 목표 온도와의 차이가 3 이하가 되기 전까지 드라이기를 계속해서 동작시킨다. 이때 oled의 화면에도 현재 동작중임을 알리는 "on"이 표시가 된다
  • 만약 목표 온도와의 오차범위 내에 속하게 되면 릴레이의 switching이 동작하여 드라이기가 꺼지고 히터상자 내부의 온도도 점점 내려가게 되어 내부온도를 측정하는 온도센서의 온도도 내려가는 것을 fnd를 통해 관측할 수 있다.
  • 그러다가 목표 온도와 현재 내부온도와의 차이가 3 이상이 되면, 다시 내부온도를 목표 온도로 조절하기 위해 드라이기의 동작이 on이 되고 다시 목표 온도가 될 때까지 드라이기를 제어한다
  • 계속해서 현 내부온도와 목표 온도의 차이를 측정하고 이를 fnd를 통해 관측하며 히터 상자 내부 온도가 내가 원하는 목표 온도가 유지될 수 있도록 동작된다.