树莓派电子琴-MPR121触摸板

2020-11-151.7万
精华项目
AI 快速预览详细 收起
本文介绍了如何使用树莓派4B和MPR121触摸板制作一个电子琴。项目名称为“树莓派电子琴”,硬件清单包括树莓派4B、IO扩展板、电容触摸套件、带功放喇叭模块等。最终效果是能够通过触摸板上的21个按键演奏不同的音符。难度等级适中,适合STEM教育项目。
       开始前,照例聊一聊为什么要做这个项目,是因为我实在想安利一个快乐的频道给大家: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
  视频展示:
  

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(5)
BRiver
BRiver
太有创意了,你就是Lingling
咕叽大虾
咕叽大虾
作者
回复BRiver
哇 可太开心了
lumeizhu20
lumeizhu20
很有创意,很好玩!
咕叽大虾
咕叽大虾
作者
回复lumeizhu20
哈哈 一起玩起来
咕叽大虾
咕叽大虾
作者
回复lumeizhu20
哈哈,之后还要尝试更多好玩的东西
gray6666
gray6666
好多焊点牛牛
咕叽大虾
咕叽大虾
作者
回复gray6666
然后焊点太丑哈哈(是时候去学真正的技术了
许培享
许培享
视频看不到啊
咕叽大虾
咕叽大虾
作者
回复gray6666
好的!谢谢反馈啊!
gray6666
gray6666回复咕叽大虾
视频可以正常显示
共3条回复,已加载2条,点击查看更多共3条回复,已加载全部
DFHkhQxFRtP
DFHkhQxFRtP
666
咕叽大虾
咕叽大虾
作者
回复DFHkhQxFRtP
继续加油
- 没有更多了 -