ボール&ビーム制御実験装置を簡単に作ってみた.
オブジェに飾っておくのに面白いものが簡単にできないか考えて,SI2012で見たものを更に簡単にして作ってみました.ボール&ビームというのは制御分野ではメジャーな例題らしいですが,自分は専門外なので知りませんでした.作ったのはこれ↓Arduinoでサーボを制御,測距センサでピンポン玉との距離を計測,身近にあったスチロール板を適当にホットボンドでくっつけて工作.センサの高さと距離は輪ゴムで固定しているので可変できます.本体製作時間は1時間半くらい,以下の動画のプログラムも含めて3-4時間で出来ました.動画その1(ON-OFF制御)動画その2(比例制御)動画その3(比例と微分制御)完全に安定しないのは,測距センサの値がふらつくためです.完全に安定するとボールが止まってしまって面白く無いので,あえてそのままにしています.測距センサの計測周期に合わせて別周期で計測とスムージングした値を使うと多分もっと安定すると思います.----------途中だけど,スケッチはこんな感じ----------#include < Servo.h> const int analogInPin = A0; int servoCenter = 85; int sensorValue = 0; int posCenter=256;float p=0, pp=0, i=0, d=0, pid=0;Servo myservo; void setup() { myservo.attach(9); myservo.write(servoCenter); delay(1000);} void loop() { sensorValue = analogRead(analogInPin; pp=p; p=-(sensorValue-posCenter); i+=p; // I制御は使ってません d=p-pp; pid=p*0.04+i*0+d*0.04; // I制御は使ってません(係数0) myservo.write(servoCenter+pid); delay(200); }