最近、ホビー向けのサーボモーターで一番有名だと思われるTowerProのSG-90がどこも在庫切れで入手困難な状況となっているみたいなんです。
そこで、SG-90の代替えとなるサーボモーターを秋月電子で探してみました。
FEETECHというメーカーのFS90とFT90BがSG-90より安い価格で販売されていたので、この2つを購入しました。
3つのサーボモーターの外観はこんな感じです。
SG-90はラベルではSG90なんですよね。
また、なぜかFS90のブランド名がFEETECHではなくFITECになっていて、しかもSG-90と似た感じのラベルになっています。
SG-90の代替えを狙っているようなこのラベル...。
まぁ、この3つのサーボモーターの動作を見てください。
わかりました?
SG-90の代わりに使うなら、FS90ではなくFT90Bなんです。しかも代わりというよりFT90Bの方がSG-90より安いし動作も仕様通りで完璧です。
サーボモーターとは
サーボモーターは制御パルスの幅で回転を制御するモーターです。
秋月電子のSG-90の製品ページを見ると、主な仕様項目に「制御パルス」が書いてあります。
「制御パルス」の具体的なイメージは、ページに添付されている「SG-90 PDFデータシート」の説明図を見るとわかります。
「Duty Cycle」と書いてある部分が「制御パルスの幅」です。
SG-90の場合は、500μs(0.5ms)の制御パルスが与えられると0度(-90度)の位置に回転し、2400μs(2.4ms)の制御パルスが与えられると180度(90度)の位置に回転する仕様となっています。
なぜ「仕様となっている」と書いているかはビデオを見ればわかりますよね?
なぜFS90とFT90Bの動作が違うのか
なんと、FS90とFT90Bは根本的な制御方式が「アナログ」か「デジタル」で違っていました。
FS90のスペックシートの抜粋
FT90Bのスペックシートの抜粋
ビデオでの動作の違いは、この制御方式の差が影響しているものと思われます。
他のサーボモーターでもアナログ方式のものがあるようなので要注意かも知れません。
動作検証用の回路とプログラム
マイコンにはESP32を搭載したATOM Liteを使いました。
サーボモーターの回路は単純に電源と制御信号ピンを繋いでいるだけです。
サーボボーターは全て5Vで動かしています。
プログラムを書き込むときは、ATOM Liteをブレッドボードから外して書き込んでいて、サーボモーターの動作時はUSB ACアダプタを電源に使用しています。
(PCのUSBポートの電流では3つのサーボモーターを動かせません)
サーボモータのライブラリには「ESP32Servo」を使用しました。
#include <ESP32Servo.h> // サーボモーターのライブラリ // サーボモーターのピン設定 //#define SG90_PIN 22 //#define FT90B_PIN 19 //#define FS90_PIN 23 // SG-90 #define SG90_MIN 500 // 最小パルスの仕様値(us) //#define SG90_MIN 680 // 最小パルスの修正値(us) #define SG90_MAX 2400 // 最大パルスの仕様値(us) // FT90B #define FT90B_MIN 500 // 最小パルスの仕様値(us) #define FT90B_MAX 2500 // 最大パルスの仕様値(us) // FT90B #define FS90_MIN 500 // 最小パルスの仕様値(us) #define FS90_MAX 2500 // 最大パルスの仕様値(us) //#define FS90_MAX 2480 // 最大パルスの修正値(us) Servo sg90; Servo ft90b; Servo fs90; void setup() { // サーボモーターの割り当て (ピン, 最小パルス, 最大パルス) sg90.attach(SG90_PIN, SG90_MIN, SG90_MAX); ft90b.attach(FT90B_PIN, FT90B_MIN, FT90B_MAX); fs90.attach(FS90_PIN, FS90_MIN, FS90_MAX); } void loop() { // 0度に回転 sg90.write(0); ft90b.write(0); fs90.write(0); delay(3000); // 90度に回転 sg90.write(90); ft90b.write(90); fs90.write(90); delay(3000); // 180度に回転 sg90.write(180); ft90b.write(180); fs90.write(180); delay(3000); }
ESP32C3の注意点
最近いろんなものが値上がりしてしまって、確か当初は1,000円以下で買えたATOM Liteが1,600円もするので、1,000円以下で買えるXIAO ESP32C3がとても魅力的になっています。
しかし、同じESP32という名前がついているのですが、内部アーキテクチャが違っているため無印ESP32と違っている部分があります。
ESP32Servoライブラリでしか試していませんが、無印ESP32だとサーボモーターを16個まで制御でき、どのピンでも割り当てることができるのです。
しかし、ESP32C3ではGPIO 2, 4, 5, 21でしか使うことができず、同時に制御できる個数がたったの2つでした。
まぁ、個人的には問題のない制限なのですが、知っていないとかなりハマることになりかねないと思いました。