Arduinoとサーボモーターの動作確認をする

Windows PCを使って、Arduinoとサーボモーターの動作確認をします。
カメラマウントの制御に使う2つのサーボモーターを0度から180度に遷移させるテストプログラムを作成して動作確認をします。

カメラマウントの台に取り付ける下側のサーボモーターは、カメラの向きの左右を決めます。
カメラを取り付ける上側のサーボモーターは、カメラの向きの上下を決めます。

Windows PCにArduino IDEをインストールする

下記からArduino IDEを1.8.5をダウンロードしてインストールします。(2017.11.01)
ARDUINO SOFTWARE

Windows PCとArduinoを接続する

Windows PCとArduinoをUSBケーブルで接続します。
ArduinoにAC電源を接続します。(USBからの電力供給でサーボモーター2個を動作させることに困ったことはなく、サーボモーターを10個動作させるような予定も無いですが、念の為。)

Arduinoとサーボモーターを接続する

Arduino_001

赤のワイヤーを5Vに接続して、緑のワイヤーをGNDに接続しています。
サーボモーターの制御にArduinoの10番と11番を使います。黄色のワイヤーを接続しています。
10番をカメラマウントの下側に配置するサーボモーターに接続します。11番をカメラマウントの上側に配置するサーボモーターに接続します。

(ジャンパーワイヤーの先端の金属部分がもう少し長ければ、5VとGNDの接続はブレッドボードを使わずに、みのむしクリップで大丈夫だったのですが。)

Arduino_002

SG90の接続です。

プログラムで実現することを決める

Arduinoに接続した2つのサーボモーターを下記の順で動作させます。
Arduinoなので、処理が完了すると、loop関数が最初から実行される、が繰り返されます。

  1. サーボモーター(下側)を0度から180度に遷移させる
  2. サーボモーター(上側)を0度から180度に遷移させる
  3. サーボモーター(下側)を180度から0度に遷移させる
  4. サーボモーター(上側)を180度から0度に遷移させる

プログラムを設計する

短く簡単なプログラムなので、設計は必要ありません。

プログラムを実装する

ソースコードを掲載します。
サーボモーターの角度の制御でパルス幅を決める必要があるのですが、Servoライブラリが全部やってくれています。
Secrets of Arduino PWM
write()

test.ino

// delay( 1000 ) = 1 second

// ---------
// |       |<------->|Servomotor|
// |Arduino|
// |       |<------->|Servomotor|
// ---------

// -----------------------------------------------------------------------------

#include <Servo.h>

const int LOWER_MOTOR_PIN = 10;
const int UPPER_MOTOR_PIN = 11;

Servo lower_motor;
Servo upper_motor;

int lower_motor_degree = 0;
int upper_motor_degree = 0;

// -----------------------------------------------------------------------------

void
setup()
{
    lower_motor.attach( LOWER_MOTOR_PIN );
    upper_motor.attach( UPPER_MOTOR_PIN );
}

// -----------------------------------------------------------------------------

void
loop()
{
    for ( int i=0; i <= 180; ++i )
    {
        lower_motor_degree = i;
        lower_motor.write( lower_motor_degree );
        delay( 20 );
    }

    for ( int i=0; i <= 180; ++i )
    {
        upper_motor_degree = i;
        upper_motor.write( upper_motor_degree );
        delay( 20 );
    }

    for ( int i=0; i <= 180; ++i )
    {
        lower_motor_degree = i;
        lower_motor.write( 180 - lower_motor_degree );
        delay( 20 );
    }

    for ( int i=0; i <= 180; ++i )
    {
        upper_motor_degree = i;
        upper_motor.write( 180 - upper_motor_degree );
        delay( 20 );
    }
}

動作確認する





«       »