一板网电子技术论坛

风筝
发表于: 2021-2-4 11:13:13 | 显示全部楼层

您是否曾经想过购买一台小型录音机来录制环境中的声音并将其存储在内存中?您只需执行几个简单的步骤即可轻松制作自己的录音机。该项目主要是制作基于Arduino的录音机,也可以将其用作Spy Bug(间谍窃听器)。我们的Spy Bug使用小型麦克风记录语音,并将所记录的语音存储到SD卡中。它可以录制2分钟长的音频片段,每2分钟长的片段将被顺序编号。通电后,录制过程将持续进行,直到电池没电或没有更多空间存储录制的音频。我们还在Arduino上连接了一个LED,指示录制过程已经开始。这些听起来很有趣,对吧?让我们开始吧。


所需的组件

●    Arduino Nano开发板

●    MAX9814放大器板

●    SD卡模块

●    SD卡

●    5V电源

Arduino-Based-Spy-Bug-Components.jpg


基于Arduino的Spy Bug –原理图

下面显示了基于Arduino的Spy Bug的完整示意图。您可以在原理图中看到该项目的主控是Arduino Nano。

Arduino-Based-Spy-Bug-Schematic-Diagram.png


该项目的主要组件是MAX9814,这是一款低成本、高性能麦克风放大器,具有自动增益控制(AGC)和低噪声麦克风偏置。该器件具有低噪声前端放大器、可变增益放大器(VGA)、输出放大器、麦克风偏置电压发生器和AGC控制电路。

MAX9814-Microphone-Amplifier.jpg


MAX9814(如上图所示)记录声音并将其传输到Arduino。然后,Arduino将声音转换为.wav格式,并将其存储在与Arduino连接的MicroSD卡模块中。


MAX9814模块中有许多引脚,但是主要使用VCC、GND和out引脚。还有一个增益引脚可以连接到GND或VDD,以获得50dB和40dB的受控增益。但是我们没有使用增益控制。默认情况下,模块提供的未压缩增益设置为60dB。


音频以2分钟的格式存储,然后开始存储在新文件中。因此,每个.wav文件的长度为2分钟。


代码说明

基于Arduino的Spy Bug录音设备的代码非常简单,以下将简要说明。

  1. #include <TMRpcm.h>
  2. #include <SD.h>
  3. #include <SPI.h>
复制代码

在上面代码中,包含了基于SPI、SD和TMR的PCM库。要编译代码,请使用此库。您可以从GitHub下载TMRpcm库

  1. TMRpcm audio; // make instance variable
  2. int file_number = 0;
  3. char filePrefixname[50] = "spy";
  4. char exten[10] = ".wav";
复制代码

在上述代码中,设置了名称前缀和转换文件类型以及将存储音频的起始文件号。文件名将是spyxxx.wav

  1. const int recordLed = 2;
  2. const int mic_pin = A0;
  3. const int sample_rate = 16000;
复制代码

在代码中,选择“正在录制”通知LED,这是Arduino中可用的LED。mic引脚在A0引脚中可用,采样率为16000位。

  1. #define SD_CSPin 10 // defines the CS pin of the SD card.
  2. // delay function for serial log.
  3. void wait_min(int mins) {
  4.   int count = 0;
  5.   int secs = mins * 60;
  6.   while (1) {
  7.             Serial.print('.');
  8.             delay(1000);
  9.             count++;
  10.             if (count == secs) {
  11.             count = 0;
  12.             break;
  13.             }
  14.   }
  15.   Serial.println();
  16.   return ;
  17. }
复制代码

上面的代码用于打印序列号。


  1. void setup() {
  2.   // put your setup code here, to run once:
  3.   //initializes the serial connection between the Arduino and any connected serial device(e.g. computer, phone, raspberry pi...)
  4.   Serial.begin(9600);
  5.   //Sets up the pins
  6.   pinMode(mic_pin, INPUT);
  7.   pinMode(recordLed, OUTPUT);
  8.   Serial.println("loading... SD card");
  9.   if (!SD.begin(SD_CSPin)) {
  10.             Serial.println("An Error has occurred while mounting SD");
  11.   }
  12.   while (!SD.begin(SD_CSPin)) {
  13.             Serial.print(".");
  14.             delay(500);
  15.   }
  16.   audio.CSPin = SD_CSPin;
  17. }
复制代码

在setup函数代码中,设置了引脚方向并安装了SD卡。如果有问题,代码将在串口监视器输出错误。

  1. void loop() {
  2. Serial.println("####################################################################################");
  3.   char fileSlNum[20] = "";
  4.   itoa(file_number, fileSlNum, 10);
  5.   char file_name[50] = "";
  6.   strcat(file_name, filePrefixname);
  7.   strcat(file_name, fileSlNum);
  8.   strcat(file_name, exten);
  9.   Serial.print("New File Name: ");
  10.   Serial.println(file_name);
  11.   digitalWrite(recordLed, HIGH);
  12.   audio.startRecording(file_name, sample_rate, mic_pin);
  13.   Serial.println("startRecording ");
  14.   // record audio for 2mins. means, in this loop process record 2mins of audio.
  15.   // if you need more time duration recording audio then
  16.   // pass higher value into the wait_min(int mins) function.
  17.   wait_min(2); // This is the length of the audio file which is set to 2 minutes
  18.   digitalWrite(recordLed, LOW);
  19.   audio.stopRecording(file_name);
  20.   Serial.println("stopRecording");
  21.   file_number++;
  22.   Serial.println("####################################################################################");
  23. }
复制代码

loop()函数代码中,录音器无限循环记录语音。 然后将它们存储在SD卡中,每次完成文件写入操作时,文件编号都会增加。


测试基于Arduino的Spy Bug

连接所有组件并烧录Arduino的代码。 它将按预计的方式工作。

Arduino-Based-Spy-Bug.jpg


使用手机录制和测试音频。如果您喜欢这篇文章,请在本帖下面进行回复。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 557 | 回复: 1077



手机版|

GMT+8, 2021-4-15 07:30 , Processed in 0.077151 second(s), 31 queries . Powered by Discuz! X3.4

YiBoard一板网 © 2015-2020 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表