Arduino UNO R4 - Buzzer Piezo

Neste guia, vamos aprender a controlar um buzzer usando um Arduino UNO R4. Vamos ver os detalhes de como fazer isso.

Arduino UNO R4 buzzer piezo

Sobre o Buzzer

Os buzzers criam sons como bipes ou melodias. Eles existem em diferentes tipos, cada um com características próprias. Vamos ver esses tipos de acordo com algumas características específicas:

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

    Vamos ver isso mais de perto.

    Buzzer Ativo vs Buzzer Passivo

    • Buzzer Ativo:
      • Ele faz barulho quando recebe eletricidade.
      • Ele precisa de eletricidade constante para continuar fazendo barulho.
      • É simples de usar com uma fonte de alimentação.
      • Geralmente encontrado em sistemas de alarme simples.
    • Buzzer Passivo:
      • Ele precisa de um sinal separado, que varia, para fazer barulho.
      • Ele pode produzir vários sons ajustando o sinal.
      • Ele precisa de uma montagem mais complexa para funcionar.
      • Costuma ser usado para fazer música ou sons diferentes.

      Buzzer Piezo vs Buzzer Comum

      • Buzzer Piezo:
        • Funciona com cristais piezoelétricos.
        • Emite sons agudos e claros.
        • É flexível para produzir diferentes tons e frequências.
        • É eficiente e muito usado em alarmes e dispositivos musicais.
      • Buzzer Comum:
        • Funciona com bobinas eletromagnéticas.
        • Gera sons simples, como um zumbido.
        • Tem poucas variações de tom.
        • Comumente encontrado em dispositivos simples, como campainhas e alarmes básicos.

        No mercado, você encontra um buzzer ativo de 3V-24V. Você pode usá-lo como um buzzer ativo de 3-5V ou como um buzzer de alta tensão (12V...).

        • Se você conectar este buzzer ao pino do Arduino UNO R4, ele produz um som padrão, bom para coisas como os sons de um teclado.
        • Se você conectar este buzzer a uma alta tensão por meio de um relé, ele produz um som alto, bom para alarmes.

        Neste guia, vamos mostrar como usar buzzers que precisam de 3-5V, dos tipos ativo e passivo. Para buzzers que exigem 12V, veja nosso guia do buzzer de 12V com o Arduino UNO R4 clicando aqui: Arduino UNO R4 - Tutorial de buzzer de 12V

        Pinagem

        Um buzzer normalmente tem dois conectores.

        • Pino negativo (-): conecte ao GND (0V)
        • Pino positivo (+): conecte diretamente ou por meio de um relé para receber o sinal de controle do Arduino UNO R4
        Pinagem do Buzzer Piezo

        Como o Buzzer Ativo Funciona

        • Quando você conecta o VCC ao pino positivo, o buzzer piezo produz um som contínuo.
        Como o Buzzer Piezo Funciona
        • Para criar tons diferentes com um buzzer piezo, envie uma onda quadrada de uma frequência específica ao pino positivo. Frequências diferentes produzem tons diferentes. Para tocar uma melodia, mude a frequência da onda quadrada.
        Como o Buzzer Piezo Funciona

        Como o Buzzer Passivo Funciona

        • O buzzer passivo não produz um som contínuo apenas ao conectar o VCC ao pino positivo, ao contrário do buzzer ativo.
        • Assim como no buzzer ativo, quando você aplica uma onda quadrada de uma certa frequência (e ciclo de trabalho de 50%) ao pino positivo, o buzzer piezo produz sons. Frequências diferentes resultam em tons diferentes. Você pode formar uma melodia alterando a frequência do sinal no pino positivo.

Diagrama de Ligação

  • O diagrama de ligação entre o Arduino Uno R4 e o buzzer piezo
Diagrama de Ligação do Buzzer com Arduino UNO R4

This image is created using Fritzing. Click to enlarge image

  • O diagrama de ligação entre o Arduino Uno R4 e o módulo de buzzer piezo
Diagrama de Ligação do Módulo de Buzzer com Arduino UNO R4

This image is created using Fritzing. Click to enlarge image

Veja A melhor forma de alimentar o Arduino Uno R4 e outros componentes.

Como Programar para o Buzzer

Usar a biblioteca do Arduino UNO R4 torna simples tocar uma melodia. Você não precisa entender como criar uma onda quadrada. Basta usar duas funções da biblioteca: tone() e noTone().

Código Arduino UNO R4

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-piezo-buzzer */ #include "pitches.h" #define BUZZER_PIN 6 // The Arduino UNO R4 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

Siga estas instruções passo a passo:

  • Se esta é a sua primeira vez usando o Arduino Uno R4 WiFi/Minima, consulte o tutorial sobre como configurar o ambiente para o Arduino Uno R4 WiFi/Minima na Arduino IDE.
  • Conecte o buzzer piezo ao Arduino Uno R4 de acordo com o diagrama fornecido.
  • Conecte a placa Arduino Uno R4 ao seu computador usando um cabo USB.
  • Abra a Arduino IDE no seu computador.
  • Selecione a placa Arduino Uno R4 apropriada (por exemplo, Arduino Uno R4 WiFi) e a porta COM.
  • Copie e cole o código fornecido na Arduino IDE.
  • Para criar um arquivo chamado pitches.h na Arduino IDE, faça uma das seguintes opções:
    • Clique no botão abaixo do ícone do Serial Monitor e selecione New Tab.
    • Ou, se preferir, pressione Ctrl+Shift+N no teclado.
    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 chamado pitches.h.
    /************************************************* * 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 na Arduino IDE para carregar o código no Arduino UNO R4.
    Enviar código para o Arduino pela Arduino IDE
    • Ouça a música.

Modificando o Código Arduino UNO R4

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

Só precisamos modificar dois arrays: int melody[] e int noteDurations[].

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-piezo-buzzer */ #include "pitches.h" #define BUZZER_PIN 6 // The Arduino UNO R4 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(), que impede a execução de outros códigos enquanto uma melodia está tocando. Para evitar isso, você pode usar a biblioteca ezBuzzer. Essa biblioteca permite que o buzzer emita bipes ou toque uma melodia sem interromper outros códigos.

Vídeo

O vídeo de demonstração abaixo usa o código a seguir:

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-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

※ 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!