咕叽大虾 发表于 2020-11-15 16:04:22

树莓派电子琴-MPR121触摸板

       开始前,照例聊一聊为什么要做这个项目,是因为我实在想安利一个快乐的频道给大家:TwoSetViolin双琴侠(b站,yutube可以看到他们的视频,微博和ins有社交账号)
       事情是这样的:我以前对音乐一直比较无动于衷,从去年开始关注到这个频道之后,就开始感受到音乐的乐趣啦,其实更感兴趣那些有趣的人,所以后来每天到点追更新,实在幸福。他们有一个栏目叫LINGLING40HOURS,很多有才的lingling(粉丝称号/天才称号)都凭借各种音乐才华还有乐手梗成功吸引他们的注意,可是不会乐器的我确实很难想到新梗,难道要加入三角铁帮?救命,肯定不可。思考一阵子,得,DIY一个漏洞百出的小玩具琴吧,说不定能投稿上LINGLING40HOURS搏大家一笑,还能给DIY选手们安利一下我的快乐源泉(如果评论区有零学家,请同好一定举起双手让我看到)。
      先看一下成品图,那我们就开始啦!GOGO!
      
一、硬件准备
(一)材料准备

[*]树莓派4BX1 (DFR0619)
[*]树莓派IO扩展板X1(DFR0566)
[*]电容触摸套件   X1 (DFR0129)
[*]带功放喇叭模块X1(FIT0449)
[*]21块木片(3*7)
[*]一些双面胶
[*]少量双导铜箔胶带
[*]一些导电线
[*]硬纸板(尽量选择稍大一点的快递箱子,确保21个琴键能排列到一面)
[*]电源线(type c)X1   (搭配适配器插插座上和用充电宝都行,看你心情)
[*]网线X1   (wifi也行,只要能用PC远程连接到树莓派就可以了)

      
(二)琴键连接
1.首先准备触摸板部分焊接前,我们需要梳理一下逻辑:mpr121可以输出12个信号,可是我们需要3*7=21个信号,所以我们将12个信号分为x(0-4),y(5-11)两组,这样我们就得到了35个信号组合。
如图,将触摸板上焊接导电线,共21个,示意图和焊接图如下,我焊接了黄色和绿色部分。


2.准备琴板部分

   将快递箱子裁剪折叠后得到如下一块三层板子,同时准备一些小纸板条以固定琴键。
   

   然后将触摸板安装到琴板上
   

   稍微加工修整一下
   
3.准备琴键部分
   将彩色木条下端缠上一圈铜箔胶带。
   
   然后粘在纸板条上。效果如图:
   
二、软件准备
   我使用的远程连接软件是MobaXterm。
三、具体操作
(一)、硬件连接
   如图所示:喇叭模块接在22口,触摸板接IIC口。
   
   
   当然,你也可以选择别的引脚,但是请务必保证是接在GPIO口上,具体引脚可以查看下图
   
   最后,网线和电源线找准位置接好即可。

(二)、代码准备

[*]下载库文件相关,这次我全都放进了一个压缩包中,点击链接即可下载到本地pc。
    解压后如图所示:
   
    根据动图操作,将文件夹从本地拖拽到mobaxterm。(请选择Desktop文件夹下)

   
    在本地新建一个python格式的空文件,我这里命名为36.py。下一步梳理代码。

   
   2.梳理代码
1)电子琴的逻辑为:只需要当我们按下相应的按键,喇叭能发出对应的音符即可。mpr121的库文件中已有触摸即可输出0-11信号的功能,于是在这个基础上,我们将12个信号引申至更多信号,于是,我将0-4认为是x,5-11认为是y。组合起来就有35种可能性。在这里我只设置了低音、中音和高音三个部分,所以只需要用到x=1,2,3的情况。在代码中,如果输出了5,那么我会让它输出y=0,依次类推,这样就可以用y做下标去选择频率值了。于是我设定,当x=1时,低音部,此时根据y值决定音符频率;当x=2时,中音部,此时根据y值决定音符频率;当x=3时,高音部,此时根据y值决定音符频率。
2)代码如下:
可以直接复制粘贴。
import sys
sys.path.append('../')
import time


import Adafruit_MPR121.MPR121 as MPR121

import RPi.GPIO as GPIO
Buzzer = 22
GPIO.setmode(GPIO.BCM)
GPIO.setup(Buzzer,GPIO.OUT)
Buzz = GPIO.PWM(Buzzer,440)
Buzz.start(0)

print('Adafruit MPR121 Capacitive Touch Sensor Test')

# Create MPR121 instance.
cap = MPR121.MPR121()
CL =
CM =
CH =

if not cap.begin():
    print('Error initializing MPR121.Check your wiring!')
    sys.exit(1)
   
print('Press Ctrl-C to quit.')
last_touched = cap.touched()
print(last_touched)
x = 0
y = 0
while True:
    global Buzz
    touch = []
    current_touched = cap.touched()
    n=current_touched
    print(n)
   
    #y=current_touched
    for i in range(12):
      if n&1:
            touch.append(i)
      n = n >> 1
    if len(touch) == 2:
      x=touch
      y=touch-5
    print(x)
    print(y)
    if x==1:
      Buzz.start(50)
      Buzz.ChangeFrequency(CL)
    elif x==2:
      Buzz.start(50)
      Buzz.ChangeFrequency(CM)
    elif x==3:
      Buzz.start(50)
      Buzz.ChangeFrequency(CH)
    else:
      Buzz.stop()
    x = 0
    y = 0
    #last_touched = current_touched

    time.sleep(0.5)
   
    #GPIO.cleanup()

3)然后将36.py拖进mobaxterm中examples文件夹下,如图:四、展示效果1.运行代码首先进入36.py的位置,如动图:然后输入python 36.py即可运行。ctrl+c即可退出运行。2.展示效果如图,此时我按下的是低音部第6个音符。视频展示:https://www.bilibili.com/video/BV17y4y167zd?from=search

DFHkhQxFRtP 发表于 2020-11-15 18:19:16

666{:5_116:}

安卓机器人 发表于 2020-11-15 20:25:06

视频看不到啊

gray6666 发表于 2020-11-15 22:05:42

好多焊点牛牛{:6_215:}

咕叽大虾 发表于 2020-11-16 11:02:48

DFHkhQxFRtP 发表于 2020-11-15 18:19
666

{:7_219:}继续加油

咕叽大虾 发表于 2020-11-16 11:05:58

gray6666 发表于 2020-11-15 22:05
好多焊点牛牛

然后焊点太丑哈哈(是时候去学真正的技术了{:7_220:}

咕叽大虾 发表于 2020-11-16 11:09:38

安卓机器人 发表于 2020-11-15 20:25
视频看不到啊

朋友现在看得到吗,我又更新了一下视频(如果还是不可以,或许可以换个浏览器?google好像有时候看不了{:6_214:}

gray6666 发表于 2020-11-16 16:12:10

咕叽大虾 发表于 2020-11-16 11:09
朋友现在看得到吗,我又更新了一下视频(如果还是不可以,或许可以换个浏览器?google好像有时候看不了{: ...

视频可以正常显示

咕叽大虾 发表于 2020-11-16 21:03:49

gray6666 发表于 2020-11-16 16:12
视频可以正常显示

好的!谢谢反馈啊!

lumeizhu20 发表于 2020-11-23 15:17:02

很有创意,很好玩!

咕叽大虾 发表于 2020-11-24 11:33:31

lumeizhu20 发表于 2020-11-23 15:17
很有创意,很好玩!

哈哈,之后还要尝试更多好玩的东西{:6_202:}

咕叽大虾 发表于 2020-12-29 10:44:16

lumeizhu20 发表于 2020-11-23 15:17
很有创意,很好玩!

哈哈 一起玩起来{:5_131:}

BRiver 发表于 2021-5-16 12:05:10

太有创意了,你就是Lingling

咕叽大虾 发表于 2021-6-3 17:14:39

BRiver 发表于 2021-5-16 12:05
太有创意了,你就是Lingling

{:5_190:}哇 可太开心了
页: [1]
查看完整版本: 树莓派电子琴-MPR121触摸板