ルンバにスピッツを演奏させてみた
お疲れ様です。高橋です。
家にあるルンバにArduinoを挿して、スピッツの「涙がキラリ☆」のサビ部分だけ演奏させてみました。
ルンバのシリアルポート
うちの780は、取っ手の裏側にシリアルポートが出ています。
シリアル通信で自由にルンバを動かしたり出来たら、きっと楽しい。それがwi-fiやbluetooth経由だと、きっともっと楽しい。
とりあえず有線で実験してみる事にしました。
ルンバのシリアル通信インターフェイス仕様
ルンバの製造元であるiRobot社は、Roomba Open Interface (ROI)という、インターフェイス仕様を公開しています。
iRobot® Roomba 500 Open Interface (OI) Specification
仕様をざーっと斜め読みしていたら、こんなページを発見。
こいつ(ルンバ)、音楽を自由に演奏出来るのか!?
更に読み進めていくと、こんなページと・・・
こんなページがありました。
つまり、
- 曲登録命令(code:140)で、16小節からなる曲を5つ登録出来る。
- 曲演奏命令(code: 141)で、登録した曲を別途演奏する事が出来る。
って事です。
曲を演奏してみる事にしました。
ルンバ-Arduino間のシリアルケーブル自作
ルンバ側のシリアルポートはミニDINの7pinですので、千石の2号館の2階でプラグを買ってきました。1個155円です。
バラすとこんな感じ。
くっつけると、こんな感じ。
プラグだけでは役に立たないので、そこから伸びる線を、ケーブル屋で買ってきます。7pin全部使わず、RX, TX, GNDの3線だけあれば事足りるので、3芯の線を1メートル90円で売っていたので、2メートル買います。180円。
先っちょをカッターで剥きます。
シールドにくるまれている3芯の先を剥きます。なんか、リッツ線との格闘を思い出してしまいました。。
そして、ミニDINと線を半田付けです。
位置を固定させて・・・
ジワーっと半田のノリが良く、吸い付く感じで半田付け出来ました。
こんな調子で3芯全て半田付けを終え。
グルーガンで固定させます。
ケースをかぶせて出来上がり。線の反対側には、Arduinoに挿すためのジャンパー線を半田付けします。
3線を半田付けし、熱収縮チューブでいい感じに包んでやります。
完成。
スケッチ
最終的に動作したスケッチは下記の通りです。
#include <SoftwareSerial.h>;
byte song_buffer01[24] = {140, 1, 10, 66, 16, 67, 16, 69, 16, 67, 32, 66, 32, 62, 16, 64, 16, 66, 16, 67, 16, 66, 64};
byte song_buffer02[22] = {140, 2, 9, 66, 16, 67, 16, 69, 16, 67, 32, 66, 32, 71, 32, 59, 16, 62, 16, 61, 64};
byte song_buffer03[20] = {140, 3, 8, 62, 16, 64, 16, 61, 16, 62, 16, 64, 16, 66, 16, 62, 16, 64, 16};
byte song_buffer04[14] = {140, 1, 5, 66, 16, 67, 16, 64, 16, 66, 16, 71, 64};
byte song_buffer05[18] = {140, 2, 7, 71, 16, 67, 16, 64, 16, 62, 16, 61, 48, 62, 16, 62, 64};
SoftwareSerial device(10, 12);
void setup() {
device.begin(115200);
device.write(128);
delay(20);
device.write(130);
delay(20);
device.write(song_buffer01, 24);
delay(20);
playMeasure(4000, 1);
device.write(song_buffer02, 22);
delay(20);
playMeasure(4000, 2);
playMeasure(4000, 1);
playMeasure(4000, 2);
device.write(song_buffer03, 20);
delay(20);
playMeasure(2000, 3);
device.write(song_buffer04, 14);
delay(20);
playMeasure(2000, 1);
device.write(song_buffer05, 18);
delay(20);
playMeasure(4000, 2);
}
void playMeasure(int wait, byte song) {
device.write(141);
device.write(song);
delay(wait);
}
void loop() {
}
- シリアルでデバッグしながらの作業を行ったため、ルンバとの通信はsoftwareserialを使っています。
- 曲を書き込んだ後は、20msec程度のdelayを掛けないと、再生が上手く行きませんでした。EEPROMをいじっていた時も似たような現象があったので、割りと時間掛からずに原因を絞れました。
- 115200は780のデフォルトのbpsです。
ルンバ-Arduino間に、作ったケーブルを配線し、スケッチを書き込んで実行すると、冒頭の動画のように演奏されます。
応用
曲の登録と演奏を小刻みに繰り返せば、おそらくキーボードからのMIDI OUTをArduino側で受け付け、ルンバで演奏出来るはずです。
ルンバのMIDI音源化に挑戦したい所です。出来れば無線経由で。
以上、よろしくお願い致します。
関連記事
-
-
ArduinoIDE1.6.4+ATTiny13Aで赤外線リモコン(難航)
お疲れ様です。高橋です。 先日から引き続いて、ATTiny13Aで赤外線リモコン …
-
-
webからUSBカメラ+Raspberry Pi
お疲れ様です。高橋です。 The Internetから、RaspberryPiの …
-
-
EEPROM書き込みシールドの作成
お疲れ様です。高橋です。 先日成功したPCからのEEPROM書き込みですが、ジャ …
-
-
電子オルゴール 動作試験 #2
お疲れ様です。高橋です。 Pro Mini互換機とYMZ294、EEPROMで作 …
-
-
YMZ294のMIDI音源化と、YMZのピン数圧縮
お疲れ様です。高橋です。 YMZで使うピン数を11本から6本に減らす事によって、 …
-
-
aitendoで買った4桁7セグLEDを使う
お疲れ様です。高橋です。 aitendoの4桁7セグLED aitendoで1個 …
-
-
FM音源YM2203をArduinoで鳴らしたい #1
お疲れ様です。高橋です。 きっかけ 4月から現在に掛けてのコロナな最近、会社のと …
-
-
満員電車内でのオナラと検知 #4
お疲れ様です。高橋です。 硫化水素センサーが到着しました。結構前に到着していたの …
-
-
汎用ロジックIC(NAND/NOR/AND/OR)試験機
お疲れ様です。高橋です。 単一の機能を持ったシンプルな、汎用ロジックICという物 …
-
-
「びんぼうでいいの」を組み立ててみた。
お疲れ様です。高橋です。 懸案だったヘッドフォンの修理が片付き、やりたい事をやり …
- PREV
- EEPROM書き込みシールドの作成
- NEXT
- ルネサス RX621でLチカするまで

















