この記事をシェアしよう!




前回の記事「ライブラリを使ってサーボモーターを回してみよう」では、サーボモーターのシャフトを0~180度の範囲を一定のスピードで回転させるというものでしたが、今回は半固定抵抗を使ってシャフトを任意の角度にコントロールしてみます。

今回必要な部品

  • Arduino×1
  • USBケーブル( Aコネクタ – Bコネクタ )×1
  • ミニブレットボード×1
  • サーボモーター(SG90)×1
  • 半固定抵抗(10kΩ)×1
  • ジャンプワイヤー×6

回路図

スケッチ(その1)

#include <Servo.h>  //ライブラリ<Servo.h>を組み込む

Servo sv;  //Servoオブジェクト“sv”を作成する

void setup() {
    //svの出力をリセットした上で、D6番ピンに割り当て、パルス幅を500~2400マイクロ秒とする
    sv.attach(6, 500, 2400);
}

void loop() {

  int angle = analogRead(0) ; //変数angleをA0番ピンの入力値とする

  //angleを500~2400の整数値に変換してD6番端子に出力する
  sv.writeMicroseconds(map(angle, 0, 1023, 500, 2400)) ;

  delay(10) ;
}

このスケッチは、半固定抵抗を接続したA0端子から読み取った10ビットの値(変数“angle”=0~1023)を関数“map”でサーボモーターhighパルス幅の範囲(500~2400)に変換した上で、D6端子にPWM出力するというものです。半固定抵抗を回すと、それに応じてサーボモーターのシャフトが回転します。

次のスケッチ(その2)では、変数“angle”(0~ 1023)をシャフトの角度(0 ~ 180)に変換し、シリアル通信でPC側に表示することで、数値を確認しながら角度をコントロールすることができます。

スケッチ(その2)

#include <Servo.h> //ライブラリ<Servo.h>を組み込む

Servo sv; //Servoオブジェクト“sv”を作成する

void setup() {

 //svの出力をリセットした上で、D6番ピンに割り当て、パルス幅を500~2400マイクロ秒とする
 sv.attach(6, 500, 2400);

 Serial.begin(9600); //シリアル通信のデータ転送レートを9600ビット/秒に設定する
}

void loop() {

 int angle = analogRead(0) ; //変数angleをA0番ピンの入力値とする

 //angleを0~180の整数値に変換してPCに送信する
 Serial.println(map(angle, 0, 1023, 0, 180)) ;

 //angleを500~2400の整数値に変換してD6番端子に出力する
 sv.writeMicroseconds(map(angle, 0, 1023, 500, 2400)) ;

 delay(20) ;
}

Arduino IDEの“ツール” → “シリアルプロッタ”をクリックしてから“書込み”ボタンをクリックしてください。半固定抵抗を回すと、それに応じてシリアルプロッタのグラフがシャフトの角度を表示します。

動作例

[ad#g300]

[ad#g300]

この記事をシェアしよう!