スマートスピーカーをパリピ仕様にして踊らせる
音楽を聴くと、人はつい踊り出したくなるものです。オモチャやガジェットも似たようなもので、音楽に合わせて動く製品は見ているだけでも楽しく、人気が出やすいのではないでしょうか。懐かしいところでは音に反応して踊る花「フラワーロック」が有名です。近年では、音楽に合わせて踊る「roboBeats」というロボットもあるようです。
家庭にスマートスピーカーが普及した現代、音楽に合わせてスピーカーそのものが踊り出すと、もっと楽しい気分になると思います。リズムに合わせて踊る、ダンシングスマートスピーカーを作ってみました。
構成を考える
頭にはAmazonのスマートスピーカー「Echo Dot」、腹部には液晶付きのマイコンボード「M5Stack」を搭載します。Echo Dotによる音楽再生トリガー「アレクサ、○○して」をM5Stackで受け取り、音楽の再生中、リズムに合わせて腕のサーボを動かします。
腕のサーボは左右ともピッチとヨーの2軸ずつで構成します。片腕1軸だけだと動きが単調過ぎるし、3軸以上に増えるとコストや制御難易度が上がってしまうためです。シンプルな構造を維持しつつ、リズミカルな動きを再現できるようにします。
準備するもの
必要な部品は以下の通りです。合計 2万2205円。3Dプリンター造形品は500g3000円のフィラメントで金額を換算しています。Echo Dotは定価だと高いので、Amazonのセール時に購入するとよいでしょう。50%割引になることもあります。
Echo Dot ×1個(5980円)
M5Stack Basic ×1個(6545円)
SCS0009 ×4個(5148円)
FE-URT1-C001 ×1個(1078円)
DCジャック MJ-10 ×1個(60円)
M5Stack用ユニバーサル基板 ×1個(407円)
M5Stack用2x15ピンヘッダ ×1個(1067円)
GROVE - ユニバーサル4ピンコネクタ ×1セット(297円)
PHコネクタトップ型2P ×1個(10円)
コネクタ付コード2P ×1個(30円)
ACアダプター5V2A ×1個(620円)
ピンヘッダ1×3 ×1個(30円)
ピンソケット1×4 ×1個(20円)
タッピングビス ×1セット(100円)
3Dプリント造形品:Body ×1個(504円相当)
3Dプリント造形品:Arm ×2個(236円相当)
3Dプリント造形品:Bracket ×2個(73円相当)
※価格は製作時のものです。(編集部注)
モデリングする
M5Stackを中心に配置し、まずは体(Body)からモデリングしていきます。Echo Dotはどのバージョンでも対応できるよう、あえて固定せず上面を平らにした上面に載せます。 Bodyの表面は少しオシャレに、六角形のハニカムタイル模様にしました。造形すると光が反射し、見栄えや質感が向上します。
Bodyの中にはサーボを4つ配置し、外からArmを固定します。かわいい見た目にすべく、全体を2頭身にしました。
基板を作る
M5Stack用ユニバーサル基板にコネクタやピンヘッダをはんだ付けします。スズメッキ線やポリウレタン銅線を使って、電源や信号線をつないでいきます。
ピンヘッダ1x3が「SCS0009」、ピンソケット1x4が「FE-URT1-C001」、PHコネクタがDCジャックと接続されることになります。完成した基板がこちらです。
サーボIDを設定する
シリアルサーボSCS0009には、それぞれIDを指定します。初期値は全て1になっているので、専用アプリケーション「FT SCServo Debug」で変更します。このとき、SCS0009はFE-URT1-C001を介してPCと接続します。
アプリを起動し「Com」は任意のポート、「BaudR」は「1000000」を選択し「Open」ボタンを押します。「Search」ボタンを押すと「ID」が「1」、「Modle」が「SCS009」と表示されます。
次に「Programming」タブ、「Address 5」を選択します。右下のテキストボックスに変更したい値を入力し、「Save」ボタンを押して、IDを変更します。これらの手順を繰り返すことで、サーボIDをそれぞれ1~4に設定します。
組み立てる
まずはArmのサーボを組み立てます。サーボとBracketをタッピングビスで固定します。
組み立てたサーボをBodyへ押し込み、タッピングビスで固定します。後方にはDCジャックを取り付けます。
購入時、SCS0009に付属していた中継基板を使って配線をつなぎ、FE-URT1-C001と接続します。
はんだ付けが完了したM5Stack用ユニバーサル基板に、残る全ての配線をつなげます。
そして、M5Stack用ユニバーサル基板をタッピングビスでBodyの正面に固定します。
Armにはサーボホーンを取り付けます。サーボホーンはそのままだと大きかったため、十字部を程よいサイズにカットしました。
M5StackとArmを取り付けます。体が出来上がりました。
最後にEcho Dotを載せて完成です。
振り付けを考える
ダンスの振り付けのためにサーボを細かく制御するのは、難易度が高そうに思えます。しかし、工夫すれば、意外とシンプルな方法で実装できます。
この作品で使用しているSCS0009は、フィードバック機能が充実しています。負荷、位置、速度といった情報が、リアルタイムに取得できるのです。この機能を使って、手動でロボットの腕を動かし位置を記憶させ、記憶した位置に腕を運ぶ動作を繰り返させることで動きを再現します。
まずは、以下のプログラムを書き込みます。サーボの制御には「SCServoライブラリ」を使用しました。"ReadPos"関数で、サーボの位置が取得できます。
#include <SCServo.h>
SCSCL servo;
void setup(){
Serial.begin(115200);
Serial2.begin(1000000);
servo.pSerial = &Serial2;
}
void loop(){
for (int i = 1; i <= 4; i++){
if(i == 1){Serial.print("{");}
Serial.print(servo.ReadPos(i));
if(i == 4){
Serial.println("},");
}else{
Serial.print(",");
}
}
delay(1000);
}
このプログラムでは、1秒ごとに各サーボの位置を取得し、シリアル出力します。腕を自由に動かしながら、ここで出力された値をコピーし、位置データの配列として再利用します。その後、以下のプログラムを書き込むことで、全く同じ動きが再現可能です。
#include <SCServo.h>
SCSCL servo;
int pos[][4]={{314,531,479,690},}; // この配列に値をコピー
void setup() {
Serial2.begin(1000000);
servo.pSerial = &Serial2;
for (int i=1; i <= 4; i++){
servo.EnableTorque(i, HIGH);
}
}
void loop() {
int motion = sizeof(pos)/sizeof(*pos);
for (int i=0; i < motion; i++){
for (int j=1; j <= 4; j++){
servo.WritePos(j, pos[i][j-1], 500);
}
delay(500);
}
}
この原理を用いて振り付けを記録し、自分だけの踊りを作ることができます。
Alexaと連携する
「Espalexa」というライブラリを利用します。Espalexaはスマートライト「Philips hue」のエミュレーターとなっており、Alexaから、M5StackをPhilips hueとして認識させることで利用します。M5Stackにはこちらのプログラムを書き込みます。仕組みは簡単で、Espalexaにデバイスを登録し、Alexaからの呼び出しでコールバック関数を起動するだけです。ここではコールバック時に、先ほど振り付けをしたモーションを呼び出すようにしています。
次に、スマートフォンのAlexaアプリを起動し、デバイスを追加します。セットアップするデバイスは「その他」「Wi-Fi」を選択し、「デバイスを検出」を押してしばらくすると登録が完了します。
セットアップ後、登録されたデバイスを選択し「定型アクションを作成」します。定型アクション名と実行条件を「アレクサ、踊って」、アクションを「電源:オン」「Amazon MusicでAlexa音頭を再生」にしました。楽曲は好みの音楽に変更可能です。
これで準備完了です。それではスマートスピーカーを踊らせましょう。
レッツダンシング!
「アレクサ、踊って」と話しかけると、軽快な音楽と同時にダンシングスマートスピーカーが踊り始めます。とても愉快ですね。
しかし、せっかくM5Stackを付けているのに、画面に何も表示されないのは寂しい気がします。踊っている最中はもっとハイテンションになってほしいので、かの有名な虹色に光るオウム「Party Parrot」を表示しました。グラフィックライブラリ「LovyanGFX」のサンプルを使用します。
これまでのスマートスピーカーには、どことなく堅苦しい印象がありましたが(音声が丁寧なのが原因かもしれませんね)、このダンシングスマートスピーカーは、とてもかわいらしく愉快なものになりました。製品のデザインにアレンジを加えたり、動きに変化を与えたりすることで、印象が大きく変わるものですね。ちょっとした工夫で、生活をもっと楽しくしていきたいものです。
TOP背景使用画像:UnsplashのAditya Chinchureが撮影した写真