nakkyiのアイコン画像
nakkyi 2026年04月21日作成 (2026年04月21日更新)
セットアップや使用方法 セットアップや使用方法 閲覧数 34
nakkyi 2026年04月21日作成 (2026年04月21日更新) セットアップや使用方法 セットアップや使用方法 閲覧数 34

M5ATOMとM5 SYNTHのドラムパッド製作

M5ATOMとM5 SYNTHのドラムパッド製作

<はじめに>

M5AtomS3を使って、M5Stack用MIDIシンセサイザユニット(SAM2695)でDRUM PADを作ってみました。 
以前はピアノキーボードを作ったのですが、今回はドラムパッドに挑戦です。
配置の都合で8キーにしましたが、M5AtomS3はGPIO端子が6個しか無いので、H.H.CとCYMBAL をダブルにしました。
また、M5 SYNTHユニットのスピーカーが小さいので、外部スピーカーを追加しました。

キャプションを入力できます

<もくじ>

①はじめに
②もくじ
③部品表
④回路図
⑤コード
⑥終わりに

<部品表>

部品名 型式 メーカー 数量
マイコン M5AtomS3 M5STACK
シンセユニット M5Stack用MIDIシンセサイザーユニット M5STACK
キー・ベース 8キー用 自作加工
キースイッチ キーボード用スイッチ 不明
スピーカー 5cm 不明

<回路図>

キャプションを入力できます

<コード>

M5Synth_Durm.ino

#include <M5AtomS3.h> #include "M5UnitSynth.h" M5UnitSynth synth; // --- 設定:ボタンのピン番号(6個) --- const int buttonPins[] = {39, 38, 8, 5, 6, 7}; const int numButtons = 6; // --- 設定:割り当てるドラム音(MIDIノート番号) --- // 36:バスドラ, 38:スネア, 42:ハイハット閉, 46:ハイハット開, 48:タム, 49:シンバル const int drumNotes[] = {36, 38, 42, 46, 48, 49}; const char* drumNames[] = {"KICK", "SNARE", "H.H.C", "H.H.O", "TOM", "CYMBAL"}; // ボタンの状態管理用 bool lastState[numButtons]; void setup() { auto cfg = M5.config(); M5.begin(cfg); // Synthユニットの初期化 (Port.A: G1, G2) // チャンネル9はMIDI規格でドラム専用チャンネルです synth.begin(&Serial2, UNIT_SYNTH_BAUD, 1, 2); synth.setInstrument(0, 9, SynthDrum); // ピンモード設定(内蔵プルアップを使用) for (int i = 0; i < numButtons; i++) { pinMode(buttonPins[i], INPUT_PULLUP); lastState[i] = HIGH; // 初期状態はHIGH(押されていない) } // 画面表示 M5.Display.setRotation(1); M5.Display.setTextColor(YELLOW); M5.Display.setTextDatum(middle_center); M5.Display.setFont(&fonts::Font4); M5.Display.drawString("DRUM PAD", M5.Display.width() / 2, M5.Display.height() / 2); } void loop() { M5.update(); for (int i = 0; i < numButtons; i++) { bool currentState = digitalRead(buttonPins[i]); // ボタンが「押された瞬間(HIGHからLOWになった時)」だけ実行 if (currentState == LOW && lastState[i] == HIGH) { // ドラム音を鳴らす (チャンネル9, ノート番号, 音量127) synth.setNoteOn(9, drumNotes[i], 127); // 画面に楽器名を表示 M5.Display.clear(); M5.Display.setTextColor(CYAN); M5.Display.drawString(drumNames[i], M5.Display.width() / 2, M5.Display.height() / 2); Serial.printf("Play: %s (Note %d)\n", drumNames[i], drumNotes[i]); delay(10); // チャタリング防止用の短い待機 } // 状態を保存 lastState[i] = currentState; } // 数秒後に画面表示を戻す処理を入れるとより使いやすくなります }

<終わりに>

ドラムパッドの動画 はこちらです。
小型のM5ATOM を使って<ピアノキーボード>はいろいろ作られていますが、
今回はM5AtomS3を使って、M5Stack用MIDIシンセサイザユニット(SAM2695)で、
<DRUM PAD キーボード>を作ってみました。
サンプルコードを組み合わせて、何とかドラムらしい音が出るようになりました。

ログインしてコメントを投稿する