mercoledì 5 febbraio 2020

Arduino N° 35 - Semaforo singolo a tre stati

< Arduino N° 34

 Achille De Santis

Arduino N° 36




Questo sketch realizza un semaforo singolo a tre stati: Verde, Giallo/Verde, Rosso.
Può essere usato così com'è o rappresentare la base di partenza per lo sviluppo di un semaforo multiplo.

Innanzitutto si definiscono le uscite per il comando delle "lampade" rosso, giallo, verde; poi, le durate di accensione delle singole lampade.

Le routine servono ad organizzare meglio le varie operazioni e sono molto utili anche per espandere lo sketch ad altri gruppi di lampade e realizzare, così, un semaforo a più vie.

Per il pilotaggio delle lampade attuatrici si deve tenere conto della tensione di funzionamento.
La cosa più facile è utilizzare un modulo di interfaccia a tre relais. Si ottiene, così, una ottima separazione del circuito attuatore da quello della logica di comando. Basta utilizzare le uscite N.O. dei relais.

Nota importante! Alcuni moduli hanno il riferimento comune sul positivo di alimentazione; in questo caso è consigliabile utilizzare un transistore BJT come invertitore di fase per il pilotaggio dei relais (v. riferimenti).



/* Programma di simulazione di un semaforo singolo a tre stati
 *  Achille De Santis - V. 2.0 del 29-05-2019
 *
*/
// -------------------------------- I/O ---------------------------------------------------------
#define led_red       0    // red LED su Pin 0 di Arduino
#define led_yellow 1    // yellow LED su Pin 1 di Arduino
#define led_green   2   // green LED su Pin 2 di Arduino
// ----------------------------------------------------------------------------------------------
// ----------- Parametri da cambiare in base alle proprie esigenze ------------
const int TR=2000;  // durata ROSSO
const int TY=1000;  // durata GIALLO
const int TG=3000;  // durata VERDE
// ----------------------------------------------------------------------------------------------

void intestazione()
  { Serial.begin(9600);        // velocità seriale di comunicazione
    Serial.println(" _________ Tecnatron Creation ___________");
    Serial.println(" Semaforo singolo a tre stati       ___________");
    Serial.println(" prof. Achille De Santis - V. 2.0 29-05-2019.--");

  }
void attiva(bool R, bool Y, bool G)             // manovra
{
  digitalWrite(led_red, R);
  digitalWrite(led_yellow, Y);
  digitalWrite(led_green, G);
}

void rosso()   {  attiva(1,0,0);   delay(TR);  }     // durata TR secondi
void giallo()   {  attiva(0,1,1);   delay(TY);   }     //  durata TY secondi
void verde()  {  attiva(0,0,1);   delay(TG);   }     //  durata TG secondi

void setup()
{                              // predispone tutte le uscite
  pinMode(led_red,  OUTPUT);
  pinMode(led_yellow, OUTPUT);
  pinMode(led_green,  OUTPUT);
  intestazione();
}

void loop()
{
  verde();     // commuta GREEN LED
  giallo();     // accende GREEN & YELLOW LED  (giallo/verde)
  rosso();    // commuta RED LED
}
// ---------------------- Fine programma -----------------------------------------------------



Simulazione: Semaforo singolo a tre stati

Argomenti correlati:


> Arduino N° 36

1 commento: