Arduino - Buzzer Piezo

Neste tutorial, vamos aprender a usar o buzzer com o Arduino. Em detalhes, vamos aprender:

Sobre o Buzzer

Os buzzers são usados para gerar som, bipes ou até a melodia de uma música. Eles existem em vários tipos, classificados por características distintas. Vamos conhecer essas categorias com base nas seguintes características:

  • Método de Controle:
    • Buzzers Ativos
    • Buzzers Passivos
  • Mecanismo de Geração de Som:
    • Buzzers Piezo
    • Buzzers Comuns
  • Tensão de Operação:
    • Baixa Tensão (3-5V)
    • Alta Tensão (12V)

    Vamos ver mais detalhes.

    Buzzer Ativo vs Buzzer Passivo

    • Buzzer Ativo:
      • Produz som quando uma tensão é aplicada.
      • Precisa de um sinal elétrico contínuo para emitir som.
      • Mais fácil de usar, exigindo apenas uma fonte de tensão.
      • Normalmente usado em aplicações básicas de alerta.
    • Buzzer Passivo:
      • Requer um sinal oscilante externo para criar som.
      • Pode produzir tons diferentes mudando a frequência de entrada.
      • Requer um circuito mais complexo para funcionar.
      • Comumente usado em aplicações musicais e tarefas de geração de tons.

      Buzzer Piezo vs Buzzer Comum

      • Buzzer Piezo:
        • Usa cristais piezoelétricos.
        • Produz sons agudos e nítidos.
        • Versátil, com vários tons e frequências.
        • Eficiente e comumente usado em alarmes e dispositivos musicais.
      • Buzzer Comum:
        • Usa bobinas eletromagnéticas.
        • Produz sons básicos e zumbidos.
        • Variação de tom limitada.
        • Usado em aplicações mais simples, como campainhas e alarmes básicos.

        No mercado, existe um buzzer ativo de 3V-24V, que você pode usar como buzzer ativo de 3-5V ou como buzzer de alta tensão (12V...),

        • Quando você conecta esse buzzer diretamente ao pino do Arduino, ele cria um som normal ⇒ adequado para indicação sonora, como o som de um teclado
        • Quando você conecta esse buzzer a uma alta tensão através de um relé, ele cria um som alto ⇒ adequado para som de alerta.

        Neste tutorial, vamos aprender sobre o buzzer piezo ativo e passivo de 3-5V. Para o buzzer de 12V, consulte o Arduino - tutorial de buzzer de 12V

        Pinagem

        Pinagem do Buzzer Piezo

        Pinagem do Buzzer

        Um buzzer padrão normalmente tem dois pinos:

        • Pino negativo (-): conecte este pino ao GND (0V).
        • Pino positivo (+): este pino recebe o sinal de controle do Arduino, diretamente ou através de um relé.

        Pinagem do Módulo Buzzer Piezo

        Um módulo Buzzer Piezo geralmente tem três pinos:

        • Pino GND: conecte este pino ao GND (0V).
        • Pino VCC: conecte este pino a uma fonte de alimentação (5V ou 3,3V).
        • Pino I/O: este pino recebe o sinal de controle PWM de um pino GPIO do ESP32.

        Como um Buzzer Ativo Funciona

        • Se você conectar o VCC ao pino positivo, o buzzer piezo gera um som constante
        Como o Buzzer Piezo Funciona
        • Se você gerar uma onda quadrada com uma frequência específica (e ciclo de trabalho de 50%) no pino positivo, o buzzer piezo gera tons. Cada frequência produz um tom diferente. Mudando a frequência do sinal no pino positivo, podemos criar a melodia de uma música.
        Como o Buzzer Piezo Funciona

        Como um Buzzer Passivo Funciona

        • Diferente do buzzer ativo, se você apenas conectar o VCC ao pino positivo, o buzzer passivo NÃO gera um som constante
        • Assim como no buzzer ativo, se você gerar uma onda quadrada com uma frequência específica (e ciclo de trabalho de 50%) no pino positivo, o buzzer piezo gera tons. Cada frequência produz um tom diferente. Mudando a frequência do sinal no pino positivo, podemos criar a melodia de uma música

Diagrama de Ligação

  • A ligação entre o Arduino e o buzzer piezo
Diagrama de Ligação do Buzzer com Arduino

This image is created using Fritzing. Click to enlarge image

  • A ligação entre o Arduino e o módulo buzzer piezo
Diagrama de Ligação do Módulo Buzzer com Arduino

This image is created using Fritzing. Click to enlarge image

Como Programar o Buzzer

Graças à biblioteca do Arduino, tocar uma melodia é fácil. NÃO precisamos saber como gerar a onda quadrada. Só precisamos usar duas funções da biblioteca: tone() e noTone().

Código Arduino

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-piezo-buzzer */ #include "pitches.h" #define BUZZER_PIN 8 // The Arduino pin connected to the buzzer // notes in the melody: int melody[] = { NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4 }; // note durations: 4 = quarter note, 8 = eighth note, etc.: int noteDurations[] = { 4, 8, 8, 4, 4, 4, 4, 4 }; void setup() { // iterate over the notes of the melody: for (int thisNote = 0; thisNote < 8; thisNote++) { // to calculate the note duration, take one second divided by the note type. //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. int noteDuration = 1000 / noteDurations[thisNote]; tone(BUZZER_PIN, melody[thisNote], noteDuration); // to distinguish the notes, set a minimum time between them. // the note's duration + 30% seems to work well: int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); // stop the tone playing: noTone(BUZZER_PIN); } } void loop() { // no need to repeat the melody. }

Passos Rápidos

  • Conecte o Arduino ao PC via cabo USB
  • Abra o Arduino IDE, selecione a placa e a porta corretas
  • Copie o código acima e abra-o no Arduino IDE
  • Crie o arquivo pitches.h no Arduino IDE da seguinte forma:
    • Clique no botão logo abaixo do ícone do serial monitor e escolha New Tab, ou use as teclas Ctrl+Shift+N.
    Arduino IDE 2 adiciona arquivo
    • Dê ao arquivo o nome pitches.h e clique no botão OK
    Arduino IDE 2 adiciona o arquivo pitches.h
    • Copie o código abaixo e cole-o no arquivo pitches.h criado.
    /************************************************* * Public Constants *************************************************/ #define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 #define NOTE_AS1 58 #define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2 117 #define NOTE_B2 123 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define NOTE_B3 247 #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 1245 #define NOTE_E6 1319 #define NOTE_F6 1397 #define NOTE_FS6 1480 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_F7 2794 #define NOTE_FS7 2960 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS7 3729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
    • Clique no botão Upload no Arduino IDE para carregar o código no Arduino
    Arduino IDE - Carregar o Código
    • Aproveite a melodia

Modificando o Código Arduino

Agora, vamos modificar o código para tocar a música "Jingle Bells".

Só precisamos mudar o valor de dois arrays: int melody[] e int noteDurations[].

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-piezo-buzzer */ #include "pitches.h" #define BUZZER_PIN 8 // The Arduino pin connected to the buzzer // notes in the melody: int melody[] = { NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_D5, NOTE_D5, NOTE_E5, NOTE_D5, NOTE_G5 }; // note durations: 4 = quarter note, 8 = eighth note, etc, also called tempo: int noteDurations[] = { 8, 8, 4, 8, 8, 4, 8, 8, 8, 8, 2, 8, 8, 8, 8, 8, 8, 8, 16, 16, 8, 8, 8, 8, 4, 4 }; void setup() { // iterate over the notes of the melody: int size = sizeof(noteDurations) / sizeof(int); for (int thisNote = 0; thisNote < size; thisNote++) { // to calculate the note duration, take one second divided by the note type. //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. int noteDuration = 1000 / noteDurations[thisNote]; tone(BUZZER_PIN, melody[thisNote], noteDuration); // to distinguish the notes, set a minimum time between them. // the note's duration + 30% seems to work well: int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); // stop the tone playing: noTone(BUZZER_PIN); } } void loop() { // no need to repeat the melody. }

※ Nota:

O código acima usa a função delay(). Isso bloqueia o restante do código enquanto a melodia está tocando. Para evitar bloquear o restante do código, use a biblioteca ezBuzzer. Essa biblioteca foi feita para o buzzer apitar ou tocar melodias sem bloquear o restante do código.

Vídeo

O vídeo de demonstração abaixo usa o código a seguir. Observe que o vídeo mostra o Arduino Uno R4, mas funciona da mesma forma no Arduino Uno R3:

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-piezo-buzzer */ #define BUZZER_PIN 10 const int ledPins[4] = {2, 3, 4, 5}; const int buttonPins[4] = {6, 7, 8, 9}; const int tones[4] = { 262, 330, 392, 523 }; const int MAX_LEVEL = 50; int sequence[MAX_LEVEL]; int level = 1; void setup() { for (int i = 0; i < 4; i++) { pinMode(ledPins[i], OUTPUT); digitalWrite(ledPins[i], HIGH); pinMode(buttonPins[i], INPUT_PULLUP); } pinMode(BUZZER_PIN, OUTPUT); randomSeed(analogRead(A0)); startSound(); delay(500); sequence[0] = random(0, 4); playSequence(); } void loop() { for (int i = 0; i < level; i++) { int button = waitForButton(); playTone(button); if (button != sequence[i]) { gameOver(); return; } } level++; if (level > MAX_LEVEL) { winGame(); return; } delay(500); sequence[level - 1] = random(0, 4); playSequence(); } void playSequence() { for (int i = 0; i < level; i++) { playTone(sequence[i]); delay(150); } } void playTone(int index) { digitalWrite(ledPins[index], LOW); tone(BUZZER_PIN, tones[index]); delay(300); noTone(BUZZER_PIN); digitalWrite(ledPins[index], HIGH); delay(100); } int waitForButton() { while (true) { for (int i = 0; i < 4; i++) { if (digitalRead(buttonPins[i]) == LOW) { delay(30); while (digitalRead(buttonPins[i]) == LOW) { } delay(30); return i; } } } } void startSound() { tone(BUZZER_PIN, 523); delay(150); tone(BUZZER_PIN, 659); delay(150); tone(BUZZER_PIN, 784); delay(200); noTone(BUZZER_PIN); } void gameOver() { for (int i = 0; i < 3; i++) { tone(BUZZER_PIN, 150); for (int j = 0; j < 4; j++) { digitalWrite(ledPins[j], LOW); } delay(200); noTone(BUZZER_PIN); for (int j = 0; j < 4; j++) { digitalWrite(ledPins[j], HIGH); } delay(150); } level = 1; delay(1000); sequence[0] = random(0, 4); playSequence(); } void winGame() { for (int i = 0; i < 4; i++) { digitalWrite(ledPins[i], LOW); } tone(BUZZER_PIN, 523); delay(150); tone(BUZZER_PIN, 659); delay(150); tone(BUZZER_PIN, 784); delay(150); tone(BUZZER_PIN, 1047); delay(400); noTone(BUZZER_PIN); for (int i = 0; i < 4; i++) { digitalWrite(ledPins[i], HIGH); } level = 1; delay(1000); sequence[0] = random(0, 4); playSequence(); }

Desafie-se

  • Use o Buzzer Piezo para tocar a música que você ama
  • Faça um alarme tocar automaticamente quando alguém se aproximar dos seus objetos de valor. Dica: Consulte Arduino - Sensor de Movimento.

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!