1. PIDライブラリのインストール
さすがArduino痒い所に手が届きます、早速使わせて頂きました!
1.1 ダウンロード
GitHubと言うサイトに「br3ttb/Arduino-PID-Library」と言うページが有ります。
PIDライブラリはこのページで入手出来ます。
ダウンロード方法はこのサイト(図1)にアクセスし、右側に有る緑のボタン「Clone or download」をクリックし、次に「Download ZIP」をクリックすれば「Arduino-PID-Library-master」と言うPIDライブラリが含まれたZIPファイルがダウンロードされます。
→ →
図2:ZIPファイル 図3:中身 図4:リネイム
1.3 インストール
図4で用意した「PID」フォルダを、ArduinoIDEがインストールされているフォルダ(図5)中の「Libraries」フォルダ中に移動するだけでインストール終了です!
図5:ライブラリのインストールフォルダ
2. 実験!
PIDライブラリがどんな感じか実験してみました!
2.1 接続
図6,黄色線部の様に、ArduinoUNOの2番ピンと3番ピンをジャンプワイヤーで接続するだけでOKです!
図6:ArduinoUNO接続図
2.2 プログラム
プログラムの内容としては、3番ピンで発生したPWM信号を2番ピンで測定し、その結果から3番ピン出力を、設定したDuty比70.6%(180)となるように操作量をPIDライブラリで求め出力します。
/*NOBのArduino日記!_PID制御!PIDライブラリインストール編_20170331*/ #include <PID_v1.h> double Setpoint, Input, Output; PID myPID(&Input, &Output, &Setpoint, 0.04, 0.04, 0.04, DIRECT); //初期値設定 // PWMのD比測定 volatile float Duty; volatile unsigned long UpNew, UpOld, DownNew, DownOld; void SUB() { if (digitalRead(2) == LOW) { DownOld = DownNew; DownNew = micros(); Duty = ((DownNew - UpNew) * 1000) / ((UpNew - UpOld)) * 0.1; } else { UpOld = UpNew; UpNew = micros(); Duty = ((DownNew - UpOld) * 1000) / (UpNew - UpOld) * 0.1; } } void setup() { pinMode(3, OUTPUT); pinMode(2, INPUT_PULLUP); //3ピン出力2ピン入力設定 attachInterrupt(0, SUB, CHANGE); Serial.begin(9600); Setpoint = 180;//目標値設定 myPID.SetMode(AUTOMATIC); }//PID関数を実行 void loop() { Input = map(Duty, 0, 100, 0, 255); //2ピン入力値取得 myPID.Compute(); analogWrite(3, Output); Serial.print("Input="); Serial.print(Input); Serial.print(",Output="); Serial.println(Output); delay(100); }
図1:プログラム例
2.3 測定
上記プログラムを実行すると、現在の測定値(input)と、出力値(output)が図7の様にPCのシリアルモニタ上に出力されます。
3. まとめ
ライブラリを使ったほうが数式を書かなくて良い分プログラムがスッキリして良い感じです!
励みになりますのでよければクリック下さい(^o^)/