10042浏览
查看: 10042|回复: 13

树莓派电子琴-MPR121触摸板

[复制链接]
       开始前,照例聊一聊为什么要做这个项目,是因为我实在想安利一个快乐的频道给大家:TwoSetViolin双琴侠(b站,yutube可以看到他们的视频,微博和ins有社交账号)
       事情是这样的:我以前对音乐一直比较无动于衷,从去年开始关注到这个频道之后,就开始感受到音乐的乐趣啦,其实更感兴趣那些有趣的人,所以后来每天到点追更新,实在幸福。他们有一个栏目叫LINGLING40HOURS,很多有才的lingling(粉丝称号/天才称号)都凭借各种音乐才华还有乐手梗成功吸引他们的注意,可是不会乐器的我确实很难想到新梗,难道要加入三角铁帮?救命,肯定不可。思考一阵子,得,DIY一个漏洞百出的小玩具琴吧,说不定能投稿上LINGLING40HOURS搏大家一笑,还能给DIY选手们安利一下我的快乐源泉(如果评论区有零学家,请同好一定举起双手让我看到)。
      先看一下成品图,那我们就开始啦!GOGO!
      树莓派电子琴-MPR121触摸板图1
一、硬件准备
(一)材料准备
  • 树莓派4B  X1 (DFR0619)
  • 树莓派IO扩展板  X1(DFR0566
  • 电容触摸套件   X1 (DFR0129
  • 带功放喇叭模块  X1  (FIT0449
  • 21块木片(3*7)
  • 一些双面胶
  • 少量双导铜箔胶带
  • 一些导电线
  • 硬纸板(尽量选择稍大一点的快递箱子,确保21个琴键能排列到一面)
  • 电源线(type c)  X1   (搭配适配器插插座上和用充电宝都行,看你心情)
  • 网线  X1   (wifi也行,只要能用PC远程连接到树莓派就可以了)


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

2.准备琴板部分

   将快递箱子裁剪折叠后得到如下一块三层板子,同时准备一些小纸板条以固定琴键。
   树莓派电子琴-MPR121触摸板图4树莓派电子琴-MPR121触摸板图5

   然后将触摸板安装到琴板上
   树莓派电子琴-MPR121触摸板图6树莓派电子琴-MPR121触摸板图7

   稍微加工修整一下
   树莓派电子琴-MPR121触摸板图9树莓派电子琴-MPR121触摸板图8
3.准备琴键部分
   将彩色木条下端缠上一圈铜箔胶带。
   树莓派电子琴-MPR121触摸板图10
   然后粘在纸板条上。效果如图:
   树莓派电子琴-MPR121触摸板图11树莓派电子琴-MPR121触摸板图12
二、软件准备
[size=14.6667px]   我使用的远程连接软件是MobaXterm。
三、具体操作
  (一)、硬件连接
   如图所示:喇叭模块接在22口,触摸板接IIC口。
   树莓派电子琴-MPR121触摸板图14

   树莓派电子琴-MPR121触摸板图15

   当然,你也可以选择别的引脚,但是请务必保证是接在GPIO口上,具体引脚可以查看下图
   树莓派电子琴-MPR121触摸板图16
   最后,网线和电源线找准位置接好即可。

(二)、代码准备
  • 下载库文件相关,这次我全都放进了一个压缩包中,点击链接即可下载到本地pc。
    下载附件Adafruit_Python_MPR121.zip
[size=14.6667px]    解压后如图所示:
    树莓派电子琴-MPR121触摸板图17
    根据动图操作,将文件夹从本地拖拽到mobaxterm。(请选择Desktop文件夹下)

    树莓派电子琴-MPR121触摸板图18
    在本地新建一个python格式的空文件,我这里命名为36.py。下一步梳理代码。

    树莓派电子琴-MPR121触摸板图19
   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)代码如下:
可以直接复制粘贴。

  1. import sys
  2. sys.path.append('../')
  3. import time
  4. import Adafruit_MPR121.MPR121 as MPR121
  5. import RPi.GPIO as GPIO
  6. Buzzer = 22
  7. GPIO.setmode(GPIO.BCM)
  8. GPIO.setup(Buzzer,GPIO.OUT)
  9. Buzz = GPIO.PWM(Buzzer,440)
  10. Buzz.start(0)
  11. print('Adafruit MPR121 Capacitive Touch Sensor Test')
  12. # Create MPR121 instance.
  13. cap = MPR121.MPR121()
  14. CL = [131, 147, 165, 175, 196, 211, 248]
  15. CM = [262, 294, 330, 350, 393, 441, 495]
  16. CH = [523, 587, 659, 698, 784, 880, 988]
  17. if not cap.begin():
  18.     print('Error initializing MPR121.  Check your wiring!')
  19.     sys.exit(1)
  20.    
  21. print('Press Ctrl-C to quit.')
  22. last_touched = cap.touched()
  23. print(last_touched)
  24. x = 0
  25. y = 0
  26. while True:
  27.     global Buzz
  28.     touch = []
  29.     current_touched = cap.touched()
  30.     n=current_touched
  31.     print(n)
  32.    
  33.     #y=current_touched[1]
  34.     for i in range(12):
  35.         if n&1:
  36.             touch.append(i)
  37.         n = n >> 1
  38.     if len(touch) == 2:
  39.         x=touch[0]
  40.         y=touch[1]-5
  41.     print(x)
  42.     print(y)
  43.     if x==1:
  44.         Buzz.start(50)
  45.         Buzz.ChangeFrequency(CL[y])
  46.     elif x==2:
  47.         Buzz.start(50)
  48.         Buzz.ChangeFrequency(CM[y])
  49.     elif x==3:
  50.         Buzz.start(50)
  51.         Buzz.ChangeFrequency(CH[y])
  52.     else:
  53.         Buzz.stop()
  54.     x = 0
  55.     y = 0
  56.     #last_touched = current_touched
  57.     time.sleep(0.5)
  58.    
  59.     #GPIO.cleanup()
复制代码


3)然后将36.py拖进mobaxterm中examples文件夹下,如图:
树莓派电子琴-MPR121触摸板图20
四、展示效果
1.运行代码
首先进入36.py的位置,如动图:
树莓派电子琴-MPR121触摸板图21
然后输入python 36.py即可运行。ctrl+c即可退出运行。
2.展示效果
如图,此时我按下的是低音部第6个音符。
树莓派电子琴-MPR121触摸板图22
  视频展示:
  

DFHkhQxFRtP  学徒

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

666
回复

使用道具 举报

安卓机器人  中级技神

发表于 2020-11-15 20:25:06

视频看不到啊
回复

使用道具 举报

gray6666  初级技神

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

好多焊点牛牛
回复

使用道具 举报

咕叽大虾  初级技师
 楼主|

发表于 2020-11-16 11:02:48

回复

使用道具 举报

咕叽大虾  初级技师
 楼主|

发表于 2020-11-16 11:05:58


然后焊点太丑哈哈(是时候去学真正的技术了
回复

使用道具 举报

咕叽大虾  初级技师
 楼主|

发表于 2020-11-16 11:09:38


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

使用道具 举报

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
很有创意,很好玩!

哈哈,之后还要尝试更多好玩的东西
回复

使用道具 举报

咕叽大虾  初级技师
 楼主|

发表于 2020-12-29 10:44:16

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

哈哈 一起玩起来
回复

使用道具 举报

BRiver  学徒

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

太有创意了,你就是Lingling
回复

使用道具 举报

咕叽大虾  初级技师
 楼主|

发表于 2021-6-3 17:14:39

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

哇 可太开心了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail