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

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

3天内不再提示

分享一个使用Arduino敲击手指生成音调的项目

科技观察员 来源:circuitdigest 作者:阿斯文斯·拉吉 2023-01-25 15:28 次阅读

在这个项目中,我们将使用 Arduino 构建一个娱乐。我们都有敲击桌子或笔来创作任何随机音乐的习惯。当然,这可能不被认为是一种良好的举止,但我们都喜欢至少做一次。因此,我想通过使用Arduino的音调播放能力将其提升到一个新的水平。一旦你构建了这个项目,你就可以通过 敲击任何导电的东西来生成音调 ,并创造你自己的节奏,就像在你的手掌上弹钢琴一样。听起来很酷,所以,让我们构建它。

所需组件:

本项目所需的材料如下,不一定要坚持。一旦你掌握了这个概念,你就可以使用自己的方式来构建它。

  1. Arduini Pro Mini
  2. 培佐扬声器
  3. 柔性传感器
  4. 手指手套
  5. 10K 电阻器
  6. BC547 晶体管
  7. 9V电池

电路图及说明:

这款Arduino棕榈钢琴的电路图如下所示。

1.png

该项目总共使用四个传感器,即两个 柔性传感器和两个达林顿对作为触摸传感器 。我们还使用了两个下拉电阻R1和R2,每个值为10k,它们将充当Flex传感器的下拉电阻。在这里,Flex传感器用于使用一根手指根据弯曲的程度生成三种不同的音调。所以我们可以用两根手指发出 6 种声音。在此处了解柔性传感器

达林顿对:

在我们继续之前,重要的是要知道什么是达林顿以及它在我们的项目中究竟是如何工作的。达林顿对可以定义为两个双极晶体管的连接方式,即第一个晶体管放大的电流被第二个晶体管进一步放大。下图显示了达林顿对:

达林顿对

如上所示,我们使用了两个BC547晶体管,其集电极连接在一起,第一个晶体管的发射极与第二个晶体管的基极连接。该电路充当具有增益的放大器,这意味着提供给第一个晶体管基极的任何小信号都足以偏置第二个晶体管的基极。 我们的身体在这里充当接地 ,因此每当我们触摸晶体管的底部时,第二个晶体管就会偏置。利用这一点,我们为这个项目构建了触摸传感器。

引脚 2 和 3 是 Arduino 上的中断引脚,将使用内部上拉电阻器将其拉高,然后在达林顿开关闭合时将这些引脚固定在地。这样,每次我们触摸电线时(从 1 的底部^圣^晶体管)将从 Arduino 触发中断。

使用两个手指只能产生两种类型的音调,因此我还添加了一个柔性传感器,它会根据弯曲的程度改变音调。我已经编程为根据手指(柔性传感器)弯曲的程度为每个手指产生三种不同的音调。如果您想在指尖拥有更多音调,可以增加数量。

我在性能板上制作了完整的板,以便它很容易放入我的手掌,但您也可以使用面包板。只要确保你的身体在某个时候接触电路的地面。焊接所有东西后,它应该看起来像这样

阿杜伊诺手指敲击钢琴

通过使用 Arduino 敲击手指来生成声音

我用两只手指手套将达林顿对的电线固定到位,如上所示。您可以提出自己的(如果可能的话更好)想法,以便在播放音调时将它们固定到位。

Arduino编程:

这个Arduino点击音发生器的程序非常简单。我们只需要注意来自达林顿电线的中断,如果找到一个,我们必须播放音调,这取决于弯曲传感器弯曲的程度。完整的代码在这篇文章的末尾给出,但我在下面解释了几个重要的块。

注意:该程序在库“pitches.h”的帮助下工作。因此,请确保在编译之前已将头文件添加到程序中。您可以从此处下载 pitches.h 头文件。

在设置函数中,我们将引脚 2 和 3 初始化为带有上拉电阻的输入。我们还将它们声明为中断引脚,并在引脚 2 上有中断时执行 tone1(),当引脚 3 上有中断时执行 tone2() 函数^RD^针。每当这些引脚从其上拉状态变为低电平时,就会触发这些中断。

void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(2), tone1, LOW);
attachInterrupt(digitalPinToInterrupt(3), tone2, LOW);
Serial.begin(9600);
}

环路功能内部,我们不断检查柔性传感器的弯曲程度。例如,我的 FlexSensor 1 在保持平坦时给出的值约为 200,当我将其弯曲到最大值时,值一直下降到 130,因此我将值从 200 映射到 130 为 1 到 3,因为我必须播放 3 种不同类型的音调。您必须根据 Flex 传感器值和音调数量调整这两条线。

void loop() {
 flexSensor1 = map(analogRead(A0),200,130,1,3); //Map up with your own values based on your flex sensor
 flexSensor2 = map(analogRead(A1),170,185,1,3); //Map up with your own values based on your flex sensor

}

正如我们之前看到的,当在引脚 2 上检测到中断时,函数 tone1() 将被执行。tone1() 函数内部发生了什么如上所示。我们查看 FlexSensor1 的值,并根据 flexSesnor 值播放音调。音调将使用Arduino的音调功能播放。

void tone1()
{
if (flexSensor1==1)
tone(8, NOTE_D4,50);
else if (flexSensor1==2)
tone(8, NOTE_A3,50);
else if (flexSensor1==3)
tone(8, NOTE_G4,50);
else
tone(8, NOTE_D4,50);
}

下面的行用于播放音调。您可以播放“pitches.h”头文件中可用的任何音调。例如,上面的行在引脚上播放NOTE_A3,持续时间为 50 毫秒。

tone(8, NOTE_A3,50); //tone(PinNum,Note name, Duration);

加工:

硬件准备就绪后,上传代码并将其安装在手指上。确保您的身体在某个时候接触电路的地面。现在只需触摸任何导电材料或您的身体,您应该能够听到相应的音调。您可以通过以不同的间隔和不同的位置点击来播放自己的旋律或音乐。

/*
* Arduino based Tap and Tone player
* Published by: CircuitDigest.com
* Code By: B.Aswinth Raj
* Dated:8-7-2017
*
* ###CONNECTIONS###
* Darlington Wire 1 -> Pin 2
* Darlington Wire 2 -> Pin 3
* FlexSensor 1 -> A0
* FlexSensor 2 -> A1
* Speaker -> Pin 8
*/

#include "pitches.h" //add this librarey into the project folder
int flexSensor1,flexSensor2;

void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(2), tone1, LOW); //Trigger tone1 when LOW
attachInterrupt(digitalPinToInterrupt(3), tone2, LOW); //Trigger tone2 when LOW
Serial.begin(9600);
}

void loop() {
flexSensor1 = map(analogRead(A0),200,130,1,3); //Map up with your own values based on your flex sensor
flexSensor2 = map(analogRead(A1),170,185,1,3); //Map up with your own values based on your flex sensor
}

//**Function to execute on Interrupt 1**//
void tone1()
{

if (flexSensor1==1)
tone(8, NOTE_D4,50);
else if (flexSensor1==2)
tone(8, NOTE_A3,50);
else if (flexSensor1==3)
tone(8, NOTE_G4,50);
else
tone(8, NOTE_D4,50);
}

//**Function to execute on Interrupt 2**//
void tone2()
{

if (flexSensor1==1)
tone(8, NOTE_A4,50);
else if (flexSensor1==2)
tone(8, NOTE_F4,50);
else if (flexSensor1==3)
tone(8, NOTE_E4,50);
else
tone(8, NOTE_A4,50);
}

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

    关注

    0

    文章

    22

    浏览量

    26521
  • Arduino
    +关注

    关注

    186

    文章

    6439

    浏览量

    185449
收藏 人收藏

    评论

    相关推荐

    简易的敲击装置

    想设计简单的敲击装置,敲击球的表面,采集振动信号~要保证
    发表于 03-23 15:35

    请问ADXL345应用敲击的值怎么确定

    摸索着它的些功能,有些疑问。 比如我现在设置100Hz的输出速率,使能敲击检测,选择流模式,目的是在得到敲击的中断信号后,立刻读取X,Y,Z的值来判断敲击的幅度,但是当
    发表于 12-07 09:58

    音调发生器模块是如何利用计数器去生成1kHz信号的

    如何去制作通用的音调发生器模块?该模块有何功能?音调发生器模块是如何利用计数器去生成
    发表于 08-19 07:45

    自制arduino项目

    描述你自己的arduino项目这个项目最适合初学者到高级制作自己的 arduino 是每个人都想做的梦想,在这里您只需单击下即可
    发表于 08-15 06:03

    简单的音调控制电路

    描述Baxendall 音色栈这只是简单的音调控制电路,可以添加到现有项目中以获得更好的音频控制。
    发表于 08-17 06:31

    带有Arduino NANO V3的PLC项目

    描述PLC Arduino NANO 可编程梯形图该项目带有 Arduino NANO V3 的 PLC,可以使用 LadderMak
    发表于 08-23 06:54

    分享不错的Arduino NANO项目

    描述Arduino NANO 项目#11 | 气象站 | 风速
    发表于 08-30 07:24

    基于Arduino Nano构建合成器

    PCBArduino纳米电位器开/关按按钮扬声器 4 欧姆排针母头原理图该板的原理图很简单,Arduino Nano 连接了 12 按钮。每个 Push Button 都连接 I
    发表于 09-01 07:00

    分享不错的Arduino-PLC项目

    描述Arduino-PLC 项目(第 2 张,共 5 张)这个项目包含 5 张卡片,它们用排针相互交错。Arduino Nano 数据表将帮助您进行连接。其他用于 Nano 编程的 3
    发表于 09-07 06:26

    是否有生成方波的音调函数?

    的程序,带有中断以捕获 GPIO 切换按钮并在触摸按钮时结束电子邮件。该程序运行完美,它的名称为 default.bas。即使在参数中打勾,程序也不会单独启动。我需要按 RUN 才能让它工作。 第二问题:是否有生成方波的音调
    发表于 05-10 13:15

    怎样将敲击传感器与Arduino接口

    在这个项目中,我们将了解敲击传感器或振动传感器(有时称为分接传感器)。在此过程中,我们将看到敲击传感器的组件,敲击传感器的工作原理以及如何将敲击
    的头像 发表于 07-30 10:49 9047次阅读

    使用扬声器模块/Arduino UNO板/香蕉来播放音调

    电子发烧友网站提供《使用扬声器模块/Arduino UNO板/香蕉来播放音调.zip》资料免费下载
    发表于 10-19 14:18 0次下载
    使用扬声器模块/<b class='flag-5'>Arduino</b> UNO板/香蕉来播放<b class='flag-5'>音调</b>

    使用Arduino Uno生成波形

    电子发烧友网站提供《使用Arduino Uno生成波形.zip》资料免费下载
    发表于 11-04 14:12 6次下载
    使用<b class='flag-5'>Arduino</b> Uno<b class='flag-5'>生成</b>波形

    如何使用Arduino音调功能在压电蜂鸣器或扬声器上播放旋律

    在本教程中,我们将学习使用 Arduino 音调 () 功能在压电蜂鸣器或扬声器上播放旋律是多么简单易行.
    的头像 发表于 01-25 15:37 7102次阅读
    如何使用<b class='flag-5'>Arduino</b><b class='flag-5'>音调</b>功能在压电蜂鸣器或扬声器上播放旋律

    使用Arduino播放不同频率的音调

    电子发烧友网站提供《使用Arduino播放不同频率的音调.zip》资料免费下载
    发表于 06-27 09:46 0次下载
    使用<b class='flag-5'>Arduino</b>播放不同频率的<b class='flag-5'>音调</b>