0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Arduino进行USB音量控制

王晾其 来源:DevicePlus 作者:DevicePlus 2023-02-22 17:44 次阅读

使用快捷键调节电脑音量非常方便,许多多媒体键盘都内置有该功能。但是如果您的键盘没有,您可以使用Arduino、一个旋钮和一些代码来构建该工具。本指南将介绍如何添加外部的库,并使用Arduino来控制您的PC。
poYBAGPy0x6AArf6AAI-EWDG6og790.jpg

如何使用Arduino控制您的计算机

为了用Arduino控制计算机,我们将使用一种名为Leonardo的变体Uno。与Uno不同的是,该板基于4ATmega32u4芯片组,这种芯片组本身支持USB通信,从而可以使开发板用作鼠标和键盘。方便的一点是,这也使该板可以发送媒体控制命令,类似于键盘上的音量、播放和暂停按钮的工作原理
但是,为了使用这些媒体命令,您需要在Arduino IDE中启用一个额外的库。库中包含了可以执行各种特定任务的附加代码,而Arduino IDE自带有一些用于控制伺服系统、鼠标或键盘等常用功能的库。与此同时,IDE还包含一个可搜索的附加库目录,可以进一步扩展您的项目。
在这里我们将可以找到所需要的媒体控制库。在Arduino IDE中,进入Sketch > Include library > Manage librarie…然后搜索“hoodloader”,点击“Install(安装)”。现在,您就可以在IDE中使用HID项目库了。我们将在下文代码部分向您展示如何将其引用到您的草图中。

所需工具

有很多种方法可以构建该特定工具,从技术上讲,可以使用带有Hoodloader2 库的 Arduino Uno来实现。但是,此方法的设置过程不在本指南的范围内,所以我们会重点关注被设计为默认用作USB鼠标或键盘的Arduino模型。在这一思路下,您将需要以下工具:

Arduino Leonardo pYYBAGPy0yGATcDGAAC75ctvbCg917.jpg
一个电位器
这是一个简单的三引脚输入元件,带有一个附加的旋钮或控制盘。通过调节功率吞吐量,该输入可以调整Arduino内部的一个值,我们可以将其用作音量控制。
poYBAGPy0uKAQ_eTAAAX0GkEJ3A940.jpg
Arduino IDE
如果您尚未设置Arduino IDE, 您可以点击此处查看之前的指南
pYYBAGPy0k2AN7DzAAAw7VCpJJQ071.png

您还需要一根微型USB线(如果您身边没有的话),以及一台可以工作的计算机。
本指南是为Windows用户设计的,虽然也适用于使用其他操作系统的用户,但是在细节上可能会有所不同。

代码

首先,以下是我们将使用的草图中的完整代码:
#include
int potpin = 0; // Assign analog pin to potentiometer
int val = 0; // Variable to read value from potentiometer, starts at 0
int oldVolume = 0; // Used to compare volume levels
int currentVolume = 0; // Used to compare volume levels
void setup() {
Serial.begin(9600); // This will allow you to read the current value of the dial
}
void loop() {
val = analogRead(potpin); // Reads potentiometer value (between 0 and 1023)
val = map(val, 0, 1023, 0, 50); // Scale value to volume (value between 0 and 50)
Serial.print(val); // Print dial/volume position
Serial.println(); //
if (val != oldVolume) {
if(val > oldVolume){
//delay(100);
Consumer.write(MEDIA_VOLUME_UP);
currentVolume = currentVolume + 2;
oldVolume = val;
}
else{
//delay(100);
Consumer.write(MEDIA_VOLUME_DOWN);
currentVolume = currentVolume – 2;
oldVolume = val;
}
}
}
如果您想直接跳到接线部分,可以将此代码复制到IDE中并上传。现在,我们来解释一下这个草图中的一些重要部分。
#include
该命令将会把您之前添加到草图中的媒体控制库进行引用。这使我们可以使用稍后将讨论的那些命令。虽然通过菜单将Hoodloader库添加到您的IDE也可以使其在草图中可用,但是该行代码对于需要使用其中所包含命令的任何草图都是必需的。
int potpin = 0; // Assign analog pin to potentiometer
int val = 0; // Variable to read value from potentiometer, starts at 0
int oldVolume = 0; // Used to compare volume levels
int currentVolume = 0; // Used to compare volume levels
这里的第一行从电位器(按钮/控制盘)启动信号。然后将控制盘的位置分配给val变量。这用于提高或降低音量。
由于无法直接分配音量级别,草图会指示PC以2为增量来提升或降低音量级别(Windows音量级别范围为0到100),直到调整到所需的音量级别。之后的两个变量oldVolume和currentVolume在每次循环迭代中都会进行比较,直到它们与控制盘输出的级别匹配。
val = analogRead(potpin); // Reads potentiometer value (between 0 and 1023)
val = map(val, 0, 1023, 0, 50); // Scale value to volume (value between 0 and 50)
这两行代码用于读取控制盘的位置,然后将该值映射到0到50的范围中。通常,电位器可以读取0到1023范围内的值,但这比我们所需要的变化范围大得多,所以我们需要将范围压缩到0到50。
由于Windows的音量调整范围是0到100,并且每执行一次音量增大或减小命令,音量级别的增量为2,所以这可以使控制盘的最小和最大值对应于Windows中的最小和最大音量级别。
if (val != oldVolume) {
if(val > oldVolume){
Consumer.write(MEDIA_VOLUME_UP);
currentVolume = currentVolume + 2;
oldVolume = val;
}
else{
Consumer.write(MEDIA_VOLUME_DOWN);
currentVolume = currentVolume – 2;
oldVolume = val;
}
}
在这个基本循环中,会将来自控制盘的值和之前的音量级别进行比较。只要没有发生任何变化,该循环中的代码就不会被执行。一旦控制盘发生了移动,循环代码将开始执行。如果控制盘向上移动,那么循环将会执行MEDIA_VOLUME_UP命令,直到系统音量与控制盘位置相匹配。如果控制盘向下移动,循环将改为执行MEDIA_VOLUME_DOWN命令。
该命令是使用HID项目API的 Consumer.write()函数来发送的。该命令还可用于诸如媒体暂停、媒体播放或静音等工作。您可以尝试添加更多的输入元件,如按钮,并调整草图对其进行使用。
poYBAGPy0yuAAfYlAAKYhn2KnjE911.jpg
接线
现在您已经了解代码是如何工作的了,接下来可以将草图上传到您的Arduino Leonard。上传后,您可以开始连接电位器。这个项目的接线很简单:
● 将电位器的第一个引脚连接到GND。
● 将中间引脚连接到模拟引脚A0。
● 将电位器的最后一个引脚连接到5V引脚。
● 将Leonardo上的微型USB端口连接到计算机
虽然在许多Arduino项目中,只要有电源,就可以在不使用计算机的情况下运行,但是在本项目中,很显然是需要连接计算机的。
在使用此版本的草图时,最好在首次启动Arduino时将计算机音量和控制盘都设置为零。但是,为了使其更加灵活,您也可以尝试添加Consumer 库中的其他命令来自动调低系统音量,以便您在首次连接使用时将其与您的控制盘同步。

pYYBAGPbhjqAbi1JAAAGd6_rQT0867.png
DevicePlus 编辑团队
设备升级版适用于所有热爱电子和机电一体化的人。

审核编辑黄宇


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

    关注

    59

    文章

    7438

    浏览量

    258259
  • Arduino
    +关注

    关注

    184

    文章

    6428

    浏览量

    184852
收藏 人收藏

    评论

    相关推荐

    请教:手机通话音量控制问题

    大家好,我有些关于手机音量控制的问题,请大家帮忙解答下:1. 手机通话音量是手机控制,还是由网络传过来的。是传基准值吗?2. 为什么打运营商的电话的时候音量会比正常通话较大。这个
    发表于 05-19 22:20

    音量控制器和对数电位计

    作者: TI专家Bruce Trump翻译: TI信号链工程师 Rickey Xiong (熊尧) 你曾用过线性电位计作为音量控制器吗?如果你使用过,你可能会发现,音量跳变得非常快。如果想将音量调整
    发表于 09-20 16:30

    WINDOWS API 应用,系统音量控制

    系统音量控制,其它控制一样,改下参数即可实现,如实现窗口无边透明等,都可以用此函数!
    发表于 10-18 13:53

    分享一个不错的使用Arduino Leonardo PC音量控制的项目

    描述Arduino Leonardo PC 音量控制这是一个使用 Arduino Leonardo、电位计和 10 个 LED 来控制计算机 (PC)
    发表于 09-01 06:18

    LM1036音量控制器均衡器电路

      该音量控制器均衡器电路电子项目采用LM1036直流音调音量控制器设计,带有音量和平衡电路,适用于立体声应用。   LM1036音量控制器均衡器电路的附加
    发表于 09-08 17:16

    电子音量控制电路

    电子音量控制电路 TC9153是东芝公司推出的CMOS高保真音量控制专用集成电
    发表于 12-05 13:46 6460次阅读
    电子<b class='flag-5'>音量控制</b>电路

    音量控制M62446的驱动C程序

    音量控制M62446的驱动C程序音量控制M62446
    发表于 07-07 17:48 6825次阅读

    基于USB控制器设计的Windows音量控制

    基于USB控制器设计的Windows音量控制器 介绍一种使用MAX3420作为USB控制器、ATtiny 13作为微处理器设计的Windo
    发表于 03-29 15:12 2983次阅读
    基于<b class='flag-5'>USB</b><b class='flag-5'>控制</b>器设计的Windows<b class='flag-5'>音量控制</b>器

    电子音量控制电路

    电子音量控制电路 TC9153是东芝公司推出的CMOS高保真音量控制专用集成电路。该电路的特点是功耗低,电流约为1~3mA。失真小,THD≤0.005%。音量衰减范围
    发表于 07-29 14:43 5677次阅读
    电子<b class='flag-5'>音量控制</b>电路

    电子音量控制电路

    电子音量控制电路 TC9153是东芝公司推出的CMOS高保真音量控制专用集成电路。该电路的特点是功耗低,电流约为1~3mA。失真小,THD≤0.005%。音量衰减范围
    发表于 07-29 14:44 7030次阅读
    电子<b class='flag-5'>音量控制</b>电路

    音量控制器如何设置_音量控制器的作用

    音量控制器,顾名思义就是说它是一种控制音量的输出的一种设备,主要是应用在一些声音的处理和对音频的音量控制。它的使用就是把会伤害到听力的那些音频转换成为一些信号,再通过
    发表于 05-29 09:45 6335次阅读

    Arduino Leonardo PC音量控制开源分享

    电子发烧友网站提供《Arduino Leonardo PC音量控制开源分享.zip》资料免费下载
    发表于 08-12 10:35 5次下载
    <b class='flag-5'>Arduino</b> Leonardo PC<b class='flag-5'>音量控制</b>开源分享

    如何使用Digispark进行音量控制

    电子发烧友网站提供《如何使用Digispark进行音量控制.zip》资料免费下载
    发表于 11-04 14:33 0次下载
    如何使用Digispark<b class='flag-5'>进行</b><b class='flag-5'>音量控制</b>

    编码器音量控制开源分享

    电子发烧友网站提供《编码器音量控制开源分享.zip》资料免费下载
    发表于 02-01 10:13 10次下载
    编码器<b class='flag-5'>音量控制</b>开源分享

    等响度音量控制电路

    等响度音量控制电路图,用于功放主音量控制
    发表于 06-25 09:25 4次下载