ステアリングサーボを動かす

ステアリングサーボはスピードコントローラと同じなのでプログラムの変更はほとんどないので、細かい説明は省略する。

サーボを動作させるためのSteering_Valの値は、以下のとおりである。
50:ステアリングを左に切った状態
90:中立
130:ステアリングを右に切った状態

また、シリアルモニタからの入力で3,4を入力することにより、Steering_Valの値が上下するようになっている。

#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; // 50-90-130 Steering value (90:center)
 static int Motor_Val = 94; // 70-92 Speeding Value (70 is fast)

 SerialRead(); // read inputted numeric key
 if (SerialInputValue ==3 && Steering_Val >=52){ 
 Steering_Val -= 2; // '3' is inputted from serial monitor
 }
 if (SerialInputValue ==4 && Steering_Val <=128){
 Steering_Val += 2; // '4' is inputted from serial monitor
 }
 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[0].write(Steering_Val); // Servo output (Steering)
 Serial.print("Steering Value=");
 Serial.print(Steering_Val);
 
 servo[1].write(Motor_Val); // Servo output (Speeding)
 Serial.print(" Motor Speed=");
 Serial.println(Motor_Val);
}

下記は実験しているときの写真である。
ArduinoからはGNDと9Pin,10Pinの③本だけが出ている。それらがスピードコントローラやステアリングサーボと接続されている。

配線図としては以下となる。

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の表示は以下のようになっている。

スピードコントローラとステアリングサーボの制御

スピードコントローラやステアリングサーボはON/OFFの信号の比率によってによって制御される。
Arduinoで簡単に制御するためには、Servoというライブラリを用いる。
使用することに対する定義例は下記となる。

#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という変数にスピードに相当する値を入れる。

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

この場合、シリアルモニタで数値を上下しながらテストできるように、前出のデバック手法を用いる。 (スケッチの公開は順次。。。)

スピードコントローラの役割

スピードコントローラ(ESC: Electronic Speed Control)の主な役割は受信機から来た信号に合わせてバッテリの電気をモータに送ることである。

モーターの回転数を調整するためには電圧の上下をするわけではなく、パルスのONとOFFの比率を使って速度を制御している。ONの時間が長ければ速度は速くなり、OFFの時間が長ければ速度は遅くなる。このONとOFFの比率は受信機からくる信号にあわせて制御される。(この信号も同様にパルスである。)

スピードコントローラを見てみると、太い線が4本、赤黒がついになったケーブルが2セットと黒赤白のセットになったケーブルが1本出ている。それぞれの接続先は以下の通りである。
・太い赤栗:バッテリ
・太い黄青:モータ
・赤白:電源スイッチ
・赤白:受信機(受信機を動作させるための電源線)
・黒赤白:受信機からの制御線

このスピードコントローラは注意が必要である。大体以下を気にしていればよいかと思われるが、データシート(取扱説明書)は購入前に読めるようになっているケースが多いので確認しておくことが大事である。
・受信機との組み合わせ
コネクタが刺さる形状であってもピンの内容が違うこともある。
・スピードコントローラとモータの組み合わせ
これを間違えてしまうとモータやスピードコントローラを焼損してしまう可能性がある。 (そもそも動作しない時もある)
・スピードコントローラの設定
購入後の話だが、スピードコントローラ自体には設定が必要である。(結構マニアックな設定方法だが、、)