Semafori

Il progetto consiste nel simulare un possibile sistema di semafori di automobili e pedoni a tempo.

Il semaforo dei pedoni entra in funzione dopo almeno un ciclo di semaforo per le automobili e se il pulsante viene premuto.

Hardware Richiesto

  • Arduino or Genuino Board [1]
  • Sensore di luminosità [1]
  • Pulsante [1]
  • Led [6]
  • Resistenza (220 ohm) [6]
  • Resistenza (10k ohm) [2]
  • Circuito

    Il pulsante per interagire con i semafori per i pedoni é messo in PULL_DOWN con una resistenza da 1000 ohm.

    Il sensore di luminosità ritorna un valore all'Arduino, se la luminosità é bassa la luce dei led sarà bassa, se riceve una forte luminosità i led faranno molta più luce.

    I led vanno messi a PULL_DOWN con le resistenze da 220 ohm.

    I led sono messi in ordine (rosso, arancione e verde) per simulare un vero semaforo.





    Vedi circuito

    Legenda dei pin

  • D2 - Digital Input Pulsante (B[0])
  • D3 - Analog Output Led (L[0])
  • D5 - Analog Output Led (L[1])
  • D6 - Analog Output Led (L[2])
  • D9 - Analog Output Led (L[3])
  • D10 - Analog Output Led (L[4])
  • D11- Analog Output Led (L[5])
  • A0 - Analog Input Sensore di luminosità
  • 5V - Alimentazione
  • GND - Massa


  • Legenda dei colori

  • Nero - GND
  • Blu - Digital Input
  • Arangione - Analog Output
  • Marrone - +3.3V
  • Rosso - +5V
  • Grigio - Extra
  • Verde - Digital Output
  • Bianco - Extra
  • Giallo - Analog Input
  • Codice Sorgente

    Interrupt del pulsante

    // INPUT
    int sensore = A0;
    const byte button = 2;
    
    // bool
    volatile byte aEnebled = LOW;
    
    void setup() {
      // INPUT
      pinMode(button, INPUT);
      attachInterrupt(digitalPinToInterrupt(button), seqAuto, CHANGE); // Con questo codice il pulsante potrà venire sempre ascoltato durante l'algoritmo
    }
    
    			

    Quando il pulsante viene premuto

    // Appena il pulsante viene premuto la variabile aEnebled viene settata "HIGH" così al prossimo ciclo partirà il semaforo dei pedoni
    // Alla fine del ciclo aEnebled verrà settata a "LOW"
    void seqAuto() {
      aEnebled = HIGH;
    }
    			

    Gestione del sensore di luminosità

    // Viene memorizzato il valore che ritorna il sensore di luminosità in una variabile 
    lum = analogRead(sensore);
    // Grazie al metodo map() é possibile "convertire" un range di valore ad un altro range, in questo caso da 0-1023 a 255-0
    lum = map(lum, 0, 1023, 255, 0);
    			
    Scarica codice completo

    Problematiche

    Ho avuto delle difficoltà a capire il funzionamento dell' Interrupt per il pulsante.

    Soluzioni

    Il docente ha spiegato il funzionamento a tutti con l'aiuto del sito ufficiale Arduino a questa pagina.