Raffaele Ilardo


Giocare a dadi con Arduino


© La parziale riproduzione dei contenuti di questa pagina è consentita a patto di citare l'indirizzo del sito e l'autore.


reading boy
Non credo che sia possibile giocare a scacchi con la piattaforma Arduino, ma senz'altro ci si può divertire con qualche tiro di dadi!
Il progetto che descrivo in questa pagina consente in effetti di simulare il lancio di un dado, ottenendo il classico punteggio che può variare da 1 a 6; direi comunque che può essere considerato più a ragione un esercizio didattico, che ci consente di utilizzare alcune funzioni caratteristiche di programmazione, dopo aver approntato una piastrina contenente i sette led che simulano i pallini del dado.
Ho provato a realizzare il montaggio su breadboard, ma ho dovuto concludere che non era possibile sistemare i sette led mantenendo l'impostazione classica delle facce di un dado. Ho allora preferito montare i led su di un pezzetto di basetta millefori, come si vede nella figura che segue.
i sette led che simulano il dado montati su piastrina millefori
figura 1
piastrina con i sette led, vista da sotto
figura 2
Mi rendo conto di aver realizzato un montaggio da urli, come appare chiaramente dalla foto: peggio di così non si poteva! Ma il mio scopo era unicamente quello di verificare il corretto funzionamento, sia del codice che della, seppure modesta, elettronica.
La figura 2 mostra la piastrina vista dal di sotto, con i vari collegamenti.
I catodi di ciascun led sono collegati insieme fra loro, e devono essere inviati al pin GND della scheda arduino.
Gli altri numeri indicano, per ciascun led, il pin della scheda cui deve essere collegato (tenete presente che, essendo una vista da sotto, la destra e la sinistra sono invertite).
Con buona pazienza occorre quindi collagare ogni led al relativo pin, interponendo una resistenza da 220 Ω.
Il montaggio d'insieme è quella cosa orrenda che si vede in figura 3, ma voglio sperare che la vostra realizzazione sia notevolmente migliore. Come si può notare, è stato aggiunto un pulsante, il cui scopo è quello di "fermare" il dado.
dado con arduino: vista d'insieme del montaggio
figura 3
Il funzionamento è il seguente: con la funzione random viene generato un numero casuale fra 1 e 6 e il valore viene memorizzato nella variabile "score".
In funzione di tale numero, con l'istruzione switch case viene acceso un gruppo di led corrispondente alla rappresentazione del numero che è stato generato. Il processo avviene molto velocemente, in modo ciclico, per cui i led sembrano sempre accesi, con una luminosità intermedia.
Per tentare la sorte, ovvero "lanciare il dado", si preme il pulsante:
schema completo del dado elettronico con arduino
figura 4: schema completo del progetto
piccolo manuale di elettronica applicata
il ciclo si arresta, e rimangono accesi i soli led che corrispondono al punteggio generato in quell'istante.
Dopo due secondi il loop riparte, e si può lanciare di nuovo, premendo ancora il pulsante.

Di seguito c'è il codice da trasferire tramite copia e incolla nell'IDE di arduino:

unsigned int score=0;
bool puls=0;

void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(2, INPUT);
}
void loop()
{
score=random(1,7);
switch (score) {
case 1:
digitalWrite(7,HIGH);
break;
case 2:
digitalWrite(10,HIGH);
digitalWrite(13,HIGH);
break;
case 3:
digitalWrite(10,HIGH);
digitalWrite(7,HIGH);
digitalWrite(13,HIGH);
break;
case 4:
digitalWrite(13,HIGH);
digitalWrite(8,HIGH);
digitalWrite(11,HIGH);
digitalWrite(10,HIGH);
break;
case 5:
digitalWrite(8,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(13,HIGH);
digitalWrite(7,HIGH);
break;
case 6:
digitalWrite(13,HIGH);
digitalWrite(12,HIGH);
digitalWrite(11,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
break;
}
puls = digitalRead(2);
if (puls==1){ delay(2000);
}
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
}





 raffaele ilardo