Dado elettronico con Arduino

Oxygen480-categories-applications-education-school.svg Questa risorsa è stata scritta dagli studenti dell'Istituto ITIS "Enrico Mattei" di Urbino, della classe 3B/EN nell'a.s. 2021/2022, all'interno del corso di Sistemi automatici per le superiori 1.

Per favore, prima di apportare modifiche, attendi sino alla fine dell'anno scolastico (termina il 30 giugno 2022) oppure contatta il docente di riferimento Giacomo Alessandroni nel caso venissero rilevati contenuti non in linea con le linee guida della comunità.

Se leggi questo avviso ad anno scolastico concluso puoi rimuoverlo.

laboratorio
Dado elettronico con Arduino
Tipo di risorsa Tipo: laboratorio
Materia di appartenenza Materia: Sistemi automatici per le superiori 1
Avanzamento Avanzamento: laboratorio completa al 100%.

Questa risorsa descrive come realizzare un dado elettronico, che mostra un numero casuale (compreso tra uno e sei) dopo la pressione di un tasto.

OOjs UI icon die-progressive.svg

Principio di funzionamentoModifica

Alla pressione del pulsante il generatore di numeri casuali invia al display un numero da 1 a 6 e il display lo mostra.

Sensori e attuatoriModifica

  • display a 7 segmenti
  • 7 resistenze da  
  • bottone

Schema di montaggioModifica

 

CodiceModifica

Definisco tutte le variabili

//Associamo ad ogni segmento il proprio piedino
#define LED_A     5
#define LED_B     6
#define LED_C     7
#define LED_D     8       
#define LED_E     9
#define LED_F     10
#define LED_G     11
#define DP        12
#define buttonPin 2
#delay 50

int buttonState;
int ran;
const int time = 1000;

Uso la funzione setup() per inizializzare le variabili

void setup ()
{
  //indiriziamo i led in uscita e il pulsante di start
  pinMode(LED_A, OUTPUT);
  pinMode(LED_B, OUTPUT);
  pinMode(LED_C, OUTPUT);       
  pinMode(LED_D, OUTPUT); 
  pinMode(LED_E, OUTPUT);
  pinMode(LED_F, OUTPUT);
  pinMode(LED_G, OUTPUT);
  pinMode(DP, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  
  //inizializziamo il generatore di numeri pseudo-casuali
  randomSeed(analogRead(0));
}

Dopo aver creato una funzione setup(), che inizializza e imposta i valori iniziali, la funzione loop() esegue esattamente ciò che suggerisce il nome della risorsa e si ripete per sempre, consentendo al programma di cambiare numero estratto.

void loop()
{
  buttonState = digitalRead(buttonPin); // Questa variabile memorizza lo stato digitale corrente del pulsante
  if (buttonState == LOW)                    
  {
    strobe();                          //lampeggia
    AZZERA();                          //azzera
    ran = random(1, 6);
    
    //specifichiamo i casi possibili (da 1 a 6)
    switch(ran) {
        case 1:
            UNO();
            break;
        case 2:
            DUE();
            break;
        case 3:
            TRE();
            break;
        case 4:
            QUATTRO();
            break;
        case 5:
            CINQUE();
            break;
        case 6:
            SEI();
            break;
       default:
            break;
    }
    delay (time);
  }
}

tramite l'uso della funzione strobe() accendiamo e spegniamo i led con un ritardo di 50 ms

void strobe()  
{
  digitalWrite(DP, HIGH);
  delay(50);
  digitalWrite(DP, LOW);
} 
  //indichiamo ad arduino che led si devono accendere sul display per formare i numeri (da 1 a 6)
void UNO()
{
  digitalWrite(LED_B, HIGH);
  digitalWrite(LED_C, HIGH);
}

void DUE()
{
   digitalWrite(LED_A, HIGH);
   digitalWrite(LED_B, HIGH);
   digitalWrite(LED_D, HIGH);
   digitalWrite(LED_E, HIGH);
   digitalWrite(LED_G, HIGH);
}

void TRE()
{
  digitalWrite(LED_A, HIGH);
  digitalWrite(LED_B, HIGH);
  digitalWrite(LED_D, HIGH);
  digitalWrite(LED_C, HIGH);
  digitalWrite(LED_G, HIGH);
}

void QUATTRO()
{
  digitalWrite(LED_B, HIGH);
  digitalWrite(LED_C, HIGH);
  digitalWrite(LED_F, HIGH);
  digitalWrite(LED_G, HIGH);
}

void CINQUE()
{
  digitalWrite(LED_A, HIGH);
  digitalWrite(LED_C, HIGH);
  digitalWrite(LED_D, HIGH);
  digitalWrite(LED_F, HIGH);
  digitalWrite(LED_G, HIGH);
}

void SEI()
{
   digitalWrite(LED_A, HIGH);
   digitalWrite(LED_C, HIGH);
   digitalWrite(LED_D, HIGH);
   digitalWrite(LED_E, HIGH);
   digitalWrite(LED_F, HIGH);
   digitalWrite(LED_G, HIGH);
}

void AZZERA()
{  
   // spegne tutti i led
   digitalWrite(LED_A, LOW);
   digitalWrite(LED_B, LOW);
   digitalWrite(LED_C, LOW);  
   digitalWrite(LED_D, LOW);
   digitalWrite(LED_E, LOW);
   digitalWrite(LED_F, LOW);
   digitalWrite(LED_G, LOW);
}

Espansioni suggeriteModifica

Il gioco può essere ampliato con un numero maggiore di dadi (per esempio due).