Search Code

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 V - 5 V
Резонантна фреквенција 2 kHz - 4 kHz
Потрошувачка на струја ≤ 30 mA
Ниво на звучен притисок ≥ 70 dB
Пакет Преку дупка (Through-hole)
Белешки / варијанти Ниту една

 

  • Осигурете се за правилна поларизација при поврзување на зумерот.
  • Користете отпорник за ограничување на струјата за основата на транзисторот.
  • Поврзете го зумерот на напојување компатибилно со неговиот напонски рејтинг.
  • Внимавајте да не ја надминете максималната тековна вредност на транзисторот.
  • Чувајте ги жиците уредни за да избегнете кратки споеви.
  • Тестирајте го колото пред да го поставите кодот за да избегнете оштетување на компонентите.
  • Користете лебна плоча за лесни врски на компонентите.
  • Осигурете се да ги дебаунсирате влезовите ако користите копчиња.
  • Размислете за додавање на ладилник за транзисторот ако се користи со висока струја.

Инструкции за поврзување

ESP32-13-buzzer-wriing

За да ги поврзете компонентите, започнете со поврзување на позитивниот терминал на пасивниот зумер со 3.3V пинот на ESP32. Негативниот терминал на зумерот треба да се поврзе со колекторот на NPN транзисторот. Емитерскиот пин на транзисторот треба да се поврзе со земјата (GND) на ESP32.

Следно, поврзете отпорник од 1 kΩ од основата на транзисторот до GPIO пин 14 на ESP32. Овој отпорник ја ограничува струјата што тече во основата на транзисторот. Конечно, осигурете се дека сите земјени врски се поврзани заедно за да обезбедат заедничка референца за колото.

Примери на код и објаснување

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

void setup()
{
  pinMode(buzzerPin, OUTPUT); // Постави како излез
}

Во кодот, дефинираме константна променлива buzzerPin што е поставена на 14, означувајќи го GPIO пинот поврзан со основата на транзисторот. Во функцијата setup(), го поставуваме овој пин како OUTPUT, овозможувајќи му на 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); // Почекај 1s пред да започне следната јамка
}

Функцијата 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

Images

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
Language: 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
}

Resources & references

Files📁

Datasheet (pdf)