Arduinoでスピードコントローラ経由のモータを動かす

スピードコントローラやステアリングサーボはON/OFFの信号の比率で制御できる。PWM(Pulse Width Modulation:パルス幅変調)方式である。
今回の開発環境であるArduino IDEにはサーボ制御用のライブラリ(Servo)が用意されているので、これを用いるのが簡単である。

Arduinoのスケッチを抜き出してみると、準備として以下の定義が必要である。

#include <Servo.h> // Built-in Servo library
Servo servo[2]; // create servo object for speed controller and steering servo

その後Setup()内でピンの指定を行う。

servo[0].attach(9); // Pin 9 is for Stering Servo
servo[1].attach(10); // Pin 10 is for Speed Controller

Arduino UNOではPWMで使用できるピンが決まっているので、そのピンの番号を記載する必要がある。
この例ではスピードコントローラには10ピン、ステアリングサーボには9ピンを割り付けた。

ピンに出力を出すのは
servo[1].write(Motor_Val)
という記載を行う。 ここではMotor_Valという変数にスピードに相当する値を入れる。

実際に入れる数値は、スピードコントローラによって微妙に差があるので実機に合わせてテストするとよい。

ここで全く違う話になってしまうのだが、実験する過程では、シリアルモニタで数値を上下しながらテストできるようにする必要がある。
そこで、前出のデバック手法を用いる。 さらに、開発環境のIDE上で違うタブに分けた例とした。

下記はスピードコントローラのタブ部分(Speedcontroller.iso)

#include <Servo.h> // Built-in Servo library
Servo servo[2]; // create servo object for speed controller and steering servo
int SerialInputValue; // Inputed value from serial monitor for debug

void setup() {

//***** set serial port speed (bps)
 Serial.begin(115200);

//***** set servo pin servo[0]..servo[1]
 servo[0].attach(9); // Pin 9 is for Stering Servo
 servo[1].attach(10); // Pin 10 is for Speed Controller

}

void loop() {
 static int Steering_Val = 90; // 70-115 Steering value (90:center)
 static int Motor_Val = 94; // 70-92 Speeding Value (70 is fast)

 SerialRead(); // read inputted numeric key
 if (SerialInputValue ==1 && Motor_Val >=72){ //73
 Motor_Val -= 2; // '1' is inputted from serial monitor
 }
 if (SerialInputValue ==2 && Motor_Val <=100){ //83
 Motor_Val += 2; // '2' is inputted from serial monitor
 }
 servo[1].write(Motor_Val); // Servo output
 Serial.print("Motor Speed=");
 Serial.println(Motor_Val);
}

下記はスピードコントローラのタブ部分(SerialMonitor.iso)

void SerialRead(){
 int InValue;
 InValue = Serial.read(); // Read one character
 if(48 <= InValue and InValue <=57){ // Check between '0' to '9' by ascii code 
 SerialInputValue = InValue-48; // Calculate inputted numeric key
 } else SerialInputValue = -1; // Other keys or no input
}

IDEの表示は以下のようになっている。