Projeto 04 – Parte 2 – Buzzer – Músicas no Arduino – Série do e-book Aprenda Arduino

Neste vídeo vamos usar um Buzzer para reproduzir músicas usando nosso Arduino UNO!

Código Sirene:

//Programa : Som no Arduino - Sirene
//Autor : Arduino e Cia

#define tempo 10
int frequencia = 0;
int Pinofalante = 8;

void setup()
{
  pinMode(Pinofalante,OUTPUT); //Pino do buzzer
}
void loop()
{
  for (frequencia = 150; frequencia < 1800; frequencia += 1) {
    tone(Pinofalante, frequencia, tempo); 
  delay(1);
  }
  for (frequencia = 1800; frequencia > 150; frequencia -= 1) {
    tone(Pinofalante, frequencia, tempo); 
  delay(1);
  }
}

Download da biblioteca piches

Código do Hino:

#include <pitches.h>
#define NO_SOUND 0

// Notas que devem ser tocadas ordenadamente;
int melodia[] = {
NO_SOUND, NOTE_C5,NOTE_B4,NOTE_G4,NOTE_E4,NOTE_E4,
NO_SOUND,NOTE_B3,NOTE_E4,NOTE_F4,NOTE_G4,NOTE_B4,NOTE_A4,NOTE_G4,NOTE_F4,NOTE_F4,
NO_SOUND,NOTE_A4,NOTE_F4,NOTE_E4,NOTE_DS4,NOTE_DS4,
NO_SOUND,NOTE_DS4,NOTE_DS4,NOTE_E4,NOTE_F4,NOTE_A4,NOTE_G4,NOTE_F4,NOTE_B4,
NO_SOUND,NOTE_B4,NOTE_A4,NOTE_GS4,NOTE_A4,NOTE_A4,
NO_SOUND,NOTE_A4,NOTE_A4,NOTE_B4,NOTE_C5,NOTE_E5,NOTE_C5,NOTE_A4,NOTE_G4,
NO_SOUND,NOTE_E5,NOTE_B4,NOTE_G4,NOTE_F4,NOTE_F4,
NO_SOUND,NOTE_A4,NOTE_B4,NOTE_C5,NOTE_B4,NOTE_A4,NOTE_G4,NOTE_F4,NOTE_E4,
NO_SOUND,NOTE_B3,NOTE_CS4,
NOTE_DS4,NOTE_E4,NOTE_F4,NOTE_G4,NOTE_A4,NOTE_F4,NOTE_C5,NOTE_C5,NOTE_B4,NOTE_A4,NOTE_G4,NOTE_A4,
NOTE_B4,NOTE_B3,NOTE_CS4,
NOTE_DS4,NOTE_E4,NOTE_F4,NOTE_G4,NOTE_A4,NOTE_F4,NOTE_C5,NOTE_C5,NOTE_B4,NOTE_A4,NOTE_G4,NOTE_A4,
NOTE_B4,NOTE_B4,
NO_SOUND,NOTE_B4,NOTE_A4,NOTE_GS4,NOTE_A4,NOTE_A4,
NO_SOUND,NOTE_A4,NOTE_G4,NOTE_F4,NOTE_G4,NOTE_G4,
NO_SOUND,NOTE_E5,NOTE_B4,NOTE_G4,NOTE_F4,
NO_SOUND,NOTE_F4,NOTE_G4,NOTE_A4,NOTE_B4,NOTE_A4,NOTE_G4,NOTE_F4,NOTE_E4
};

// Duração das Notas: Colcheia:8; Semínima: 4; Mínima:2; Semibreve:1
int tempoNotas[] = {
4,4,4,4,2,2,
8,8,8,8,8,8,8,8,2,2,
4,4,4,4,2,2,
8,8,8,8,8,8,8,8,1,
4,4,4,4,2,2,
8,8,8,8,8,8,8,8,1,
4,4,4,4,2,2,
8,8,8,8,8,8,8,8,1,
4,8,8,
8,8,8,8,8,8,8,8,8,8,8,8,
4,8,8,
8,8,8,8,8,8,8,8,8,8,8,8,
2,2,
4,4,4,4,2,2,
4,4,4,4,2,2,
4,4,4,4,1,
8,8,8,8,4,8,8,2,2 
};
  
const int compasso = 1500; // Altera o compasso da música 
void setup() {
  for (int Nota = 0; Nota < 119; Nota++) {//o número 119 indica quantas notas tem a nossa matriz.
    int tempo = compasso/tempoNotas[Nota];//tempo = compasso dividido pela indicação da matriz tempoNotas.
    tone(8, melodia[Nota],tempo);//Toca a nota indicada pela matriz melodia durante o tempo.
    // Para distinguir as notas adicionamos um tempo entre as elas (tempo da nota + 20%).
    delay(tempo*1.2);
   }
}

void loop() {
  //Não é necessária a repetição pois a repetição será feita pelo botão Reset.
}
//Fim de Programa

Música tema do Super Mário:

/***************************************************\
| MUSICBOX DUINO - Classic game theme               |
|  -> Super Mario Bros                              |
|                                                   |
| NEECduino with ATmega328:                         |    
|                                                   |
|  -> 8-ohm speaker from digital pin 10 to ground;  |
|                                                   |
| Created on 5 May 2011 by Ricardo Caetano          |
\***************************************************/

#include <pitches.h>

// Indica a duração das notas, ex: colcheia -> tr = 4, ...
#define se 6
#define tr 4
#define co 3
// Define a velocidade de reprodução, quanto menor mais rápido...
#define SMbpm 150

// As notas...
int tonesA[] = {NOTE_E5, NOTE_E5,0,NOTE_E5,0, NOTE_C5, NOTE_E5,0, NOTE_G5,0,0, NOTE_G4,0,0};
int tonesB[] = {NOTE_C5,0,0, NOTE_G4,0,NOTE_E4,0,0,NOTE_A4,0, NOTE_B4,0,NOTE_AS4, NOTE_A4,0,NOTE_G4,NOTE_E5,NOTE_G5,NOTE_A5,0,NOTE_F5,NOTE_G5,0,NOTE_E5,0,NOTE_C5,NOTE_D5,NOTE_B4,0};
int tonesC[] = {NOTE_C3,0,NOTE_G5,NOTE_FS5,NOTE_F5,NOTE_DS5,NOTE_C4,NOTE_E5,NOTE_F3,NOTE_GS4,NOTE_A4,NOTE_C5,NOTE_C4,NOTE_A4,NOTE_C5,NOTE_D5};
int tonesD[] = {NOTE_C3,0,NOTE_G5,NOTE_FS5,NOTE_F5,NOTE_DS5,NOTE_G3,NOTE_E5,0,NOTE_C6,0,NOTE_C6,NOTE_C6,0,NOTE_G3,0};
int tonesE[] = {NOTE_C3,0,NOTE_DS5,0,0,NOTE_D5,0,NOTE_C5,0,0,NOTE_G3,NOTE_G3,0,NOTE_C3,0};
int tonesF[] = {NOTE_C5,NOTE_C5,0,NOTE_C5,0,NOTE_C5,NOTE_D5,0,NOTE_E5,NOTE_C5,0,NOTE_A4,NOTE_G4,0,NOTE_G2,0};
int tonesG[] = {NOTE_C5,NOTE_C5,0,NOTE_C5,0,NOTE_C5,NOTE_D5,NOTE_E5,NOTE_F3,0,0,NOTE_C3,0,NOTE_G2,0};
int tonesH[] = {NOTE_E5,NOTE_E5,0,NOTE_E5,0,NOTE_C5,NOTE_E5,0,NOTE_G5,0,0,NOTE_G4,0,0};
int tonesI[] = {NOTE_E5,NOTE_C5,0,NOTE_G4,NOTE_G3,0,NOTE_GS4,0,NOTE_A4,NOTE_F5,NOTE_F3,NOTE_F5,NOTE_A4,NOTE_C4,NOTE_F3,0};
int tonesJ[] = {NOTE_B4,NOTE_A5,NOTE_A5,NOTE_A5,NOTE_G5,NOTE_F5,NOTE_E5,NOTE_C5,NOTE_G3,NOTE_A4,NOTE_G4,NOTE_C4,NOTE_G3,0};
int tonesK[] = {NOTE_B4,NOTE_F5,0,NOTE_F5,NOTE_F5,NOTE_E5,NOTE_D5,NOTE_C5,NOTE_E4,NOTE_G3,NOTE_E4,NOTE_C4,0,0};

// ... e respectivas durações
int durationA[] = {co,co,co,co,co,co,co,co,co,co,se,co,co,se};
int durationB[] = {co,co,co,co,se,co,co,co,co,co,co,co,co,co,co,tr,tr,tr,co,co,co,co,co,co,co,co,co,co,se};
int durationC[] = {co,co,co,co,co,co,co,co,co,co,co,co,co,co,co,co};
int durationD[] = {co,co,co,co,co,co,co,co,co,co,co,co,co,co,co,co};
int durationE[] = {co,co,co,co,co,co,se,co,co,co,co,co,co,co,co};
int durationF[] = {co,co,co,co,co,co,co,co,co,co,co,co,co,co,co,co};
int durationG[] = {co,co,co,co,co,co,co,co,co,co,co,co,se,co,co};
int durationH[] = {co,co,co,co,co,co,co,co,co,co,se,co,co,se};
int durationI[] = {co,co,co,co,co,co,co,co,co,co,co,co,co,co,co,co};
int durationJ[] = {tr,tr,tr,tr,tr,tr,co,co,co,co,co,co,co,co};
int durationK[] = {co,co,co,co,tr,tr,tr,co,co,co,co,co,co,se};

// Melodia do Super Mario em termos de faixas
char melody[] = "abbcdcecdcefgfhbbijikijikfgfhijik";

// Número de notas
int numberA = 14;
int numberB = 29;
int numberC = 16;
int numberD = 16;
int numberE = 15;
int numberF = 16;
int numberG = 15;
int numberH = 14;
int numberI = 16;
int numberJ = 14;
int numberK = 14;
int melodynum = 33;

// Define o pin para ligar o piezo
int piezopin = 8; 

// Função que recebe uma faixa (notas e durações) e o número de notas
void play(int tones[], int duration[], int number, int bpm){
  int i;
  
  for (i = 0; i < number; i++) {

    int lenght = bpm*duration[i];
    tone(piezopin, tones[i],lenght);

    // Pausas para que as notas não fiquem coladas umas às outras
    if(duration[i]==se)
      delay(bpm/0.5);
    if(duration[i]==tr)
      delay(bpm/.75);
    if(duration[i]==co)
      delay(bpm);
    
    // Pára de tocar a nota
    noTone(piezopin);
   }
}

// Função que recebe uma string que contém as faixas para criar uma música (e o seu tamanho)
void playall(char melody[], int num){
  
  int i;
  
  for(i=0;i<num;i++){
  
    if(melody[i]=='a')
      play(tonesA, durationA, numberA, SMbpm);
    if(melody[i]=='b')
      play(tonesB, durationB, numberB, SMbpm);
    if(melody[i]=='c')
      play(tonesC, durationC, numberC, SMbpm);
    if(melody[i]=='d')
      play(tonesD, durationD, numberD, SMbpm);
    if(melody[i]=='e')
      play(tonesE, durationE, numberE, SMbpm);
    if(melody[i]=='f')
      play(tonesF, durationF, numberF, SMbpm);
    if(melody[i]=='g')
      play(tonesG, durationG, numberG, SMbpm);
    if(melody[i]=='h')
      play(tonesH, durationH, numberH, SMbpm);
    if(melody[i]=='i')
      play(tonesI, durationI, numberI, SMbpm);
    if(melody[i]=='j')
      play(tonesJ, durationJ, numberJ, SMbpm);
    if(melody[i]=='k')
      play(tonesK, durationK, numberK, SMbpm);
    }
}

void setup() {
  playall(melody,melodynum);  
}

void loop() {
}

Música Marcha Imperial:

#include <pitches.h>
int ledPin = 13;

int speakerPin = 8;
//speaker connected to one of the PWM ports

#define c 261
#define d 294
#define e 329
#define f 349
#define g 391
#define gS 415
#define a 440
#define aS 455
#define b 466
#define cH 523
#define cSH 554
#define dH 587
#define dSH 622
#define eH 659
#define fH 698
#define fSH 740
#define gH 784
#define gSH 830
#define aH 880
//frequencies for the tones we're going to use
//used http://home.mit.bme.hu/~bako/tonecalc/tonecalc.htm to get these

void setup() 	 
{ 	 
  pinMode(ledPin, OUTPUT);
  // sets the ledPin to be an output
  pinMode(speakerPin, OUTPUT); 	
  //sets the speakerPin to be an output
} 	 
  	 
void loop() 	// run over and over again
{
  march();
} 	 
  	 
void beep (unsigned char speakerPin, int frequencyInHertz, long timeInMilliseconds)
{ 
    digitalWrite(ledPin, HIGH);	 
    //use led to visualize the notes being played
    
    int x; 	 
    long delayAmount = (long)(1000000/frequencyInHertz);
    long loopTime = (long)((timeInMilliseconds*1000)/(delayAmount*2));
    for (x=0;x<loopTime;x++) 	 
    { 	 
        digitalWrite(speakerPin,HIGH);
        delayMicroseconds(delayAmount);
        digitalWrite(speakerPin,LOW);
        delayMicroseconds(delayAmount);
    } 	 
    
    digitalWrite(ledPin, LOW);
    //set led back to low
    
    delay(20);
    //a little delay to make all notes sound separate
} 	 
  	 
void march()
{ 	 
    //for the sheet music see:
    //http://www.musicnotes.com/sheetmusic/mtd.asp?ppn=MN0016254
    //this is just a translation of said sheet music to frequencies / time in ms
    //used 500 ms for a quart note
    
    beep(speakerPin, a, 500); 
    beep(speakerPin, a, 500);     
    beep(speakerPin, a, 500); 
    beep(speakerPin, f, 350); 
    beep(speakerPin, cH, 150);
    
    beep(speakerPin, a, 500);
    beep(speakerPin, f, 350);
    beep(speakerPin, cH, 150);
    beep(speakerPin, a, 1000);
    //first bit
    
    beep(speakerPin, eH, 500);
    beep(speakerPin, eH, 500);
    beep(speakerPin, eH, 500);    
    beep(speakerPin, fH, 350); 
    beep(speakerPin, cH, 150);
    
    beep(speakerPin, gS, 500);
    beep(speakerPin, f, 350);
    beep(speakerPin, cH, 150);
    beep(speakerPin, a, 1000);
    //second bit...
    
    beep(speakerPin, aH, 500);
    beep(speakerPin, a, 350); 
    beep(speakerPin, a, 150);
    beep(speakerPin, aH, 500);
    beep(speakerPin, gSH, 250); 
    beep(speakerPin, gH, 250);
    
    beep(speakerPin, fSH, 125);
    beep(speakerPin, fH, 125);    
    beep(speakerPin, fSH, 250);
    delay(250);
    beep(speakerPin, aS, 250);    
    beep(speakerPin, dSH, 500);  
    beep(speakerPin, dH, 250);  
    beep(speakerPin, cSH, 250);  
    //start of the interesting bit
    
    beep(speakerPin, cH, 125);  
    beep(speakerPin, b, 125);  
    beep(speakerPin, cH, 250);      
    delay(250);
    beep(speakerPin, f, 125);  
    beep(speakerPin, gS, 500);  
    beep(speakerPin, f, 375);  
    beep(speakerPin, a, 125); 
    
    beep(speakerPin, cH, 500); 
    beep(speakerPin, a, 375);  
    beep(speakerPin, cH, 125); 
    beep(speakerPin, eH, 1000); 
    //more interesting stuff (this doesn't quite get it right somehow)
    
    beep(speakerPin, aH, 500);
    beep(speakerPin, a, 350); 
    beep(speakerPin, a, 150);
    beep(speakerPin, aH, 500);
    beep(speakerPin, gSH, 250); 
    beep(speakerPin, gH, 250);
    
    beep(speakerPin, fSH, 125);
    beep(speakerPin, fH, 125);    
    beep(speakerPin, fSH, 250);
    delay(250);
    beep(speakerPin, aS, 250);    
    beep(speakerPin, dSH, 500);  
    beep(speakerPin, dH, 250);  
    beep(speakerPin, cSH, 250);  
    //repeat... repeat
    
    beep(speakerPin, cH, 125);  
    beep(speakerPin, b, 125);  
    beep(speakerPin, cH, 250);      
    delay(250);
    beep(speakerPin, f, 250);  
    beep(speakerPin, gS, 500);  
    beep(speakerPin, f, 375);  
    beep(speakerPin, cH, 125); 
           
    beep(speakerPin, a, 500);            
    beep(speakerPin, f, 375);            
    beep(speakerPin, c, 125);            
    beep(speakerPin, a, 1000);       
    //and we're done \ó/    
}

O Canal Projeto Bacana está gravando e lançando uma série com todos os projetos do e-book Aprenda Arduino, se inscreva no canal e ative as notificações para acompanhar todos os lançamentos.

Link para fazer seu Download Gratuito:
https://projetobacana.com.br/e-book-gratuito-aprenda-arduino/

Link para outros projetos:
https://projetobacana.com.br

Link para comprar uma cópia impressa do livro:
https://clubedeautores.com.br/livro/aprenda-arduino

Apresentação: Júlio Vansan Gonçalves

#ebook #AprendaArduino #internetDasCoisas #automação #DIY #maker #microcontrolador #façavocemesmo #tcc #sugestãoTCC #Projeto #arduino

Curta, compartilhe e inscreva-se para ficar atualizado com os nossos conteúdos!
Para saber mais sobre o Canal Projeto Bacana:
E-mail: contato@projetobacana.com.br
Site: https://www.projetobacana.com.br/
Facebook: https://www.facebook.com/projetobacana.com.br
Instagram: https://www.instagram.com/projetobacana.com.br/
Youtube: https://www.youtube.com/ProjetoBacana