Criando Jogos com Arduino 2: Passo a Passo

Carol Correia Viana · Capítulo 12 de 21

Páginas do PDF

Criando Jogos com Arduino 2: Passo a Passo

4.Criando Jogos com Arduino

 

PIANO ELETRÔNICO

 

Como estão as suas habilidades musicais? Que tal testá-las em um

piano eletrônico construído com o Arduino?

Neste projeto aprenderemos como transformar seu Arduino em um

pequeno piano, capaz de tocar as 7 notas musicais: Dó, Ré, Mi, Fá, Sol, Lá

e Si.

Para este projeto você precisará de botões, resistores e de um buzzer

passivo, que é para melodias e reprodução de notas. Para tocar as notas

musicais usaremos a função tone ( ) .

 

MATERIAIS NECESSÁRIOS

1 x Placa UNO SMD compatível com Arduino UNO ;

1 x Cabo USB ;

1 x Protoboard ;

7 x Botões do tipo push button ;

7 x Resistores de 10 kΩ ;

1 x Buzzer passivo ;

Jumpers macho-macho .

 

ESQUEMÁTICO DE LIGAÇÃO DOS COMPONENTES

 

Certifique-se que sua placa UNO esteja desligada e monte

atentamente o circuito conforme a Figura 1 2 .

Ao montar seu circuito na protoboard preste atenção nos seguintes

pontos:

Você pode utilizar fios de cores diferentes ou furos diferentes na

protoboard, mas deve assegurar que os componentes e fios estejam

conectados na mesma ordem da Figura 1 2 ;

O botão possui 4 terminais que são interligados aos pares. Quando

pressionado, os 4 terminais são conectados gerando continuidade no

circuito;

O botão deve ser montado com dois terminais abaixo da cavidade

central da protoboard e os outros dois acima;

Conecte o push button com um resistor de 10 k Ω pull-down

(resistor conectado no GND). Desta forma, quando o botão não

estiver pressionado o Arduino receberá nível lógico baixo;

Quando o botão estiver pressionado, a placa UNO receberá nível

lógico alto (HIGH).

O terminal positivo do buzzer deve ser conectado à porta digital 6

da placa UNO e o outro terminal deve ser ligado ao GND.

Figura 12 - Circuito para o Projeto Piano Eletrônico.

 

Assim que você tiver certeza de que tudo foi conectado

corretamente, conecte a placa UNO ao seu computador.

 

ELABORANDO O CÓDIGO

 

Com o circuito montado, vamos a programação do piano. Para

melhor compreensão o código será explicado passo a passo a seguir. Neste

momento, observe o código abaixo e aproveite para analisar sua estrutura.

//Define os pinos dos botões

#define botao1 7

#define botao2 8

#define botao3 9

#define botao4 10

#define botao5 11

#define botao6 12

#define botao7 13

 

#define buzzer 6 //Pino do Buzzer

 

//Cada nota e sua frequência

#define C 262 //Nota Dó

#define D 294 //Nota Ré

#define E 330 //Nota Mi

#define F 349 //Nota Fá

#define G 392 //Nota Sol

#define A 440 //Nota Lá

#define B 493 //Nota Si

 

void setup () {

//Configura os botões como entrada

pinMode (botao1, INPUT );

pinMode (botao2, INPUT );

pinMode (botao3, INPUT );

pinMode (botao4, INPUT );

pinMode (botao5, INPUT );

pinMode (botao6, INPUT );

pinMode (botao7, INPUT );

pinMode (buzzer, OUTPUT ); //Configura o buzzer como saída

}

 

void loop () {

//Faz as leituras do status de cada botão e guarda na variável correspondente

int status1 = digitalRead (botao1);

int status2 = digitalRead (botao2);

int status3 = digitalRead (botao3);

int status4 = digitalRead (botao4);

int status5 = digitalRead (botao5);

int status6 = digitalRead (botao6);

int status7 = digitalRead (botao7);

 

if (status1 == HIGH ) { //Se o botão 1 for pressionado

tone (buzzer, C); //Toca nota Dó

delay (200); //por 200 milissegundos

noTone (buzzer); //Interrompe o som

}

if (status2 == HIGH ) { //Se o botão 2 for pressionado

tone (buzzer, D); //Toca nota Ré

delay (200); //por 200 milissegundos

noTone (buzzer); //Interrompe o som

}

if (status3 == HIGH ) { //Se o botão 3 for pressionado

tone (buzzer, E); //Toca nota Mi

delay (200); //por 200 milissegundos

noTone (buzzer); //Interrompe o som

}

if (status4 == HIGH ) { //Se o botão 4 for pressionado

tone (buzzer, F); //Toca nota Fá

delay (200); //por 200 milissegundos

noTone (buzzer); //Interrompe o som

}

if (status5 == HIGH ) { //Se o botão 5 for pressionado

tone (buzzer, G); //Toca nota Sol

delay (200); //por 200 milissegundos

noTone (buzzer); //Interrompe o som

}

if (status6 == HIGH ) { //Se o botão 6 for pressionado

tone (buzzer, A); //Toca nota Lá

delay (200); //por 200 milissegundos

noTone (buzzer); //Interrompe o som

}

if (status7 == HIGH ) { //Se o botão 7 for pressionado

tone (buzzer, B); //Toca nota Si

delay (200); //por 200 milissegundos

noTone (buzzer); //Interrompe o som

}

}

Para melhor compreensão do código acompanhe os seguintes passos:

1. Declarar as variáveis

Neste código declaramos 7 variáveis para os botões ( botao1,

botao2, botao3, botao4, botao5, botao6, botao 7 ), e uma variável para o

buzzer ( buzze r ).

Em seguida, definimos as variáveis para armazenar a frequência das

7 notas musicais, conforme a Tabela a seguir.

 

Variável Nota Musical Frequência

C Dó 262 D Ré 294 E Mi 330 F Fá 349 G Sol 392 A Lá 440 B Si 493

 

2. Configuração dos pinos de entrada e saída

Os pinos digitais em que os botões estão conectados foram

configurados como entrada ( INPU T ) e o pino digital 6, conectado ao

buzzer, foi configurado como saída ( OUTPU T ).

 

3. Leitura dos botões

Iniciamos a função loop () realizando a leitura dos botões. Os

estados dos botões botao 1 , botao 2 , botao 3 , botao 4 , botao 5 , botao 6 e botao 7 são armazenados nas variáveis status 1 , status 2 , status 3 ,

status 4 , status 5 , statu s 6 e status 7 , respectivamente.

 

4. Verificação se o botão foi pressionado

Após a leitura, criamos uma série de estruturas de seleção usando o

condicional i f . Nelas, verificamos se os botões foram pressionados (

statusX == HIGH ) .

 

5. Tocar a nota correspondente

Sendo a condição verdadeira (botão pressionado), tocamos a nota

correspondente a ele. Por exemplo, quando o botão 1 ( botao 1 ) for

pressionado, a nota Dó deverá ser tocada.

Para tocar a nota, usamos a função tone ( ) passando como

parâmetros a variável buzzer e a nota correspondente ao botão pressionado.

 

Sintaxe da função tone ( ) : tone (pino, frequência);

 

Em seguida, inserimos um intervalo de 200 milissegundos.

Para interromper o toque da nota pelo buzzer, usamos a função

noTone ( ) e passamos como parâmetro a variável buzzer.

 

Sintaxe da função noTone ( ) : noTone (pino);

 

TINKERCAD

 

Para melhor visualizar e/ou simular o circuito e a programação

deste projeto, basta acessar o seguinte link:

www.blogdarobotica.com/tinkercad-piano .

 

OceanofPDF.com