概要
arduinoでpid制御やってみた。
写真
サンプルコード
# include <PID_v1.h>
double Setpoint,
Input,
Output;
double Kp = 1,
Ki = 1.8,
Kd = 0.3;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
volatile float Duty;
volatile unsigned long UpNew,
UpOld,
DownNew,
DownOld;
void isr()
{
if (digitalRead(2) == LOW)
{
DownOld = DownNew;
DownNew = micros();
Duty = (DownNew - UpOld) * 30 / (DownNew - DownOld);
}
else
{
UpOld = UpNew;
UpNew = micros();
}
}
void setup()
{
pinMode(3, OUTPUT);
pinMode(2, INPUT_PULLUP);
attachInterrupt(0, isr, CHANGE);
Serial.begin(115200);
Setpoint = 50;
myPID.SetMode(AUTOMATIC);
}
void loop()
{
Input = Duty;
myPID.Compute();
analogWrite(3, Output);
Serial.print(Setpoint);
Serial.print(",");
Serial.print(Input);
Serial.print(",");
Serial.println(Output);
delay(100);
}
以上。