壊れたマウスのパーツで回転入力デバイスを作ってみた

© CC BY 4+ visibility1009
© CC BY 4+
visibility1009

マウスホイールのエンコーダパーツを利用して、回転入力式のデバイスを作成してみました。

動画
開発素材

デバイス

ツール

システム構成
system image

M5Stackの設定

  • M5Stack Gray(Core)
  • UIFlow_Fire v1.7.5
  • UIFlow-Desktop-IDE v1.7.4(Deviceで「Fire」を選択)

※この構成じゃないと、M5Stack Grayで「BLE UART」が使えない。

回転検知とチャタリング対応

プログラムはPythonを利用。参考サイトに倣えば、割と簡単に回転検知はできたが、回転が速くなるとチャタリングが発生して値が不安定になってしまう...この対策が一番の苦労ポイント。

最終的に、一時的に回転方向値(1、-1)をリストに代入。要素数が3つになった時点で配列の合計値の正負を判定し、最終値を決める...という方法で、かなり数値が安定した。 要素数を増やせば精度は上がるが、反応が鈍くなるのが難点。(自分の環境では要素数=3が妥当だった。)

スクリプト(抜粋)


pLastPinA = 1
pLastPinB = 1

pCounter = 0
pValList = []
pLastWay = 0

#ホイール検知処理
def dfRotationAct(p):
    global pLastPinA,pLastPinB
    global pCounter,pLastWay,pValList
    
    xListLength = 3 #要素数

    xStateA = pin1.value()
    xStateB = pin2.value()
    
    if xStateA == 1 and pLastPinA == 0:
        
        #回転方向値を一時的にリストに入れる
        if pLastPinB == 0 or xStateB == 0:
            pValList.append(1)                
        elif pLastPinB == 1 and xStateB == 1:
            pValList.append(-1)
        
        pLastPinB = xStateB
        
        #リストの合計値で最終方向を設定
        if len(pValList) == xListLength:
            pLastWay = 1
            if sum(pValList) < 0:
                pLastWay = -1
            
            pValList.clear()
            pCounter = pCounter + pLastWay
    
    pLastPinA = xStateA
    pass


# 入力ピン設定 #########################
pin1 = machine.Pin(19, mode=machine.Pin.IN, pull=machine.Pin.PULL_UP)
pin2 = machine.Pin(22, mode=machine.Pin.IN, pull=machine.Pin.PULL_UP)

pin1.irq(trigger=machine.Pin.IRQ_FALLING|machine.Pin.IRQ_RISING,handler=dfRotationAct)
pin2.irq(trigger=machine.Pin.IRQ_FALLING|machine.Pin.IRQ_RISING,handler=dfRotationAct)

クランクパーツの作成

エンコーダーの六角形の穴にドンピシャでハマるような都合良い素材も3Dプリンタもないので、1.5mm径のアルミワイヤーを使ってみた。 アルミワイヤーはペンチで簡単に潰せるので、接続部の太さ調整が簡単。これで、とりあえず使えるクランクができた。

ストーリー

Playdate」のクランク機能がすごく面白そうだったので、ロータリエンコーダを使えばクランク式回転入力デバイスができるのでは?と思い、ぶっ壊れたマウスからパーツを引っぺがして作業開始!

チャタリング対策が予想以上に厳しくて年末ハッカソンには間に合いませんでしたが、正月休み中になんとか完成できました。

M5Stackを使ったのでBLE通信も実装できたので、これから色々なコンテンツに活用する予定!

メンバー

合同会社プレーンプラン

  • user
    QINFU @qinfu

関連リンク

同じニオイがする作品
  • event 在宅・座禅キット
  • event ぶんぶんゴマをコントローラーにして遊ぶデジタルゲーム
  • event 専用アプリでマウス・キーボードの動作を設定登録「HHKM」
  • event flick-trick

Proto lovers ♥
user

イベントまとめ

コンテストまとめ

作品を登録しよう

モノづくりしている人に、つくった作品を見てもらえ、リアクションがもらえるかも?

close

目次


Proto lovers ♥
user