Ardiunoで簡単にPID処理

よくArduinoでPID処理を行う時に使うサンプル例で、A0とPWM(3)を直結させて、ターゲットになる出力になるまで評価するといった方法がある。PIDってなんぞや?というのは、この記事がとても分かりやすいと思われ。

ArduinoのライブラリにはPIDで検索するとそれっぽく使えるライブラリが出てくる。

PID_v1
FastPID

どれもPID成分を決めると簡単に計算をしてくれる。とわ言え、時間軸に対して比例・積分・微分をしてパラメータ(ゲイン)の掛け合わせと足し算だけだから、自分でやっても簡単に出来る。以下はそれぞれPIDの成分を変えた時、2.5Vのターゲットに対してどのくらいで収束するか?グラフにしたものになる。

P=4(青), 8(オレンジ), 16(グレー), 32(黄色), I=D=0

P=32, I=10(青), 100(オレンジ), 200(グレー), 400(黄色)

P=32, I=10, D=0.8(青), 0.4(オレンジ), 0.2(グレー), 0.1(黄色), 0.01(緑)

PI固定でD成分のパラメーターは横軸(20)以降の2.5Vを中心とした分散(偏差)が最小になるような値=0.01までは出した。0以上、0.01未満くらいの所で、さらに値をチューニングすれば値を追い込めるとは思うけど、そこまではやっていない。ほとんど同じようには見えるものの、D=0.01のときになる。使ったコードはこちら、非常に簡単。LEDとCdsを使ったモノもコードにあげている。こちらはArduinoで使えるライブラリを使ったモノも。

本当は理論値に近づくようにシュミレーションして、評価として実機に流しながらベストな値を求めるのが正しいんだろう。他には機械学習で一番良さそうな値を見つけに行くというのもありだと思われ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください