5
1

More than 5 years have passed since last update.

Groveサーボモータを二つ使ってシオカラーズを動かして和む #スプラトゥーン

Posted at

Nefry BTでGrove Servoを動かしてみるの続きです。

二つ以上動かすときはチャンネルに注意

とりあえずこんな感じで動かしました。

servo.ino
//基本Iotは2.4GHz帯を使うこと
#include<Nefry.h>
#include"esp32-hal-ledc.h"

#define SERVO_PIN_A D2
#define SERVO_PIN_B D0

//PWM信号の周波数をPWMをつくっているクロック周波数で割ったもの
//ledcSetupでPWMの範囲を8bitに設定したとき、0~255 10bitのときは0~1023となる、2進数の話
#define PWM_BITWIDTH 16

//角度 -> PWM
int deg2pw(int deg){
    double ms = ((double) deg - 90.0) * 0.95 / 90.0 + 1.45;
    return (int) (ms / 20.0 * pow(2, PWM_BITWIDTH));
}

void setup() {
  Serial.begin(115200);
  //ledcSetup(チャンネル数(0~),周波数(たとえばPWMサイクル20mHzなら50Hzになるという意味(SG90の場合))、分解能は任意(ただし限度はある))
  ledcSetup(0,50,PWM_BITWIDTH);
  ledcAttachPin(SERVO_PIN_A,0);
  ledcAttachPin(SERVO_PIN_B,1);
}

void loop(){
  ledcWrite(0,deg2pw(0));
  ledcWrite(1,deg2pw(0));
  delay(800);
  ledcWrite(0,deg2pw(100));
  ledcWrite(1,deg2pw(100));
  delay(800);
}
  • ledcAttachPin(SERVO_PIN_A,0); -> 一つ目のサーボモータを扱うピンをチャンネル0番に
  • ledcAttachPin(SERVO_PIN_B,1); -> 一つ目のサーボモータを扱うピンをチャンネル1番に

といった形でアタッチ(初期化)してあげます。3個以上の場合は2番,3番...とアタッチすればOKです。

loop内ですが、

ledcWrite(0,deg2pw(0));
ledcWrite(1,deg2pw(0));
delay(800);
  • サーボモータ0番目と1番目を角度0度にして0.8秒待機
ledcWrite(0,deg2pw(100));
ledcWrite(1,deg2pw(100));
delay(800);
  • サーボモータ0番目と1番目を角度100度にして0.8秒待機

これの繰り返しです。

個人的にはこのチャンネルをセットする使い方がイマイチ好きじゃないですがそういうものみたいです。

合わせて動かすと気持ちいいですね。

シオカラーズを動かします

せっかくなので少し工作してシオカラーズを動かします。

  • 準備物
    • amiibo x 2(シオカラーズ)
    • Amazonのダンボール
    • カッター
    • セロテープ

まずはどこの家でもAmazonのダンボールが転がってると思うのでそれを加工して土台を作ります。

土台をamiiboにテープで貼り付けて裏面にGrove Servo付属の丸いシャフトをくっつけます。

最後にamiiboとサーボをくっつければ完成です。

まとめ

音楽流しながら動かすと雰囲気出ます。かわいい。

和むよこれは。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1