PCB图如下:
描述
猫朋克合成器 V2
大家好,欢迎回来,这是我的 Neko Punk 合成器第 2 版,它是一个由 Arduino Nano 和 Mozzi 库驱动的猫主题合成器。
通过改变 5 个滑槽的位置,Mozzi 可以产生更复杂和有趣的咆哮声、扫频声和合唱声。这些声音可以通过振荡器、延迟和滤波器等熟悉的合成单元快速轻松地构建。
您可以从这里查看 Mozzi 库 - https://sensorium.github.io/Mozzi/
我几周前制作的上一版基于最初的 Atari Punk 控制台,最初由 Forrest Mims 于 1980 年制作。它采用了触发单稳态设置的非稳态多谐振荡器设置。通过结合这两种设置,我们得到了 Stepped Tone Generator 或 atari punk 合成器。
这很容易制作,但我对它的结果并不满意。
https://www.hackster.io/Arnov_Sharma_makes/atari-punk-synth-v2-8b9dd3
一年前,我用 Mozzi Library 制作了一个类似的合成器,效果很好,所以我想为什么不在 Neko Punk Synth 的 V2 中使用 Mozzi,为了让事情变得超级酷,我使用了滑动罐,让这个合成器具有赛博朋克 -看起来不错。
所需材料
这些是这个内置的东西 -
Arduino纳米
PAM8403 音频放大器
PCBWAY提供的定制PCB
锂离子 5V 升压模块
3.7V 锂离子电池
3D打印外壳
4欧姆扬声器
滑块锅
电路设计
V2 PCB 可能是我做过的最简单的电路板。
它使用一个 Arduino Nano 作为基础微控制器,五个滑块电位器与 Arduino nano 连接。
D9 进入 PAM8403 音频放大器模块的输入,PAM8403 的输出与两个 CON2 引脚连接,因此我们可以用它添加扬声器。
整个设置需要 5V 才能工作。
为了给这个设置供电,我必须使用这个你可以在网上找到的锂离子电池升压模块,这些模块非常便宜并且工作得很好。
它将 3.7V 的锂离子电池提升至恒定的 5V 1A 或 2A,以使我们的 MCU 设置正常工作。
我在我的 OrCad PCB 套件中准备了 PCB,并添加了一些图形来增加电路板的美感。
从 PCBWAY 获取电路板
我为这个项目使用了 PCBWAY PCB 服务。我在PCBWAY的报价页面上传了这个项目的Gerber文件。
对于这个合成板,我选择白色阻焊层颜色,因为我在板的顶部添加了相当多的圆形图形和自定义艺术。
黑色丝印与白色阻焊层颜色相得益彰。
我在一周内收到了 PCB,PCB 质量非常好,这块 PCB 很大,我喜欢这些 PCB 的质量没有因为尺寸而受到影响。
从这里检查 PCBWAY - https://www.pcbway.com/
电路板组装
现在这块板没有任何 SMD 组件,所以我们只需要手动将所有东西放在这块板上并用烙铁焊接它们。
我首先收集所有材料并使用滑动电位器开始组装过程。
然后我从顶部将所有的 Pot 放在它们的位置,并从 PCB 的底部焊接它们的焊盘。
在此之后,我在它们的位置添加了 Arduino Nano 和 PAM8403 模块,并且组装几乎完成了。
上传代码
这是这个基于 Mozzi 库的项目的主要草图。
/* 使用 2 个光敏电阻 (LDR) 更改的示例 FM 合成参数和基频旋钮, 使用 Mozzi 声化库。 演示模拟输入、音频和控制振荡器、相位调制 并以音频速率平滑控制信号以避免咔嗒声。 还演示了 AutoMap,它将不可预测的输入映射到设定的范围。 电路: 数字引脚 9 上的音频输出(在 Uno 或类似设备上),或 电位器连接到模拟引脚 0。 电位器的中心引脚连接到模拟引脚。 电位器的侧引脚连接到 +5V 并接地 模拟引脚 1 上的光敏电阻 (LDR) 和 5.1k 电阻: 从模拟引脚到 +5V 的 LDR 5.1k 电阻从模拟引脚到地 模拟引脚 2 上的光敏电阻 (LDR) 和 5.1k 电阻: 从模拟引脚到 +5V 的 LDR 5.1k 电阻从模拟引脚到地 Mozzi 帮助/讨论/公告: https://groups.google.com/forum/#!forum/mozzi-users 蒂姆·巴拉斯 2013。 此示例代码位于公共领域。 */ #include#include // 振荡器 #include // 用于播放 Oscils 的表格 #include #include // 地图不可预知的输入范围 // int freqVal; // 所需的载波频率最大值和最小值,用于 AutoMap const int MIN_CARRIER_FREQ = 22 ; 常量 int MAX_CARRIER_FREQ = 440 ; 常量 int MIN = 1 ; 常量 int MAX = 10 ; 常量 int MIN_2 = 1 ; 常量 int MAX_2 = 15 ; // 所需的强度最大值和最小值,对于 AutoMap,注意它们是反向动态的反转 const int MIN_INTENSITY = 700 ; 常量 int MAX_INTENSITY = 10 ; // 所需的 mod 速度最大值和最小值,对于 AutoMap,注意它们是反向动态的反转 const int MIN_MOD_SPEED = 10000 ; 常量 int MAX_MOD_SPEED = 1 ; AutoMap kMapCarrierFreq ( 0 , 1023 ,MIN_CARRIER_FREQ,MAX_CARRIER_FREQ) ; AutoMap kMapIntensity ( 0 , 1023 ,MIN_INTENSITY,MAX_INTENSITY) ; AutoMap kMapModSpeed ( 0 , 1023 ,MIN_MOD_SPEED,MAX_MOD_SPEED) ; AutoMap mapThis ( 0 , 1023 ,MIN,MAX) ; AutoMap mapThisToo ( 0 , 1023 ,MIN_2,MAX_2) ; const int KNOB_PIN = 0 ; // 将旋钮的输入设置为模拟引脚 0 const int LDR1_PIN= 1 ; // 将 fm_intensity 的模拟输入设置为 pin 1 const int LDR2_PIN= 2 ; // 将调制速率的模拟输入设置为引脚 2 const int LDR3_PIN= 4 ; 常量 int LDR4_PIN= 3 ; Oscil aCarrier(COS2048_DATA); Oscil aModulator(COS2048_DATA); Oscil kIntensityMod(COS2048_DATA); int mod_ratio = 5 ; // 亮度(谐波) long fm_intensity; // 携带来自 updateControl 的控制信息到 updateAudio // 平滑强度以消除过渡点击 float smoothness = 0.95f ; Smooth < long > aSmoothIntensity(平滑度); void setup () { // Serial.begin(115200); // 设置串行输出,以便我们可以查看光照级别 startMozzi(); // :)) } 无效 更新控制() { // freqVal = map(LDR3_PIN, 0, 1023, 1, 100); int freqVal = mozziAnalogRead(LDR3_PIN); // 值为 0-1023 int FRQ = mapThis(freqVal); int旋钮2 = mozziAnalogRead(LDR4_PIN); // 值为 0-1023 int knob2Val = mapThis(knob2); // 读取旋钮 int knob_value = mozziAnalogRead(KNOB_PIN); // 值为 0-1023 // 将旋钮映射到载波频率 int carrier_freq = kMapCarrierFreq(knob_value); //计算调制频率以保持比率 int mod_freq = carrier_freq * mod_ratio * FRQ; // 设置 FM 振荡器频率 aCarrier.setFreq(carrier_freq); aModulator.setFreq(mod_freq); // 读取宽度模拟输入引脚上的光敏电阻 int LDR1_value= mozziAnalogRead(LDR1_PIN); // value is 0-1023 // print the value to the Serial monitor for debug //Serial.print("LDR1 = "); // Serial.print(LDR1_value); // Serial.print("\t"); //打印一个标签 int LDR1_calibrated = kMapIntensity(LDR1_value); // Serial.print("LDR1_calibrated = "); // Serial.print(LDR1_calibrated); // Serial.print("\t"); //打印一个标签 // 计算 fm_intensity fm_intensity = (( long )LDR1_calibrated * knob2Val * (kIntensityMod.next()+ 128 ))>> 8 ; // 8 位乘法后移回范围 // Serial.print("fm_intensity = "); // Serial.print(fm_intensity); // Serial.print("\t"); //打印一个标签 // 读取速度模拟输入引脚上的光敏电阻 int LDR2_value= mozziAnalogRead(LDR2_PIN); // 值为 0-1023 // Serial.print("LDR2 = "); // Serial.print(LDR2_value); // Serial.print("\t"); //打印一个标签 // 这里使用浮点数表示低频 float mod_speed = ( float )kMapModSpeed(LDR2_value)/ 1000 ; //Serial.print(" mod_speed = "); // Serial.print(mod_speed); kIntensityMod.setFreq(mod_speed); // Serial.println(); // 最后,打印下一行调试信息的回车 } int updateAudio () { 长调制 = aSmoothIntensity.next(fm_intensity) * aModulator.next(); 返回aCarrier.phMod(调制); } 无效 循环() { 音频挂钩(); }
代码很长,但基本上,它运行在 Mozzi 库上,无需额外的屏蔽、消息传递或外部合成器即可生成算法音乐。这个库有很好的文档记录,所以你可以从这里查看并下载它。在上传这个草图之前安装这个库。
https://sensorium.github.io/Mozzi/
常量 int KNOB_PIN = 0; //将旋钮的输入 设置为模拟引脚0 const int LDR1_PIN= 1 ; //将fm_intensity的模拟输入设置为pin 1 const int LDR2_PIN= 2 ; //将调制速率的模拟输入设置为引脚2 const int LDR3_PIN = 4 ; 常量 int LDR4_PIN=3;
POT 连接在 A0、A1、A2、A3、A4 上,音频输出为 D9。
测试
现在上传草图后,我添加了一个带有 PAM8403 模块的 CON2 的 4ohm 扬声器。
为了暂时为这个设置供电,我使用移动电源为 Arduino Nano 提供 5V 2A。
要调制声音,我们只需更改所有 5 个滑动电位器的位置,这几乎就是整个测试过程。
接下来,我们继续进行最后的组装过程。
3D打印外壳
至于合成器的主体,我们通常使用一个盒子状的外壳来容纳扬声器和电子设备。
我的想法是在正面制作一张猫脸,让它看起来像一只 BOX CAT,我在正面添加了猫的面部信息,例如胡须、鼻子、眼睛。
我在 fusion360 中对身体进行建模,然后在我的 ender 3 上对每个部分进行 3D 打印。
我用橙色 PLA 准备了主体,用黑色 PLA 准备了瞳孔、眉毛、胡须和鼻子,用白色 PLA 准备了眼睛。
打印设置也很正常,我使用了一个 0.8mm 的喷嘴,层高为 0.32mm,填充量为 20%,并支持基体。
打印完所有部件后,我使用强力胶将所有面部部件连接到基体上。
总装
现在我们开始主要组装,首先添加一个扬声器到带有螺母和螺栓的底座上。
接下来,我将 DC Jack 和摇臂开关添加到基体中。
然后我们将 Lithium Boost 模块与 DC 插孔和开关连接起来。
然后,我将所有东西放在机身内,并用一些 M2 螺丝从底部添加主 PCB,组装完成。
结果
要打开此设置,我们只需按下摇杆开关并更改滑动电位器位置即可调制声音。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !