OneHand FingerDrum をつくる(su120+Tiny2040編) (1/2)
前につくった 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をつけないか、ペンチで断ち切る。
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
でも、ロータリーエンコーダーを使わなければ、これでもいいが、、、
後半に続く。