この記事はFabbleに掲載されていた記事を転載・修正したものです。
task.jsを使用してCHIRIMENでサーボモータを扱う方法。 PCA9685というサーボドライバを使います。
- CHIRIMEN Basic Shieldを使用します。
- GROVE - 4ピン-ジャンパメスケーブルをI2C0という印字のある列の5Vという印字のある箇所に接続してください。
-
GROVE - 4ピン-ジャンパメスケーブルの黒、赤、黄色、白色のケーブルをそれぞれPCA9685のGND,VCC,SCL,SDAに刺してください。
-
普通のジャンパワイヤ(オス~メス)でPCA9685のVCC,V+を接続してください。
-
サーボモーターをch0に接続してください。
-
シールドがない場合も、以下の画像を参考にして回路を準備してください。
- chirimenServoを参考にソースコードを準備してください。
- task.js、webgpio polyfillを使用しています。
サンプルプログラムについて解説。
- I2Cポートの初期化
- サーボドライバの初期化処理
- サーボモータの制御
- chirimenAppBase.jsを準備します。
// task.js ライブラリ
const { spawn, sleep } = task;
// document 内のリソースが読み終わるのを待つ
document.addEventListener("DOMContentLoaded", () => {
// task.js の spawn 関数内では Promise が同期的に記述できる
spawn(function() {
});
});
- I2Cポートの初期化処理をspawn関数内に記述します。
// I2C へのアクセサを取得
const accessor = yield navigator.requestI2CAccess();
// I2C 0 ポートを使うので、0 を指定してポートを取得
const port = accessor.ports.get(0);
- サーボモーターを制御するための処理はPCA9685クラスにまとめてあります。
- 初期化したI2Cポートオブジェクトとサーボドライバ(PCA9685)のアドレス(0x40)を指定して、pca9685クラスをnew呼び出しして、さらにサーボドライバの初期化処理を記述します。
const pcs9685 = new PCA9685(port,0x40);
yield pcs9685.init(0.00050,0.00240,180);
- 引数に指定している数値
(0.00050,0.00240,180)
はサーボモータ毎に異なる設定値です。SG90というサーボモータを使用する場合は、この通りに記述します。
- サーボモータの制御は制御するサーボモータのチャンネル(今回は0を指定)と、角度(angle変数で指定)を指定して、サーボモータの制御処理のように記述します。
yield pcs9685.setServo(0,angle);
- 以下の記述は10度と170度を交互に設定する処理です。
angle = (angle<=10) ? 170 : 10;
- 正しく動作すれば、サーボモータが1秒毎に10度、170度の角度に動きます。