Implementazione di Arduino UNO nella progettazione del gioco.
Obiettivo: Prendere dimestichezza con Arduino e sviluppare il seguente gioco:
Il gioco prevede un led verde e tre rossi con quattro pulsanti. Il led verde si deve accendere randomicamente dopo 5 secondi dall'avvio e prima dei 30 secondi. Il primo pulsante che verrà premuto dopo l'accensione del led verde sarà il vincitore che verrà visualizzato mediante i tre led rossi. Dopo 10 secondi il gioco si resetta e si riparte da capo.
Progettazione
Contenuti teorici:
ARDUINO :
Arduino è un tool di sviluppo composto da una serie di schede elettroniche dotate di un microcontrollore. È stata ideata e sviluppata da alcuni membri dell'Interaction Design Institute di Ivrea come strumento per la prototipazione rapida e per hobby o per scopi didattici e professionali.
Con Arduino si possono realizzare molto velocemente e in modo semplice piccoli dispositivi come controllori di luci, sensori di luce, autolavaggi, temperatura e umidità oppure far funzionare un robot, lanciare un razzo amatoriale, controllare un modellino pieno di trenini, realizzare complessi strumenti scientifici e mille altre cose.
Essenzialmente una scheda Arduino è un elaboratore che legge un input e restituisce un output.
LED :
L’acronimo LED deriva come è noto da: light emitting diode, ovvero diodo ad emissione di luce. Infatti il diodo led ha proprio le caratteristiche di un diodo, ed è costituito essenzialmente da una giunzione P-N che, se alimentata direttamente, emette un fascio di luce (o radiazione luminosa).
RESISTENZA :
Una resistenza ( o più appropriatamente Resistore) è un componente elettrico che oppone una determinata resistenza elettrica al passaggio di corrente.
BREADBOARD :
Una breadboard (o anche detta basetta sperimentale) è uno strumento utilizzato per creare prototipi di circuiti elettrici.
PULSANTE :
Il pulsante è un semplice dispositivo utilizzato per la registrazione di dati forniti in input dall'utente. Questi dati possono essere solo due: 0 se il pulsante non è premuto oppure 1 se questo viene premuto.
Schema /disegno:
Figura: schema del circuito realizzato con l'utilizzo di Tinkercad, sito web per la realizzazione di circuiti, progetti oppure disegni 3D
Realizzazione
Materiale utilizzato:
Quantità Nome materiale1 Arduino (Genuino UNO)1 Bread-board4 Pulsanti8 Resistenze (220Ohm)3 Led (rosso)1 Led (verde)Q.b. Ponticelli / filo conduttore
Arduino è programmabile usando l'Arduino Programming Language e l'Arduino Software (IDE).
Foto/Filmato del circuito realizzato:
FOTO: Funzionamento del circuito
Procedimento:
Per questioni di visibilità, lo screen del codice è diviso in due parti.
Codice:
int Num_casuale = 0; //conterrà il numero randomico in millisecondiint Rand=0; //numero randomicoint N_led=0; //variabile per poter uscire dal ciclo while(...)int But_1=1; //pin 1int But_2=2; //pin 2int But_3=3; //pin 3int But_4=4; //pin 4int LED_V=13; //pin 13int LED_1=12; //pin 12int LED_2=11; //pin 11int LED_3=10; //pin 10
void setup() { pinMode(LED_V, OUTPUT); //dichiarazione dei pin di output pinMode(LED_1, OUTPUT); pinMode(LED_2, OUTPUT); pinMode(LED_3, OUTPUT); pinMode(But_1, INPUT); //dichiarazione dei pin di input pinMode(But_2, INPUT); pinMode(But_3, INPUT); pinMode(But_4, INPUT);}
void loop() //loop{ N_led=0; //N_led a 0 for(int i=13;i>=10;i--) //ciclo che inizializza i pin di compresi tra 13 e 10 ponendoli LOW { digitalWrite (i,LOW); } randomSeed(millis()); //funzione per l'utilizzo della generazione casuale di numeri Rand = random(5,30); //numero casuale compreso tra MIN=5 e MAX=30 Num_casuale = Rand * 1000; //trasformazione del numero in millisecondi delay (Num_casuale); //attendo Num_casuale di secondi digitalWrite (LED_V, HIGH); //accensione del led verde while (N_led==0) //ciclo che ha come condizione N_led=0 (fino a quando noon entra dentro non cambierà) { if (digitalRead (But_1) == HIGH) //se premuto il primo pulsante { digitalWrite (LED_3, HIGH); //led al pin 10 acceso (numero 1) N_led=1; } if (digitalRead (But_2) == HIGH) //se premuto il secondo pulsante { digitalWrite (LED_2, HIGH); //led al pin 11 acceso (numero 2) N_led=2; } if (digitalRead (But_3) == HIGH) //se premuto il terzo pulsante { digitalWrite (LED_2, HIGH); //led al pin 11 acceso (numero 2)
digitalWrite (LED_3, HIGH); //led al pin 10 acceso (numero 1) [TOT=3] N_led=3; } if (digitalRead (But_4)==HIGH) //se premuto il quarto pulsante { digitalWrite (LED_1,HIGH); //led al pin 12 acceso (numero 4) N_led=4; } }delay(10000); //attesa di 10 secondi (10000 millisecondi)}
Descrizione del codice sorgente:
Prima del void setup dichiaro le variabili del codice. Ad esempio Led_V (Led verde) avrà valore 13 perchè il led verde è collegato al pin 13.
Nel void setup vengono dichiarate le tipologie di comunicazione (input o output). Nel void loop (ciclo infinito) :
viene inizializzata la variabile N_led a 0 per resettarla alla seconda esecuzione; viene effettuato un ciclo di spegnimento dei led da 13 a 10 compresi; viene dichiarata la funzione randomseed(millis()) per l'utilizzo della funzione randomica; Rand assume un valore casuale tra 5 e 30; Num_casuale prende il valore in millisecondi del numero casuale; il programma viene messo in pausa per i secondi indicati da Num_casuale; viene acceso il led verde (LED_V);
Se la variabile N_led è 0 allora:
viene effettuato un controllo su quale bottone è stato premuto:
Se è stato premuto il primo:
accensione del led al pin 10;
Se è stato premuto il secondo:
accensione del led al pin 11;
Se è stato premuto il terzo:
accensione del led al pin 10; accensione del led al pin 11;
Se è stato premuto il quarto:
accensione del led al pin 12.
Risultati:
Viene caricato il codice sopra la piattaforma di programmazione per Arduino e la scheda viene alimentata non appena viene collegata al computer. All’avvio dell’esecuzione del programma si avvierà il codice. L’iterazione del gioco continua fino a quando l'utente non toglie l'alimentazione.
Osservazioni e conclusioni :
In conclusione si può affermare che l’esperienza è riuscita senza alcun tipo di problema.