Criando Jogos com Arduino 2: Passo a Passo
Torta na Cara – Passa ou Repassa
O Passa ou Repassa é um game show de perguntas e respostas. No
programa, duas equipes devem cumprir diversas gincanas, como o Torta na
Cara, para acumular pontos no placar geral.
No Torta na Cara, um competidor de cada equipe deve se posicionar
um de frente para o outro, em meio a uma bancada equipada com dois
botões e dois sinalizadores.
O apresentador faz a pergunta e o competidor deve apertar o botão
assim que souber a resposta. O sinalizador do competidor que primeiro
apertar o botão será ligado e ele deve responder à pergunta corretamente. Se
a resposta estiver correta, o competidor somará pontos para a sua equipe e
poderá acertar uma torta na cara do competidor adversário. Mas se estiver
errada, ele que receberá uma torta na cara.
Neste projeto, simularemos a bancada do jogo Torta na Cara usando
Arduino, LEDs, botões e um buzzer.
Escolha as perguntas, chame os amigos e divirta-se!
MATERIAIS NECESSÁRIOS
1 x Placa UNO SMD compatível com Arduino UNO ;
1 x Cabo USB ;
1 x Protoboard ;
2 x Botões do tipo push button ;
2 x Resistores de 10 kΩ ;
2 x Resistores de 220 Ω ;
2 x LEDs difusos de 5 mm ;
1 x Buzzer ativo ;
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 4 .
Ao montar seu circuito na protoboard, preste atenção nos seguintes
pontos:
O terminal mais longo de cada LED deve ser conectado ao pino
digital correspondente. O terminal mais curto é o cátodo (negativo)
e deve ser conectado ao terra (GND);
Em nosso projeto, utilizaremos resistores de 220 Ω para reduzir a
tensão e a corrente de alimentação dos LEDs;
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 estiver
pressionado, a placa UNO retornará nível lógico alto (HIGH).
O terminal positivo do buzzer deve ser conectado à porta digital 11
da placa UNO e o outro terminal deve ser ligado ao GND.
Figura 14 - Circuito para o Projeto Torta na Cara - Passa ou Repassa.
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 jogo. 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.
//Pino para os botões
#define botaoEsquerdo 13
#define botaoDireito 9
//Pinos para os LEDs (Azul e Vermelho)
#define ledEsquerdo 12
#define ledDireito 10
#define buzzerAtivo 11 //Pino em que o buzzer está ligado
void setup () {
//Configura os pinos em que o buzzer e os LEDs estão conectados como saída
pinMode (buzzerAtivo, OUTPUT );
pinMode (ledEsquerdo, OUTPUT );
pinMode (ledDireito, OUTPUT );
//Configura os pinos em que os botões estão conectados como entrada
pinMode (botaoEsquerdo, INPUT );
pinMode (botaoDireito, INPUT );
}
void loop () {
if ( digitalRead (botaoEsquerdo) == HIGH ) { //Se o botão esquerdo for pressionado, então:
digitalWrite (ledEsquerdo, HIGH ); //Acende o led esquerdo efeitoSonoro(); //Chama a função responsável pelo efeito sonoro delay (5000); //Aguarda 5000 milissegundos (5 segundos) digitalWrite (ledEsquerdo, LOW ); //Apaga o led esquerdo
} else if ( digitalRead (botaoDireito) == HIGH ) { //Se o botão direito for pressionado, então:
digitalWrite (ledDireito, HIGH ); //Acende o led direito efeitoSonoro(); //Chama a função responsável pelo efeito sonoro delay (5000); //Aguarda 5000 milissegundos (5 segundos) digitalWrite (ledDireito, LOW ); //Apaga o led direito
}
}
//Função responsável por fazer o efeito de 3 beeps quando um dos botões é acionado
void efeitoSonoro() {
for ( int i = 0; i<3; i++){ //Para i = 0, enquanto i for menor que 3, realize o código e incremente
1 em i
digitalWrite (buzzerAtivo, HIGH ); //Ativa o buzzer delay (100); //Aguarda 100 milissegundos digitalWrite (buzzerAtivo, LOW ); //Desliga o buzzer delay (100); //Aguarda 100 milissegundos
}
}
Para melhor compreensão do código acompanhe os seguintes passos:
1. Declarar as variáveis
Neste código, declaramos 2 variáveis para leitura dos botões (
botaoEsquerd o e botaoDireit o ), duas variáveis para os LEDs (
ledEsquerd o e ledDireit o ) e uma variável para o buzzer ( buzzerAtiv o
).
2. Configuração das portas de entrada e saída
Os pinos digitais 10, 11 e 12, em que os LEDs e o buzzer estão
conectados, foram configurados como saída ( OUTPU T ).
Os pinos digitais 13 e 9, em que os botões estão conectados, foram
configurados como entrada ( INPU T ).
3. Verificação do botão pressionado
Iniciamos a função loop ( ) , verificando qual botão foi pressionado.
Para isso, usamos a estrutura de seleção condicional i f .
Primeiramente, verificamos se o botão esquerdo foi pressionado ( if
( digitalRead (botaoEsquerdo) == HIGH ) ). Sendo a condição satisfeita, o
LED esquerdo (azul) será ligado e a função efeitoSonoro( ) será executada.
Após 5 segundos, o LED esquerdo será desligado.
Se o botão esquerdo não tiver sido pressionado ( botaoEsquerdo ==
LO W ), verificamos se o botão direito foi pressionado ( if ( digitalRead
(botaoDireito) == HIGH ) ). Uma vez satisfeita a condição, o LED direito (vermelho) será ligado e a função efeitoSonoro( ) será executada. Após 5
segundos, o LED direito será desligado.
4. Criar função efeitoSonoro()
Abaixo da função loop ( ) , criamos a função efeitoSonoro( ) ,
responsável por fazer o efeito de 3 beeps no buzzer quando um dos botões
for pressionado.
Para realizar a repetição dos beeps tocados pelo buzzer, usamos a
estrutura de repetição fo r através da instrução: for ( int i = 0; i<3; i++) ; .
Sintaxe: for ( inicialização; condição; incremento);
Assim, o primeiro parâmetro incluso foi a variável i , usada como
contador. O segundo parâmetro foi a condição a ser satisfeita para que as
instruções do laço de repetição fossem executadas. Neste projeto, as
instruções do fo r são realizadas enquanto i for menor que 3. O terceiro
parâmetro foi o incremento ( i+ + ).
Para que o buzzer ativo toque o beep, usamos a instrução
digitalWrite (buzzerAtivo, HIGH ) ; . Ao contrário do buzzer passivo, cuja
operação depende da frequência de onda enviada pelo microcontrolador, o
buzzer ativo necessita apenas da alimentação para funcionar.
O buzzer ativo toca o beep por 100 milissegundos. Para parar o
toque usamos a instrução digitalWrite (buzzerAtivo, LOW ) ; .Então, o
buzzer para por 100 milissegundos.
TINKERCAD
Para melhor visualizar e/ou simular o circuito e a programação
deste projeto, basta acessar o seguinte link:
www.blogdarobotica.com/tinkercad-tortanacara .
OceanofPDF.com