Bluetooth モジュールでRCサーボ・ESCを制御したい [第2回-RCサーボ用の電源回路追加]

2022-03-12 · Tomoki Ikegami

"サーボがサクサク動くようにするには"

~ 目次 ~


1. UBECを使って電源を供給

 前回はサーボモータを無線で操作しましたが、サーボモータの動きがイマイチでした。(笑)

 そこで今回はサーボモータの電源をUBECで供給することを考えました。BECはRCクローラーなどをやる人は馴染みのある装置だと思います。

2. UBECについて

 Universal Battery Elimination Circuit の略で、スイッチングレギュレータ1の一種です。BECはESCの中に内臓されていることがほとんどで、わざわざ外付けのものを使わなくても問題なく動きます。

 単にBECと呼ばれるものは、リニアレギュレータ2を使用しているものが多いみたいで、発熱が大きくなったり、扱える電圧・電流を(スイッチングレギュレータに比べて)は小さい3というデメリットがあります。

 外付けのUBECを使うことでレシーバーがサーボモータへ送る電流を大きくできたり、ESCの発熱を抑えることができる1などメリットが多いようです。

3. 実験の内容

3.1. 使ったもの

 前回の記事では、使った装置について書いていなかったので整理しておきます。

3.2. 作った回路

 前回作成した回路にUBECを追加したものが下の図になります。サーボモータのGND(グランド)を、UBECに直接つなぐかどうかはフォーラム4,5,6でかなり議論になっていました。

 ネット上では色々な意見があり悩みましたが、私はUBEC、サーボモータ、マイコンのGNDを全て共通にしました。この回路で特に問題なく動きました。

サーボモータ制御用の回路(UBEC追加)
図:サーボモータ制御用の回路(UBEC追加)

 前回はマイコン用の電源が1つだけだったので省略していましたが、今回はちゃんと電源も書きました。

 上側のPower Bankはモバイルバッテリー、下側のBatteryはラジコン用の7.2Vニッケル水素バッテリーです。

3.3. ソースコード

 こちらがArduinoマイコンに書き込んだソースコードです。前回とほとんど変わりませんが、サーボモータの動作速度(mov_speed)、左右の切れ角(left_DR, right_DR)調整を行いました。

 また、今後のことも考えて文字列でステアの操舵をするようにしました。

#include<SoftwareSerial.h>  //Bluetoothの無線通信に使用
#include <VarSpeedServo.h>  //サーボモータの制御に使用
VarSpeedServo myservo;    // create servo object to control a servo

int mov_speed = 100; //速度
int center_pos = 90; //ステア中心位置 [サーボモータの中心位置 (90°)]
int left_DR = 20; //左位置 [中心位置より反時計回りに20°回転した位置]
int right_DR = 25; //右位置 [中心位置より時計回りに25°回転した位置]
int left_max = center_pos - left_DR; //左の最大切れ角
int right_max = center_pos + right_DR; //右の最大切れ角

//速度v(mov_speed)は 1~255 の範囲で与える。(0にすると最大速度で移動)
//サーボモータの回転角度θ(pos)の範囲は、 0°≦θ(pos)≦180°
//myservo.write 関数には回転角を絶対的な位置で与える。例) 90°から 45°反時計回りに動いてほしいときは、-45°ではなく、45°を関数に入力する。


SoftwareSerial Bluetooth(10, 11); // Arduinoから見て10ピンがRX(受信), 11ピンがTX(送信)になる。bluetoothモジュールのTXにはArduinoのRX(10)が、bluetoothモジュールのRXにはArduinoのTX(11)が接続されていれば良い。

void setup() {
  Bluetooth.begin(9600); //シリアルポートを開いて、伝送速度を9600[bps] に設定
  Serial.begin(9600); //シリアルモニタで確認用
  myservo.attach(9); //サーボモータのPWM端子とArduinoの9番ピンを接続
}

void loop() {
  if (Bluetooth.available()) {
    char input = Bluetooth.read(); //受信したテキストを変数inputに保存
    Serial.println(input); //受信したテキストをシリアルモニタに表示
    if (input == 'a') {
      myservo.write(left_max, mov_speed, true); // ステアを左に切る
    } else if (input == 'b') {
      myservo.write(center_pos, mov_speed, true); // ステアを中心に
    } else if (input == 'c') {
      myservo.write(right_max, mov_speed, true);  //ステアを右に切る
    } else {
    }
  }
}

 PCから「a」が送られてきたらステアを左に、「b」が送られてきたらステアを中心に、「c」が送られてきたらステアを右に切ります。

4. 関連記事

5. 動画

 前回と比べて、接地した状態でもサーボモータが動いています!うれしい!

6. 参考文献


  1. RC HOBBY TIPS「What Is A UBEC [Detailed Explanation]」、(https://rchobbytips.com/what-is-a-ubec/↩︎

  2. Panasonic INDUSTRY「電源回路の基礎知識(1)~電源回路の分類~」、(https://industrial.panasonic.com/jp/ss/technical/b10↩︎

  3. FLITE TEST「WHAT IS A BEC? WHAT IS THE DIFFERENCE BETWEEN A BEC AND UBEC?」、(https://www.flitetest.com/articles/What_is_a_BEC_What_is_the_difference_between_a_BEC_and_UBEC_) ↩︎

  4. RCCRAWLER.COM FORUM「BEC to Receiver to Servo」、(http://www.rccrawler.com/forum/electronics/598550-bec-receiver-servo.html↩︎

  5. RCCRAWLER.COM FORUM「High Voltage servo wiring」、(http://www.rccrawler.com/forum/axial-yeti/561803-high-voltage-servo-wiring.html↩︎

  6. ARRMA FORUM「Run a BEC just for the steering servo for Big Rock?」、(https://www.arrmaforum.com/threads/run-a-bec-just-for-the-steering-servo-for-big-rock.4980/↩︎