OneHand FingerDrum をつくる(su120+Tiny2040編) (1/2)

前につくった su120 の4×4 FIgner Drum。
RPi Pico をbread boardで接続したプロトタイプだったので、そろそろ一体型にしたい。
が、RPi Pico の本体サイズは、 51x21mm
。su120の対象マイコン Pro Microは、 330x178mm
。幅も高さも大きいので、su120のマイコン部分にPIN数どころか、大きさも入らない。
ということで、前回試したTiny2040。
OneHand FingerDrum
ちょっとお高いモノの、keybow2040のFingerDrumは、それなりに完成度が高い。
が、問題は演者にあって、 両手でドラムとか無理じゃん
というヘタレなので、いっそ右手専用FIngerDrum をつくることにした。
左手は添えるだけでもいいけど、ロータリーエンドコーダーで、velocity(音の大きさ)
を操作できると下手なりに演奏の幅が、、、と夢が広がる。
仕様
4×4 versionで、実際にユニークな音程は、11種。
なので、3×4でも、BD(バスドラム)を下2つに割り当てる贅沢仕様で、十分足りる。
PIN配置(NG)
○
は、Tiny2040 にPIN HEADを配置し、su120と繋ぐ。
/
は、PINをsu120と非接触にする。はじめからTiny2040にPINをつけないか、ペンチで断ち切る。
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の検知が遅く、ロータリーエンコードの変化に追いついていけないようだ。
過去に調べたのはこの記事。
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 に利用しちゃだめらしい。
-
右回転
True/False False/False False/True True/True
-
左回転
False/True False/False True/False True/True
でも、ロータリーエンコーダーを使わなければ、これでもいいが、、、
後半に続く。