ミニドラムシリーズ。

PRi Poco で、M5stickC でやってみた。

もういいかと思っていたら、3Dモデルで面白いものを発見。

ProMicro を前提とした、1ボタンUSB HID キーボード。

3Dモデル

ペッドボトルのキャップをキーキャップにするなんで、面白い!

キーキャップの代わりに、この部品にペットボトルのキャップをはめる。

アーキテクチャ

そういえば、PlatformIO(cpp)で、USB版のMIDIキーボードは作ってなかったので、ちょうどいい。

マイコン言語/FirmwareMIDI操作デバイス
RPi PicocircuitpythonUSBキーボード
M5StickCPlatformIOBLEボタン
RPi PicocircuitpythonUSBタッチセンサー
Pro MicroPlatfromIOUSBキーボード

これでどんな環境でも作れることはわかった。

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.5

main.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のキーキャップだとこんな感じ。