Рубрики
Схемы на Arduino

Шпионское подслушивающее устройство на Arduino с записью голоса

В этой статье мы рассмотрим создание на основе платы Arduino компактного устройства для записи голоса, которое при желании можно использовать в качестве подслушивающего устройства (шпионского «жучка)» или диктофона. Наше устройство будет содержать небольшой микрофон для записи голоса и последующего сохранения его на SD карту. Оно будет способно записывать фрагменты звука длительностью до 2 минут, эти фрагменты будут иметь последовательную нумерацию. Запись звука будет производиться до тех пор пока не закончится заряд батареи или не закончится место на SD карте. Для индикации того, что начался процесс записи, мы подключили к плате Arduino светодиод.

Примечание: этот проект рассматривается на нашем сайте исключительно в образовательных целях, его применение для незаконного подслушивания других людей может преследоваться по закону.

Необходимые компоненты

  1. Плата Arduino Nano (купить на AliExpress).
  2. MAX9814 Amplifier board (плата усиления, плата микрофона) (купить на AliExpress).
  3. Модуль чтения SD карт (купить на AliExpress).
  4. SD карта.
  5. Источник питания с напряжением 5 В (power bank, батарейка или что-нибудь подобное).

Внешний вид используемых в проекте компонентов показан на следующем рисунке.

Схема проекта

Схема шпионского подслушивающего устройства на Arduino представлена на следующем рисунке.

Основным компонентом нашего проекта является модуль MAX9814, который представляет собой высокопроизводительный микрофонный усилитель с автоматической регулировкой усиления (automatic gain control, AGC) и низким уровнем вносимых шумов, отличающийся низкой стоимостью. Модуль содержит малошумящий входной (front-end) усилитель, усилитель с изменяющимся коэффициентом усиления (variable gain amplifier, VGA), выходной усилитель, генератор напряжения смещения для микрофона и схему автоматической регулировки усиления – и все это на одном чипе.

Модуль MAX9814 будет записывать звук и передавать его в плату Arduino, которая будет преобразовывать его в .wav формат и сохранять его на MicroSD карту с помощью модуля чтения/записи SD карт, подключенного к плате Arduino.

Модуль MAX9814 содержит достаточно много различных контактов, но мы из них будем использовать всего 3: VCC, GND и выходной контакт. Также модуль содержит контакт усиления (gain pin), который можно подключить к GND или VDD для контролируемого усиления 50dB и 40dB. Но в нашем проекте мы не будем использовать управление усилением модуля, по умолчанию модуль MAX9814 обеспечивает коэффициент усиления равный 60dB.

Для взаимодействия с модулем SD карт мы будем использовать интерфейс SPI, для этого мы задействовали контакты интерфейса SPI платы Arduino.

Контакты платы Arduino Контакты модуля SD карт
5V VCC
GND GND
D10 CS
D11 MOSI
D12 MISO
D13 SCK

Контакты подключения модуля MAX9814 к плате Arduino представлены в следующей таблице.

Контакты платы Arduino Контакты модуля MAX9814
3.3V VDD
GND GND
A0 OUT

Аудио сигнал будет сохраняться фрагментами по 2 минуты, после окончания этого интервала будет создаваться новый файл для записи очередного фрагмента.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В начале кода программы подключим заголовочные файлы используемых библиотек.

Для взаимодействия с модулем MAX9814 с сервиса GitHub скачайте библиотеку TMRpcm.

В следующих строчках кода зададим префикс имени и тип (расширение) файлов, в которые будут сохраняться фрагменты звука. Таким образом, мы будем использовать файлы вида spyxxx.wav.

Также зададим необходимые переменные. Микрофон в нашем проекте доступен на контакте A0 с частотой дискретизации (sample rate) 16000 Гц.

В следующем фрагменте кода мы печатаем необходимую информацию в окно монитора последовательной связи.

В следующем фрагменте кода мы инициализируем последовательную связь (для целей отладки), устанавливаем режимы работы используемых контактов (на ввод или вывод данных). Также мы проверяем возможность работы с SD картой (правильно ли она установлена) и выдаем сообщение об ошибке если ее невозможно инициализировать.

В основном цикле программы loop мы производим запись голоса. Записанный голос мы сохраняем на SD карту, номер файла на которой увеличивается каждый раз когда закончилось время записи в предыдущий файл.

Тестирование работы проекта

После того как аппаратная часть проекта будет готова, можете загружать программу в плату Arduino. После загрузки программы устройство начнет запись звука. Работа устройства была проверена с помощью мобильного телефона. Более подробно все эти процессы можно посмотреть на видео, приведенном в конце статьи.

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

22 ответа к “Шпионское подслушивающее устройство на Arduino с записью голоса”

Инструкция для тех, у кого вылетает ошибка ‘class TMRpcm’ has no member named ‘stopRecording’:
1. переходите в папку с библиотекой TMRpcm
2. ищете файл pcmConfig.h, открываете для изменения
3. ищете и убираете слеши (раскомментировать надо) у следующих строк:
1. #define buffSize 128
2. #define ENABLE_RECORDING
3. #define BLOCK_COUNT 10000UL

у меня после этого всё заработало. profit!

Хорошо, спасибо вам за конструктивный комментарий к данной статье

Собрал всё по вашей схеме, но добавил на аналоговый пин 1 аналоговую клавиатуру, опрашиваемую через AnalogRead. Всё, что у вас в loop, записал в отдельную функцию, но появилась проблема — после использования этой функции AnalogRead зависает и показывает одно и то же значение, то, которое было в момент выхода из функции. Не подскажите, почему так может быть?

Сложно сказать почему так происходит. Попробуйте по очереди убирать из функции фрагменты кода, так вы найдете фрагмент из-за которого возникает проблема, а потом в этом фрагменте можно аналогичным образом найти проблемную строку.

Так, что насчет audio.startRecording(file_name, sample_rate, mic_pin); ?????
Ошибка не исправлена..

О какой именно ошибке идет речь? Самые нижние комментарии к этой статье говорят о том, что с этой строкой должно быть все хорошо

Устанавливаем библтотеку TMRpcm-master.zip Затем запускаем тестовый пример из этой библиотеки или ваш скетч. запускаем компиляцию и получаем эту ошибку..

Ошибка полностью:

Arduino: 1.8.16 (Mac OS X), Плата:»Arduino Nano, ATmega328P (Old Bootloader)»

/var/folders/vj/47cqjxrj2ms5wxhlsnq84nqc0000gn/T/arduino_modified_sketch_909951/Recording.ino: In function ‘void loop()’:
Recording:58:25: error: ‘class TMRpcm’ has no member named ‘startRecording’
case ‘r’: audio.startRecording(«test.wav»,16000,A0); break; //Record at 16khz sample rate on pin A0
^~~~~~~~~~~~~~
Recording:59:25: error: ‘class TMRpcm’ has no member named ‘startRecording’
case ‘R’: audio.startRecording(«test.wav»,16000,A0,1); break; //Record, but with passthrough to speaker.
^~~~~~~~~~~~~~
Recording:60:25: error: ‘class TMRpcm’ has no member named ‘startRecording’
case ‘t’: audio.startRecording(«test.wav»,16000,A0,2); break; //Do not record. Output direct to speaker
^~~~~~~~~~~~~~
exit status 1
‘class TMRpcm’ has no member named ‘startRecording’

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
«Показать подробный вывод во время компиляции»

https://github.com/TMRh20/TMRpcm/blob/master/TMRpcm.h — строка № 80, там есть метод startRecording. Поэтому мне сложно, к сожалению, сказать, из-за чего возникает эта ошибка. Можно попробовать удалить строку № 81 из библиотеки, но шансы малы что это поможет. Уберите из программы все, кроме запуска функции startRecording и строк, необходимых для ее запуска. Посмотрите, будет ли выдаваться ошибка

Выдает следующую ошибку:

sketch_apr26a:111:9: error: ‘class TMRpcm’ has no member named ‘startrecording’

sketch_apr26a:118:9: error: ‘class TMRpcm’ has no member named ‘stopRecording’

exit status 1

‘class TMRpcm’ has no member named ‘startrecording’

Библиотеку подключил. Что сделать в таком случае?

Сложно так сразу сказать из-за чего такая ошибка если библиотека корректно установлена. Попробуйте удалить из программы все строки в которых используются методы, на которые у вас выдается ошибка. Или вообще оставить в программе только минимум строк. Заработает в этом случае или нет.
Я посмотрел исходники библиотеки (https://github.com/TMRh20/TMRpcm/blob/master/TMRpcm.h), там есть методы startRecording и stopRecording, строки с 80 по 83

Спасибо. Интересный проект. Постараюсь разобраться. Мне нужен прибор для перевода на СД карту 2-х канального аналогового стереосигнала с высоким качеством. Не думал даже что ардуино это сможет. Но нужно попробовать.

Спасибо что оценили наш труд. Будем признательны если потом отпишитесь о результатах ваших экспериментов

Можно ли сделать так, чтобы:
1) между записями была пауза (например, 2 минуты записывает, 8 минут — нет)?
2) запись производилась только в определенное время суток (например, с 6 до 9 часов утра)?
3) в названии файлов записи была дата и время записи (например, 20230102_170100.wav)

1. Поместить процесс записи в цикл, в котором 2 минуты пишете, а потом на 8 минут ставите паузу.
2. Использовать модуль часов реального времени, например, DS1307, или определять время по протоколу NTP — в этом случае Ардуино необходимо будет подключить к интернету, например, с помощью модуля ESP8266.
3. С помощью строковой переменной можно сконструировать любое допустимое для SD карты имя файла

Как же вы утомили своими недопримерами!
Где функция audio.startRecording(file_name, sample_rate, mic_pin); ?????
Чем вы дышите?

Импортировали библиотеку.
TMRpcm audio; // create an object for use in this sketch
Сам сначала разберись.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *