Skip to main content

Grove - 录音模块

Grove-录音模块基于 APR9600,它提供真正的单芯片语音录制、非易失性存储和播放功能,录音时长为32到60秒。Seeed Twig-录音模块的采样率为8k,总时长为32秒,分为4个段,每个段可以单独控制。此外,这个录音模块还具有Grove兼容接口,可以手动控制或通过Arduino/Seeeduino控制。

特性

  • Grove兼容接口
  • 可以手动控制或通过MCU控制
  • 非易失性Flash存储技术,无需电池备份
  • 用户友好,易于使用的操作
  • 低功耗
  • 采样率和持续时间可通过更换单个电阻来改变。
tip

有关Grove模块的更多详细信息,请参考 Grove系统

应用场景

  • 玩具

规格参数

项目

最小值

典型值

最大值

单位

电压

3.0

5.0

5.25

V

工作电流

25

mA

待机电流

1

uA

范围

±1.5

g

使用方法

这个Grove-录音模块支持4个固定时长的消息段。每个段可以手动控制或通过MCU(Arduino/Seeeduino)控制。每个段的持续时间可以由用户更改。 录音方法

手动控制录音模块非常简单。好的,让我们来看看:开关(SW1)用于录音/播放选择,当你想录音时将其推到"Rec",当你想重播录音机中的声音时将其推到"Play"。4个按钮(K1~K4)是控制按钮,你可以通过按相关按钮来控制录音/重播哪个段。输出连接器用于连接8Ω 0.5w扬声器,Grove连接器用于供电和MCU控制。

如何手动控制

步骤1:给录音模块供电。你可以通过grove 4针线将"control"连接到Base Shield,或连接任何5V电压源。

注意

如果你通过4针线将其连接到Base Shield,你应该确保通过编程将连接的引脚SEL1和SEL2设置为低电平。

我将"Control"连接器连接到数字端口D1。并通过以下代码将D1和D2设置为低电平:

const int D1 =  1;
const int D2 = 2;
int State = LOW;
void setup() {
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
digitalWrite(D1, State );
digitalWrite(D2, State );
}
void loop()
{
}

步骤2:将SW1推到"rec"。

步骤3:按住段相关按钮,例如K1,开始录音,松开按钮停止录音,你会在录音开始和停止时都听到"DI"声。

注意

每个段的录音时间不应超过15秒,否则即使你保持按钮按下,它也会自动停止。

步骤4:当你想重播录制的声音时,只需将SW1推到"Play",然后按相关按钮(不需要按住),然后你就会听到你在这个段中录制的声音。

如何通过Arduino/Seeeduino控制录音模块

录音模块也可以通过MCU(Arduino或Seeeduino)控制,这个功能使这个录音模块适用于更多应用,并给用户带来奇妙的体验。 好的,让我们开始这个录音模块的MCU控制。注意我们将由K1/K2/K3/K4控制的4个段定义为Section_1/Section_2/Section_3/Section_4。

步骤1:准备硬件:将连接器"Control"连接到Base Shield的数字端口D2。并将SW1推到"Rec"。

步骤2:准备软件。为了控制选择要录音/播放的段,Sel_1和Sel_2的每个解码指向不同的段。

Sel_1(D2)/Sel_2(D1)选择的段
0 0(没有选择段)
0 1Section_2
1 0Section_3
1 1Section_4

注意

当由MCU控制时,Section_1无法被选择。

对这样的表格不感兴趣,它令人困惑!只想要代码? 将以下代码下载到你的Arduino/Seeeduino。

/****************************************************************************/

#include "APR9600.h"

/*Grove接口在录音模块上的宏定义*/
#define SEL1 2
#define SEL2 3
ARP9600 recorder(SEL1,SEL2);

/*存储你在串口监视器中输入的命令。*/
char index;//可以是'2','3','4',即段2、段3、段4的索引
char control;//控制字节,可以是'r'表示录音,'s'表示停止录音,
//'p'表示播放

void setup()
{
Serial.begin(9600);
recorder.begin();
}
void loop()
{
getCommand();
delay(50);
}
void getCommand()
{
if (Serial.available()>0)
{
/*从串口监视器获取命令*/
index = Serial.read();
control = Serial.read();
}
while(Serial.available()>0)Serial.read();//清除接收缓冲区
if((index > '1')&&(index < '5'))// 索引应该是2~4
{
if(control == 'r')//是否是录音命令?
{
recorder.record(index - 0x30);
Serial.print("get the ");
Serial.write(index);
Serial.write(control);
Serial.print(" command, ");
Serial.print("begin to record section_");
Serial.println(index - 0x30);
}
else if(control == 'p')//是否是播放命令
{
recorder.play(index - 0x30);
Serial.print("get the ");
Serial.write(index);
Serial.write(control);
Serial.print(" command, ");
Serial.print("begin to play section_");
Serial.println(index - 0x30);
}
else if(control == 's')//是否是停止命令
{
recorder.stop();//停止录音
Serial.print("get the ");
Serial.write(index);
Serial.write(control);
Serial.print(" command, ");
Serial.print("stop recording");
}
/*清除命令*/
index = 0;
control = 0;
}
}

现在,您可以使用以下命令控制录音器(波特率:9600):

命令描述SW1 状态
2rb开始录制 Section_2REC
2rs停止录制 Section_2REC
2p播放 Section_2Play
3rb开始录制 Section_3REC
3rs停止录制 Section_3REC
3p播放 Section_3Play
4rb开始录制 Section_4REC
4rs停止录制 Section_4REC
4p播放 Section_4Play

注意

Section_1 无法通过 MCU 控制。

将固件下载到您的 Arduino/Seeeduino 后,确保连接器"Control"连接到 D2&D3&V&G。

将 SW1 切换到 Rec,并使用任何串口收发器输入命令。以 OCTOPUS 为例。首先输入命令"2rb"开始录制 section_2,输入"2rs"停止录制。请注意,如果没有输入"2rs",录制将在大约 15 秒后自动终止。

现在,您可以输入"2p"来播放 Section_2,请注意您应该确保 SW1 被推到"Play"位置。

您可以先录制 3 个段落(Section_2、Section_3、Section_4),然后通过串口控制您想要重播的段落。

如何更改每个段落的采样率和持续时间

您可以通过控制采样频率来控制质量/持续时间的权衡。振荡器频率可以通过改变从 OscR 引脚到 GND 的电阻**(PCB 中的 R7)**来改变。下表总结了电阻值和相应的采样频率,以及由此产生的输入带宽和持续时间。

电阻采样频率输入带宽持续时间
44 K4.2 KHZ2.1 KHZ60 S
38 K6.4 KHZ3.2 KHZ40 S
24 K8.0 KHZ4.0 KHZ32 S

出厂时 R7 为 24K,您可以将其更改为 38K/44K 以获得更长的录制持续时间,但代价是较低的采样率。

原理图在线查看器

资源

技术支持与产品讨论

感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...