初めてのロボットアーム作りに挑戦!0: サーボモータ操作
出田守です。
アイアンマンを観て、ロボットアームが欲しくなりました。
勉強しながら、初めてのロボットアーム作りに挑戦します。
今回の目標
まずは、1自由度で指示した角度に動かせるようになることを目指します。
材料
- サーボモータ FS90 1個
- ESP32DevKitCv4 1個
- マイクロUSBケーブル 1本
配線画像
サーボモータFS90はJRタイプというコネクタの種類です。今回はESP32DevKitCv4から直接モータ用電源を取っていますが、おそらくこれは良くなくて本来はモータ用の別電源を設ける必要があります。
線色 | 役割 |
---|---|
茶 | GND |
赤 | 電源 |
橙 | 制御 |
PWM制御
サーボモータFS90は、PWM制御で角度調整を行います。
ESP32DevKitCからPWM制御するにはledcSetup関数でPWMの値を設定し、ledcAttachPin関数でPWM出力ピンを設定します。ledcWrite関数にduty比を入力して、PWM信号を出力します。
以下のような感じです。
... // pin const int pwmPin = 25; // PWM properties const double frequency = 226.24434389140271493212669683258; const int pwmChannel = 0; const int resolution = 10; ... void setup(){ ... ledcSetup(pwmChannel, frequency, resolution); // PWM値を設定 ledcAttachPin(pwmPin, pwmChannel); // PWMピンを設定 ledcWrite(pwmChannel, dutyCycle); // PWM信号出力 } ...
サーボモータ操作
FS90データシートには、1500usで中立位置として120°レンジでは900~2100us、180°レンジでは500~2500usとなっています。
しかし、私のやり方が悪いのか、中立位置を中心に120°や180°になってくれず、10°位の誤差が出てしまいました。
なので、オシロスコープで地道に調査しました。
調査した結果、以下ぐらいがだいたい良さげな気がしたのでこれで進めていきます。ちなみに角度レンジは余裕をみて今回は5°~175°としています。
角度 | duty比 |
---|---|
5° | 460us |
90° | 1220us |
175° | 2130us |
若干のズレはあるものの今回は良しとしましょう。
どうせならスマホ(Android)から操作したかったので、アプリからBluetooth経由で操作します。
出来上がったプログラムを以下に置いています。
github.com