Код для поиска

ESP32 Урок 14/55 — Воспроизведение пользовательской музыкальной ноты с помощью учебного набора SunFounder ESP32 IoT

ESP32 Урок 14/55 — Воспроизведение пользовательской музыкальной ноты с помощью учебного набора SunFounder ESP32 IoT

В этом руководстве мы узнаем, как использовать микроконтроллер SunFounder ESP32 для воспроизведения музыкальных нот с помощью пассивного зуммера и транзистора. Цель проекта — продемонстрировать, как генерировать звук с определенными частотами, управляя зуммером через GPIO-контакты ESP32.

Мы подключим пассивный зуммер к ESP32, что позволит нам воспроизводить различные музыкальные ноты в зависимости от заданной частоты. Эта схема включает использование транзистора для быстрого включения и выключения зуммера, создавая звуковые волны, которые мы можем слышать. Для дальнейших пояснений по проекту обязательно посмотрите видео (на видео в 00:30).

ESP32-13-buzzer-schematic

Объяснение аппаратной части

Основные компоненты, используемые в этом проекте, включают микроконтроллер SunFounder ESP32, пассивный зуммер и NPN-транзистор (2N8050). ESP32 — это мощная плата разработчика со встроенными возможностями Wi-Fi и Bluetooth, что делает ее универсальной для различных IoT-приложений. В данном случае она будет генерировать сигналы для управления зуммером.

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

S87050_transistor

Данные из технического описания

Производитель SunFounder
Номер детали Пассивный зуммер
Рабочее напряжение 3,3 В - 5 В
Резонансная частота 2 кГц - 4 кГц
Потребляемый ток ≤ 30 мА
Уровень звукового давления ≥ 70 дБ
Тип корпуса Выводной (Through-hole)
Примечания / варианты Нет

 

  • Убедитесь в правильной полярности при подключении зуммера.
  • Используйте токоограничивающий резистор для базы транзистора.
  • Подключайте зуммер к источнику питания, совместимому с его номинальным напряжением.
  • Остерегайтесь превышения максимального номинального тока транзистора.
  • Содержите проводку в порядке, чтобы избежать коротких замыканий.
  • Проверьте схему перед загрузкой кода, чтобы избежать повреждения компонентов.
  • Используйте макетную плату для удобного подключения компонентов.
  • Обязательно устраняйте дребезг контактов при использовании кнопок.
  • Рассмотрите возможность добавления радиатора для транзистора при использовании с высоким током.

Инструкции по подключению

ESP32-13-buzzer-wriing

Для подключения компонентов начните с соединения положительного вывода пассивного зуммера с контактом 3,3 В на ESP32. Отрицательный вывод зуммера должен быть подключен к коллектору NPN-транзистора. Вывод эмиттера транзистора должен быть соединен с землей (GND) ESP32.

Затем подключите резистор 1 кОм от базы транзистора к GPIO-контакту 14 на ESP32. Этот резистор ограничивает ток, поступающий на базу транзистора. Наконец, убедитесь, что все заземления соединены вместе для обеспечения общего опорного потенциала схемы.

Примеры кода и пояснения

const int buzzerPin = 14; // контакт зуммера

void setup()
{
  pinMode(buzzerPin, OUTPUT); // Установить как выход
}

В коде мы определяем константную переменную buzzerPin, которая установлена на 14, указывая GPIO-контакт, подключенный к базе транзистора. В функции setup() мы устанавливаем этот контакт как ВЫХОД, позволяя ESP32 управлять зуммером.

void loop()
{
  for (int i = 0; i < 50; i++) // Цикл 50 раз и воспроизведение короткого тона каждый раз
  {
    digitalWrite(buzzerPin, HIGH); // Установить HIGH, чтобы зуммер звучал
    delay(3); // Подождать 3 миллисекунды
    digitalWrite(buzzerPin, LOW); // LOW для выключения зуммера
    delay(3); // 
  }
  delay(1000); // Подождать 1 секунду перед началом следующего цикла
}

Функция loop() содержит цикл for, который выполняется 50 раз. Каждая итерация быстро включает и выключает зуммер, создавая тон. Задержки в 3 миллисекунды контролируют, как долго зуммер активирован и деактивирован, а задержка в 1 секунду в конце цикла обеспечивает паузу перед повторением.

Демонстрация / Что ожидать

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

Во время демонстрации, если у вас возникнут проблемы, это может быть связано с неправильным подключением или использованием неверного контакта для зуммера. Сверьте подключение с инструкциями и убедитесь, что источник питания достаточен (на видео в 08:15).

Временные метки видео

  • 00:00 Начало
  • 1:52 Введение в проект
  • 4:11 Объяснение подключения
  • 8:11 Выбор платы ESP32 и COM-порта в Arduino IDE
  • 9:53 Объяснение кода Arduino
  • 13:17 Демонстрация проекта
  • 13:58 Код и демонстрация проекта 2

Изображения

ESP32-13-buzzer-wriing
ESP32-13-buzzer-wriing
ESP32-13-buzzer-schematic
ESP32-13-buzzer-schematic
SunFounder-ESP32-Lesson-13-Beep.mp4_snapshot_07.43.463
SunFounder-ESP32-Lesson-13-Beep.mp4_snapshot_07.43.463
S87050_transistor
S87050_transistor
813-ESP32 Tutorial 14/55- Arduino code for custom music tone
Язык: C++
const int buzzerPin = 14; // buzzer pin
const int resolution = 8;

 // Frequencies of the 7 musical notes (in Hz)
int frequencies[] = {262, 294, 330, 349, 392, 440, 494};


 // Function to play a frequency on the buzzer for a given duration
void playFrequency(int frequency, int duration) {
  ledcWriteTone(buzzerPin, frequency); // Start the tone
  delay(duration); // Wait for the specified duration
  ledcWriteTone(buzzerPin, 0); // Stop the buzzer
}

void setup() {
  ledcAttach(buzzerPin, 2000, 8); // Set up the PWM pin
}

void loop() {
  for (int i = 0; i < 7; i++) {
    playFrequency(frequencies[i], 300); // Play each note for 300ms
    delay(50); // Add a brief pause between the notes
  }
  delay(1000); // Wait for 1 second before replaying the sequence
}

Файлы📁