シリアルモニタでPCからサーボモーターをコントロールしよう

0
3163

前回の記事「半固定抵抗で、サーボモーターの回転をコントロールしよう」では、半固定抵抗を使ってサーボモーターのシャフトを回しましたが、今回はPCのシリアルモニタからシャフトを任意の角度にコントロールしてみます。

今回必要な部品

  • Arduino×1
  • USBケーブル( Aコネクタ – Bコネクタ )×1
  • ミニブレットボード×1
  • サーボモーター(SG90)×1
  • ジャンプワイヤー×3

回路図

スケッチ

PCのシリアルモニタからの送信は、数値も1文字づつ、ASCⅡコードの文字データとして送られる為、そのままの文字データでは、PWM出力に変換することができません。そこで受信するArduino側では、関数“Serial.parseInt()”を使い文字列データを元の数値に変換して読み取っています。

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

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

void setup() {

    //svの出力をリセットした上で、D6番ピンに割り当て、パルス幅を500~2400マイクロ秒とする
    sv.attach(6, 500, 2400) ;
    //シリアル通信のデータ転送レートを9600ビット/秒に設定する
    Serial.begin( 9600 ) ;
}

void loop() {

    //PCから0より大きいデータを受信した場合は次の{}内を実行する
    if ( Serial.available() > 0 ) {
    delay(20) ; //そのままで20ミリ秒待機する

    //受信した文字列データを関数Serial.parseIntで整数に変換した値を変数degとする
    int deg = Serial.parseInt() ;

    Serial.println(deg) ; //degをシリアルモニタに送信する

    //degが0以上で尚且つ180以下の場合は次の{}内を実行する
    if ( deg >= 0 && deg <= 180 ) {

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

メニューバーの“シリアルモニタ”ボタンをクリックしてからスケッチを書き込みます。シリアルモニタの入力欄に0 ~ 180の任意の数値を入力して、“送信”ボタンをクリックするか、“Enter”キーを押すと、下のモニタ欄に入力した数値が表示されると共に、サーボモーターのシャフトが指定された角度まで回転します。

動作例