아두이노

PID제어기에의한 헬리콥터모터 제어

내동 2017. 6. 11. 17:23

DC모터를 이용한  위치 제어 (PID)
회로에서  RV1의 가변 저항 값( 설정값)에따라서  A0로부터  입력되는  전압이 0V~5V로 전압이 변하는데 이 전압의 값에따라  모형 헬리콥터가  위와 아래로  이동하는 프로그램이다

RV1의 어느 특정 값의 위치에 목표값을 설정해 놓으면  RV2의 가변저항으로부터 입력되는  아나로그 값을 받아서 RV1의 값과 같아지면  그위치에서만  DC모터가 계속 동작한다.
 







#include<PID_v1.h>                             //1
double Setpoint,  Input,  Output;               //2
PID myPID (&Input, &Output, &Setpoint, 1.6, 0.2, 0.3, DIRECT); //3
int error,down;                                  //4

void  setup()  {
Input = analogRead(1);                            //5
Serial.begin(9600);                                //6
myPID.SetMode(AUTOMATIC);                     //7
}

void loop()  {
Serial.print(Setpoint);                             //8
Serial.print("  ," );                               
Serial.print(Input);                                //9
Serial.print("  ," );
Serial.println(Output );                            //10
Setpoint = map(analogRead(0), 0, 1023, 75, 365) ;  //11
Input = analogRead(1);                            //12
error = (Setpoint - Input) ;                       //13
myPID.Compute();                                  //14
if ( error >0)                                     //15
{
analogWrite(3,Output);                             //16
}
if(error <= 0)                                       //17
{
down = map( error , 0,  -90,  Output , 0);         //18
analogWrite(3, down);                              //19
}
}
소스코드 분석
1)PID제어에 필요한 함수를  사용하기위해  헤더 파일을  불러온다
2) PID 제어에 필요한  변수를  선언한다.
3)PID제어기의 객체를 생성한다.
4)위치정보를  얻기위한  변수를 선언한다
5)  가변저항 ( RV2)로부터  위치 정보를 얻는다.
6)시리얼모니터로 통신하기위한  톤신속돌르 설정한다.
7)PID제어기 모드를  AUTOMATIC으로  설정한다.
8)Setpoint 값을 시리얼 모니터에  출력한다.
9)Input 값을 시리얼 모니터에  츨력한다.
10)Output  값을 시리얼 모니터에 출력한다.
11)아두이노 A0포토로 Setpoint값을 입력 받는다 (RV1-->제어위치설정)
12)아두이노 A1포토로부터 Input 값을 입력받는다.(RV2)
13)설정값과 입력값의 차를  저장한다.
14)pid제어모드를 automatic으로 설정한다.
15)입력값이 설정값에 도달하지 못하면  모터의 속도를 증가시켜 모형헬리곱터를 위로 이동시킨다.(Output 값을 증가 시킨다)
16)아두이노 3번포토로 PWM파형을 출력한다.
17)입력 값이 설정 값보다 크거나  캍다면  모형 헬리콥터를  아래로 이동시킨다
(Output 값을  감소시키거나  유지)
18)입력값과  설정 값의 차이가 0에서 90 사이에 있으면 Output값은 최소 0까지 감소한다 ( Output  값이 0이면  모터는 정지한다)
19)아두이노 3번 포토에 PWM파형을 출력한다



'아두이노' 카테고리의 다른 글

SPI사용하기  (0) 2017.10.06
로봇암 소스코드  (0) 2017.07.27
PID제어기에의한 모터 제어  (0) 2017.06.11
도어록  (0) 2017.03.09
메모리 큐브  (0) 2017.02.05