In questo tutorial imparerai come costruire un gioco “Gira la Ruota” usando LED, un buzzer e un Arduino. Il Spin the Wheel game è un gioco divertente e interattivo che può essere usato per vari scopi, come decidere chi inizia per primo in un gioco, selezionare un vincitore casuale per un premio, o semplicemente per intrattenimento.
Tradizionalmente presenta una grande ruota meccanica suddivisa in spicchi colorati. Ogni spicchio è contrassegnato da un numero o un premio, e i segmenti possono avere dimensioni diverse, indicando le probabilità di fermarsi su di essi. La ruota è montata verticalmente in modo da poter girare liberamente quando un giocatore la fa ruotare, sia a mano che tirando una leva collegata ad essa.

I giocatori solitamente scommettono su dove si fermerà la ruota. Dopo aver piazzato le loro scommesse su un’area numerata o colorata di una plancia statica corrispondente ai segmenti della ruota, il conduttore del gioco o un giocatore fa girare la ruota. Quando la ruota si ferma, un indicatore in alto segnala il segmento vincente.
Qui costruiremo una versione elettronica più piccola del gioco che usa un anello di LED per evidenziare il segmento vincente invece di una ruota meccanica rotante. Aggiungiamo anche un buzzer per effetti sonori come il clic della ruota che gira e la segnalazione della vittoria.

Seguendo questo tutorial imparerai come leggere un pulsante, controllare LED e un buzzer usando Arduino. Imparerai anche come creare un effetto di rotazione usando i LED per simulare il movimento di una ruota.
Allora, iniziamo a creare il tuo gioco Gira la Ruota con Arduino!
Componenti necessari
Di seguito trovi i componenti necessari per questo progetto. Se hai già un set di resistori e otto LED non avrai bisogno del kit suggerito. Puoi costruire il progetto su una breadboard all’inizio, ma non è necessario se vuoi realizzare una ruota vera e propria e collegare direttamente i LED. Per questo il Wire Set con clip sarà utile.

Arduino Uno

Set di fili Dupont

Set di fili con clip

Breadboard

Buzzer passivo

Set di pulsanti

Kit di resistori e 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 la Ruota
In questa sezione ti mostrerò come collegare i componenti e come scrivere il codice per il gioco Gira la Ruota. Per mantenere semplice il cablaggio e il codice, userò solo quattro LED, mentre la ruota mostrata sopra ne ha otto. Ma il cablaggio e il codice sono facili da estendere a più LED.
Cablaggio
L’immagine seguente mostra il cablaggio del gioco Gira la Ruota per quattro LED. Usa semplicemente i pin rimanenti (6,7,8,9) per estendere a otto LED, se vuoi.
Iniziamo collegando i LED. Poiché solo un LED sarà acceso alla volta, serve un solo resistore di limitazione da 220 Ohm tra il pin GND di Arduino e tutti i pin catodo (pin corti) dei quattro LED. Puoi accendere più di un LED (senza danneggiare Arduino) ma i LED saranno meno luminosi.

Poi collega i pin lunghi degli LED agli output GPIO 2,3,4 e 5 di Arduino. Come detto, per otto LED collega i pin 6,7,8,9 allo stesso modo.
Quindi colleghiamo il buzzer. Nota che è un buzzer passivo con polarità. Il pin negativo deve essere collegato a massa (GND) e il pin positivo lo colleghiamo al GPIO 11. Altrimenti non sentirai alcun suono.
Infine il pulsante che attiva il gioco. Serve un pull-up resistor da 1 Kilo Ohm collegato a 5V e al pulsante. Lo stesso pin del pulsante è anche collegato al GPIO 12. Infine l’altro pin del pulsante deve essere collegato a massa.
E così il cablaggio è completo. Se hai dubbi dai un’occhiata alla tabella dettagliata del cablaggio qui sotto.
Tabella del cablaggio
| Da | Pin | Colore filo | A | Pin |
| Arduino | GND | Blu | Resistore 220Ω | 1 |
| Resistore 220Ω | 2 | Blu | LED1 | Catodo |
| Resistore 220Ω | 2 | Blu | LED2 | Catodo |
| Resistore 220Ω | 2 | Blu | LED3 | Catodo |
| Resistore 220Ω | 2 | Blu | LED4 | Catodo |
| Arduino | 2 | Bianco | LED1 | Anodo |
| Arduino | 3 | Giallo | LED2 | Anodo |
| Arduino | 4 | Verde | LED3 | Anodo |
| Arduino | 5 | Arancione | LED4 | Anodo |
| Arduino | GND | Blu | Buzzer | Pin negativo |
| Arduino | 11 | Viola | Buzzer | Pin positivo |
| Arduino | 5V | – | Resistore 1KΩ | 1 |
| Resistore 1KΩ | 1 | – | Pulsante | 1 |
| Pulsante | 1 | Ciano | Arduino | 12 |
| Pulsante | 2 | Blu | Arduino | GND |
Codice
In questa sezione implementeremo il codice che controlla il gioco. Vogliamo che i LED si accendano in sequenza circolare rallentando nel tempo fino a fermarsi completamente. Allo stesso tempo vogliamo emettere un suono di clic, simile a quello della ruota che gira, e riprodurre un suono di vittoria quando la ruota si ferma. Infine, vogliamo avviare il gioco quando il pulsante viene premuto.
Il codice qui sotto fa tutto questo. Dai un’occhiata veloce per avere una panoramica. Dopo entreremo nei dettagli.
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);
}
Costanti e Variabili
Iniziamo definendo le costanti e le variabili usate nel codice. La btnPin costante specifica il pin a cui è collegato il pulsante. La buzzerPin costante specifica il pin a cui è collegato il buzzer.
La nLeds variabile specifica il numero di LED usati nel gioco. L’array ledPins contiene i pin a cui sono collegati i LED. Se vuoi aggiungere più LED basta estendere l’array ledPins e regolare di conseguenza la costante nLEDs.
const int btnPin = 12;
const int buzzerPin = 11;
const int nLeds = 4;
const byte ledPins[] = { 2, 3, 4, 5 };
La variabile curLed controlla quale LED è attualmente attivo. È un indice nell’array ledPins. Tutti gli altri LED saranno spenti.
int curLed = 0;
Funzione setLed
La funzione setLed() è responsabile di impostare lo stato del LED corrente e di fare una pausa per una durata specificata. Prende due parametri: state (HIGH o LOW) e pause (la durata in millisecondi della pausa dopo aver impostato lo stato del LED).
Se hai difficoltà con questo dai un’occhiata al nostro tutorial su How To Blink An LED Using Arduino.
void setLed(int state, int pause) {
digitalWrite(ledPins[curLed], state);
delay(pause);
}
Funzione spin
La funzione spin() viene chiamata quando il pulsante viene premuto per far girare la ruota. Incrementa la variabile curLed per selezionare il LED successivo nella sequenza. Riproduce anche un tono molto breve (5ms), basso (100Hz) sul buzzer. Questo suono simula l’indicatore che colpisce i perni della ruota che gira. Poi chiama la funzione setLed() per accendere il LED corrente per una pausa specificata e poi spegnerlo.
L’espressione curLed = (curLed + 1) % nLeds assicura che curLed ricominci da 0 quando raggiunge il numero di LED (nLeds).
Se vuoi saperne di più sul controllo di un buzzer puoi leggere 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);
}
Funzione win
La funzione win() viene chiamata quando la ruota si ferma. Riproduce una sequenza di toni sul buzzer e alterna l’accensione e lo spegnimento dei LED per un effetto visivo gradevole. Dopo la melodia il buzzer viene spento.
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);
}
Funzione setup
Nella funzione setup() impostiamo il pinMode del pin del buzzer su OUTPUT, poiché scriveremo su di esso. Impostiamo anche il pinMode di ogni pin LED nell’array ledPins su OUTPUT. E il pin del pulsante btnPin è impostato su INPUT, dato che leggeremo lo stato del pulsante.
void setup() {
pinMode(btnPin, INPUT);
pinMode(buzzerPin, OUTPUT);
for (int i = 0; i < nLeds; i++) {
pinMode(ledPins[i], OUTPUT);
}
}
Funzione loop
La funzione loop() è la parte principale del codice che gira continuamente. Prima legge lo stato del pulsante usando digitalRead(). Se il pulsante è premuto (LOW), spegne il LED corrente, genera un valore casuale per la durata della pausa iniziale, e poi chiama ripetutamente la funzione spin() con durate di pausa crescenti fino a raggiungere un valore massimo (500ms). Infine chiama la funzione win() per eseguire la sequenza di vittoria.
Per maggiori informazioni su come leggere un pulsante dai un’occhiata al nostro tutorial su 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 questo è tutto! Con questo codice ottieni un bel effetto ruota che gira. Una volta premuto il pulsante i LED si accendono in ordine circolare e, poiché il tempo di pausa aumenta costantemente, la sequenza rallenta sempre di più fino a raggiungere lo stato vincente. Dopo puoi premere di nuovo il pulsante. E dato che l’inizio è casuale, il tempo di rotazione varia ad ogni pressione.
Ruota stampata in 3D
Puoi facilmente posizionare quattro LED su una breadboard, ma con otto LED diventa difficile. Volevo avere una bella ruota e ho usato la mia stampante 3D per stampare un supporto per LED a forma di:

Puoi scaricare il file STL file for the Wheel here. Nota i due supporti sul retro, dove puoi inserire due spiedini di legno. Questo ti permette di posizionare la ruota inclinata, se vuoi. L’immagine sotto mostra come appare la ruota stampata in 3D con i LED inseriti.

Sentiti libero di usare questo come punto di partenza per un design più bello. Mi piacerebbe stampare un alloggiamento completo con un Arduino Nano integrato e il pulsante di avvio al centro. Ma quello sarà per un altro tutorial.
Conclusione
In questo tutorial abbiamo imparato come costruire un gioco Gira la Ruota. Seguendo le istruzioni passo passo, ora dovresti avere un gioco completamente funzionante.
Abbiamo iniziato raccogliendo tutti i componenti necessari, che includono una scheda Arduino, LED, un pulsante, un buzzer e un pulsante a pressione. Poi abbiamo visto come collegare i componenti alla scheda Arduino. È importante fare attenzione alle connessioni altrimenti i LED non si accenderanno nell’ordine corretto. Una volta completato il cablaggio, siamo passati alla parte di programmazione.
In conclusione, costruire un gioco Gira la Ruota è un progetto divertente e coinvolgente che mostra la versatilità delle schede Arduino. Ti permette di combinare hardware e software per creare un gioco interattivo che può essere apprezzato da persone di tutte le età.
Allora perché non raccogliere i componenti necessari, seguire le istruzioni fornite in questo tutorial e creare il tuo gioco Gira la Ruota? È un ottimo modo per imparare di più su Arduino, migliorare le tue capacità di programmazione e divertirti con amici e famiglia.
Se hai domande o incontri difficoltà durante il processo, sentiti libero di consultare la sezione Domande Frequenti o di rivolgerti alla comunità Arduino per supporto. Buon divertimento con il progetto!
Domande Frequenti
Ecco alcune domande frequenti sulla costruzione di un gioco Gira la Ruota.
Cos’è un gioco Gira la Ruota?
Un gioco Gira la Ruota è un gioco popolare in cui i giocatori fanno girare una ruota per determinare il loro premio o risultato. È spesso usato in quiz televisivi, fiere ed eventi per aggiungere un elemento di eccitazione e casualità.
Come funziona il gioco Gira la Ruota?
Il gioco Gira la Ruota funziona usando Arduino per controllare i LED e il buzzer in base all’input del pulsante o interruttore. Quando il pulsante viene premuto, Arduino accende i LED in sequenza mentre riproduce un effetto sonoro tramite il buzzer. La sequenza rallenta fino a quando un LED finale si accende, segnalando la fine del gioco.
Posso personalizzare i risultati del gioco Gira la Ruota?
Sì, puoi personalizzare i risultati del gioco Gira la Ruota secondo le tue preferenze. Puoi assegnare premi, azioni o messaggi diversi a ciascun LED e modificare il codice Arduino di conseguenza.
Ci sono funzionalità aggiuntive che posso aggiungere al gioco Gira la Ruota?
Assolutamente! Puoi migliorare il gioco Gira la Ruota aggiungendo funzionalità come un display per mostrare il risultato selezionato, un motore per far girare fisicamente la ruota, o anche connettività wireless per controllare il gioco da remoto.
Posso avere più di otto LED sulla ruota?
Il numero di porte GPIO su un Arduino Uno è limitato. Se vuoi aggiungere più LED, diciamo 16, avrai bisogno di una scheda più grande con più pin GPIO o di usare un espansore GPIO. Vedi il nostro tutorial Using GPIO Expander MCP23017 With Arduino, che ti permetterebbe di controllare fino a 128 LED!
Posso accendere più di un LED alla volta?
Sì, puoi. Ma dato che tutti i LED sono collegati tramite un singolo resistore di limitazione della corrente, più LED sono accesi, più diventano deboli. Puoi collegarli individualmente per evitare questo, ma allora potresti aver bisogno di un’alimentazione aggiuntiva.
Se hai domande o hai bisogno di assistenza, sentiti libero di lasciare un commento.
Buon divertimento con il fai-da-te ; )

