Search Code

Tutorial ESP32 14/55 - Redarea unei note muzicale personalizate folosind kitul de învățare IoT SunFounder ESP32

Tutorial ESP32 14/55 - Redarea unei note muzicale personalizate folosind kitul de învățare IoT SunFounder ESP32

În acest tutorial, vom învăța cum să folosim microcontrolerul SunFounder ESP32 pentru a reda note muzicale folosind un buzzer pasiv și un tranzistor. Proiectul își propune să demonstreze cum să generăm sunet cu frecvențe specifice prin controlul buzzer-ului prin pinii GPIO ai ESP32-ului.

Vom conecta un buzzer pasiv la ESP32, ceea ce ne va permite să producem diferite note muzicale în funcție de frecvența pe care o furnizăm. Această configurație include utilizarea unui tranzistor pentru a comuta buzzer-ul pornit și oprit la viteze mari, creând unde sonore pe care le putem auzi. Pentru clarificări suplimentare despre proiect, asigurați-vă că urmăriți videoclipul (în videoclip la 00:30).

ESP32-13-buzzer-schematic

Hardware Explicat

Componentele principale utilizate în acest proiect includ microcontrolerul SunFounder ESP32, un buzzer pasiv și un tranzistor NPN (2N8050). ESP32 este o placă de dezvoltare puternică, cu capacități Wi-Fi și Bluetooth integrate, fiind versatilă pentru diverse aplicații IoT. În acest caz, va genera semnale pentru a controla buzzer-ul.

Buzzer-ul pasiv funcționează generând sunet atunci când i se aplică o tensiune alternativă. Spre deosebire de buzzerele active, care au un oscilator integrat, buzzerele pasive necesită un semnal extern pentru a produce sunet. Tranzistorul acționează ca un comutator, permițând ESP32-ului să controleze buzzer-ul fără a-l alimenta direct, asigurându-se că ratingul de curent al microcontrolerului nu este depășit.

S87050_transistor

Detalii din Fișa Tehnică

Producător SunFounder
Număr de piesă Buzzer Pasiv
Tensiune de Operare 3,3 V - 5 V
Frecvență de Rezonanță 2 kHz - 4 kHz
Consum de Curent ≤ 30 mA
Nivel de Presiune Sonoră ≥ 70 dB
Pachet Prin gaură
Note / variante Niciuna

 

  • Asigurați polaritatea corectă atunci când conectați buzzer-ul.
  • Utilizați un rezistor de limitare a curentului pentru baza tranzistorului.
  • Conectați buzzer-ul la o sursă de alimentare compatibilă cu tensiunea sa nominală.
  • Aveți grijă să nu depășiți curentul maxim nominal al tranzistorului.
  • Păstrați cablurile ordonate pentru a evita scurtcircuitele.
  • Testați circuitul înainte de a încărca codul pentru a evita deteriorarea componentelor.
  • Utilizați o placă de testare pentru conexiuni ușoare ale componentelor.
  • Asigurați-vă că debounce-uiți intrările dacă folosiți butoane.
  • Luați în considerare adăugarea unui radiator pentru tranzistor dacă este utilizat la curent mare.

Instrucțiuni de Cablare

ESP32-13-buzzer-wriing

Pentru a cabla componentele, începeți prin conectarea terminalului pozitiv al buzzer-ului pasiv la pinul de 3,3V de pe ESP32. Terminalul negativ al buzzer-ului ar trebui să se conecteze la colectorul tranzistorului NPN. Pinul emitor al tranzistorului ar trebui să fie conectat la masă (GND) a ESP32-ului.

Apoi, conectați un rezistor de 1 kΩ de la baza tranzistorului la pinul GPIO 14 de pe ESP32. Acest rezistor limitează curentul care curge în baza tranzistorului. În final, asigurați-vă că toate conexiunile de masă sunt legate împreună pentru a oferi o referință comună pentru circuit.

Exemple de Cod & Explicații

const int buzzerPin = 14; // pinul buzzer-ului

void setup()
{
  pinMode(buzzerPin, OUTPUT); // Setat ca ieșire
}

În cod, definim o variabilă constantă buzzerPin care este setată la 14, indicând pinul GPIO conectat la baza tranzistorului. În funcția setup(), setăm acest pin ca OUTPUT, permițând ESP32-ului să controleze buzzer-ul.

void loop()
{
  for (int i = 0; i < 50; i++) // Buclă de 50 de ori și redă un ton scurt de fiecare dată
  {
    digitalWrite(buzzerPin, HIGH); // Setat la HIGH pentru a face buzzer-ul să sune
    delay(3); // Așteaptă 3 milisecunde
    digitalWrite(buzzerPin, LOW); // LOW pentru a opri buzzer-ul
    delay(3); // 
  }
  delay(1000); // Așteaptă 1s înainte de a începe următoarea buclă
}

Funcția loop() conține o buclă for care rulează de 50 de ori. Fiecare iterație pornește și oprește rapid buzzer-ul, producând un ton. Întârzierile de 3 milisecunde controlează cât timp buzzer-ul este activat și dezactivat, în timp ce o întârziere de 1 secundă la sfârșitul buclei oferă o pauză înainte de repetare.

Demonstrație / Ce să Așteptați

Odată ce cablarea este completă și codul este încărcat, ar trebui să auziți o serie de tonuri scurte produse de buzzer. Dacă buzzer-ul nu sună, verificați conexiunile, în special orientarea tranzistorului și valoarea rezistorului. Asigurați-vă că pinul corect este utilizat în cod și că ESP32 este alimentat corespunzător.

În timpul demonstrației, dacă întâmpinați probleme, acestea se pot datora cablării incorecte sau utilizării unui pin greșit pentru buzzer. Verificați cablarea conform instrucțiunilor și asigurați-vă că sursa de alimentare este adecvată (în videoclip la 08:15).

Marcaje Temporale din Video

  • 00:00 Început
  • 1:52 Introducere în proiect
  • 4:11 Cablare explicată
  • 8:11 Selectarea plăcii ESP32 și a portului COM în Arduino IDE
  • 9:53 Codul Arduino explicat
  • 13:17 Demonstrația proiectului
  • 13:58 Codul și demonstrația proiectului 2

Imagini

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

Resurse și referințe

Fișiere📁

Fișă tehnică (pdf)