CHIRIMEN Servo
Owner & Collaborators
License
CHIRIMEN Servo by ChirimenEdu is licensed under the Creative Commons - Attribution-ShareAlike license.
Summary
CHIRIMENでサーボモータを制御する方法。
Materials
Tools
Blueprints
Making
- サーボモータとは、回転位置を制御することができるモータで、ロボットの関節部分などに用いられることが多い。
- 回転位置の検出器付きのモーターで、フィードバック制御されるものが一般的。
- サーボモータはPWM信号で制御されることが一般的。PWM制御とは電源オン/オフのパルス間隔を変化させることで制御を行う方式である。
- CHIRIMENからPWM信号を出力するために、I2Cインターフェースを持つサーボドライバを使用する。
- サーボドライバはI2Cの信号を受けて、PWM信号によってサーボモータを制御する。
- サーボモータアプリのダウンロード
- Web I2C Polyfillの導入
- サーボモータアプリの読み込み
- サーボモータ回路の配線
- アプリ実行
- サーボモータが動作しない場合の対処
- CHIRIMEN examplesをダウンロード(Download zipというボタンでダウンロード可能)して、任意のディレクトリに展開する。
- Web IDE左上の「パッケージ型アプリを開く」からi2c-PCA9685ディレクトリを読み込む。
- 配線図に従ってサーボモータ、サーボドライバを接続する。接続にはスルーホール用ジャンパ線を用いる。
- CHIRIMENのI2C0_SDA(CN2-12)、I2C0_SCL(CN2-11)とサーボドライバのSDA、SCLを接続する。
- CHIRIMENのGND(CN2-1)、VCC(CN2-18)とサーボドライバのGND、VCCを接続する。
- サーボドライバのV+(モータ用の電源入力)とVCCを接続する。
- サーボモータのPWM、V+、GNDとサーボドライバのPWM、V+、GNDを接続する。
- 配線が正しいことを確認し、CHIRIMENとPCを接続する。
- アプリをインストールする。
- 正しく動作すればサーボモータが回転し始めることが確認できる。
- サーボモータを動かすとCHIRIMENが落ちるという現象が発生。サーボモー タは多くの電力を必要とするため、PCのUSB端子(500mA電源)から電源供給する場合、駆動電力不足となる場合がある。以下の対処により回避できることがある。
- サーボモータへの供給電力を3.3Vにしてみる。
- CHIRIMENに対して1A以上(2A推奨)の電流を供給する。
- サーボドライバへの電源供給をCHIRIMENと別系統で用意する。
- サンプルプログラムのindex.html、main.jsについて解説する。
- Index.htmlでpolyfillの読み込みを行う
- I2CAccessインターフェースを取得する(おまじない)
- I2C端子の初期設定を行う
- サーボドライバのコンストラクタ呼び出し
- サーボドライバの初期化
- 温度センサの読み取り
- 温度センサの読み取り後の処理
- webI2Cを扱うためのpolyfill(webi2c.js)を読み込む。code:polyfillの読み込み
- I2Cの操作を行うため、I2CAccessインターフェースを取得する。
- code:I2CPortMapインターフェースの取得処理とcode:エラー処理をおまじない的に記述する。
- i2cAccess.ports.get(<ピン番号>)でi2cPortオブジェクトを取得する。code:I2CPortオブジェクトの取得。
- CHIRIMENにはI2C0(CN2側)、I2C2(CN1側)の二つの端子が出ているため、ピン番号には0か2を指定する。
- サーボドライバ(PCA9685)のライブラリを読み込む。code:サーボドライバライブラリの読み込み
- new PCA9685(<i2cPortオブジェクト>,<i2cデバイスアドレス>)でPCA9685のコンストラクタ呼び出しを行う。code:PCA9685コンストラクタ呼び出し
- PCA9685使用サーボドライバのデバイスアドレスは初期値が0x40なので、これを指定する。
- pca9685.init(<最小パルス>,<最大パルス>,<角度範囲>)のように、呼び出したコンストラクタのinitメソッドを使用してサーボドライバの初期化を行う。code:サーボドライバの初期化
- 最小パルス、最大パルス、角度範囲はサーボモータの型番毎に設定されている値であり、データシートを読み取り設定する。サンプルコードではSG90というサーボモータの設定が入力されている。
- サーボドライバの初期化処理の結果はPromise型で帰ってくる。そのため、pca9685.init().then(function(){ //サーボドライバ初期化後の処理 });のように記述する。code:サーボドライバ初期化後の処理
- サーボドライバの初期化後、pca9685.setServo(<チャンネル>,<角度>)のようにsetServoメソッドを利用してサーボモータを指定の角度に制御することができる。code:サーボモータの制御
- チャンネルはサーボドライバにサーボモータを接続しているチャンネルを指定する。
- 角度はサーボモータで制御可能な角度範囲内で整数で指定する。
- サーボモータの制御後の結果はPromise型で帰ってくる。そのため、pca9685.setServo().then(function(){ //サーボモータ制御後の処理 });のように記述する。code:サーボモータ制御後の処理
Comments