エアコンの温度、モーターの回転数、3Dプリンタのヒーター。「目標の値に近づけて、そこで安定させる」という制御は身の回りに山ほどあって、その多くでPID制御という仕組みが働いている。ただ、このPID、勉強しようとすると説明に微分と積分が出てきて、そこで本を閉じた人がかなりいるはずだ。
技術系メディアのHackadayで、ライターのアル・ウィリアムズ氏が面白いものを公開した。Googleスプレッドシートの上で動く、PID制御の実験台だ。制御される側の機械(プロセス)も一緒にシミュレートしてあるので、セルの数値を書き換えると、その場でグラフが動く。プログラムを書く必要も、実物のヒーターやモーターを用意する必要もない。ブラウザでシートを開けば、そこがもう実験室になっている。
PID制御の基本のしくみ
PIDのP・I・Dは、それぞれ3つの調整方法の頭文字だ。どれも「誤差」——目標値と、いま実際に測れている値との差——をもとに、出力をどれだけ動かすかを決める。
P(比例)は「ずれが大きいほど、大きく直す」。目標が20度で現在15度なら誤差は5度。この誤差に係数を掛けた分だけヒーターを強める、という一番素直な考え方だ。
I(積分)は「ずれが残り続けるなら、その積もりぶんも足して直す」。いまの誤差だけでなく、これまでの誤差の合計を見る。少しのずれでも、ずっと残っていればその蓄積が効いてきて、出力を押し上げる。
D(微分)は「ずれの変わり方の速さを見て、先回りする」。誤差が急に縮まっているなら、このままだと行きすぎそうだと判断して、あらかじめブレーキをかける。
名前だけ見ると積分・微分と、いかにも数学らしい言葉が並ぶ。ところがこのシートの中身は、その3つを足し算・引き算・掛け算・割り算だけで書いてある。積分は「前の行までの合計に、今回の誤差を足す」、微分は「今回の誤差から前回の誤差を引いて、経過時間で割る」。表計算ソフトは1行が1コマ(初期設定では0.1秒)の時間になっているので、行を下にたどることが、そのまま時間を進めることになる。微積分の記号は一つも出てこない。ちなみに元記事のタイトルには「ほぼ微積分なし(Almost)」と控えめな断りが付いているが、これはIとDという名前自体が微積分の用語だから、という程度の意味だ。
つまみを回すと起きること
このシートの本領は、P・I・Dそれぞれの効き具合を決める3つの数値(Kp・Ki・Kd)を自分で書き換えて、結果をグラフで見比べられるところにある。元記事は、順番に試していく実験コースまで用意してくれている。
まずPだけ。Kpを4、KiとKdを0にして、目標値20でスタートすると、グラフはするすると立ち上がっていく——のだが、20には届かず、16あたりで止まってしまう。理由を考えると納得がいく。もし値がぴったり20になったら誤差は0で、比例制御は誤差に係数を掛けるだけだから、出力も0になる。ところがこのシミュレーション上の機械は、20を保つために一定の出力を必要とする。出力0では維持できないので、少し手前の「誤差が残っているおかげで出力が出ている」高さで釣り合ってしまうのだ。これは比例制御だけでは避けられない現象で、定常偏差と呼ばれる。
そこでIを足す。Kiを0.5にすると、残り続けていた誤差が積み上がって出力を少しずつ押し上げ、今度はちゃんと20に届く。途中で外乱——冷蔵庫のドアを開ける、モーターに急に負荷がかかる、といった邪魔——を入れても、積分がその分を埋め合わせて、目標値まで戻ってくる。ここまでは、いいことずくめに見える。
ところが設定を攻めると、様子が変わる。機械の反応を速くして、Kpを8、Kiを1に上げると、値は目標へ勢いよく駆け上がった末に、20を通り越してしまう。行きすぎ——専門用語でオーバーシュートだ。原因は、さっき頼りにした積分そのもの。値が目標へ向かって上昇している間も誤差は残っているから、積分はその間ずっと溜まり続ける。到着した時点で溜まった分がまだ押し続けていて、勢い余って突き抜ける。程度がひどければ、行きすぎては戻りを繰り返す振動になる。
そこでDの出番になる。Kdを少し与えると、誤差が急速に縮んでいる局面でブレーキがかかり、行きすぎの山が低くなる。ただし、これも効かせすぎると今度はグラフが細かく震え出す。ちょうどいい範囲は意外と狭い。

上の図のように、同じ機械でも設定しだいで「届かない」「揺れる」「ほどよく収まる」「暴れる」と挙動がまるで変わる。そして実際に数値をいじってみて腑に落ちるのが、元記事がいちばん言いたかったことだ。つまり、どんな機械にも効く魔法のKp・Ki・Kdは存在しない。ある機械で完璧に決まった値が、別の機械ではまるで役に立たない。重さ、熱の溜まりやすさ、負荷、応答の遅れが変われば、最適な設定も一緒に変わる。3Dプリンタのヒーター調整で「PIDチューニング」という作業が用意されているのは、まさにこのためだ。あの機能は、そのプリンタ固有のちょうどいい数値を探している。
教科書の用語が目の前で起きる面白さ
このシートで遊んでいると、制御の教科書で名前だけ見たことのある現象に、次々と実物で出会える。
たとえば積分ワインドアップ。積分の溜まりすぎ、と言い換えられる現象だ。シートの出力には0〜100の上限・下限が設けてある。制御側が「出力150が必要だ」と判断しても、実際には100までしか出せない。それでも誤差は残るから、積分は溜まり続ける。あとで状況が変わったとき、この溜まりすぎた分が抜けきるまで、制御はしばらく変な動きをする。元記事は「温度センサーが抜けて、システムが巨大な誤差を勘違いし、差し直した後に溜まった積分が悪さをする」という具体例を挙げている。
微分キックもシートの上で再現できる。目標値を途中で書き換えると、その瞬間だけ誤差が階段状にジャンプするので、変化の速さを見ているD項が一発だけ大きな出力の跳ねを出す。実物の制御機器では、これを避けるために誤差ではなく測定値のほうから微分を計算する作りが多い——と元記事は補足している。
シミュレーションと実機の間にある壁
ひとつ、はっきりさせておきたいことがある。これはあくまでシミュレーションであって、このシートで練習すれば実機のPID調整ができるようになる、という話ではない。元記事自身がその点に正直で、実際の制御系ではセンサーの測定ノイズをD項が増幅してしまう問題や、それを抑えるためのフィルター処理など、このシートが意図的に省いている厄介ごとがいくつもあると断っている。省いたのは手抜きではなく、すべての数値がセルに見えていて、気軽に実験できることを優先した設計だ。
もうひとつ付け加えると、「微積分なし」なのは説明のしかたの話であって、PIDの理論から微積分が消えるわけではない。行ごとの足し算は、時間の刻みを細かくしていけば積分そのものに近づいていく。むしろこのシートは、微積分という道具が何をやっているのかを、四則演算の形で見せてくれる教材と言ったほうが近い。
それでも、リンクを開くだけで、買うものも作るものもなしに、制御工学の入り口を手で触れるというのはなかなか得がたい。3Dプリンタやドローン、自作の温度制御など、すでにPIDのお世話になっている機械を持っている人なら、「あの中でこういう計算が回っていたのか」という発見があるはずだ。シートは自分のコピーを作れば自由に改造でき、元記事にはモーターや熱系など好きな機械のモデルを足す方法まで書かれている。
出典
Calculus-Free PID (Almost) In A Spreadsheet(Hackaday・2026年8月6日・Al Williams)
PIDシミュレーションのGoogleスプレッドシート(Al Williams氏公開)


コメント