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