ProMicroでmidiドラム

目次
ミニドラムシリーズ。
PRi Poco で、M5stickC でやってみた。
もういいかと思っていたら、3Dモデルで面白いものを発見。
ProMicro を前提とした、1ボタンUSB HID キーボード。
3Dモデル
ペッドボトルのキャップをキーキャップにするなんで、面白い!

キーキャップの代わりに、この部品にペットボトルのキャップをはめる。
アーキテクチャ
そういえば、PlatformIO(cpp)で、USB版のMIDIキーボードは作ってなかったので、ちょうどいい。
| マイコン | 言語/Firmware | MIDI | 操作デバイス |
|---|---|---|---|
| RPi Pico | circuitpython | USB | キーボード |
| M5StickC | PlatformIO | BLE | ボタン |
| RPi Pico | circuitpython | USB | タッチセンサー |
| Pro Micro | PlatfromIO | USB | キーボード |
これでどんな環境でも作れることはわかった。
3Dモデルの調整
さっそくプリントしてペットボトルのキャップを付けて、喜んでいたら、壊れた!

デリケートな部分なのに、ぐりぐりとキャップを回せば、こうなる。。。

中心の部分をちょっと補強して、再度プリント

あまり変わらないかも。慎重にセットしよう。
テスト配線(ブレッドボード)

なお、プログラムでは LED_PIN:2 をボタンに合わせて常時点灯->消灯になるようにしているが、実体配線はしていない。
PIN1のVALUE(ON/OFF)が変化すると、TX LED が勝手に点滅するのでそれでよしとした。
プログラム
1ボタンなので、簡単。
platformio.ini
ini
[env:sparkfun_promicro16]
platform = atmelavr
board = sparkfun_promicro16
framework = arduino
upload_port = /dev/tty.usbmodem14423301
lib_deps =
arduino-libraries/MIDIUSB@^1.0.5main.cpp
main.cpp · Gistcpp
#include <MIDIUSB.h>
#define SWITCH_PIN 1
#define LED_PIN 2
void setup()
{
Serial.begin(9600);
Serial.println("pixel off");
pinMode(SWITCH_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
}
void noteOn(byte channel, byte pitch, byte velocity)
{
midiEventPacket_t noteOn = {0x09, 0x90 | channel, pitch, velocity};
MidiUSB.sendMIDI(noteOn);
}
void noteOff(byte channel, byte pitch, byte velocity)
{
midiEventPacket_t noteOff = {0x08, 0x80 | channel, pitch, velocity};
MidiUSB.sendMIDI(noteOff);
}
void loop()
{
static int prev_switch_value = HIGH;
int value;
value = digitalRead(SWITCH_PIN); // 入力ピンを読む
if (prev_switch_value != value)
{
if (value == LOW)
{
// SWITCH ON
noteOn(0, 48, 64); // Channel 0, middle C, normal velocity
MidiUSB.flush();
}
else
{
// SWITCH OFF
noteOff(0, 48, 64); // Channel 0, middle C, normal velocity
MidiUSB.flush();
}
prev_switch_value = value;
// LED ON/OFF
digitalWrite(LED_PIN, value);
}
delay(1);
}3Dプリント筐体への配線
苦手な空中配線をがんばった!

開腹手術のあと、お腹に戻らない腸のように、配線が余る。
しかも、配線がじゃまで、キーキャップが入らない。 泣く泣く、配線を短く切って、二度と開腹したくない中身のできあがり。

まだ飛び出しそうだけど、無理矢理押し込む。
小さな筐体は、難しい。。。
demo
キャップの筐体への打撃音がすごくて、MIDI再生との差がつらい。 期待が大きかっただけに残念な感じ。
ただ、コンセプトは気に入ったので、キーキャップ部分の作りを工夫してみよう。
ちなみに、普通サイズのXDAのキーキャップだとこんな感じ。

