前につくった su120 の4x4 FIgner Drum。

RPi Pico をbread boardで接続したプロトタイプだったので、そろそろ一体型にしたい。 が、RPi Pico の本体サイズは、 51x21mm 。su120の対象マイコン Pro Microは、 330x178mm 。幅も高さも大きいので、su120のマイコン部分にPIN数どころか、大きさも入らない。

ということで、前回試したTiny2040。

OneHand FingerDrum

ちょっとお高いモノの、keybow2040のFingerDrumは、それなりに完成度が高い。

が、問題は演者にあって、 両手でドラムとか無理じゃん というヘタレなので、いっそ右手専用FIngerDrum をつくることにした。

左手は添えるだけでもいいけど、ロータリーエンドコーダーで、velocity(音の大きさ) を操作できると下手なりに演奏の幅が、、、と夢が広がる。

仕様

4x4 versionで、実際にユニークな音程は、11種。 なので、3x4でも、BD(バスドラム)を下2つに割り当てる贅沢仕様で、十分足りる。

PIN配置(NG)

○ は、Tiny2040 にPIN HEADを配置し、su120と繋ぐ。 / は、PINをsu120と非接触にする。はじめからTiny2040にPINをつけないか、ペンチで断ち切る。

Tiny2040を差すとこんな感じ。

ROW 3 は、Tiny2040上でGNDにあたるので、そのままでは使えない 。 COL E と繋いで GP7 で制御する。

キースキャンは、完璧だ!と思ったが、なぜかロータリーエンコーダー動きが不安定。うーん。

ちゃんと認識することもあるが、ダメなときもある。違う方向に回転させても、同じ向きの回転しか認識しない。

ロータリーエンコーダーの test program

どうやら、ロータリーエンコーダーの状態検知(F4/F5)に、AnalogのGP29/GP28を利用しているのが問題らしいと判断。

テスト用の回路を用意し、以下のprogram で検知(INPUT)PINを変えながらテストした。

結果、AnalogのA3-0(GP29-26) は、Digital Inputで利用しても、ON/OFFの検知が遅く、ロータリーエンコードの変化に追いついていけないようだ。

過去に調べたのはこの記事。

python
import board
import time
import digitalio


# LED
led_pin = board.LED_G
led = digitalio.DigitalInOut(led_pin)
led.direction = digitalio.Direction.OUTPUT
led.value = True

# ENCODER
# a = digitalio.DigitalInOut(board.GP0
a = digitalio.DigitalInOut(board.GP29)
a.switch_to_input(pull=digitalio.Pull.UP)

# b = digitalio.DigitalInOut(board.GP1)
b = digitalio.DigitalInOut(board.GP28)
b.switch_to_input(pull=digitalio.Pull.UP)


pre_a = True
pre_b = True

while True:

    aval = a.value
    bval = b.value
    if pre_a != aval or pre_b != bval:
        pre_a = aval
        pre_b = bval
        print("{}/{}".format(aval, bval))
        led.value = False
    else:
        led.value = True

実際には、Digital である GP0, GP1 なら以下のようにちゃんと検知できるのが、 Analog の G29, GP28 ではフラフラ。検知しなかったり、不定だったり。 うーん、AnalogをDigital Input に利用しちゃだめらしい。

  • 右回転
text
True/False
False/False
False/True
True/True
  • 左回転
text
False/True
False/False
True/False
True/True

でも、ロータリーエンコーダーを使わなければ、これでもいいが、、、

後半に続く。