Vila junina maker – Como criar uma fogueira de São João e música Asa Branca com Arduino
Com a chegada do mês de junho, nosso coração bate mais forte com a comemoração de uma das festas mais tradicionais e vibrantes do Nordeste. As ruas se enchem de cores, músicas e danças, celebrando as raízes culturais e a alegria contagiante dessa época do ano. Inspirados por essa atmosfera festiva, decidimos trazer um toque de inovação, combinando a tradição com a tecnologia.
No nosso tutorial especial de São João, apresentaremos como criar uma vila junina utilizando Arduino. A ideia é usar o Arduino para criar uma fogueira maker com luzes e som. Na nossa programação, traremos a música Asa Branca de Luiz Gonzaga, uma canção emblemática e representativa desta época festiva. Com isso, buscamos unir a tradição das festas juninas com a inovação tecnológica, proporcionando uma experiência única e interativa que homenageia a cultura nordestina de forma criativa e educativa.

MATERIAIS NECESSÁRIOS
1 x Placa UNO SMD R3 Atmega328;
1 x Cabo USB tipo A-B;
1 x Mini protoboard 170 furos;
3 x Resistores de 220Ω;
3 x LEDs alto brilho (cores: Vermelho, Amarelo, Laranja);
1 x Buzzer passivo;
Jumper macho x macho;
Jumper macho x fêmea;
Palito de picolé;
Papel cartão;
Palito de churrasco;
Papel celofane.
ARQUIVOS PARA IMPRESSÃO
Para baixar os arquivos para impressão clique aqui!
MONTAGEM DO PROJETO
ESQUEMÁTICO DE LIGAÇÃO DOS COMPONENTES
Inicialmente, certifique-se de que a sua placa Arduino esteja desligada. Em seguida, monte o circuito da Figura 2.

Ao montar o circuito observe os seguintes pontos:
- O LED vermelho deve ser conectado ao pino 10;
- O LED amarelo deve ser conectado ao pino 9;
- O LED laranja deve ser conectado ao pino 5;
- Um resistor de 220 Ω foi conectado ao cátodo de cada um dos LEDs;
- O terminal positivo do buzzer deve ser conectado ao pino 11 e o negativo ao GND.
ELABORANDO O CÓDIGO
Após a montagem do circuito, vamos programação do código no Arduino IDE. A proposta deste projeto é criar uma fogueira com LEDs piscando e um buzzer para tocar a música Asa Branca.
Vamos entender a lógica de programação desse projeto a partir dos seguintes passos:
1. Definição das notas musicais:
Iniciamos o código definindo as frequências das notas musicais. Cada nota é associada a um valor de frequência em hertz (Hz).
2. Configuração de LEDs e brilho:
As constantes ledVermelho, ledAmarelo, ledLaranja, brilhoVariavel e brilhoMinimo definem os pinos dos LEDs e os valores de brilho. brilhoVariavel e brilhoMinimo são usados para criar um efeito de brilho variável nos LEDs.
3. Configuração do tempo da música:
float tempomusica = 10000; é usado para controlar o intervalo entre as execuções da música. A variável tempo define a velocidade da música, e buzzer define o pino onde o buzzer está conectado.
4. Notas e duração da melodia:
O array melody[] contém a sequência de notas e suas durações para a música “Asa Branca”. Cada par de valores representa uma nota e sua duração.
5. Cálculo do número de notas e duração:
notes calcula o número total de notas na melodia. wholenote calcula a duração de uma nota inteira em milissegundos, baseada no valor de tempo.
6. Configurações iniciais:
Na função setup() configuramos os pinos dos LEDs e do buzzer como saídas.
7. Loop principal:
O loop() principal faz os LEDs piscarem com brilho variável usando analogWrite() e um valor aleatório dentro de brilhoVariavel. Desse modo, os LEDs irão piscar com brilho e intervalo aleatórios, criando um efeito de fogo para a fogueira.
Além disso, ocorre a verificação se tempomusica é menor que o valor atual de millis(). Caso verdadeiro, a função musica() é chamada, e tempomusica é atualizada para tocar novamente após 10 minutos.
8. Função musica():
A função musica itera sobre o array de melodia, tocando cada nota na duração apropriada. divider e noteDuration calculam quanto tempo cada nota deve ser tocada. tone inicia a nota no buzzer, delay aguarda a duração da nota, e noTone para o som.
Enquanto a música toca, os LEDs continuam piscando com brilho aleatório.
//Definição das notas musicais #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 #define REST 0 //Definição dos pinos utilizados nos LEDS #define ledVermelho 9 #define ledAmarelo 10 #define ledLaranja 5 //Variação do brilho do LED #define brilhoVariavel 120 #define brilhoMinimo 100 //Intervalo de tempo para a musica float tempomusica = 10000; int tempo = 120; //Definição do pino utilizado no buzzer #define buzzer 11 //Sequência de notas e suas durações para a música Asa Branca int melody[] = { NOTE_G4, 8, NOTE_A4, 8, NOTE_B4, 4, NOTE_D5, 4, NOTE_D5, 4, NOTE_B4, 4, NOTE_C5, 4, NOTE_C5, 2, NOTE_G4, 8, NOTE_A4, 8, NOTE_B4, 4, NOTE_D5, 4, NOTE_D5, 4, NOTE_C5, 4, NOTE_B4, 2, REST, 8, NOTE_G4, 8, NOTE_G4, 8, NOTE_A4, 8, NOTE_B4, 4, NOTE_D5, 4, REST, 8, NOTE_D5, 8, NOTE_C5, 8, NOTE_B4, 8, NOTE_G4, 4, NOTE_C5, 4, REST, 8, NOTE_C5, 8, NOTE_B4, 8, NOTE_A4, 8, NOTE_A4, 4, NOTE_B4, 4, REST, 8, NOTE_B4, 8, NOTE_A4, 8, NOTE_G4, 8, NOTE_G4, 2, REST, 8, NOTE_G4, 8, NOTE_G4, 8, NOTE_A4, 8, NOTE_B4, 4, NOTE_D5, 4, REST, 8, NOTE_D5, 8, NOTE_C5, 8, NOTE_B4, 8, NOTE_G4, 4, NOTE_C5, 4, REST, 8, NOTE_C5, 8, NOTE_B4, 8, NOTE_A4, 8, NOTE_A4, 4, NOTE_B4, 4, REST, 8, NOTE_B4, 8, NOTE_A4, 8, NOTE_G4, 8, NOTE_G4, 4, NOTE_F5, 8, NOTE_D5, 8, NOTE_E5, 8, NOTE_C5, 8, NOTE_D5, 8, NOTE_B4, 8, NOTE_C5, 8, NOTE_A4, 8, NOTE_B4, 8, NOTE_G4, 8, NOTE_A4, 8, NOTE_G4, 8, NOTE_E4, 8, NOTE_G4, 8, NOTE_G4, 4, NOTE_F5, 8, NOTE_D5, 8, NOTE_E5, 8, NOTE_C5, 8, NOTE_D5, 8, NOTE_B4, 8, NOTE_C5, 8, NOTE_A4, 8, NOTE_B4, 8, NOTE_G4, 8, NOTE_A4, 8, NOTE_G4, 8, NOTE_E4, 8, NOTE_G4, 8, NOTE_G4, -2, REST, 4 }; //Cálculo do número de notas e duração int notes = sizeof(melody) / sizeof(melody[0]) / 2; int wholenote = (60000 * 4) / tempo; int divider = 0, noteDuration = 0; void setup() { //Configuração dos pinos conectados aos LEDs e ao buzzer como saída pinMode(ledVermelho, OUTPUT); pinMode(ledAmarelo, OUTPUT); pinMode(ledLaranja, OUTPUT); pinMode(buzzer, OUTPUT); } void loop() { //Acionamento dos LEDs com brilho variável analogWrite(ledVermelho, random(brilhoVariavel) + brilhoMinimo); analogWrite(ledAmarelo, random(brilhoVariavel) + brilhoMinimo); analogWrite(ledLaranja, random(brilhoVariavel) + brilhoMinimo); delay(random(100)); //Cálculo para tocar a música em intervalos de 10 minutos if (tempomusica < millis()) { musica(); // 10 minutos = 600000 milissegundos tempomusica = 600000 + millis(); } } //Função para reprodução da música void musica() { for (int thisNote = 0; thisNote < notes * 2; thisNote = thisNote + 2) { divider = melody[thisNote + 1]; if (divider > 0) { noteDuration = (wholenote) / divider; } else if (divider < 0) { noteDuration = (wholenote) / abs(divider); noteDuration *= 1.5; } tone(buzzer, melody[thisNote], noteDuration * 0.9); delay(noteDuration); noTone(buzzer); //Atualiza os LEDs enquanto a música está sendo tocada analogWrite(ledVermelho, random(brilhoVariavel) + brilhoMinimo); analogWrite(ledAmarelo, random(brilhoVariavel) + brilhoMinimo); analogWrite(ledLaranja, random(brilhoVariavel) + brilhoMinimo); } }
Esperamos que tenham gostado deste tutorial. Use a criatividade e crie sua própria vila junina. Viva São João 🔥👩🏻🌾🌽
Em caso de dúvidas, deixe seu comentário abaixo.
REFERÊNCIAS:
O código da melodia Asa Branca foi criado por Robson Couto e está disponível no GitHub.