Search Code

ESP32 Tutorial 14/55 - Aangepaste muzieknoten afspelen met de SunFounder ESP32 IoT-leerset

ESP32 Tutorial 14/55 - Aangepaste muzieknoten afspelen met de SunFounder ESP32 IoT-leerset

In deze tutorial leren we hoe we de SunFounder ESP32-microcontroller kunnen gebruiken om muzieknoten af te spelen met behulp van een passieve zoemer en een transistor. Het project is bedoeld om te demonstreren hoe geluid met specifieke frequenties kan worden gegenereerd door de zoemer aan te sturen via de GPIO-pinnen van de ESP32.

We verbinden een passieve zoemer met de ESP32, waarmee we verschillende muzieknoten kunnen produceren op basis van de frequentie die we opgeven. Deze opstelling omvat het gebruik van een transistor om de zoemer op hoge snelheid aan en uit te schakelen, waardoor geluidsgolven ontstaan die we kunnen horen. Voor verdere verduidelijking van het project, bekijk zeker de video (in video op 00:30).

ESP32-13-buzzer-schematic

Hardware uitgelegd

De belangrijkste componenten die in dit project worden gebruikt, zijn de SunFounder ESP32-microcontroller, een passieve zoemer en een NPN-transistor (2N8050). De ESP32 is een krachtig ontwikkelbord met ingebouwde Wi-Fi- en Bluetooth-mogelijkheden, waardoor het veelzijdig is voor verschillende IoT-toepassingen. In dit geval genereert het signalen om de zoemer aan te sturen.

De passieve zoemer werkt door geluid te genereren wanneer er een wisselspanning op wordt toegepast. In tegenstelling tot actieve zoemers, die een ingebouwde oscillator hebben, hebben passieve zoemers een extern signaal nodig om geluid te produceren. De transistor fungeert als een schakelaar, waardoor de ESP32 de zoemer kan aansturen zonder deze direct van stroom te voorzien, zodat de stroomsterkte van de microcontroller niet wordt overschreden.

S87050_transistor

Datasheet-details

Fabrikant SunFounder
Onderdeelnummer Passieve zoemer
Bedrijfsspanning 3,3 V - 5 V
Resonantiefrequentie 2 kHz - 4 kHz
Stroomverbruik ≤ 30 mA
Geluidsdrukniveau ≥ 70 dB
Behuizing Doorgaand gat (through-hole)
Opmerkingen / varianten Geen

 

  • Zorg voor de juiste polariteit bij het aansluiten van de zoemer.
  • Gebruik een stroombegrenzende weerstand voor de basis van de transistor.
  • Sluit de zoemer aan op een voeding die compatibel is met de spanning.
  • Let op dat de maximale stroomsterkte van de transistor niet wordt overschreden.
  • Houd de bedrading netjes om kortsluiting te voorkomen.
  • Test het circuit voordat je code uploadt om schade aan componenten te voorkomen.
  • Gebruik een breadboard voor eenvoudige verbindingen.
  • Zorg voor debouncing van invoer als je knoppen gebruikt.
  • Overweeg een koellichaam voor de transistor als deze bij hoge stroom wordt gebruikt.

Bedradingsinstructies

ESP32-13-buzzer-wriing

Om de componenten te bedraden, begin je met het verbinden van de positieve pool van de passieve zoemer met de 3,3V-pin op de ESP32. De negatieve pool van de zoemer moet worden aangesloten op de collector van de NPN-transistor. De emitterpin van de transistor moet worden verbonden met de grond (GND) van de ESP32.

Verbind vervolgens een weerstand van 1 kΩ van de basis van de transistor naar GPIO-pin 14 op de ESP32. Deze weerstand beperkt de stroom die naar de basis van de transistor vloeit. Zorg er ten slotte voor dat alle aardverbindingen aan elkaar zijn gekoppeld om een gemeenschappelijke referentie voor het circuit te bieden.

Codevoorbeelden & uitleg

const int buzzerPin = 14; // de zoemerpin

void setup()
{
  pinMode(buzzerPin, OUTPUT); // Instellen als uitvoer
}

In de code definiëren we een constante variabele buzzerPin die is ingesteld op 14, wat de GPIO-pin aangeeft die is verbonden met de basis van de transistor. In de setup()-functie stellen we deze pin in als OUTPUT, zodat de ESP32 de zoemer kan aansturen.

void loop()
{
  for (int i = 0; i < 50; i++) // Loop 50 keer en speel elke keer een korte toon
  {
    digitalWrite(buzzerPin, HIGH); // Instellen op HIGH om de zoemer te laten klinken
    delay(3); // Wacht 3 milliseconden
    digitalWrite(buzzerPin, LOW); // LOW om de zoemer uit te schakelen
    delay(3); // 
  }
  delay(1000); // Wacht 1 seconde voordat de volgende loop begint
}

De loop()-functie bevat een for-loop die 50 keer wordt uitgevoerd. Elke iteratie schakelt de zoemer snel aan en uit, waardoor een toon ontstaat. De vertragingen van 3 milliseconden bepalen hoe lang de zoemer wordt geactiveerd en gedeactiveerd, terwijl een vertraging van 1 seconde aan het einde van de loop een pauze biedt voordat deze wordt herhaald.

Demonstratie / Wat te verwachten

Zodra de bedrading is voltooid en de code is geüpload, zou je een reeks korte tonen moeten horen die door de zoemer worden geproduceerd. Als de zoemer geen geluid maakt, controleer dan je verbindingen, vooral de oriëntatie van de transistor en de weerstandswaarde. Zorg ervoor dat de juiste pin in de code wordt gebruikt en dat de ESP32 correct van stroom wordt voorzien.

Tijdens de demonstratie kunnen problemen optreden door onjuiste bedrading of het gebruik van de verkeerde pin voor de zoemer. Controleer de bedrading aan de hand van de instructies en zorg ervoor dat de voeding voldoende is (in video op 08:15).

Videotijdstippen

  • 00:00 Start
  • 1:52 Introductie van het project
  • 4:11 Bedrading uitgelegd
  • 8:11 ESP32-bord en COM-poort selecteren in Arduino IDE
  • 9:53 Arduino-code uitgelegd
  • 13:17 Projectdemonstratie
  • 13:58 Project 2-code en demonstratie

Afbeeldingen

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

Hulpmiddelen en referenties

Bestanden📁

Datasheet (pdf)