Androidのメモとか

ポキオの日記です。今日も遅延してない。

静電容量センサーをつかってファファファファーン

またファーンしてます。

ポキオ Raspberry Pi Speaker pHat サンプラー

前回まで

サンプラー買うお金がないので、Raspberry Piで作っています。

relativelayout.hatenablog.com

relativelayout.hatenablog.com

relativelayout.hatenablog.com

誰か買ってください。

ボタンの押下音がうるさい件

やっぱりうるさいんですよね、ボタンを押したときの音が。

ポキオ Raspberry Pi Speaker pHat サンプラー

そこで、ボタンの代わりのインターフェイスを探すことに。で、押してダメならタッチでどうだ、ということで静電容量センサを使うことに。

この投稿をInstagramで見る

導電性の糸で遊んでる(仕事しろ)

pokio(@pokiiiiio)がシェアした投稿 -

モジュールのインターフェイスはi2cになっていて、RPi以外にもArduinoでも使えてしまうやつ。モジュールには10個の入力端子がついていて、触るなどして静電容量が変化を検知できるというわけです。

静電容量センサーでファファファファファーン

というわけで、このモジュールを使ってユーザーインターフェイスを作成。モジュールをブリキの板につないでボタンの代わりにしてみました。

ポキオ Raspberry Pi Speaker pHat サンプラー

こんな感じ。で、これでファファファファーンしてみました。

この投稿をInstagramで見る

ファファファファーン

pokio(@pokiiiiio)がシェアした投稿 -

まぁまぁいいんじゃないですかねぇ。目的であったボタンの押下音はなくなりました。

ただ、今度目立ってきたのは「押したのに音がならないことがある」ということ。一難去ってまた一難。センサーが反応できていないのか、音を鳴らすプロセスが詰まってるのか…?なにはともあれ、本物のサンプラーに近づくのはなかなか難しいものですね。

コードはこちら

静電容量センサモジュールのライブラリ(adafruit_mpr121)がPython3向けだったため、Python3で動作させています。

import pygame.mixer
import time
import board
import busio
import adafruit_mpr121
import threading
 
i2c = busio.I2C(board.SCL, board.SDA)
mpr121 = adafruit_mpr121.MPR121(i2c)

input_state1 = False
input_state2 = False
input_state3 = False
input_state4 = False
input_state5 = False
input_state6 = False

pygame.mixer.init()

sound1 = pygame.mixer.Sound("/home/pi/Music/sound1.wav")
sound2 = pygame.mixer.Sound("/home/pi/Music/sound2.wav")
sound3 = pygame.mixer.Sound("/home/pi/Music/sound3.wav")
sound4 = pygame.mixer.Sound("/home/pi/Music/sound4.wav")
sound5 = pygame.mixer.Sound("/home/pi/Music/sound5.wav")
sound6 = pygame.mixer.Sound("/home/pi/Music/sound6.wav")

def play1():
    sound1.stop()
    sound1.play()

def play2():
    sound2.stop()
    sound2.play()

def play3():
    sound3.stop()
    sound3.play()

def play4():
    sound4.stop()
    sound4.play()

def play5():
    sound5.stop()
    sound5.play()

def play6():
    sound6.stop()
    sound6.play()

while True:
    if mpr121[0].value == True and input_state1 == False:
        print('Button1 Pressed')
        input_state1 = True
        threading.Thread(target=play1).start()    
    else:
        input_state1 = mpr121[0].value

    if mpr121[2].value == True and input_state2 == False:
        print('Button2 Pressed')
        input_state2 = True
        threading.Thread(target=play2).start()   
    else:
        input_state2 = mpr121[2].value

    if mpr121[4].value == True and input_state3 == False:
        print('Button3 Pressed')
        input_state3 = True
        threading.Thread(target=play3).start()   
    else:
        input_state3 = mpr121[4].value

    if mpr121[7].value == True and input_state4 == False:
        print('Button4 Pressed')
        input_state4 = True
        threading.Thread(target=play4).start()   
    else:
        input_state4 = mpr121[7].value

    if mpr121[9].value == True and input_state5 == False:
        print('Button5 Pressed')
        input_state5 = True
        threading.Thread(target=play5).start()   
    else:
        input_state5 = mpr121[9].value

    if mpr121[11].value == True and input_state6 == False:
        print('Button6 Pressed')
        input_state6 = True
        threading.Thread(target=play6).start()   
    else:
        input_state6 = mpr121[11].value
「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。