커피 로스팅 머신의 PID 제어기 파이썬 코딩

커피 로스팅 머신의 PID 제어기 파이썬 코딩

지난 포스팅에서 커피 로스팅 머신에 들어있는 PID 제어기 원리를 알아봤습니다. 내친김에 좀 더 확실하게 이해할 수 있도록 예제 문제를 만들어서 파이썬 코드로 확인해보겠습니다. 이번 포스팅의 예제 문제와 파이썬 코딩을 통해 PID 제어기가 어떻게 작동하는지 확인해 보시기 바랍니다.

 

 


글의 순서

커피 로스팅 머신의 온도 제어 문제
PID 상수의 의미와 역할
커피 로스팅 머신의 PID 제어기 파이썬 코딩


커피 로스팅 머신의 온도 제어 문제

목표 온도를 200도로 설정한 커피 로스팅 머신을 가정해보겠습니다. 현재 온도는 180도입니다. 이 상황에서 PID 제어기를 사용하여 온도를 목표값인 200도에 도달시키는 과정을 시뮬레이션해보겠습니다.

PID 제어기는 비례상수, 적분상수, 미분상수를 필요로 합니다. 이들 PID 상수는 시스템의 제어 성능을 최적화하는 데 중요한 역할을 합니다. 비례 상수 (Kp)는 현재 오차에, 적분 상수 (Ki)는 누적된 오차에, 미분 상수 (Kd)는 오차의 변화 속도에 각각 반응합니다. 각 상수를 결정하는 방법은 시스템의 특성과 제어 목표에 따라 다를 수 있으며, 실험적인 방법이나 분석적인 방법을 통해 적절한 값을 찾아냅니다.

이 포스팅에서는 이런 과정을 거쳐 각각의 PID 상수가 아래와 같이 결정되었다고 가정하겠습니다. 다만, 각 PID 상수의 의미에 대해서는 조금 더 정리해보겠습니다.

 

 


PID 상수의 의미와 역할

PID 제어기의 비례 상수 (Kp), 적분 상수 (Ki), 미분 상수 (Kd)는 시스템의 제어 성능을 결정하는 중요한 매개변수입니다. 각 상수는 다음과 같은 역할을 합니다:

(1) 비례상수(Kp)

▶ 역할 : 현재 오차의 크기에 비례하여 제어 출력을 조정합니다.
▶ 의미 : 오차가 클수록 제어 출력도 크게 설정하여 시스템이 빠르게 목표값에 도달하도록 합니다. 다만 Kp 값이 너무 크면 시스템이 과도하게 반응하여 진동할 수 있습니다.
▶ 커피 로스팅 머신에서의 역할 : Kp가 높을수록 목표 온도에 빠르게 도달하지만, 지나치게 높으면 시스템이 불안정해질 수 있습니다.

(2) 적분 상수 (Ki)

▶ 역할 : 오차의 누적값에 비례하여 제어 출력을 조정합니다.
▶ 의미 : 시간이 지남에 따라 누적된 오차를 보상하여, 시스템이 목표값에 정확하게 도달하도록 합니다. Ki 값이 너무 크면 시스템이 느리게 반응하고, 적분 오버슈트(overshoot) 현상이 발생할 수 있습니다.
▶ 커피 로스팅 머신에서의 역할 : Ki는 목표 온도에 도달한 후, 남아있는 오차를 줄이는 데 도움을 줍니다.

(3) 미분 상수 (Kd)

▶ 역할 : 오차의 변화 속도에 비례하여 제어 출력을 조정합니다.
▶ 의미 : 오차가 빠르게 변할 때 이를 감지하여 제어 출력을 조정함으로써 시스템의 안정성을 높입니다. Kd 값이 너무 크면 시스템이 과도하게 반응할 수 있습니다.
▶ 커피 로스팅 머신에서의 역할 : Kd는 시스템이 목표 온도에 도달하는 과정에서 따라오는 급격한 변화를 줄여줍니다.


커피 로스팅 머신의 PID 제어기 파이썬 코딩

다시 PID 제어기 개념을 이해하기 위한 예제 문제로 돌아와 보겠습니다. 목표 온도는 200도인데, 현재 온도는 180도인 상황입니다. 실습코드에서 목표 온도를 setpoint, 현재 온도를 current_temp로 설정했습니다. 또한 PID 상수, Kp, Ki, Kd를 각각 0.6 0.2, 0.1로 설정했습니다. 현재 온도 180도에서 몇 초가 흘러야 200도가 될 것인지가 바로 PID 제어기의 성능입니다. 실습코드는 매 1초 단위로 온도가 어떻게 변화하는지 총 50초간 시뮬레이션 해보는 코드입니다. PID 상수, Kp, Ki, Kd를 변화시켜보면 각 상수가 제어기에 어떤 영향을 미치는지 확인할 수 있습니다.

PID 제어 결과 : 온도제어
실습코드의 주요 루틴은 아래와 같습니다.

(1) PID 클래스,

▶__init__: PID 제어기의 초기 설정 부분입니다. 비례 상수(Kp), 적분 상수(Ki), 미분 상수(Kd)와 목표 온도(setpoint)를 초기화합니다.
▶update: 현재 온도와 시간 간격을 받아서 PID 제어기의 출력을 계산합니다. 오차(error), 적분 값(integral), 미분 값(derivative)을 이용하여 출력(output)을 계산합니다. output을 계산하는 부분을 주목하셔야 합니다.

(2) 시뮬레이션 문제 정의 : 목표온도, 현재온도, PID 상수 및 시뮬레이션 설정

▶목표온도, 현재온도, : setpoint, current_temp
▶PID 상수 : Kp, Ki, Kd
▶총 시뮬레이션 시간 및 시간 간격 : time_steps, dt

(3) 시뮬레이션 실행

▶반복문을 이용하여 매 시간 간격(dt)마다 PID 제어기의 출력을 계산하고, 이를 이용하여 현재 온도를 업데이트합니다.

여기서, 반복문 for _ in range(time_steps):는 50번 반복하라는 루프를 의미합니다. 루프 변수가 필요 없을 경우, _를 사용합니다. 통상적으로 for i in range(10):에서처럼 i가 사용되는 것과 대비되는 부분입니다.


마치며 …

이번 포스팅에서는 커피 로스팅 머신에 들어있는 PID 제어기의 작동 원리를 알아봤습니다. 로스팅 머신이 온도를 어떻게 맞춰가는지 간단한 예제 문제로 확인해보았습니다.

PID 제어기의 핵심은 PID 상수입니다. PID 상수는 시스템의 제어 성능을 최적화하는 데 중요한 역할을 합니다. 비례 상수 (Kp)는 현재 오차에, 적분 상수 (Ki)는 누적된 오차에, 미분 상수 (Kd)는 오차의 변화 속도에 각각 반응합니다. 각 상수를 결정하는 방법은 시스템의 특성과 제어 목표에 따라 다를 수 있으며, 일반적으로 실험적인 방법이나 분석적인 방법을 통해 적당한 값을 찾아냅니다. PID 상수를 변화시켜가며 온도가 어떻게 변하고, 몇 초만에 목표 온도에 도달하는지 실험해 보시기 바랍니다.

 

 

함께 참고하면 좋은 글
최상의 커피 로스팅 머신과 PID 제어 이해
파이썬 프로그래밍 시작 (12) 클래스, 오브젝트(object, 객체)
파이썬 프로그래밍 시작 (13) 상속(inheritance)
python for 문 연습
커피 로스팅 과정
그래프로 보는 커피 로스팅, 시티, 풀시티란?
시티와 풀씨티. 커피 로스팅 정도에 따른 향기와 맛
로스팅! 커피 원두의 탄생


참고자료

Brian Douglas, PID Control – A brief introduction

Leave a Comment