Semaforo a chiamata 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
Semaforo a chiamata con Arduino
Tipo di risorsa Tipo: laboratorio
Materia di appartenenza Materia: Sistemi automatici per le superiori 1
Avanzamento Avanzamento: laboratorio completa al 100%.

Questa lezione descrive come realizza un semaforo con chiamata pedoni

Componenti utilizzatiModifica

  • 6 resistenze da   per i led;
  • 1 resistenza da   per il pulsante
  • 6 LED (2 verdi, 2 gialli, 2 rossi)
  • 1 Pulsante

Schema di montaggioModifica

CodiceModifica

 /**
 * Semaforo con chiamata pedoni
 * Giovanni Serafini
 * 3B EN
 * a.s. 2021/2022    
 **/
#define VERDE 0
#define GIALLO 1
#define ROSSO 2

int semaforoPrincipale[] = { 8, 9, 10 };
int semaforoPedonale[] = { 5, 6, 7 };
int ritardo = 2000;
int pulsantePin = 2;
int attesaChiamata = 3000;

void setup(){
  for(int i = 0; i < 3; i++){
    pinMode(semaforoPrincipale[i], OUTPUT);
    pinMode(semaforoPedonale[i], OUTPUT);
  }
  pinMode(pulsantePin, INPUT);
  cambiaLuce(semaforoPedonale, ROSSO);
  cambiaLuce(semaforoPrincipale, VERDE);
}

void loop(){
  if(digitalRead(pulsantePin) == HIGH){
    delay(attesaChiamata);
    cambiaLuce(semaforoPrincipale, GIALLO);
    delay(ritardo/2);
    cambiaLuce(semaforoPrincipale, ROSSO);
    cambiaLuce(semaforoPedonale, VERDE);
    delay(ritardo);
    cambiaLuce(semaforoPedonale, GIALLO);
    delay(ritardo/2);
    cambiaLuce(semaforoPedonale, ROSSO);
    cambiaLuce(semaforoPrincipale, VERDE);
  }
  delay(10);
}

void cambiaLuce(int semaforo[], int luce){
  for(int i = 0; i < 3; i++){
    if(i == luce){
      digitalWrite(semaforo[i], HIGH);
    }else{
      digitalWrite(semaforo[i], LOW);
    }
  }
}

Espansioni suggeriteModifica

Si può aggiungere, al posto del pulsante, un sensore di prossimità che - quando qualcuno gli si avvicina - fa diventare verde il semaforo per i pedoni.