週末副業記

土日は副業エンジニアのブログです。副業に関することを投稿します。

Arduino生活「7日目」


f:id:aisakakun:20170205232703j:plain

osoyooにあるservo motorに関するプログラムのコードを解説します。

一つずつ順を追って理解していきます。

Servo servo_obj; 

 これで、servoオブジェクトを生成する。

servo_obj.〜とすることによって、

「Servo.h」に記述されていることを行うことを可能にする。

int control_put = 0; 
int position

0はArduinoのA0に対応。

ANALOG入力なので、離散値ではなく、連続値が入力される。

positionが橙なのはなぜか。

恐らく「position()」という関数が存在するため、

変数として定義したとしても色付けされると推測。

void setup()
{
servo_obj.attach(7); 
}

setupは下準備。

attach:取り付ける

pin 7 に servo_objに指示を与えるアウトを出力させる。

void loop()
{
position = map(analogRead(control_put), 0, 1023, 0, 179); 
servo_obj.write(position); 
delay(25);
}

Arduinoがループする部分。

ここを繰り返すことによってリアルタイムの動作に対して対応することができる。

analogReadは連続値の読み取り。

先ほど定義したcontrol_putを読み取る対象とする。

mapとは「数値をある範囲から別の範囲へ変換する」関数。

map(value, fromLow, fromHigh, toLow, toHigh)

 入力値をvalueに入れ、

fromLow,fromHighには、

Analogピンから入力される連続値として取りうる最小値、最大値を記述する。

toLow,toHighには、これから自分が設定したい範囲を記述する。

今回の場合、可変抵抗器を回すと最大値が1023となっており、

プロペラを回転させるために可変抵抗器を使うというのもあり、

最大値を179度までに設定するように記述されている。

servo_obj.write(position); で変換したpositionをservo_objを介してservoモーターに伝えることにより、リアルタイムで回転させることができる。

delay(25)は、なぜ入れているのかがよく分からない。。

 

という感じです。

ある程度分かったので次回はリモコンによる動作を確認し、

可能であればservo_motorとの連携を実装したいと思います。