Escolar Documentos
Profissional Documentos
Cultura Documentos
filipeflop.com/blog/arvore-de-natal-diy-com-buzzer/
Lembra desse post lá de 2015, onde fizemos uma árvore de natal DIY (“Do It Yourself”
ou “faça você mesmo”), usando Arduino Uno, placa de fenolite e leds? Então. O tempo
passou, a árvore ficou aqui guardada, olhamos para ela e pensamos: por que não melhorar
esse projeto, adicionando um buzzer para que a árvore toque uma música de natal?
Assim, a nossa árvore agora tem um buzzer e um botão, que serve para ligar ou desligar a
música natalina. Vamos ver como isso funciona.
1/5
Vamos então adicionar o buzzer no pino analógico A5 e um botão para ligar ou desligar a
música no pino 2. Escolhemos o pino 2 para o botão pois vamos usar interrupções no
nosso programa, e para o buzzer usamos o pino A5 apenas para fins estéticos,
“escondendo” o fio atrás da árvore.
Para alimentação do circuito recomendamos utilizar fonte externa, já que teremos vários
leds ligados nas portas do Arduino, que por sua vez tem limitação no consumo total de
corrente que pode suportar. O trimpot é opcional e foi colocado para regular o volume no
buzzer.
2/5
O programa continua sendo bem simples, não utilizando nenhuma biblioteca especial
para funcionar. Usamos somente as portas digitais e analógicas como entrada ou saída. A
parte de áudio utiliza arrays e foi desenvolvida por Giacomo Cerquone.
O botão conectado ao pino 2 permite que possamos usar a interrupção do Arduino para
ligar ou desligar a música, ou seja, quando o botão for pressionado, o microcontrolador
vai parar o que estiver fazendo para executar a função interrupcao_botao(). Essa
função vai inverter o estado da variável vbot, que pode assumir o valor 0 (sem música) ou
1 (com música).
Quando terminar de executar essa função, o programa continua rodando de onde parou,
sem interromper a tarefa principal que é acender os leds de forma aleatória.
3/5
//Programa: Arvore de Natal sonora
//Autor: FILIPEFLOP
//Estado do botao
byte vbot = 0;
void loop()
{
for (int i = 0; i < sizeof(notes) - 1; i++)
{
acendeled();
if (notes[i] == ' ')
{
delay(duration[i] * tempo);
} else
{
if (vbot == 1)
{
playSong(notes[i], duration[i] * tempo);
4/5
}
}
//Pausa entre as notas
delay((tempo * 2)*duration[i]);
apagaled();
}
}
void acendeled()
{
int escolha_led = random(4);
switch (escolha_led)
{
case 0:
digitalWrite(led_vermelho_inf, HIGH);
break;
case 1:
digitalWrite(led_verde, HIGH);
break;
case 2:
digitalWrite(led_vermelho_sup, HIGH);
break;
case 3:
digitalWrite(led_estrela, HIGH);
break;
}
}
void apagaled()
{
digitalWrite(led_vermelho_inf, LOW);
digitalWrite(led_verde, LOW);
digitalWrite(led_vermelho_sup, LOW);
digitalWrite(led_estrela, LOW);
}
void interrupcao_botao()
{
static unsigned long last_interrupt_time = 0;
unsigned long interrupt_time = millis();
// If interrupts come faster than 200ms, assume it's a bounce and ignore
if (interrupt_time - last_interrupt_time > 200)
{
vbot = !vbot;
}
last_interrupt_time = interrupt_time;
}
Esse projeto pode ser melhorado por exemplo com um sensor ultrassônico que aciona o
circuito quando alguém se aproxima ou até mesmo um sensor touch substituindo o push-
button.
5/5