查看: 567|回复: 9

树莓派电子琴-MPR121触摸板

[复制链接]
本帖最后由 咕叽大虾 于 2020-11-23 10:40 编辑

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


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

2.准备琴板部分

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

   然后将触摸板安装到琴板上
    IMG_20201113_103840.jpg qq_pic_merged_1605422139677.jpg

   稍微加工修整一下
    qq_pic_merged_1605422274243.jpg IMG_20201113_111628.jpg
3.准备琴键部分
   将彩色木条下端缠上一圈铜箔胶带。
    qq_pic_merged_1605422397691.jpg
   然后粘在纸板条上。效果如图:
    qq_pic_merged_1605423349117.jpg IMG_20201114_174809.jpg
二、软件准备
[size=14.6667px]   我使用的远程连接软件是MobaXterm。
三、具体操作
  (一)、硬件连接
   如图所示:喇叭模块接在22口,触摸板接IIC口。
    image.png

    image (1).jpg

   当然,你也可以选择别的引脚,但是请务必保证是接在GPIO口上,具体引脚可以查看下图
    image (1).png
   最后,网线和电源线找准位置接好即可。

(二)、代码准备
  • 下载库文件相关,这次我全都放进了一个压缩包中,点击链接即可下载到本地pc。
    Adafruit_Python_MPR121.zip (125.82 KB, 下载次数: 0)
[size=14.6667px]    解压后如图所示:
    image (2).png
    根据动图操作,将文件夹从本地拖拽到mobaxterm。(请选择Desktop文件夹下)

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

    image (3).png
   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)代码如下:
可以直接复制粘贴。
[AppleScript] 纯文本查看 复制代码
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 = [131, 147, 165, 175, 196, 211, 248]
CM = [262, 294, 330, 350, 393, 441, 495]
CH = [523, 587, 659, 698, 784, 880, 988]

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[1]
    for i in range(12):
        if n&1:
            touch.append(i)
        n = n >> 1
    if len(touch) == 2:
        x=touch[0]
        y=touch[1]-5
    print(x)
    print(y)
    if x==1:
        Buzz.start(50)
        Buzz.ChangeFrequency(CL[y])
    elif x==2:
        Buzz.start(50)
        Buzz.ChangeFrequency(CM[y])
    elif x==3:
        Buzz.start(50)
        Buzz.ChangeFrequency(CH[y])
    else:
        Buzz.stop()
    x = 0
    y = 0
    #last_touched = current_touched

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

3)然后将36.py拖进mobaxterm中examples文件夹下,如图:
image (4).png
四、展示效果
1.运行代码
首先进入36.py的位置,如动图:
image (1).gif
然后输入python 36.py即可运行。ctrl+c即可退出运行。
2.展示效果
如图,此时我按下的是低音部第6个音符。
image (5).png
  视频展示:
  














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  学徒

发表于 昨天 15:17

很有创意,很好玩!
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail