Top 31 아두 이노 Pid 제어 7269 People Liked This Answer

You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 아두 이노 pid 제어 on Google, you do not find the information you need! Here are the best content compiled and compiled by the Toplist.aseanseafoodexpo.com team, along with other related topics such as: 아두 이노 pid 제어 DC 모터 PID 제어 소스, PID 제어 코드, PID 제어 예시, pid제어 실생활, PID 제어 쉽게, 파이썬 PID 제어, PID 제어 원리, PID 제어 활용


아두이노 PID 모터 속도제어_[반지하공작실]
아두이노 PID 모터 속도제어_[반지하공작실]


프로토타이핑 – 12. 아두이노 PID 튜토리얼 + PID제어기(wiki) :: 집밖은 위험해

  • Article author: throwexception.tistory.com
  • Reviews from users: 31935 ⭐ Ratings
  • Top rated: 4.2 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 프로토타이핑 – 12. 아두이노 PID 튜토리얼 + PID제어기(wiki) :: 집밖은 위험해 1.1 비례 제어. 1.2 적분 제어. 1.3 미분 제어. 2. PID 제어 구현. 3. 아두이노 PID 라이브러리. 4. 마치면서. 1. PID란 무엇일까? PID는 비례, 적분, … …
  • Most searched keywords: Whether you are looking for 프로토타이핑 – 12. 아두이노 PID 튜토리얼 + PID제어기(wiki) :: 집밖은 위험해 1.1 비례 제어. 1.2 적분 제어. 1.3 미분 제어. 2. PID 제어 구현. 3. 아두이노 PID 라이브러리. 4. 마치면서. 1. PID란 무엇일까? PID는 비례, 적분, … https://www.teachmemicro.com/arduino-pid-control-tutorial https://ko.m.wikipedia.org/wiki/PID_%EC%A0%9C%EC%96%B4%EA%B8%B0  제어 시스템에서 제어기는 시스템의 출력이 목표 입력값이 되도록 고쳐나가야..집밖은 위험해OTL
  • Table of Contents:

프로토타이핑 – 12 아두이노 PID 튜토리얼 + PID제어기(wiki)

티스토리툴바

프로토타이핑 - 12. 아두이노 PID 튜토리얼 + PID제어기(wiki) :: 집밖은 위험해
프로토타이핑 – 12. 아두이노 PID 튜토리얼 + PID제어기(wiki) :: 집밖은 위험해

Read More

8-2. Arduino Car로 PID 제어

  • Article author: kingpodo.tistory.com
  • Reviews from users: 38311 ⭐ Ratings
  • Top rated: 3.2 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 8-2. Arduino Car로 PID 제어 PID Control을 사용하여 Arduino Car에 Cruise System을 구현하기 전에 PID Control이 무엇인지 알아보겠습니다. PID 제어는 실제 응용분야에서 많이 … …
  • Most searched keywords: Whether you are looking for 8-2. Arduino Car로 PID 제어 PID Control을 사용하여 Arduino Car에 Cruise System을 구현하기 전에 PID Control이 무엇인지 알아보겠습니다. PID 제어는 실제 응용분야에서 많이 … 1. PID 제어 Cruise System구현에 들어가에기 전에 전에 작성한 글에서는 PID 제어를 사용하지 않은 Cruise System을 구현하였고 그것에 문제점에 대하여 이야기했습니다. 아무런 지식이 없는 상태에서 바로 이글..그래, 우린 반드시 성공한다.
  • Table of Contents:
8-2. Arduino Car로 PID 제어
8-2. Arduino Car로 PID 제어

Read More

아두이노 프로젝트12 – PID 제어를 이용한 공 균형 잡기 : 네이버 블로그

  • Article author: m.blog.naver.com
  • Reviews from users: 20691 ⭐ Ratings
  • Top rated: 4.8 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 아두이노 프로젝트12 – PID 제어를 이용한 공 균형 잡기 : 네이버 블로그 PID 제어란 어떠한 기준값과 현재 얻어지는 값에 오차가 있을 때 P(Proportional, 비례), I((Proportional -Integral, 적분), D(Proportional-Derivative, … …
  • Most searched keywords: Whether you are looking for 아두이노 프로젝트12 – PID 제어를 이용한 공 균형 잡기 : 네이버 블로그 PID 제어란 어떠한 기준값과 현재 얻어지는 값에 오차가 있을 때 P(Proportional, 비례), I((Proportional -Integral, 적분), D(Proportional-Derivative, …
  • Table of Contents:

카테고리 이동

과학아 수학아 놀자!!~~

이 블로그 
로봇 이야기
 카테고리 글

카테고리

이 블로그 
로봇 이야기
 카테고리 글

아두이노 프로젝트12 - PID 제어를 이용한 공 균형 잡기 : 네이버 블로그
아두이노 프로젝트12 – PID 제어를 이용한 공 균형 잡기 : 네이버 블로그

Read More

드론 DIY | 아두이노 PID 제어 코드 (코드 첨부)

  • Article author: hyongdoc.tistory.com
  • Reviews from users: 15475 ⭐ Ratings
  • Top rated: 3.8 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 드론 DIY | 아두이노 PID 제어 코드 (코드 첨부) 지난 포스팅에서 PID의 원리가 뭔지, 대체 왜 필요한지에 대해 구구절절 설명했다. 따라서 이번 포스팅에서는 사실 가장 중요한? 아두이노 코드에 … …
  • Most searched keywords: Whether you are looking for 드론 DIY | 아두이노 PID 제어 코드 (코드 첨부) 지난 포스팅에서 PID의 원리가 뭔지, 대체 왜 필요한지에 대해 구구절절 설명했다. 따라서 이번 포스팅에서는 사실 가장 중요한? 아두이노 코드에 … 지난 포스팅에서 PID의 원리가 뭔지, 대체 왜 필요한지에 대해 구구절절 설명했다. 따라서 이번 포스팅에서는 사실 가장 중요한? 아두이노 코드에 대해 쓰려고 한다. 서술하기에 앞서, 아두이노라는 녀석이 어떻게..
  • Table of Contents:

태그

관련글

댓글111

광고

공지사항

최근글

인기글

최근댓글

태그

전체 방문자

티스토리툴바

드론 DIY | 아두이노 PID 제어 코드 (코드 첨부)
드론 DIY | 아두이노 PID 제어 코드 (코드 첨부)

Read More

Arduino uno, PID control, 아두이노 우노 PID 제어 라이브러리 활용

  • Article author: setoo0922.tistory.com
  • Reviews from users: 45406 ⭐ Ratings
  • Top rated: 3.8 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about Arduino uno, PID control, 아두이노 우노 PID 제어 라이브러리 활용 아두이노 라이브러리 폴더에, 알집을 푸시면 됩니다. (libraries 폴더 안에 PID-1.2.0, 압축파일 안의 폴더를 푸시면 됩니다.) PID 제어 코드 분석. …
  • Most searched keywords: Whether you are looking for Arduino uno, PID control, 아두이노 우노 PID 제어 라이브러리 활용 아두이노 라이브러리 폴더에, 알집을 푸시면 됩니다. (libraries 폴더 안에 PID-1.2.0, 압축파일 안의 폴더를 푸시면 됩니다.) PID 제어 코드 분석. – PID (proportional integral derivative control) control – PID 제어 라이브러리 다운 – PID 제어 코드 분석  PID (proportional integral derivative control) control 2020/09/20 – [정리, 공부해요/전기,..
  • Table of Contents:

우선 Input값을 쉽게 바꿔주기 위해 가변저항 연결

화질이 별로지만 위의 궁금증 해결

태그

관련글

댓글0

공지사항

최근글

인기글

최근댓글

티스토리툴바

Arduino uno, PID control, 아두이노 우노 PID 제어 라이브러리 활용
Arduino uno, PID control, 아두이노 우노 PID 제어 라이브러리 활용

Read More

PID 제어와 아두이노 예제 코드 | Hard Copy World

  • Article author: www.hardcopyworld.com
  • Reviews from users: 7506 ⭐ Ratings
  • Top rated: 4.0 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about PID 제어와 아두이노 예제 코드 | Hard Copy World PID 제어를 쓸 일이 생길수 있을 것 같아서 자료를 정리중입니다. 어차피 저도 이론적인 내용을 상세히 알지는 못하므로… 이론을 쉽게 정리하고 아두 … …
  • Most searched keywords: Whether you are looking for PID 제어와 아두이노 예제 코드 | Hard Copy World PID 제어를 쓸 일이 생길수 있을 것 같아서 자료를 정리중입니다. 어차피 저도 이론적인 내용을 상세히 알지는 못하므로… 이론을 쉽게 정리하고 아두 … PID 제어를 쓸 일이 생길수 있을 것 같아서 자료를 정리중입니다. 어차피 저도 이론적인 내용을 상세히 알지는 못하므로… 이론을 쉽게 정리하고 아두이노 코드로 옮기는 작업을 해야죠. 정리되는대로 이 페이지는 업데이트 됩니다. [출처] PID제어란!!|작성자 화이팅 1. PID 제어란? 자동제어 방식 가운데서 가장 흔히 이용되는 제어방식으로 PID 제어라는 방식이 있다. 이 PID란, P: Proportinal(비례) I: Integral(적분) D: Differential(미분) 의 3가지 조합으로 제어하는 것으로 유연한 […]
  • Table of Contents:
See also  Top 20 딸기 우유 만드는 법 Quick Answer
PID 제어와 아두이노 예제 코드 | Hard Copy World
PID 제어와 아두이노 예제 코드 | Hard Copy World

Read More

아두이노 드론과 PID 제어 :: 찬찬히 로봇 메이커

  • Article author: sally241.tistory.com
  • Reviews from users: 43770 ⭐ Ratings
  • Top rated: 4.2 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 아두이노 드론과 PID 제어 :: 찬찬히 로봇 메이커 드론의 제어법을 구글에서 여러번 찾아보았다. 기본은 PID제어를 사용하였고 여기에 추가적으로 P제어를 두번한 PPID(?)제어라던가 D제어를 두번한 PIDD … …
  • Most searched keywords: Whether you are looking for 아두이노 드론과 PID 제어 :: 찬찬히 로봇 메이커 드론의 제어법을 구글에서 여러번 찾아보았다. 기본은 PID제어를 사용하였고 여기에 추가적으로 P제어를 두번한 PPID(?)제어라던가 D제어를 두번한 PIDD … 사실 드론의 하드웨어도 중요하지만(모든 로봇들이 그러하듯) 더욱 중요한 것은 제어법이라고 생각한다. ​ 드론의 제어법을 구글에서 여러번 찾아보았다. 기본은 PID제어를 사용하였고 여기에 추가적으로 P제어를..
  • Table of Contents:

아두이노 드론과 PID 제어

티스토리툴바

아두이노 드론과 PID 제어 :: 찬찬히 로봇 메이커
아두이노 드론과 PID 제어 :: 찬찬히 로봇 메이커

Read More

DC Mouse 3. 아두이노 DC 모터 PID 제어

  • Article author: maxpulse.tistory.com
  • Reviews from users: 45893 ⭐ Ratings
  • Top rated: 4.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about DC Mouse 3. 아두이노 DC 모터 PID 제어 아두이노 나노로 모터 2개의 엔코더 입력에 문제없음을 확인함 (DC Mouse 2 참조). PID 제어를 구현해본다. 마이크로 마우스에서 직진과 회전 구간을 … …
  • Most searched keywords: Whether you are looking for DC Mouse 3. 아두이노 DC 모터 PID 제어 아두이노 나노로 모터 2개의 엔코더 입력에 문제없음을 확인함 (DC Mouse 2 참조). PID 제어를 구현해본다. 마이크로 마우스에서 직진과 회전 구간을 … 아두이노 나노로 모터 2개의 엔코더 입력에 문제없음을 확인함 (DC Mouse 2 참조) PID 제어를 구현해본다 마이크로 마우스에서 직진과 회전 구간을 구분해서 동작하는데 직진 구간에서는 벽에 부딪히지 않도록 양..
  • Table of Contents:

태그

‘로봇 만들기 – AVR마이크로 마우스’ Related Articles

공지사항

최근 포스트

태그

검색

전체 방문자

DC Mouse 3. 아두이노 DC 모터 PID 제어
DC Mouse 3. 아두이노 DC 모터 PID 제어

Read More


See more articles in the same category here: https://toplist.aseanseafoodexpo.com/blog.

프로토타이핑 – 12. 아두이노 PID 튜토리얼 + PID제어기(wiki)

728×90

Arduino PID Control Tutorial

https://ko.m.wikipedia.org/wiki/PID_%EC%A0%9C%EC%96%B4%EA%B8%B0

제어 시스템에서 제어기는 시스템의 출력이 목표 입력값이 되도록 고쳐나가야 합니다. 가장 유명한 제어기중 하나는 PID 제어기로 비례, 적분, 미분의 약어라고 할수 있습니다. 이번에는 아두이노 PID 튜토리얼에 대해서 살펴보면서 이 프로젝트에 제어기가 어떻게 사용되는지 알아봅시다.

앞으로 볼 내용은 아래와 같겠습니다.

1. PID가 뭘까?

1.1 비례 제어

1.2 적분 제어

1.3 미분 제어

2. PID 제어 구현

3. 아두이노 PID 라이브러리

4. 마치면서

1. PID란 무엇일까?

PID는 비례, 적분, 미분의 줄임말이라고 할수 있습니다. 또한 시스템에서 제어기가 요란을 대처하는 방법이라고도 할수 있는데요. 여기서 말하는 제어기는 피드백 시스템에 존재하는 제어기를 말합니다. 그래서 특정 수치값을 읽고 내가 할수있는 일을 하는거라고 할수 있겠습니다.

피드벡 시스템은 출력 결과를 입력으로 되돌려주는 시스템이라고 할수 있는데요. 난로의 불을 제어하는 예제로 한번 배워보겠습니다. 간단한 그림은 아래와 같아요.

여러분들이 일정 온도를 유지하고 싶으면, 센서는 매 시간마다 온도를 측정해주고, 이 측정한 온도가 희망 기준 온도에서 증가하거나 감소했을탠대 이 차이를 오차로 피드백하게 해줍니다.

1.1 비례 제어 Proportional Control

비례 제어는 에러를 얼마나 많이 비례해서 제어할수 있는지를 말하고 있습니다. 예를들자면 위 난로에서 연료를 조절하는 전기 밸브가 있다고 합시다. 오차가 작다면, 설정 값과 측정 값이 일치하도록 밸브는 작은 양의 연료를 줄것이고, 오차가 크다면 벨브로 더 많은 연료를 줄겁니다.

=> 현재 상태에서 오차 값 크기에 비례하여 제어(원하는 값에 빨리 도달)

– 좌측은 제어이전, 우측은 P 제어 이후

=> 제어 이전에는 출력이 목표 값(1)에 도달하지 못함

=> P 제어 이후 오차 값(목표 값 – 현재 값)만큼 비례해서 신호를 증폭한다.

1.2 적분 제어 Integral Control

비례제어가 요란을 제거해 주었다면, 적분 제어는 이 오프셋 오차를 제거해서 에러를 0으로 만들어줍니다. 제어기는 시간에 대해 오차가 누적되므로 적분 제어기 없이는 오차에 제대로 대응할수 없습니다.

이전의 예시 계속 보면 연료 출력이 증가하거나 감소한 이후에도 초기 위치가 아닌 지점에서 가만히 있게 됩니다. 적분 제어는 이를 감지해서 연료 밸브를 기존의 자리로 돌려주는 역활을 하겠습니다.

=> 정상상태 오차를 제거(누적된 오차로 인해 원하는 값에 수렴하지 못하는 부분을 제거)

– 좌측은 비례제어만 한 결과, 우측은 PI 제어 결과

=> 비례제어만 한 경우 존재하는 정상상태 오차를 적분 제어를 통해 제거함

=> 하지만 오버슛이 심각해짐

1.3 미분 제어 Derivative Control

마지막으로 미분 졔어는 오차의 변화율을 조절시킵니다. 만약 적분 제어에 누적 오차가 보이는 경우에 미분 제어가 이 오차를 예측하여 얼마나 오차가 빠르게 변하는지를 보고 얼마나 고쳐야 할지 찾아냅다. 비례 제어와 적분 제어가 대처하지 못하는 동역학적 에러에 대해서 최적의 동작을 한다고 할수 있겠습니다.

위 난로 예제에서 120도를 설정했지만 130도에서 140도로 올라가는 상황이라고 해봅시다. 비례적분 제어기는 오차의 크기에 대응해서 동작하고는 있지만, 오차가 빠르게 발생하는 경우에서는 대처하기가 어려우나 미분 제어기는 오치의 변화율을 보고 이에 맞게 조절할수가 있습니다.

– 좌측은 PI 제어기, 우측은 PID 제어기

=> 기존의 출력갑이 크게 변하는데 미분 제어를 통해 오버슛을 줄이고 안정하게 만든다

– PID는 위와 같은 형태로 사용하기도 되지만 P 제어기, PI 제어기, PD 제어기만 사용하는 경우도 있음

– PID 제어시 발생가능한 문제

1) 계산된 제어값이 구동기가 동작할수 있는 한계 보다 커 구동기 포화(sturation)이 발생하는 경우

2) 오차 적분값이 크게 누적되어 출력이 설정에 가까워지면 제어가 작아져야하나 큰 값을 출력하여

설정값에 도달하는데 많은 시간이 걸리는 경우

-> 위 문제를 적분기의 와이드업이라 함 => 안티 와이드업 기법으로 PID 제어기를 보완해주어야함

– 제어 파라미터 K_p, K_i, K_d를 제어 이득, 게인이라 부름. 적절한 이득값을 얻는 과정을 튜닝(tunning)이라고 함.

https://ko.m.wikipedia.org/wiki/PID_%EC%A0%9C%EC%96%B4%EA%B8%B0

다시 돌아와서

설정 입력값 r(t)가 있고, 출력으로 y(t), 제어 입력 u(t). 오차 e(t)가 있겠습니다. 위 난로 예제에서 보면 r(t)는 희망 온도, y(t)는 실제 온도라 할수 있습니다. e(t)는 실제 온도와 희망 온도의 차이라할수있고, u(t)는 PID 제어기로 교정한 신호의 총합이라 할수 있겠습니다.

원하는 성능을 얻을수 있또록 PID 제어기의 값들을 고치는 작업을 튜닝이라 부르며, 위 그림에서 K 상수들을 잘 조절해주어야 합니다.

코드로 PID 제어하기

아두이노 스캐치에서 PID 제어기를 구현하려면 5개의 파라미터가 필요합니다

-> 비례, 적분, 미분 상수와 입력값과 기준 설정 값

PID 계산은 반드시 내부 루프 함수에 있어야하며, 함수 시작시에는 수행 시간 (elapsed time)을 설정해주어야 합니다. 현재 시간은 millis()로 얻겠습니다.

currentTime = millis(); elapsedTime = currentTime – previousTime;

오차는 설정 지점과 입력의 차이로 얻겠습니다.

error = setPoint – input;

적분 오차는 시간에 대한 누적 오차라 하였으니 아두이노로 구현하려면 다음과 같이 경과시간 * 오차를 해주면 되겠습니다.

cumError += error * elapsedTime;

미분 오차는 에러의 변화율이므로 다음과 같이 하겠습니다.

rateError = (error – lastError)/elapsedTime;

이제 제어 입력 u(t)를 정리하면 아래와 같겠습니다. 여기서 Kp, Ki, Kd는 이전에 설정한 상수가 됩니다.

output = Kp * error + Ki * cumError + Kd * rateError;

마지막으로 다음 반복회차를 위해서 변수들을 아래와 같이 지정해줍시다.

lastError = error; previousTime = currentTime;

이제 조금 더 제대로 해보면, 다음과같은 휠이 달린 모터가 있다고 해봅시다. 우리는 휠이 저 위치에 있기를 바라고 있습니다. 바퀴에 로터리 엔코더가 재 바퀴 각도에 대한 정보를 알려주므로 우리가 바라는 지점에서의 각도를 0이라 합시다.

휠이 위치를 벗어날떄마다 조정을 해주어야 하는데, 보통 모터는 PWM 펄스 폭 변조를 통해 제어됩니다. 펄스가 넓을수록 모터 회전이 더 빨라집니다.

이제 아두이노에서 다음과 같이 간단한 제어 예시를 구현해봅시다.

//PID constants double kp = 2 double ki = 5 double kd = 1 unsigned long currentTime, previousTime; double elapsedTime; double error; double lastError; double input, output, setPoint; double cumError, rateError; void setup(){ setPoint = 0; //set point at zero degrees } void loop(){ input = analogRead(A0); //read from rotary encoder connected to A0 output = computePID(input); delay(100); analogWrite(3, output); //control the motor based on PID value } double computePID(double inp){ currentTime = millis(); //get current time elapsedTime = (double)(currentTime – previousTime); //compute time elapsed from previous computation error = Setpoint – inp; // determine error cumError += error * elapsedTime; // compute integral rateError = (error – lastError)/elapsedTime; // compute derivative double out = kp*error + ki*cumError + kd*rateError; //PID output lastError = error; //remember current error previousTime = currentTime; //remember current time return out; //have function return the PID output }

위 루프 함수에서는 로터리 엔코더가 휠의 현재 위치를 주고, 그 값이 commputePID()함수의 파라미터로 사용됩니다. 이 함수는 PWM으로 모터 제어에 사용할 값을 반환해 줍니다.

300×250

8-2. Arduino Car로 PID 제어

반응형

1. PID 제어 Cruise System구현에 들어가에기 전에

전에 작성한 글에서는 PID 제어를 사용하지 않은 Cruise System을 구현하였고 그것에 문제점에 대하여 이야기했습니다. 아무런 지식이 없는 상태에서 바로 이글을 보신다면 이해가 어려운 부분이 생길 수 있습니다. 이전 글을 참고하시면서 보시는것을 추천드립니다. 또한 갑자기 난이도가 높아지는것을 느끼실 겁니다. 천천히 내용을 읽어보시고 다른 자료도 참고 부탁드립니다.

2. PID Control

PID Control을 사용하여 Arduino Car에 Cruise System을 구현하기 전에 PID Control이 무엇인지 알아보겠습니다. PID 제어는 실제 응용분야에서 많이 사용되는 제어기법입니다. 이러한 PID는 드론, 자동차, 온도등 안정적인 모터를 제어하는 부분에서 사용됩니다. 그러면 Cruise System에 PID Control이 어떻게 사용되는지 알아보겠습니다. 전에 올렸던 글을 보시면 안정적인 속도를 제어하기 위해서는 거리별 단계를 나누어 속도를 통제한다고 하였습니다. 그러면 그 단계가 무수히 많아진다면 좀더 좋은 속도제어가 될것이며 이를 가능하게 하는것이 PID 제어입니다. 아래 그림을 보시면 이해가 편하실 것입니다.

1) PID Control이란?

PID Control의 명칭의 P는 Proportional(비례), I는 Integral(적분), Differential(미분)의 앞글자를 따온 단어입니다. 즉 비례와 적분, 미분을 사용하여 적절한 값을 도출해 제어에 응용하는 기법입니다. 이는 대상의 출력값을 측정하여 이를 원하는 설정값과 비교하여 오차를 계산하고, 이 오차를 이용하여 제어에 필요한 제어값을 계산하는 구조입니다.

표준적인 형태의 PID 제어기는 아래의 식과 같이 세개의 항을 더하여 제어 값을 계산하도록 되어있습니다.

PID 제어서 각각의 항들은 오차값, 오차값의 적분, 오차값의 미분에 비례하기 때문에 비례-적분-미분 제어기라는 명칭을 가집니다.

비례항 : 현재 상태에서의 오차값의 크기에 비례한 제어작용을 한다.

적분항 : 정상상태 오차를 없애는 작용을한다.

미분항 : 출력값의 급격한 변화에 제동을 걸어 안정성을 향샹시킨다.

PID 제어기는 위와 같은 표준식으로 사용하기도 하지만, 경우에 따라서는 약간 변형된 형태로 사용되는 경우도 많습니다. 그 예가 P제어

PI제어, PD제어가 있습니다. 아래 사진은 PID를 이해하는데 많은 도움이 될꺼같아 위키백과에서 가져왔습니다. 나머지 설명들도 그래프를 같이 봐주시기 바랍니다.

<출처 - 위키백과>

2) P Control

비례 제어라고 불리며 설정값과 출력값의 편차에 비례해 연속적으로 변화하는 제어 방식으로, 출력값이 설정값에 근접할수록 미세하게 제어가 가능합니다. 비례제어는 출력값과 설정값이 차이가 적어질수록 서서히 감도가 좋아져 규칙적인 사이클이 발생하지만 잔류 편차로 인해 출력값이 설정값과 정확하게 일치하지 못하는 상태가 지속됩니다.

3) PI Control

비례 제어에서 발생하는 잔류 편차를 적분 동작으로 제어해 오차를 줄이기 위한 제어 방법입니다. 이 적분 제어는 정상 상태이때 오차를 제거하는 동작을 합니다. 전류 편차를 누적한 후 출력량을 늘려 오차를 제거하는 방식으로 적분 동작을 이용해 설정값에 빠르게 도달할 수 있다는 장점이 있습니다.

4) PD Control

비례 제어에서 과출력 상태에서 생기는 오차를 미분 동작으로 제어하기 위한 제어 방법입니다. 미분 제어는 급격한 출력값의 변동이 필요할 때, 기존 동작의 편차를 파악해서 출력값을 조절해 오차를 줄이고 다시 안정상태로 돌아가는 동작을 합니다. 미분 제어는 안정성을 향상시킬 수 있는 장점이 있습니다.

5) PID Control

비례 제어를 기본으로, 적분, 미분 제어를 결합한 최종형태입니다. 적분 제어를 통해 정상적 상태에서 오차를 줄이고와 응답속도를 높여주고 미분제어를 통해서 과출력 상태에서의 오차를 줄여 안정적인 상태로만듭니다. PID제어는 이런식으로 서로 단점을 보안하고 장점을 극대화 해줍니다.

5) Gain 값(제어 파라메터)

위에 그래프와 식을 보시면 라는 값이 있는데 이것이 Gain값입니다. 이는 위 그래프를 보시면 gain값이 변화에 따라 어떠한 그래프가 만들어지는지 아실 수 있습니다. 이러한 적절한 Gain값을 구하는 방식은 수학적 방법과 실험적 방법이 있는데 이를 구하여 수정하는 것을 튜닝이라고 합니다. 수학적으로 구하는 방법으로 대표적인 것은 지글러-니콜스 방법이라고합니다. 하지만 매우 어려워서 보통 실험을 통해서 gain값을 수정한다고합니다. 저도 gain값을 직접 넣어 실험을 해보면서 이 값을 구하였습니다.

3. PID Control Sample Code

아래 소스코드는 PID Control의 샘플코드입니다. 아래 코드를 활용해서 PID제어를 하시면 됩니다. 단 요즘 Arduino Library를 보시면 PID를 제공하고 있습니다. 저는 사용해본적이 없지만 그것도 해보시면 좋을꺼 같습니다.

/*gain값 실험을 통해서 직접 수정해 보시는것이 좋습니다. */ float Kp = 0.3; float Ki = 1.2; float Kd = 1.5; float error; // error값이란 설정값과 출력값의 편차를 말합니다. float errorPrevious; //전에 error값을 기억해둡니다. float safeDistance; //안전거리, 설정값입니다. float distance; // 현재 거리, 출력값입니다. double PControl, IControl, DControl; // 비례, 적분, 미분 제어항의 결과 값입니다. double Time = 0.004; //한번의 연산을 하는데 걸리는 시간입니다. 1회 loop의 시간입니다. double PIDControl; // P,I,D Contorl의 결과값입니다. void setup() { } void loop() { distance = 갱신 코드; // 장애물과의 거리를 가져옵니다. error = safeDistance – distance; // 안전거리와 장애물과의 거리를 빼서 error값을 구합니다. PControl = Kp * error; //비례항 입니다. IControl += Ki * error * Time; // 적분항 입니다. DControl = Kd * (error – errorPrevious) / Time; // 미분항입니다. PIDControl = PControl + IControl + DControl; // P, I, D 결과값을 더해줍니다. PIDControl = constrain(PIDControl, 0, 255); // constrain이라는 함수는 입력값은 값을 0 ~ 255사이 값으로 변환해서 반환합니다. analogWrite(6, PIDControl); //모터를 PIDControl값으로 PWM신호를 보내 움직입니다. errorPrevious = error; //이전 에러값를 기억합니다. }

다음글에서는 이 PID Control을 활용해서 Cruise 시스템을 구현해보겠습니다.

반응형

아두이노 프로젝트12 – PID 제어를 이용한 공 균형 잡기

안녕하세요. 오랜만에 아두이노 포스팅을 합니다. 이제 ‘아두이노 작품’이라는 타이틀을 버리고 ‘아두이노 프로젝트’라는 이름을 쓰게 되었습니다.

‘작품’이라고 국어사전에 검색해보니 ‘예술 창작 활동으로 얻어지는 제작물’이라는 뜻이 나옵니다. 하지만 저는 아무래도 예술 활동보다는 프로그래밍과 여러 전기, 전자 부품을 제어하는 활동을 하니 이러한 표현이 어울리지 않는다고 생각하였습니다. 더구나 제가 매 포스팅마다 새로운 분야의 활동을 광범위하게 하니 이러한 활동은 ‘프로젝트’라는 말이 어울릴 것 같습니다. 앞으로는 이러한 제목을 사용할 것입니다.

사족이 길었네요. 이번에 진행한 저의 프로젝트는 ‘PID 제어를 이용한 공 균형 잡기’입니다. 이 프로젝트는 아래 사이트를 참고하여 진행하게 되었습니다.

준비물은 아두이노 우노, 브레드보드, 점퍼선, 가변 저항, 초음파 센서(HC-SR04), 서보 모터(SG-90), 과학상자, 폼보드​입니다. 과학상자 대신 아무 프레임을 만들 수 있는 기구도 괜찮습니다. 폼보드 대신 하드보드지나 우드락도 괜찮을 것 같네요.

모델 사진입니다.

fritzing 회로도 사진입니다.

PID 제어란 어떠한 기준값과 현재 얻어지는 값에 오차가 있을 때 P(Proportional, 비례), I((Proportional -Integral, 적분), D(Proportional-Derivative, 미분) 제어를 이용하여 오차값을 줄여나가도록 제어하는 방법입니다.

▲ Kp값이 클수록 반응 속도가 빨라진다.

P 제어는 기준값과 현재값의 오차에 어떠한 비례 상수(Kp)를 곱하여 오차 값을 줄여나가는 방식입니다. 즉 기준값과 현재값의 오차에 비례하여 제어량을 변화시키는 것입니다. 하지만 오차값은 0이 되지 않고 기준값에 한없이 다가가는 형태로 나타나게 됩니다. 위 그래프는 Kp 값에 따른 P 제어를 나타낸 것입니다. 이번 프로젝트에서 도출하였습니다.

▲ Ki값이 클수록 P 제어와 더불어 반응 속도가 빨라진다.

I 제어는 P 제어의 한계를 보완한 제어입니다. P 제어를 통해서는 오차를 0으로 만들 수 없기 때문에 그 오차를 시간으로 적분하여 오차값을 0으로 만들 수 있도록 해줍니다. 이 역시 상수 Ki가 들어가게 되는데, Ki값이 증가할수록 더욱 민감하게 반응하는 성질을 갖고 있습니다. 위 그래프는 Ki 값에 따른 P, I, D제어를 동시에 수행할 때를 나타낸 것입니다.

▲ Kd값이 클수록 그래프의 꺽은 선이 많아진다. 즉 급격한 변화에 대응한다.

D 제어는 외부 변화에 쉽게 대응하기 위한 제어입니다. 오차가 갑자기 증가(오버슈트)하거나 기준값이 변화할 경우 이에 반응해서 값을 변화시켜야 합니다. 이 때 이 변화의 기울기를 미분을 통해 얻음으로서 이러한 제어를 쉽게 수행할 수 있도록 합니다. 이 역시 상수 Kd가 들어가는데, Kd가 커질수록 현재 상태를 쉽게 변화하려 하지 않는 성질이 있습니다. 위 그래프는 기준값이 변화했을 때 P, I, D제어를 이용하여 오차를 감소시키는 것을 나타내었습니다.

즉 정리하자면 P 제어는 오차값을 줄이면서 기준값까지 도달 시간을 줄이는 역할, I 제어는 P 제어의 한계에 의한 오차를 줄이는 역할, D 제어는 급격한 변화에 대응하는 역할이라 할 수 있습니다.

다음은 아두이노 프로그래밍 코드입니다. PID 라이브러리를 따로 사용하였습니다. 이 라이브러리는 첨부파일에 올려놓았습니다. 압축을 푼 후 Arduino→Libraries 폴더에 저장하시면 됩니다.

#include

#include //PID, 서보모터 라이브러리

const int servoPin = 9;

const int echoPin = 6;

const int trigPin = 7;

const int sensor = A0; //핀 설정

float Kp = 2.0;

float Ki = 1.0;

float Kd = 2.0; //PID 상수 설정, 실험에 따라 달라짐, 중요! ​ double Setpoint, Input, Output, ServoOutput; //PID 제어 변수

float duration, distance1, distance2; //거리 측정 변수

PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT); //PID 객체 생성

Servo myServo; //서보 객체 생성

void setup() {

Serial.begin(9600); //시리얼 통신 사용 ​ myServo.attach(servoPin);

myServo.write(115); //슬로프가 평형을 이루는 각도 : 115도

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

pinMode(sensor, INPUT); //입력, 출력 핀

myPID.SetMode(AUTOMATIC); //PID모드를 AUTOMATIC으로 설정

myPID.SetOutputLimits(-50,55); //PID의 값을 최소 -50부터 최대 55까지 설정 }

void loop() {

Setpoint = map(analogRead(sensor), 0, 1023, 5, 40); //가변저항 범위를 슬로프의 길이 범위로 변경

Input = errorCollection(); //오차값 보정한 초음파 센서의 거리 수치를 저장

Serial.print(Input);

Serial.print(“,”);

Serial.println(Setpoint); //시리얼 출력

myPID.Compute(); //PID계산

ServoOutput=115-Output; //서보모터의 각도 설정(115도는 서보모터가 수평을 이루었을 때 각도)

myServo.write(ServoOutput); //서보모터에게 값 전달

}

​ float readPosition() { //초음파 센서 거리 측정

digitalWrite(trigPin, HIGH);

delayMicroseconds(2);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

float a = ((float)(340 * duration) / 10000) / 2;

return a;

}

​ float errorCollection() { //초음파 센서로 측정한 값 오차 보정

delay(40);

float distance;

distance2=readPosition(); //distance2에 거리값 저장 ​ if (distance2-distance1>45) { //차가 45보다 크다면, 즉 값이 갑자기 튄다면

distance=distance1; //바로 전 측정한 거리값 사용

} else { //일반적인 경우이면

distance=distance2; //지금 측정한 값을 사용

distance1=distance2; //다음 측정값과 비교하기 위해 저장

}

if (distance>45) { //슬로프 길이가 45cm이므로 45cm보다 더 큰 값이 반환되면 오류

distance=45;

}

return distance; //distance 리턴

}

아무래도 탁구공을 사용하다보니까 초음파 센서가 공을 잘 인식하지 못하는 것 같습니다. 공이 조금만 멀리 가도 값이 이리저리 튀는 현상이 발생해서 오차를 보정하는 코드를 따로 만들었습니다. 비정상적인 값이 인식될 경우 바로 전에 받은 값을 다시 출력하는 방식으로 오차를 한결 줄일 수 있었습니다.

마지막으로 동영상입니다.

So you have finished reading the 아두 이노 pid 제어 topic article, if you find this article useful, please share it. Thank you very much. See more: DC 모터 PID 제어 소스, PID 제어 코드, PID 제어 예시, pid제어 실생활, PID 제어 쉽게, 파이썬 PID 제어, PID 제어 원리, PID 제어 활용

Leave a Comment