Neste tutorial, vais aprender a construir um jogo “Gira a Roda” usando LEDs, um buzzer e um Arduino. O Spin the Wheel game é um jogo divertido e interativo que pode ser usado para vários fins, como decidir quem começa num jogo, selecionar um vencedor aleatório para um prémio ou simplesmente para entretenimento.
Tradicionalmente, apresenta uma grande roda mecânica segmentada em fatias coloridas. Cada fatia está marcada com um número ou prémio, e os segmentos podem ter tamanhos diferentes, indicando as probabilidades de cair neles. A roda está montada verticalmente para que possa girar livremente quando um jogador a roda, seja à mão ou puxando uma alavanca ligada a ela.

Os jogadores normalmente apostam onde a roda vai parar. Depois de colocarem as apostas numa área numerada ou colorida de um tabuleiro estático que corresponde aos segmentos da roda, o anfitrião do jogo ou jogador gira a roda. Quando a roda para, um indicador no topo aponta para o segmento vencedor.
Aqui vamos construir uma versão pequena e eletrónica do jogo que usa um anel de LEDs para destacar o segmento vencedor em vez de uma roda mecânica a girar. Também adicionamos um buzzer para efeitos sonoros, como o clique da roda a girar e o sinal de vitória.

Seguindo este tutorial, vais aprender a ler um botão de pressão, controlar LEDs e um buzzer usando um Arduino. Também vais aprender a criar um efeito de rotação usando LEDs para simular o movimento da roda.
Então, vamos começar e criar o teu próprio jogo Gira a Roda com Arduino!
Peças Necessárias
Abaixo encontras as peças necessárias para este projeto. Se já tens um conjunto de resistores e oito LEDs, não precisas do kit sugerido. Podes montar o projeto numa breadboard primeiro, mas não é obrigatório se quiseres construir uma roda real e ligar os LEDs diretamente. Para isso, o Conjunto de Fios com Clips será útil.

Arduino Uno

Conjunto de Fios Dupont

Conjunto de Fios com Clips

Breadboard

Buzzer Passivo

Conjunto de Botões de Pressão

Kit de Resistores & LED
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Gira a Roda
Nesta secção, vou mostrar como ligar as peças e como escrever o código para o jogo Gira a Roda. Para manter a ligação e o código simples, vou usar apenas quatro LEDs, enquanto a roda real mostrada acima tem oito. Mas a ligação e o código são fáceis de expandir para mais LEDs.
Ligação
A imagem seguinte mostra a ligação do jogo Gira a Roda para quatro LEDs. Usa os pinos restantes (6,7,8,9) para expandir para oito LEDs, se quiseres.
Vamos começar por ligar os LEDs. Como só um LED estará aceso de cada vez, precisamos apenas de um resistor limitador de corrente de 220 Ohm entre o pino GND do Arduino e todos os pinos cátodo (pinos curtos) dos quatro LEDs. Podes ligar mais do que um LED (sem danificar o Arduino), mas os LEDs ficarão mais fracos.

De seguida, liga os pinos mais longos dos LEDs às saídas GPIO 2,3,4 e 5 do Arduino. Como mencionei, para oito LEDs liga os pinos 6,7,8,9 da mesma forma.
Depois, ligamos o buzzer. Note que é um buzzer passivo com polaridade. O pino negativo deve ser ligado ao terra (GND) e o pino positivo ligamos ao GPIO 11. Caso contrário, não ouvirás som.
Por fim, o botão de pressão que ativa o jogo. Precisamos de um pull-up resistor de 1 Kilo Ohm que está ligado a 5V e ao botão. O mesmo pino do botão está também ligado ao GPIO 12. E finalmente, o outro pino do botão deve ser ligado ao terra.
E assim fica completa a ligação. Se tiveres dúvidas, consulta a tabela detalhada de ligações abaixo.
Tabela de ligações
| De | Pino | Cor do fio | Para | Pino |
| Arduino | GND | Azul | Resistor 220Ω | 1 |
| Resistor 220Ω | 2 | Azul | LED1 | Cátodo |
| Resistor 220Ω | 2 | Azul | LED2 | Cátodo |
| Resistor 220Ω | 2 | Azul | LED3 | Cátodo |
| Resistor 220Ω | 2 | Azul | LED4 | Cátodo |
| Arduino | 2 | Branco | LED1 | Ânodo |
| Arduino | 3 | Amarelo | LED2 | Ânodo |
| Arduino | 4 | Verde | LED3 | Ânodo |
| Arduino | 5 | Laranja | LED4 | Ânodo |
| Arduino | GND | Azul | Buzzer | Pino Negativo |
| Arduino | 11 | Roxo | Buzzer | Pino Positivo |
| Arduino | 5V | – | Resistor 1KΩ | 1 |
| Resistor 1KΩ | 1 | – | Botão | 1 |
| Botão | 1 | Ciano | Arduino | 12 |
| Botão | 2 | Azul | Arduino | GND |
Código
Nesta secção vamos implementar o código que controla o jogo. Queremos que os LEDs acendam numa sequência circular que vai desacelerando até parar completamente. Ao mesmo tempo, queremos fazer um som de clique, semelhante ao som da roda a girar, e tocar um som de vitória quando a roda parar. Finalmente, queremos iniciar o jogo quando o botão for pressionado.
O código abaixo faz tudo isso. Dá uma vista rápida para teres uma ideia geral. Depois vamos analisar os detalhes.
const int btnPin = 12;
const int buzzerPin = 11;
const int nLeds = 4;
const byte ledPins[] = { 2, 3, 4, 5 };
int curLed = 0;
void setLed(int state, int pause) {
digitalWrite(ledPins[curLed], state);
delay(pause);
}
void spin(int pause) {
curLed = (curLed + 1) % nLeds;
tone(buzzerPin, 100, 5);
setLed(HIGH, pause);
setLed(LOW, 0);
}
void win() {
for (int i = 0; i < 10; i++) {
tone(buzzerPin, 1000, 100);
setLed(LOW, 100);
tone(buzzerPin, 1500, 100);
setLed(HIGH, 100);
}
noTone(buzzerPin);
}
void setup() {
pinMode(buzzerPin, OUTPUT);
for (int i = 0; i < nLeds; i++) {
pinMode(ledPins[i], OUTPUT);
}
}
void loop() {
int button = digitalRead(btnPin);
if (button == LOW) {
setLed(LOW, 0);
int start = random(1, 50);
for (int pause = start; pause < 300; pause += 10) {
spin(pause);
}
win();
}
delay(100);
}
Constantes e Variáveis
Começamos por definir as constantes e variáveis usadas no código. A btnPin constante especifica o pino ao qual o botão está ligado. A buzzerPin constante especifica o pino ao qual o buzzer está ligado.
A nLeds variável especifica o número de LEDs usados no jogo. O ledPins array contém os pinos aos quais os LEDs estão ligados. Se quiseres adicionar mais LEDs, basta expandir o ledPins array e ajustar a constante nLEDs em conformidade.
const int btnPin = 12;
const int buzzerPin = 11;
const int nLeds = 4;
const byte ledPins[] = { 2, 3, 4, 5 };
A variável curLed controla qual LED está ativo atualmente. É um índice no array ledPins. Todos os outros LEDs estarão inativos.
int curLed = 0;
Função setLed
A função setLed() é responsável por definir o estado do LED atual e pausar por uma duração especificada. Recebe dois parâmetros: state (HIGH ou LOW) e pause (a duração em milissegundos para pausar após definir o estado do LED).
Se tiveres dificuldades com isto, consulta o nosso tutorial sobre How To Blink An LED Using Arduino.
void setLed(int state, int pause) {
digitalWrite(ledPins[curLed], state);
delay(pause);
}
Função spin
A função spin() é chamada quando o botão é pressionado para iniciar a rotação da roda. Incrementa a variável curLed para selecionar o próximo LED na sequência. Também toca um tom muito curto (5ms), baixo (100Hz) no buzzer. Isto soa como o indicador a bater nos pinos da roda a girar. Depois, chama a função setLed() para ligar o LED atual durante uma pausa especificada e depois desligá-lo.
A expressão curLed = (curLed + 1) % nLeds garante que curLed volta ao início (0) quando chega ao número de LEDs (nLeds).
Se quiseres aprender mais sobre controlar um buzzer, podes ler How To Interface A Piezo Buzzer With Arduino.
void spin(int pause) {
curLed = (curLed + 1) % nLeds;
tone(buzzerPin, 100, 5);
setLed(HIGH, pause);
setLed(LOW, 0);
}
Função win
A função win() é chamada quando a roda para de girar. Toca uma sequência de tons no buzzer e alterna ligar e desligar os LEDs para um efeito visual apelativo. Depois da melodia, o buzzer é desligado.
void win() {
for (int i = 0; i < 10; i++) {
tone(buzzerPin, 1000, 100);
setLed(LOW, 100);
tone(buzzerPin, 1500, 100);
setLed(HIGH, 100);
}
noTone(buzzerPin);
}
Função setup
Na função setup(), definimos o pinMode do pino do buzzer para OUTPUT, pois vamos escrever nele. Também definimos o pinMode de cada pino dos LEDs no array ledPins para OUTPUT. E o pino do botão btnPin é definido como INPUT, pois vamos ler o estado do botão.
void setup() {
pinMode(btnPin, INPUT);
pinMode(buzzerPin, OUTPUT);
for (int i = 0; i < nLeds; i++) {
pinMode(ledPins[i], OUTPUT);
}
}
Função loop
A função loop() é a parte principal do código que corre continuamente. Primeiro lê o estado do botão usando digitalRead(). Se o botão estiver pressionado (LOW), desliga o LED atual, gera um valor inicial aleatório para a duração da pausa e depois chama a função spin() repetidamente com durações de pausa crescentes até atingir um valor máximo (500ms). Finalmente, chama a função win() para tocar a sequência de vitória.
Para mais informações sobre como ler um botão, consulta o nosso tutorial sobre How To Use A Push Button With Arduino.
void loop() {
int button = digitalRead(btnPin);
if (button == LOW) {
setLed(LOW, 0);
int start = random(1, 50);
for (int pause = start; pause < 500; pause += 10) {
spin(pause);
}
win();
}
delay(100);
}
E é isso! Com este código tens um efeito giro de roda muito bom. Quando o botão é pressionado, os LEDs acendem em ordem circular e, como o tempo de pausa aumenta progressivamente, a sequência fica cada vez mais lenta até atingir o estado vencedor. Depois podes pressionar o botão novamente. E como o início é aleatório, o tempo de rotação varia a cada pressão.
Roda Impressa em 3D
Podes facilmente colocar quatro LEDs numa breadboard, mas com oito LEDs fica difícil. Queria uma roda bonita e usei a minha impressora 3D para imprimir um suporte para LEDs com a forma:

Podes descarregar o STL file for the Wheel here. Repara nos dois suportes na parte de trás, onde podes inserir dois espetos de madeira. Isto permite posicionar a roda num ângulo, se quiseres. A imagem abaixo mostra como a roda impressa em 3D fica com os LEDs colocados.

Sente-te à vontade para usar isto como ponto de partida para um design mais bonito. Gostaria de imprimir uma caixa completa com um Arduino Nano integrado e o botão de início no centro. Mas isso fica para outro tutorial.
Conclusão
Neste tutorial, aprendemos a construir um jogo Gira a Roda. Seguindo as instruções passo a passo, agora deves ter um jogo totalmente funcional.
Começámos por reunir todas as peças necessárias, que incluem uma placa Arduino, LEDs, um botão, um buzzer e um botão de pressão. Depois, passámos pelo processo de ligação dos componentes à placa Arduino. É importante prestar atenção às ligações, caso contrário os LEDs não acenderão na ordem correta. Depois de concluída a ligação, avançámos para a parte do código.
Em conclusão, construir um jogo Gira a Roda é um projeto divertido e envolvente que mostra a versatilidade das placas Arduino. Permite combinar hardware e software para criar um jogo interativo que pode ser apreciado por pessoas de todas as idades.
Então, porque não reunir as peças necessárias, seguir as instruções deste tutorial e criar o teu próprio jogo Gira a Roda? É uma ótima forma de aprender mais sobre Arduino, melhorar as tuas habilidades de programação e divertir-te com amigos e família.
Se tiveres alguma dúvida ou encontrares dificuldades durante o processo, não hesites em consultar a secção de Perguntas Frequentes ou procurar apoio na comunidade Arduino. Boa construção!
Perguntas Frequentes
Aqui estão algumas perguntas frequentes sobre a construção de um jogo Gira a Roda.
O que é um jogo Gira a Roda?
Um jogo Gira a Roda é um jogo popular onde os jogadores giram uma roda para determinar o seu prémio ou resultado. É frequentemente usado em programas de jogos, feiras e eventos para adicionar um elemento de emoção e sorte.
Como funciona o jogo Gira a Roda?
O jogo Gira a Roda funciona usando o Arduino para controlar os LEDs e o buzzer com base na entrada do botão de pressão ou interruptor. Quando o botão é pressionado, o Arduino acende os LEDs numa sequência enquanto toca um efeito sonoro no buzzer. A sequência desacelera até que um LED final acenda, sinalizando o fim do jogo.
Posso personalizar os resultados do jogo Gira a Roda?
Sim, podes personalizar os resultados do jogo Gira a Roda conforme as tuas preferências. Podes atribuir diferentes prémios, ações ou mensagens a cada LED e modificar o código Arduino em conformidade.
Existem funcionalidades adicionais que posso adicionar ao jogo Gira a Roda?
Claro! Podes melhorar o jogo Gira a Roda adicionando funcionalidades como um ecrã para mostrar o resultado selecionado, um motor para girar fisicamente a roda, ou até conectividade sem fios para controlar o jogo remotamente.
Posso ter mais de oito LEDs na roda?
O número de portas GPIO num Arduino Uno é limitado. Se quiseres adicionar mais LEDs, digamos 16, vais precisar de uma placa maior com mais pinos GPIO ou usar um expansor GPIO. Vê o nosso tutorial Using GPIO Expander MCP23017 With Arduino, que te permite controlar até 128 LEDs!
Posso acender mais de um LED ao mesmo tempo?
Sim, podes. Mas como todos os LEDs estão ligados através de um único resistor limitador de corrente, quanto mais LEDs estiverem ativos, mais fracos ficam. Podes ligá-los individualmente para evitar isso, mas então podes precisar de uma fonte de alimentação adicional.
Se tiveres alguma dúvida ou precisares de ajuda, não hesites em deixar um comentário.
Boas experiências a criar ; )

