Projeto 08 - Piano com buzzer

Básico - Projeto 08

Simulação de piano com Arduino e buzzer

Objetivo

Criar um circuito onde cada botão (push button) acende um LED e toca uma nota musical diferente.

Aplicação

Para fins didáticos. Funcionamento de alarmes de pequenos equipamentos eletrônicos.

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 830 pontos

Jumpers Kit cabos ligação macho / macho 1  
Led Difuso 5mm LEDs 5mm 3

1 LED difuso vermelho

1 LED difuso amaralelo

1 LED difuso verde

Você poderá utilizar também LEDs de alto brilho 5mm nas cores que desejar.

Resistor Resistores 6

1 Resistor de 100 Ω

2 Resistores de 220 Ω

3 Resistores de 10 KΩ (push buttom)

Se precisar usar outros valores, calcule o resistor apropriado para o led utilizado - Tabela de Resistores ou Como calcular o Resistor adequado.

Push Button  Push Button 6x6x5m 3    
Buzzer Buzzer ativo 5V 12mm 1  
Arduino UNO R3

 

Arduino UNO

 

1

Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes no protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito. Veja a simulação no link --> Projeto 08 - simulação online.

Atenção

1. Lembre-se que o LED tem polaridade: O terminal maior tem polaridade positiva e o lado do chanfro tem polaridade negativa.

2. Determinamos o valor do resistor através da tabela prática: Tabela prática de utilização de leds 3mm e 5mm. Entretanto, o mais correto é sempre verificar o datasheet do fabricante do LED para você ter os exatos valores de tensão e corrente do mesmo - leia Como calcular o resistor adequado para o led e Leds ligados em série e em paralelo.

Obs.: Resistores iguais ou superiores a 250 Ω poderão ser utilizados em LEDs de todas as cores para um circuito com tensão igual ou inferior a 5V.

Valores utilizados para nossos projetos: LEDs difusos ou de alto brilho: Vermelho, Laranja e Amarelo: 150 Ω | Led Verde e Azul: 100 Ω

3. O buzzer tem polaridade. Portando, cuidado para não ligar o buzzer invertido. Se você retirar o adesivo superior do buzzzer poderá ver um sinal de positivo (+). Este sinal mostra onde está o pino positivo do componente.

3. Monte o botão (push button) com resistor pull-down (resistor conectado no GND). Desta forma, quando o botão estiver pressionado, o Arduino retornará "HIGH" ou "1". Leia mais em Resistores Pull-down e pull-up e Como usar push button com Arduino (programação)

 Obs.: Os resistores pull-up e pull-down garantem um nível lógico estável quando por exemplo uma tecla não está pressionada. Geralmente utiliza-se um resistor de 10KΩ para esse propósito. A seguir é exibida a ligação desses resistores no circuito para leitura de tecla do botão:

Entradas-e-Saídas-digitais-Arduino-pull-up-pull-down

5. A montagem abaixo foi realizada em um protoboard com linhas de alimentação não contínuas, onde acrescentamos jampers para a ligação. Verifique se o seu protoboard possui linhas de alimentação contínuas ou separadas - saiba mais em protoboard

Código do Projeto (com leitura de dados e delay)

Digite o código abaixo no ambiente de desenvolvimento do Arduino. Faça a verificação e o upload.

/*******************************************************************************
*
*    Projeto 08 – Projeto Piano com Buzzer
*            http://squids.com.br/arduino
*
*******************************************************************************/
const int ledpino1 = 13;
const int ledpino2 = 12;
const int ledpino3 = 11;
const int botaoA = 4;
const int botaoB = 3;
const int botaoC = 2;
const int som = 9;

int estado_botaoA = 0;
int estado_botaoB = 0;
int estado_botaoC = 0;
int tom = 0;

void setup() {
  // coloque seu código de setup aqui, para rodar uma vez: define saída e entrada do arduino
    pinMode(ledpino1, OUTPUT); //pino saida
    pinMode(ledpino2, OUTPUT); //pino saida
    pinMode(ledpino3, OUTPUT); //pino saida
    pinMode(som, OUTPUT); // pino de saída do arduino
    pinMode(botaoA, INPUT); //pino do botão é entrada
    pinMode(botaoB, INPUT); //pino do botão é entrada
    pinMode(botaoC, INPUT); //pino do botão é entrada
}

void loop() {
  // coloque seu código principal aqui, para rodar repetidamente:

    estado_botaoA = digitalRead(botaoA); //define estado bt A
    estado_botaoB = digitalRead(botaoB);
    estado_botaoC = digitalRead(botaoC);

    if(estado_botaoA && !estado_botaoB && !estado_botaoC) {
        tom = 100;
        digitalWrite(ledpino1, HIGH);
    }
    if(estado_botaoB && !estado_botaoA && !estado_botaoC) {
        tom = 200;
        digitalWrite(ledpino2, HIGH);
    }
    if (estado_botaoC && !estado_botaoA && !estado_botaoB) {
        tom = 500;
        digitalWrite(ledpino3, HIGH);
    }

    if(tom > 0) { //enquanto Tom for maior que zero faça o que esta descrito o baixo:
        digitalWrite(som, HIGH); // Liga buzzer
        delayMicroseconds(tom); // Espera o tempo proporcional ao comprimento de onda da nota em milissegundos
        digitalWrite(som, LOW); // Desliga buzzer
        delayMicroseconds(tom); // Espera o tempo proporcional ao comprimento de onda da nota em milissegundos
        tom = 0; // Reseta o Tom para zero, para sair do loop while e nao tocar o som constantemente
        digitalWrite(ledpino1, LOW);
        digitalWrite(ledpino2, LOW);
        digitalWrite(ledpino3, LOW);
    }

}// voip loop

Vídeo

Como o projeto deve funcionar

1. Após você rodar o programa, cada botão (push button) acende um LED e toca uma nota musical diferente quando acionado.

2. Enquanto estiver com o botão (push button) acionado o LED se manterá aceso, assim como o buzzer ficará tocando uma nota musical.

Explicando o Código do Projeto (sem delay e leitura)

1. Primeiro definimos as constantes (LedPino1, LedPino2, LedPino3, botaoA, botaoB, botaoC, som) e as variáveis (estado_botaoA, estado_botaoB, estado_botaoC).

const int ledpino1 = 13;
const int ledpino2 = 12;
const int ledpino3 = 11;
const int botaoA = 4;
const int botaoB = 3;
const int botaoC = 2;
const int som = 9;

int estado_botaoA = 0;
int estado_botaoB = 0;
int estado_botaoC = 0;
int tom = 0;

 1.1. Observe que utilizamos variáveis e contatnes tipo "int". Veja na tabela abaixo as diferenças nos tipos de constantes e variáveis:

Tipo Valores Válidos para Variáveis e Constantes
char letras e símbolos: 'a', 'b', 'H', '^', '*','1','0'
int de -32767 até 32767 (apenas números inteiros)
float de -3.4 x 1038 até +3.4 x 10+38com até 6 dígitos de precisão (2 casas depois da vírgula)
double de -1.7 x 10308 até +1.7 x 10+308com até 10 dígitos de precisão

1.2. As constantes LedPino1, LedPino2, LedPino3 se referem aos LEDs que deverão estar conectados nos pinos digitais 13, 12 e 11.

1.3. As constantes botaoA, botaoB, botaoC se referem aos botões (push buttons) que deverão estar conectados nos pinos digitais 4, 3, 2.

1.4. A constante som se refere ao polo positivo do buzzer que deverá estar conectado ao pino digital 9.

1.5.  As variáveis tip "int", estado_botaoA, estado_botaoB, estado_botaoC e tom são inicializadas com valor 0.

2. Através da strutura void setup(), definimos:

void setup() {
  // coloque seu código de setup aqui, para rodar uma vez: define saída e entrada do arduino
    pinMode(ledpino1, OUTPUT); //pino saida
    pinMode(ledpino2, OUTPUT); //pino saida
    pinMode(ledpino3, OUTPUT); //pino saida
    pinMode(som, OUTPUT); // pino de saída do arduino
    pinMode(botaoA, INPUT); //pino do botão é entrada
    pinMode(botaoB, INPUT); //pino do botão é entrada
    pinMode(botaoC, INPUT); //pino do botão é entrada
}

2.1. As constantes LedPino1, LedPino2, LedPino3 e som estão definidas como saídas do Arduino (OUTPUT), pois se referem aos LEDs e ao buzzer.

2.2. As constantes botaoA, botaoB, botaoC estão definidas como entrada do Arduino (INPUT) e se referem aos botões (push buttons).

3. Através da estrutura void loop(), obtemos:

void loop() {
  // coloque seu código principal aqui, para rodar repetidamente:

    estado_botaoA = digitalRead(botaoA); //define estado bt A
    estado_botaoB = digitalRead(botaoB);
    estado_botaoC = digitalRead(botaoC);

    if(estado_botaoA && !estado_botaoB && !estado_botaoC) {
        tom = 100;
        digitalWrite(ledpino1, HIGH);
    }
    if(estado_botaoB && !estado_botaoA && !estado_botaoC) {
        tom = 200;
        digitalWrite(ledpino2, HIGH);
    }
    if (estado_botaoC && !estado_botaoA && !estado_botaoB) {
        tom = 500;
        digitalWrite(ledpino3, HIGH);
    }

    if(tom > 0) { //enquanto Tom for maior que zero faça o que esta descrito o baixo:
        digitalWrite(som, HIGH); // Liga buzzer
        delayMicroseconds(tom); // Espera o tempo proporcional ao comprimento de onda da nota em milissegundos
        digitalWrite(som, LOW); // Desliga buzzer
        delayMicroseconds(tom); // Espera o tempo proporcional ao comprimento de onda da nota em milissegundos
        tom = 0; // Reseta o Tom para zero, para sair do loop while e nao tocar o som constantemente
        digitalWrite(ledpino1, LOW);
        digitalWrite(ledpino2, LOW);
        digitalWrite(ledpino3, LOW);
    }

}// voip loop

 3.1. Primeiro é realizado a leitura dos botões botaoA, botaoB, botaoC através da função digitalRead() que retorna os valores HIGH (ligado) ou LOW (desligado). Desta forma, definimos os valores para as variáveis estado_botaoA, estado_botaoB, estado_botaoC.

3.2. Em seguida fazemos as verificações através das condicionais If para identificar qual botão está ligado. Observe que a expressão if(estado_botaoA && !estado_botaoB && !estado_botaoC) significa que se o botão A estiver ligado, e (&&) os botões B e C não (!) estiverem ligados, a condição é verdadeira (true). Leia operadores lógicos (boolean).

3.3. Se a condição acima for verdadeira, o valor da variável tom passa a ser 100 e o LED correspondente à constante ledpino1 é ligado através da função digitalWrite(). É realizada a verificação para os 3 botões, A, B e C.

3.4. Agora, se a variável tom for maior que 0, ou seja, 100, 200 ou 500, é acionado o buzzer através da função digitalWrite(som, HIGHT). Através da função delayMicroseconds(), espera o tempo em microsegundos (valor da variável tom) proporcional ao comprimento de onda da nota musical gerada no Buzzer. Depois é desligado o buzzer no mesmo tempo em micorsegundos.

3.5. Após o acionamento do buzzer, alteramos a variável tom para zero novamente e desligamos os LEDs através da função digitalWrite(). A partir daí, inicia-se tudo novamente através do Void loop ().

Observação: Enquanto o push button (A, B ou C) estiver acionado, o buzzer ficará ligando e desligando no tempo definido pela função delayMicrosecons(), mantendo o som da nota musical especificada pela variável tom.

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores