~ 目次 ~
1. UBECを使って電源を供給
前回はサーボモータを無線で操作しましたが、サーボモータの動きがイマイチでした。(笑)
そこで今回はサーボモータの電源をUBECで供給することを考えました。BECはRCクローラーなどをやる人は馴染みのある装置だと思います。
2. UBECについて
Universal Battery Elimination Circuit の略で、スイッチングレギュレータ1の一種です。BECはESCの中に内臓されていることがほとんどで、わざわざ外付けのものを使わなくても問題なく動きます。
単にBECと呼ばれるものは、リニアレギュレータ2を使用しているものが多いみたいで、発熱が大きくなったり、扱える電圧・電流を(スイッチングレギュレータに比べて)は小さい3というデメリットがあります。
外付けのUBECを使うことでレシーバーがサーボモータへ送る電流を大きくできたり、ESCの発熱を抑えることができる1などメリットが多いようです。
3. 実験の内容
3.1. 使ったもの
前回の記事では、使った装置について書いていなかったので整理しておきます。
- マイコン:Arduino UNO
- モバイルバッテリー:SANYO KBC-L54D (3.7V Li-ion 5400mAh ※INPUT,OUTPUT=5.0V)
- バッテリー(サーボモータ用):Dynamite Speedpack (7.2V Ni-MH 700mAh)
- サーボモータ:Hitec DB777WP
- UBEC:Hobbywing 3Amp Switch-Mode UBEC
3.2. 作った回路
前回作成した回路にUBECを追加したものが下の図になります。サーボモータのGND(グランド)を、UBECに直接つなぐかどうかはフォーラム4,5,6でかなり議論になっていました。
ネット上では色々な意見があり悩みましたが、私はUBEC、サーボモータ、マイコンのGNDを全て共通にしました。この回路で特に問題なく動きました。
前回はマイコン用の電源が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. 関連記事
- 次回 →→→ Bluetooth モジュールでRCサーボ・ESCを制御したい [第3回-ESCを使ったモータ駆動&スマホ向けコントローラアプリ試作]
- 前回 →→→ Bluetooth モジュールでRCサーボ・ESCを制御したい [第1回-RCサーボの制御]
5. 動画
前回と比べて、接地した状態でもサーボモータが動いています!うれしい!
6. 参考文献
-
RC HOBBY TIPS「What Is A UBEC [Detailed Explanation]」、(https://rchobbytips.com/what-is-a-ubec/) ↩︎
-
Panasonic INDUSTRY「電源回路の基礎知識(1)~電源回路の分類~」、(https://industrial.panasonic.com/jp/ss/technical/b10) ↩︎
-
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_) ↩︎
-
RCCRAWLER.COM FORUM「BEC to Receiver to Servo」、(http://www.rccrawler.com/forum/electronics/598550-bec-receiver-servo.html) ↩︎
-
RCCRAWLER.COM FORUM「High Voltage servo wiring」、(http://www.rccrawler.com/forum/axial-yeti/561803-high-voltage-servo-wiring.html) ↩︎
-
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/) ↩︎