giovedì 19 novembre 2015

ARDUINO - [PROGETTO] Semaforo (v. 1.1)

Bentornati al progetto del semaforo con Arduino. Con questo post continueremo lo sviluppo del programma del semaforo, introducendo alcune semplificazioni. Questa è la versione 1.1 del programma.

Materiale occorrente
  • Arduino;
  • 2x LED Rossi;
  • 2x LED Gialli;
  • 2x LED Verdi;
  • 1x resistori da 220 Ohm;
  • Breadboard e cavi di collegamento.
Funzionamento del circuito 

Incrocio di riferimento

Il funzionamento del circuito è uguale a quello della versione 1.0 del programma.











Lo sketch
A livello di sketch introduciamo una semplificazione eliminando tutte le istruzioni inutili tra una passaggio e l'altro.
Se, per esempio, abbiamo pin 13 acceso e pin 12 spento nel passaggio uno e, nel passaggio 2, pin 13 spento e pin 12 spento, allora nel passaggio due potremmo evitare di scrivere che il pin 12 è spento. Questo perché Arduino ha memorizzato lo stato del pin e non lo cambia se non gli viene detto di farlo.
Utilizzando questa semplificazione abbiamo risparmiato ben 12 istruzioni nel void loop. Questo si traduce in un risparmio nella memoria di Arduino e in meno tempo per eseguire i vari passaggi. Il minor tempo impegato per eseguire i vari passaggi in alcuni casi potrebbe dare fastidio, nel nostro caso però possiamo applicare questa semplificazione e ottenere lo sketch che segue.

//Semaforo v. 1.1
void setup() {  //Dichiarazione pin
  //Semaforo 1
  pinMode (13, OUTPUT);  //LED Rosso
  pinMode (12, OUTPUT);  //LED Giallo
  pinMode (11, OUTPUT);  //LED Verde
  //Semaforo 2
  pinMode (10, OUTPUT);  //LED Rosso
  pinMode (9,  OUTPUT);  //LED Giallo
  pinMode (8,  OUTPUT);  //LED Verde
  
  //Dichiarazione stato iniziale pin
  //Tutti i led all'inizio sono spenti
  digitalWrite (13, LOW);
  digitalWrite (12, LOW);
  digitalWrite (11, LOW); 
  digitalWrite (10, LOW);
  digitalWrite (9,  LOW);
  digitalWrite (8,  LOW);
}
void loop() {
  // Semaforo 1: Rosso - Semaforo 2: Verde
  digitalWrite (13, HIGH);  //Rosso  1
  digitalWrite (12, LOW);   //Giallo 1
  digitalWrite (10, LOW);   //Rosso  2
  digitalWrite (8,  HIGH);  //Verde  2
  delay (4500);
  // Semaforo 1: Rosso - Semaforo 2: Giallo
  digitalWrite (9,  HIGH);  //Giallo 2
  digitalWrite (8,  LOW);   //Verde  2
  delay (1500);
  // Semaforo 1: Verde - Semaforo 2: Rosso
  digitalWrite (13, LOW);   //Rosso  1
  digitalWrite (11, HIGH);  //Verde  1
  digitalWrite (10, HIGH);  //Rosso  2
  digitalWrite (9,  LOW);   //Giallo 2
  delay (4500);
  // Semaforo 1: Giallo - Semaforo 2: Rosso
  digitalWrite (12, HIGH);  //Giallo 1
  digitalWrite (11, LOW);   //Verde  1
  delay (1500);
}

 
Il circuito 
Il circuito è anch'esso molto semplice. Si tratta di sei led collegati alle sei uscite che abbiamo utilizzato. Sapendo che i led sono collegati tutti a massa e che non è importante che la resistenza sia posta sul catodo o sull'anodo del led, colleghiamo tutti i catodi insieme e li mandiamo ad un'unica resistenza da 220 Ohm. Con questa piccola semplificazione abbiamo risparmiato ben 5 resistenze rispetto alla precedente versione del programma.


Se il mio lavoro vi è piaciuto commentate e ci diamo appuntamento al prossimo sketch!
Lo staff di elettromatica.blogspot.com 

sabato 14 novembre 2015

ARDUINO - [PROGETTO] Semaforo (v. 1.0)

Benvenuti in questo nuovo post. Con questo post cominceremo un progetto: comandare un semaforo con Arduino. Successivamente andremo a raffinare sempre più il programma.
In questo post cercheremo di capire come funziona un semaforo e di  come comandarne uno da Arduino.
Questo sketch è la versione 1.0 del programma.
Materiale occorrente
  • Arduino;
  • 2x LED Rossi;
  • 2x LED Gialli;
  • 2x LED Verdi;
  • 6x resistori da 220 Ohm;
  • Breadboard e cavi di collegamento.
Funzionamento del circuito
Consideriamo un incrocio tra due strade come nella figura che segue. (L'incrocio in questione è quello che considereremo durante tutto il progetto).

Notiamo che i due semafori della strada 1 (1a e 1b) avranno la stessa luce accesa nello stesso istante di tempo. Lo stesso discorso vale per la strada 2. Di conseguenza, anziché realizzare sul circuito i quattro semafori (1a, 1b, 2a, 2b) ne realizzeremo solo due (Semaforo1 e Semaforo2). Tale semplificazione è utile sopratutto in circuiti più complessi, dove conviene usare meno uscite possibili. Per realizzare i quattro semafori basta collegare ad in parallelo ad ogni LED un altro dello stesso colore.



Dopo aver caricato lo sketch in Arduino questi farà accendere e spegnere in sequenza i led che rappresentano la luce rossa del semaforo. Notiamo inoltre che il tempo di accensione della luce rossa (6 sec) sarà dato dalla somma del tempo di accensione della luce verde e della luce gialla (4.5 sec + 1.5 sec).

Lo sketch
Anche qui non credo ci sia niente da spiegare, dato che i commenti all'interno dello sketch stesso spiegano tutto.

//Semaforo v. 1.0
void setup() {  //Dichiarazione pin
  //Semaforo 1
  pinMode (13, OUTPUT);  //LED Rosso
  pinMode (12, OUTPUT);  //LED Giallo
  pinMode (11, OUTPUT);  //LED Verde
  //Semaforo 2
  pinMode (10, OUTPUT);  //LED Rosso
  pinMode (9,  OUTPUT);  //LED Giallo
  pinMode (8,  OUTPUT);  //LED Verde
}
void loop() {
  // Semaforo 1: Rosso - Semaforo 2: Verde
  digitalWrite (13, HIGH);  //Rosso  1
  digitalWrite (12, LOW);   //Giallo 1
  digitalWrite (11, LOW);   //Verde  1
  digitalWrite (10, LOW);   //Rosso  2
  digitalWrite (9,  LOW);   //Giallo 2
  digitalWrite (8,  HIGH);  //Verde  2
  delay (4500);
  // Semaforo 1: Rosso - Semaforo 2: Giallo
  digitalWrite (13, HIGH);  //Rosso  1
  digitalWrite (12, LOW);   //Giallo 1
  digitalWrite (11, LOW);   //Verde  1
  digitalWrite (10, LOW);   //Rosso  2
  digitalWrite (9,  HIGH);  //Giallo 2
  digitalWrite (8,  LOW);   //Verde  2
  delay (1500);
  // Semaforo 1: Verde - Semaforo 2: Rosso
  digitalWrite (13, LOW);   //Rosso  1
  digitalWrite (12, LOW);   //Giallo 1
  digitalWrite (11, HIGH);  //Verde  1
  digitalWrite (10, HIGH);  //Rosso  2
  digitalWrite (9,  LOW);   //Giallo 2
  digitalWrite (8,  LOW);   //Verde  2
  delay (4500);
  // Semaforo 1: Giallo - Semaforo 2: Rosso
  digitalWrite (13, LOW);   //Rosso  1
  digitalWrite (12, HIGH);  //Giallo 1
  digitalWrite (11, LOW);   //Verde  1
  digitalWrite (10, HIGH);  //Rosso  2
  digitalWrite (9,  LOW);   //Giallo 2
  digitalWrite (8,  LOW);   //Verde  2
  delay (1500);
}

 
Il circuito 
Il circuito è anch'esso molto semplice. Si tratta di sei led collegati alle sei uscite che abbiamo utilizzato. Ogni LED ha in serie una resistenza da 220 Ohm per evitare che si bruci.



Se il mio lavoro vi è piaciuto commentate e ci diamo appuntamento al prossimo sketch!
Lo staff di elettromatica.blogspot.com 

PS: merito un commento e una condivisione per lo schema fatto a mano! ;)

venerdì 13 novembre 2015

ARDUINO - Bluetooth - I 5 LED

Benvenuti in questo nuovo post.
Dopo aver precedentemente trattato come usare un modulo bluetooth (HC-06) per accendere un solo LED, ora vedremo come estendere il programma a 5 LED, aggiungendo la possibilità di accenderli tutti o di spegnerli tutti.
Materiale occorrente
  • Arduino;
  • Modulo Bluetooth HC-06;
  • 1x LED;
  • Breadboard e cavi di collegamento.
Funzionamento del circuito
Con un app Android come Blue Serial si comandano i LED. 
Avviando il terminale di Blue Serial andramo a scrivere un singolo carattere che verrà inviato al modulo B/T. Questo modulo poi, tramite i pin RX e TX comunicherà ad Arduino l'azione da eseguire.
Per come è scritto il programma, quando verrranno inviate lettere maiuscole si accenedranno le uscite, al contrario, quando si invieranno lettere minuscole, le uscite si spegneranno.

Lo sketch
Non credo ci sia nulla da spiegare, dato che lo sketch si commenta da sé.
 
void setup() {
  //Definisce i pin a cui sono collegati i LED
  pinMode(13, OUTPUT);  //Rosso
  pinMode(12, OUTPUT);  //Giallo
  pinMode(11, OUTPUT);  //Bianco
  pinMode(10, OUTPUT);  //Verde
  pinMode(9, OUTPUT);   //Blu
  //Inizializza la comunicazione seriale
  Serial.begin(9600);
}
void loop() {
  //Legge un carattere dal seriale e lo pone in c
  char c = Serial.read();
  //Se il carattere letto è 'R' accende il LED rosso
  if (c == 'R') {
    digitalWrite (13, HIGH);
  }
  //Se il carattere letto è 'r' spegne il LED rosso
  if (c == 'r') {
    digitalWrite (13, LOW);
  }
  //Se il carattere letto è 'G' accende il LED giallo
  if (c == 'G') {
    digitalWrite (12, HIGH);
  }
  //Se il carattere letto è 'g' spegne il LED giallo
  if (c == 'g') {
    digitalWrite (12, LOW);
  }
  //Se il carattere letto è 'W' accende il LED bianco
  if (c == 'W') {
    digitalWrite (11, HIGH);
  }
  //Se il carattere letto è 'w' spegne il LED bianco
  if (c == 'w') {
    digitalWrite (11, LOW);
  }
  //Se il carattere letto è 'V' accende il LED verde
  if (c == 'V') {
    digitalWrite (10, HIGH);
  }
  //Se il carattere letto è 'v' spegne il LED verde
  if (c == 'v') {
    digitalWrite (10, LOW);
  }
  //Se il carattere letto è 'B' accende il LED blu
  if (c == 'B') {
    digitalWrite (9, HIGH);
  }
  //Se il carattere letto è 'b' spegne il LED blu
  if (c == 'b') {
    digitalWrite (9, LOW);
  }
  //Se il carattere letto è '0' spegne tutti i LED
  if (c == '0') {
    digitalWrite (13, LOW);
    digitalWrite (12, LOW);
    digitalWrite (11, LOW);
    digitalWrite (10, LOW);
    digitalWrite (9, LOW);
  }
  //Se il carattere letto è '1' accende tutti i LED
  if (c == '1') {
    digitalWrite (13, HIGH);
    digitalWrite (12, HIGH);
    digitalWrite (11, HIGH);
    digitalWrite (10, HIGH);
    digitalWrite (9, HIGH);
  }
} 
 
 

Il circuito 
Di seguito ecco il circuito, anch'esso molto semplice.
In questo caso però vogliamo ricordare che il modulo bluetooth deve essere scollegato quando si invia il programma ad Arduino, poiché in caso contrario occuperebbe la porta seriale impedendo al computer di comunicare con la scheda.
Dopo aver inviato il programma ad Arduino occorre scollegarlo dall'alimentazione, collegare il modulo B/T e ricollegare la scheda ad Arduino.

Ricordiamo anche i pin RX (ricevente) e TX (trasmittente) vanno collegati "ad incrociare", vale a dire RX di Arduino su TX del modulo e TX di Arduino su RX del modulo.



 



















Se il mio lavoro vi è piaciuto commentate e ci diamo appuntamento al prossimo sketch!
Lo staff di elettromatica.blogspot.com