×

带按钮的旧立体声蓝牙音量控制开源分享

消耗积分:2 | 格式:zip | 大小:0.06 MB | 2022-11-02

李泽明

分享资料个

描述

这是什么一回事呢?

这是关于如何更换立体声系统的音量旋钮的相当详细的(希望如此)描述,该旋钮使用带有按钮和蓝牙连接的定制板的旋转编码器。

介绍

对于初学者来说,一个重要的注意事项:这个项目是用松下 SA-AK45立体声系统编写的(因为这是我使用的),但也适用于使用旋转编码器进行音量控制的任何其他音响系统(除了系统当然是拆卸说明)。请注意,其他系统使用的编码器可能(但不是必须)具有稍微不同的信号配置文件(这可以通过软件中的小调整轻松处理 - 更多信息请在适当的步骤中进行)。

有了这个,让我们开始正确的介绍。Panasonic SA-AK45 是 90 年代后期的立体声系统,我仍然拥有并主要用作 PC 的音响系统。前面有个大音量旋钮,可惜前段时间坏了。所以我决定修复它并最终使用基于按钮的自定义音量控制和蓝牙访问(更多关于为什么我稍后不修复旋钮)。

该系统来自数字控制席卷市场并取代模拟控制的时代,这里也不例外。旋钮不使用电位器,而是安装在旋转编码器上(旋转时发送数字信号的小型设备)。在这个系统的情况下,这个特殊的部分是非常不正统的,很难找到替代品(更不用说修理它了——这些东西都有很小的部分),所以我决定完全摆脱它,拆下旋钮并安装我们的定制板按钮和蓝牙

所有这一切都必须以某种方式进行控制,我们将使用Attiny85微控制器,因为它便宜、易于使用、非常小并且拥有足够的资源来完成这项工作。任何熟悉 Arduino 的人都可以毫无问题地使用它。

对于蓝牙通信,我们将使用HC-06 模块——它是无处不在的HC-05的一个非常流行的衍生产品,它与它的不同之处在于更便宜并且只能作为从设备工作(这对我们的场景来说很好)。也可以使用任何其他模块,只需对代码进行最少的更改(请参阅相应的步骤)。

最后注:需要基本的焊接/拆焊技能

现在,让我们开始吧。

补给品

  • Panasonic SA-AK45 立体声系统(或任何由旋转编码器控制音量的音响系统);
  • Attiny85 微控制器;
  • DIP-8 插座(可选 - 便于拆卸微控制器);
  • HC-06蓝牙模块(HC-05或类似的也可以,但控制它的AT命令可能不同);
  • 2 个 LED(如果有人不想要 BLING,可以用电阻器代替 - 稍后会详细介绍);
  • 2 个轻触开关(最好是较大的,易于按下 - 这些将是我们的音量控制按钮);
  • 4 个电阻器:100、1.2k、2.2k、100k 欧姆(或类似值);
  • 1 100 nF 电容器;
  • 2x2 方形 PCB 母头连接器;
  • 4 公对公跳线/杜邦线(20 厘米或类似);
  • 通用 PCB(约 4x6 厘米)(或定制的,基于后续步骤中附加的原理图);
  • AVR 编程器或 Arduino 板(用于对 Attiny 进行编程);
  • 一个面包板和一些用于原型设计的杜邦电线(可选);
  • 烙铁,焊锡丝,助焊剂,拆焊泵(可选)。

第 1 步:准备拆开立体声

注意:如果您的立体声系统与 SA-AK45 不同,这里的前几个步骤可能对您没有多大帮助,但它们的某些方面可能适用于其他地方,所以至少略读它们是个好主意.

注意 2:在拆卸立体声音响时拍照可能是个好主意。特别是当它与我的模型不同时。特别注意您断开的任何连接或其他棘手的地方。

首先,我们必须找到我们将要更换的编码器。它焊接在一个前面板 PCB 上,在其他 PCB 下挖得很深,但绝对可以触及。最好找一本系统的服务手册作为参考这些通常很容易在网络上找到。在我们的例子中,我们必须到达“E - 操作 PCB”——这就是编码器所在的位置。

pYYBAGNhyyaAGWJkAAD-BEHpevA269.png
摘自 SA-AK45 服务手册,显示主要 PCB 及其互连方式
 

第 2 步:打开立体声

这个非常简单:从系统中拔下所有电缆并拧下顶盖/侧盖。它用螺丝固定在后面板和系统侧面(每侧 3 个螺丝)。请记住,它由 3 个薄金属板条锁在顶部的前面板上 - 您必须将其拉起才能将其分离。

poYBAGNhyymASJInAACk_dVb0g0094.jpg
开放式系统
 

还可以卸下音量旋钮,只需将其从前面拉向您即可。

pYYBAGNhyyyAB_TOAAB0KRc1R6M268.jpg
音量旋钮拆了
 

第 3 步:将前面板与其他面板分开

前面通过从前面板 PCB 到主 PCB (B) 的 3 条带状电缆连接到其余部分。白色薄的需要从主 PCB 上的插座中拔出。在拉出黑色较厚的那块之前,需要将主板上连接器两侧的锁定机构提起,然后将其从连接器中拉出。

pYYBAGNhyzCAOz_nAADsBXK6v0A609.png
背面可见的连接到主 PCB 的 3 个色带。
 

将正面连接到背面的另一部分是整个设备顶部的 CD 播放器/转换器。将其从系统的背板上拧下就足够了 - 然后,在断开上述电缆后,可以轻轻地将前部与其余部分分离(通过将其拉开)。

poYBAGNhyzSAHvFFAAB1Aacj9to673.png
CD换碟机
 

虽然 CD 换碟机仍将连接在前面,这使得东西相当笨重,所以我们想将它完全移除。

第 4 步:取出 CD 换碟机

CD 换碟机通过 2 条白色带状电缆连接到前面板,这些电缆从前面板连接到换碟机上的 2 个独立 PCB。两条丝带都可以从转换器侧的连接器中拉出(其中一条隐藏在柔性黑色覆盖物下方,拧下一些螺丝后可以将其弯曲到一边)。

poYBAGNhyziAasmxAACJ76AV-BA863.png
隐藏在弹性盖下的带状连接器
 

从转换器上断开电缆后,您必须将其从位于前面板一侧的 2 个米色柱子上拧下。就是这样 - 我们将前面板完全分开。

poYBAGNhyzqACloLAACtD78rYxA390.png
前部完全分离,CD 换碟机位于侧面
 

第 5 步:到达音量编码器

我们想用我们的自定义系统替换的编码器位于操作 PCB (E) 上,此时隐藏在面板 PCB (G) 下。为了达到它,我们必须拧下面板 PCB。

pYYBAGNhyz2ALQiVAAHLmbhUWsM967.png
拧下后将面板 PCB 抬起(仍由 2 条带状电缆连接到其他部分)
 

有很多螺丝要拆。完成此操作后,您可以小心地提起 Panel PCB。请注意,它仍然通过带状电缆(前面的小 PCB - JOG PCB 和 Deck PCB)和刚性连接器连接到其他 PCB。刚性连接器将通过将 PCB 直接从前面提起(向上,当正面朝下时)断开。

poYBAGNhy0CAHlWNAAFxkBfj7OE935.png
在下面我们可以看到操作 PCB(我们的目标),在中间有一个小柱子穿过它
 

连接到 Deck PCB 的带状电缆几乎是不可断开的,所以我们可以保持原样。如果您希望完全移除面板 PCB 以便更好地接触下面的内容,则必须从甲板 PCB 一侧拆下带状电缆连接器,但这不是强制性的。连接 JOG PCB (D) 的电缆也是如此,但整个 JOG PCB 非常小,可以很容易地从前面板上拆下(拧下并提起部分覆盖 PCB 的塑料按钮元件后)并留给悬挂在面板 PCB 旁边。

poYBAGNhy0SABVkkAAIpaPc9cTE200.png
侧面板、JOG PCB(左上)、操作 PCB(中)、Deck PCB(下)
 

第 6 步:拆下操作 PCB 并到达编码器

方便的是,操作 PCB 通过伸出的刚性连接器连接到面板 PCB,当我们抬起面板 PCB 时断开连接,所以在我们到达编码器之前剩下的唯一步骤就是从前面板拧下操作 PCB。

poYBAGNhy0eAbTYsAAFvzNQz6bI562.png
前部拆解,操作 PCB 分离并位于左侧
 

在第一张图片中,您可以看到拆卸的最终结果 - 前面板正面朝下,操作 PCB 位于左侧。Panel PCB 位于右侧,仍然通过不可拆卸的带状电缆连接到 JOG PCB 和 Deck PCB,但此时这不是什么大问题。

我们的编码器位于操作 PCB 上,靠近米色连接器。

poYBAGNhy0qASpPQAAGSyku5eIU923.png
右侧有编码器的操作PCB。
 

第 7 步:拆焊和拆卸编码器

我们需要从操作 PCB 上拆下我们的编码器,首先是因为我们无论如何都想将它移除(并用我们的定制板代替),其次是因为我们想拆解它以查看它发送的信号(这部分不是强制性的 - 更多信息下面这个)。

pYYBAGNhy06AS1bvAAFaBkadrmc496.png
音量旋钮的编码器
 

为此,您需要拆焊 4 个信号引脚(包括未使用的一个)和侧面的 2 个安装引脚。添加一些新鲜焊料,然后用拆焊泵去除所有焊料是对我有用的技术。

poYBAGNhy1GASPB1AAHfgbYOVTE372.png
编码器从板上拆焊
 

要拆卸编码器,您必须拉直 4 个金属翼片,使塑料底座保持在底部。然后一切都会分崩离析。但我已经为你完成了,所以你不必:-)

pYYBAGNhy1SAMtIpAADUYBAczXk252.png
编码器底部带有金属翻盖,可将其保持在一起
 

在图片中,您可以看到我的编码器损坏了 - 一个塑料钻头,通过填充触点之间的空间使旋转触点部分在底部变得光滑,折断了,这损坏了连接在底座上的薄金属触点(连接到信号 A 引脚),旋转部分沿该引脚运行。这反过来又完全弄乱了输出信号参数/形状。

poYBAGNhy1mAfTvqAAMDZR9IldI145.png
可见损坏的编码器部件(塑料钻头损坏和 A 引脚上的触点损坏)
 

 

poYBAGNhy12AbdguAADRnEfLsfI859.png
编码器底座,顶部触点损坏
 

第 8 步:确定编码器的规格

注意:这部分仅供参考 - 如果您有相同的立体声系统,您不必拆开编码器并对其进行分析,因为我已经完成了。但是,如果您有不同的立体声和不同的编码器,那将是有意义的。

旋转编码器的基本特征可以通过简单的旋转来确定。它可以有棘爪(旋转时发出咔哒声)或没有棘爪(不点击)。它可以是增量的(在两个方向上无限旋转),也可以是绝对的(像电位计一样有限旋转)。它具有一定的分辨率(它在一圈内发送的信号数量),通常可以通过点击次数来确定(除非它是无点击的......)。我们还可以检查它有哪些引脚,并从 PCB 上的标记中读取它们的描述。

对我们来说,最重要的是要知道:

  • 编码器的类型(增量或绝对);
  • 分辨率(每转多少增量/减量);
  • 它发送的信号类型;
  • 它如何连接到PCB。

第一件事(类型)很容易猜测 - 只需检查它是否无限旋转。

第二个(分辨率)很容易知道我们是否有一个点击,但不幸的是这个没有点击。

信号的类型和连接是相互关联的。通常,这些增量编码器使用 3 个引脚发送所谓的“正交”信号:A、B 和 GND。在我们的情况下也没有什么不同,尽管由于某种原因它还有第 4 个未使用的销(这使得找到合适的替代品真的很困难......)。它的工作方式是在一个循环中将 A、B 或任何内容都连接到 GND。在一个方向是“A,B,没有,A,B,没有”等等,在相反的方向是:“B,A,没有,B,A,没有”等等。因此系统的控制器知道我们在哪个方向旋转它,并且可以记录每个增量/减量(每个“A,B,无”或“B,A,无”循环)。对于大多数编码器,A 和 B 信号重叠一小段时间(在 A 和 B 之间有一段时间都连接到 GND - 请参见随附的信号图)。我不知道这种重叠对这个特定系统的运行有多重要'

poYBAGNhy2CAAA8pAABMOpJwouc855.png
A 和 B 之间有明显重叠的典型正交信号
 

那么通过观察和旋转编码器我们知道什么?

  • 它是增量的;
  • 它是无点击的(所以我们不知道分辨率);
  • 它发送一个正交信号(我们不知道 A 和 B 的重叠或分辨率);
  • 它通过 4 个引脚连接,其中一个未使用,三个是增量正交编码器的典型引脚:A、B、GND。

我们需要确定信号的分辨率(每转发送多少个“A,B,无”或“B,A,无”循环)和信号的细节(如果 A 和 B 重叠以及有多少)。

该决议对我们来说不是那么重要。知道我们希望循环多长时间很有用,以便连续按下按钮以方便的速度增加/减少音量,但这可以通过在我们的软件中调整时间来通过实验确定。信号的形状(基本上是 A 和 B 之间的重叠量,这是这里唯一未知的)也可能不重要,但让我们尝试正确复制它。要知道这些,我们必须看一下编码器的内部部件,而且,方便的是,此时它已经被拆卸了。

pYYBAGNhy2KAGxZ2AAF6GDxYVh0314.png
编码器的旋转部分,标有单个信号周期的部分
 

当您查看旋转部分时,您可以计算其底部的触点。您会看到每种类型有 24 个联系人,这意味着分辨率为 24 PPR。不过,最重要的信息是我们可以通过查看旋转部分来推断信号形状。见附图。每个循环有 3 个主要部分,其中一个循环在图中用红线标记。您可以看到 A 和 B 之间几乎没有或没有重叠。这告诉我们如何使用微控制器模拟信号 -如果我们发送“A,B,无”或“B,A,无”的简单周期,具体取决于在方向上,事情应该可以工作(似乎我们不需要在周期内生成一段同时连接到 GND 的 A 和 B)

第 9 步:设计电路板以替代编码器 - 一个简单的解决方案

让我们从一个简单的解决方案开始,只需 2 个按钮来替代编码器(一个按钮用于“降低音量”,另一个用于“提高音量”)。

让我们尝试确定 Attiny 上需要多少个 GPIO 引脚。2 个用于输出(用于音量控制的 A 和 B“编码器”信号)和 2 个用于输入(每个按钮 1 个) - 总共 4 个。但是我们可以减少这个数字吗?

请记住,我们计划添加一个蓝牙模块,这需要 2 个 GPIO 引脚(1 个用于串行输入,1 个用于串行输出),但我们总共只有 5 个引脚可供使用(我们已经分配了 4 个) )。但有好消息。我们只能将 2 个按钮连接到一个引脚如何?利用 Attiny 具有模拟输入的事实。如果我们巧妙地通过分压器连接按钮,则输入将为我们感兴趣的 3 种状态记录不同的电压:未按下按钮、按下“音量调低”按钮、“按下音量调高按钮”。好啊,我们现在有 2 个空闲引脚可用于蓝牙模块。

但是我们要如何给这东西供电呢?答案很简单,立体声的 PCB 使用 5V 逻辑,方便地与 Attiny 兼容。我们只需要在系统板上的某处找到 5V 线(通过查看编码器的连接,我们已经知道 GND 在哪里)。所以最后,我们必须连接到立体声系统中的 4 个信号:5V rail, GND, vol A, vol B。

poYBAGNhy2aASMUAAAAqk34QpW8528.png
电路的简单变体示意图,分压器上有 2 个按钮且没有 BT(尚未)
 

让我们看看附件中的示意图:

  • 一个带有 2 个按钮的分压器,位于 GPIO A1(GPIO 2 配置为模拟输入)和 GND 之间;
  • GPIO 0 上的编码器信号 A;
  • GPIO 1 上的编码器信号 B;
  • 一个用于连接立体声的 4 针接头;
  • 去耦电容尽可能靠近单片机的 5V 和 GND 引脚放置,以确保其稳定运行。

操作原则应如下:

  • 纽扣:
  • 当没有按下时,我们应该在 A1 引脚上注册 5V(或接近 1024 值),
  • 当按下“降低音量”时,我们应该在 A1 引脚上注册 0V(或接近 0),因为它现在短接到 GND,
  • 当按下“音量增大”时,我们应该在 A1 引脚上记录​​大约 2、5V(或关闭 512),因为现在电流流过分压器;
  • 信号:
  • 当没有按下按钮时(A1 上的值约为 1024),我们应该将 GPIO 0 和 GPIO 1 都设置为 HIGH 并保持这种状态(或 LOW - 我们在周期的哪个部分“冻结”并不重要" 只要它没有改变);
  • 当按下“音量增大”时(A1 上的值约为 512),我们应该发送一个循环:GPIO 0 LOW 为“一段时间”(将 vol A 连接到 GND),然后是 HIGH 并立即 GPIO 1 LOW 为“一段时间”(将 vol B 连接到 GND),然后立即将两者都高“一段时间”(没有连接到 GND),然后重复;
  • “降低音量”应该和上面一样,只是 GPIO 0 LOW 和 GPIO 1 LOW 部分颠倒了;
  • 上述周期中的“某个时间”应通过实验确定(我最终确定为 80 毫秒,因此 1 个整个周期需要 240 毫秒,但您可以自由调整)。

这应该可以解决问题并允许我们控制音量。它很简单,所以现在让我们对其进行改进。

第 10 步:终极电路板设计

第一:蓝牙模块。解释 BT 模块的操作超出了本说明的范围,但它已在许多很棒的教程中进行了介绍,并且非常简单。基本上,我们必须使用 SoftwareSerial Arduino 库(可以将任何 GPIO 引脚设置为串行)通过 2 个充当 UART(串行)连接的引脚来连接它。然后我们必须从模块接收信号(ASCII 字符/字节),并根据我们收到的字符/字节,使用上一步中描述的原理增加或减少音量。

不过,BT 模块还有一个障碍需要克服。它可以由我们的 5V 线供电,但它的信号线是为 3、3V 逻辑设计的有些人将它与 5V 一起使用,但不建议这样做,从长远来看可能会损坏它。那么我们该怎么办?我们可以使用逻辑电平转换器,但对于我们的简单案例来说,这将非常庞大并且有点过度设计。实际上,我们唯一需要担心的是BT模块上的Rx,因为它接收来自Attiny的信号,并且这些信号不能超过3、3V。Tx 很好,因为 Attiny 会将模块设置为 HIGH 的 3、3V 电平记录下来。

那么我们如何限制 HC-06 的 Rx 上的电压呢?当然使用另一个分压器。让我们在它前面加一个 1, 2k 欧姆电阻,在它和 GND 之间加一个 2, 2k,我们将得到我们想要的大约。3、3V逻辑电平。

但是,如果我们想在此之上添加一些 BLING 怎么办?也许是闪亮的LED?不幸的是,我们没有未使用的 GPIO 引脚,但还有其他方法。一种方法是将一些 LED 并联连接到 A 和 B 信号,但我认为这会很无聊,那么为什么不换一种方式呢?如果我们将按钮分压器基于 LED 而不是电阻器会怎样?这也将起作用,因为 LED 保证了电压降。我们仍然需要添加一个电阻器来限制 LED 上的电流,但是这种分压器仍然可以工作,并且与基于电阻器的分压器非常相似。

所以我们最终得到:

  • 将蓝牙模块连接到 GPIO 3 和 4 进行串行通信,连接到 5V 和 GND 进行供电;
  • 在 HC-06 Rx 引脚上添加 2 个电阻作为分压器,因此它接收到正确的电压(我们电路的正常电压约为 3、3V 而不是 5V);
  • 用 LED 重新制作按钮分压器以增加BLING (1 个用于限制电流的电阻 + 2 个作为分压器的 LED + 1 个 100k 欧姆电阻作为上拉电阻,用于在没有按下按钮的情况下 - 由于 LED 的性质,这是必要的 - 没有它,5V A1 状态可能不稳定)。
poYBAGNhy2iABqwTAACd57ImrE0798.png
添加了 LED 和蓝牙的电路最终版本示意图
 

见附图。这是我们完整的增强型自定义音量控制单元。现在是时候对 Attiny 进行编程并构建它了。

第 11 步:准备立体声侧的连接

为了能够测试我们的解决方案,我们必须能够将我们的原型和最终装置连接到立体声系统。为此,我使用了 4 根公对公杜邦/跳线。我将其中的 3 个焊接到操作 PCB 上用于编码器(A、B、GND)的适当针孔,第 4 个焊接到面板 PCB 上的 5V 电源线。我通过查看服务手册中的一些示意图(在前面的步骤中附上)并通过使用万用表上的连续性模式确定它的连接位置来确定 5V 线。我试图选择一个方便的位置,靠近其余的电线和前面板上的音量旋钮开口。供参考,请参阅随附的图片。

pYYBAGNhy2uAcE9pAAHElWrpG1U959.png
3 根电线焊接到编码器针孔(A、B、GND)和 1 根到面板 PCB 上的 5V 线
 

 

pYYBAGNhy3GAJTUZAAHuAJMzOjw264.png
同一组电线从另一个角度可见,操作 PCB 安装在面板 PCB 上
 

 

pYYBAGNhy3SAImfwAAGWoWUiiGc108.png
电线在操作 PCB 刚性连接器周围的布线方式
 

第 12 步:对 Attiny 进行编程

要对 Attiny 进行编程,您需要一个 AVR 编程器或一个可用作编程器的 Arduino Board(例如 Arduino Uno)。您还需要安装了 Attiny 核心/库的 Arduino 软件/IDE。您可能也可以使用其他解决方案,例如 PlatformIO,但我还没有在这个项目中尝试过。

同样,使用 Arduino 进行 Attiny 编程超出了本说明的范围(尽管我正计划针对这个主题创建一个),但让我们快速总结一下我是如何做到的:

  • 安装 Arduino IDE(如果您还没有):
  • 安装 Attiny 核心(我使用了这里的一个:它有自己的关于如何配置和使用它的文档);
  • 将“Arduino as ISP”草图上传到 Arduino (将用作 Attiny 的程序员) - 该草图可在“示例”中找到;
  • 设置 Attiny 核心的设置(我在附加的图像中设置它,Attiny 85,没有引导加载程序,Arduino 作为 ISP );
  • 将 Attiny 连接到 Arduino,如下所示:(请注意,本教程很老,并且列出了不同的 Attiny 核心库对于 Arduino ISP - 这个可能也可以,但我推荐上面链接的 Github 中的那个,因为它更新并且有更多的配置选项);
  • 加载我的 Arduino 草图(附在下面)并使用 Arduino IDE 中的“上传”功能将其上传到 Attiny(如果您愿意,可以修改它)。
poYBAGNhy3iAJiKRAAB6TSsP8PM612.png
我用于将代码上传到我的 Attiny 的 Attiny 核心配置
 

请参阅随附的脚本以获取评论。这应该是不言自明的。

注意:代码假定发送到 BT 模块的“1”字符将提高音量,而“2”将降低音量。它与我在下一步中提到的测试移动应用程序的“箭头键部分”兼容。

注 2:BT 模块是使用所谓的 AT 命令配置的。在代码中,只有一个被称为(在初始 BT 设置中),用于设置模块的名称,用于向其他设备宣传自己(“dupa1”)。您可以随意更改名称或使用其他命令来设置更高的连接波特率,或与默认的“1234”不同的密码。请记住,对于其中一些,您必须重置模块才能看到效果!此外,不必在每次启动时都调用它们 - 只要调用它们一次就足够了,AFAIK。您可以在此处找到有关模块配置的 AT 命令的一些说明:https ://www.instructables.com/AT-command-mode-of-HC-05-Bluetooth-module/

第 13 步:测试解决方案 - 关于原型制作的说明

在这一点上,我们可能应该制作我们的装置的原型,看看它是否有效。对于最初的原型设计,我使用了一个普通的 Arduino Uno(为了方便)和一个面包板,我在上面放置了原理图中的所有部件和连接。我需要对代码进行的唯一更改是更改引脚编号,如下所示:

//vol
#define VOL_A 2
#define VOL_B 3
#define BTNS A0
//BT
#define RxD 4
#define TxD 5

我还初始化了一个串行连接并使用 Arduino 串行监视器来调试代码的各个部分。但请记住,当您在音量增大/减小例程中添加Serial.print()命令时,您可能会影响信号的时序,从而影响音量按钮的体验(我犯了那个错误)。

注意:使用通过 USB 连接到 PC 和立体声的 Arduino 板进行测试时,请确保在 Arduino 和立体声之间建立共同点。在这种“双电源”系统的情况下,扬声器中可能会有一些额外的噪音 - 忽略它 - 当微控制器独立并仅连接到立体声时,它就会消失。

pYYBAGNhy3uAKKKHAAFy0ZpYtqE755.png
基于 Arduino Uno 的原型
 

在随附的图片中,您可以看到一些连接到立体声音响的原型(包括 Arduino Uno 和 Attiny)。

poYBAGNhy4KABTV7AAGQBjnIcws306.png
带有 Attiny 立体声系统功能的最终原型
 

要测试(和使用)蓝牙控件,您需要在手机(或其他设备)上安装一些应用程序。我用过这个我使用“箭头键”模块(向上和向下箭头)将“1”和“2”字符发送到 BT 模块,这将相应地提高或降低音量。当然,您可以根据需要更改代码以使用任何其他字符或消息。

还有许多其他类似的通用移动应用程序可用于测试连接。您也可以自己制作,但这超出了本说明的范围。

当您在 Arduino 上拥有 100% 工作原型时,您应该相应地对 Attiny 进行编程并对其进行测试,仍然在焊接最终装置之前的面包板上。这一步非常重要——确保它与 Attiny 一起工作,仅在目标系统的电源上工作,完全独立于 Arduino 板。

第 14 步:将立体声重新组装在一起

当您的原型工作到您确定所有 4 根电线都正确连接到立体声系统(您有 5V、GND 并且可以更改音量)时,您可以重新组装系统并将电线悬垂在音量之外前面板上的旋钮孔。这将是其余步骤所需的全部内容。

poYBAGNhy4aAJ4w-AAFymQwAWyc133.png
立体声系统的正面,我们的电线从音量旋钮孔中伸出。
 

要重新组装系统,只需将之前的步骤颠倒过来即可。将面板 PCB 放回原位,记住要轻柔并将刚性连接器重新连接到操作 PCB。通过将所有带状电缆推入适当的连接器来重新连接所有带状电缆,并记住连接器上用于通向主 PCB 的黑色带状的锁定机制。还要记住 PCB 和外壳上的所有螺钉。

第 15 步:制作最终工作板,一些改进的想法

此时你应该有:

  • 一个 100% 工作的原型,将代码上传到 Attiny,并使用面包板将其连接到系统和所有组件进行测试(或者您只是确信您在第一次开始时就对其进行了正确编程:-)) ;
  • 立体声系统重新组装。

现在你可以开始焊接了。为此,我使用了通用 PCB,但您可以按照自己的方式进行操作 - 如果您有设计技能,您可以自己蚀刻,甚至通过 JLCPCB 或类似工具订购专业制作的 PCB(我只制作了附上的简单原理图,所以可以帮不了你这个)。

poYBAGNhy4mAK1nPAAHYhxJaoQk487.png
电路板背面 - 注意用于将电路板安装到位的单针头
 

在随附的图片中,您可以看到我制作的最终装置。我喜欢我的立体声音响前面板上的原始外观,但如果你喜欢更整洁的东西,你可以在 2 个 PCB 上制作它 - 一个隐藏在机箱内,微控制器、BT 模块和其他位在那里,另一个暴露在前面板上,只有按钮和 LED(甚至可以切割成旋钮孔的形状并推入其中)。将定制的 3D 打印按钮放在它上面将是非常专业的。

pYYBAGNhy4-AUuzEAAHCMIETYxA913.png
安装在音量旋钮处的成品板
 

请注意,我在电路板周围焊接了一些单针接头,作为将 PCB 放在前面板上的引导/安装点。经过一番修修补补,它们紧紧地挤进音量旋钮孔,并将整个东西牢牢固定在适当的位置。

这就是今天的全部内容,我希望你们喜欢我在这里的第一个项目。干杯!

poYBAGNhy5SAYACyAAF2JcwulXg397.png
最终结果
 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.lene-v.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'带按钮的旧立体声蓝牙音量控制开源分享',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.lene-v.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);