Gestione di un telepass con Arduino: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
laboratorio e altre correzioni
Etichetta: Editor wikitesto 2017
Revisione del progetto
 
Riga 1:
{{Risorsa|tipo=laboratorio|materia1=Sistemi automatici per le superiori 1|avanzamento=100%|dipartimento1=Scuole}}
 
In questa lezione si mostrerà come, tramite la scheda [[w:Arduino|Arduino]], sia possibile ricostruire il funzionamento di un ipotetico [[w:Telepass|telepass]] autostradale, tramite la scheda [[w:Arduino|Arduino]], con l'utilizzo di un sensore ad ultrasuoni, un cicalino piezoelettrica per la segnaletica acustica, un monitor per la messaggistica e un servomotore per alzare e abbassare la sbarra.
 
== Descrizione del progetto ==
[[File:HC_SR04_Ultrasonic_sensor_1480322_3_4_HDR_Enhancer.jpg|miniatura|Il sensore a ultrasuoni HC-SR04]]
[[File:16x2_LCD_Display_(cropped).jpg|link=https://it.wikiversity.org/wiki/File:16x2_LCD_Display_(cropped).jpg|miniatura|Display 16 linee x 2 righe]]
[[File:Gestione_di_un_telepass_con_Arduino.webm|centro|600x600px]]
Il sistema ha il seguente funzionamento:
 
# in ingresso si trova il sensore di prossimità, il quale rileva la distanza dell'oggetto davantidi fronte a lui, distanza che poi verrà convertita in centimetri;
# in uscita si hanno:
##un segnale acustico, generato dal cicalino piezoelettrico;
##un segnale visivotesto, generato dal display LCD 16x2;
##un servomotore, per alzare e abbassare la sbarra.
 
Questo processo ha inizioil suo avvio quando il sensore a ultrasuoni rileva un valore al di sotto di un livello stabilito dall'utente. A questo punto si eseguono i seguenti eventi:
 
# si scrive "''Benvenuti a Riccione''" nel display;
# il cicalino produce un suono (<math>800~\text{Hz}</math>) per un breve istante;
# il servomotore alza la sbarra alla velocità scelta dall'utente;
# si attende il passaggio dell'autoveicolo;
# si scrive "''Arrivederci''" nel display;
# il cicalino produce un suono (a una differente frequenza<math>700~\text{Hz}</math>) per un breve istante;
# si richiude la sbarra.
 
Tutti i parametri sono regolabili attraverso le variabili nella prima partesezione del codice.
 
Il sensore capta la distanza, convertita in centimetri nel codice, inviando e ricevendo un segnale ada ultrasuoni.
 
{{Vedi anche|Misurazione della distanza con sensore a ultrasuoni}}
 
Se il segnale è minore o uguale a un valore stabilito (distanza massima del veicolo dal telepass), Arduino attiva il cicalino piezoelettricapiezoelettrico, lail quale riproduce un segnale acustico dila cui tonalità è regolabile; invece, alnel display LCD 16x2 sul quale viene inviato un messaggio analogo a quello autostradale (''Arrivederci'' o ''Benvenuti''); mentre il servomotore viene utilizzato per alzare e abbassare una sbarra (quella visibile nel video è stata realizzata con una cannuccia).
 
== Schema di montaggio ==
Line 71 ⟶ 72:
# inclusione delle librerie, definizione delle costanti e variabili;
# codice da eseguire all'avvio del programma e alla pressione del tasto di reset;
# programma verodi e propriocontrollo.
 
=== Librerie, costanti e variabili ===
Line 82 ⟶ 83:
Servo servo; // Nome del servomotore
 
int attesasbarra = 1500;
int velocitaservo = 10;
int angolosbarra = 90;
int pos = 0; // Posizione iniziale del servomotore
 
int piezo = 7; // Pin a cui è collegata al cicalino
int duratasuono = 300;
int tonalita = 800;
int tonalita2 = 700;
const int trig_pin = 9; // Pin TRIG del sensore a ultrasuoni
Line 96 ⟶ 97:
int larghezzacarr = 10; // Distanza in cm per il quale la sbarra si alzerà
 
int scritta1 = "Benvenuti a";
int scritta2 = "Riccione";
int messaggio = "Arrivederci";
int freqdiagg = 500;
Line 105 ⟶ 106:
</syntaxhighlight>
 
=== SetupInizializzazione ===
Inizializzazione del progetto, dove vengono identificate le uscite e le entrate di Arduino verso i vari componenti, e si inizializza il display e il servomotore.
<syntaxhighlight lang="arduino" line="1" start="30">
void setup() {
Serial.begin(9600); // Inizializzazione della porta seriale
 
lcd.begin(16, 2); // Setup schermo LCD, con colonne e righe
lcd.print(scritta1); // Scritta iniziale, "Benvenuti a Riccione"
lcd.setCursor(0, 1);
lcd.print(scritta2);
 
servo.attach(pin_servo); // Identificazione pin servo motore
servo.write(0); // Ritorno alla posizione iniziale
 
pinMode(trig_pin, OUTPUT); // Setup del sensore di prossimita'
pinMode(echo_pin, INPUT);
 
pinMode(piezo, OUTPUT); // Setup del pin per il cicalino
}
</syntaxhighlight>
Line 129 ⟶ 130:
<syntaxhighlight lang="arduino" line="1" start="47">
void loop() {
long durata, distanza;
 
digitalWrite(trig_pin, LOW); // Inizzializzazione del sensore a ultrasuoni
delayMicroseconds(2);
digitalWrite(trig_pin, HIGH);
delayMicroseconds(10);
digitalWrite(trig_pin, LOW);
durata = pulseIn(echo_pin,HIGH);
 
distanza = durata / 29.1 / 2 ; // Conversione della durata in cm (distanza)
 
if (distanza <= larghezzacarr){ // Se la distanza è minore uguale del parametro atteso
Serial.println("OK"); // Scrive OK sul monitor seriale (in fase di test)
 
lcd.clear(); // Cancella il monitor LCD e scrive "Arrivederci"
lcd.print(messaggio);
 
tone(piezo, tonalita); // Suona il cicalino per la durata prestabilita
delay(duratasuono);
noTone(piezo);
// Alza la sbarra
for( int i = 0; i < angolosbarra; i++){
servo.write(i);
delay (velocitaservo);
}
delay (attesasbarra);
tone(piezo, tonalita2); // Suona il cicalino per la durata prestabilita
delay(duratasuono);
noTone(piezo);
 
// Abbassa la sbarra
for(int i = (angolosbarra - 1) ; i>= 0; i--){
servo.write(i);
delay (velocitaservo);
}
 
lcd.clear();
 
lcd.print(scritta1); // Riscrive "Benvenuti a Riccione"
lcd.setCursor(0,1);
lcd.print(scritta2);
}
}
else { // Altrimenti
Serial.print(distanza); // Scrive sul monitor seriale la distanza in cm (test)
Serial.println(" cm");
Serial.println();
}
}
delay(freqdiagg);
}
</syntaxhighlight>
 
== Espansioni suggerite ==
Una possibile espansione di questo progetto è il conteggio delle automobili in ingresso (utile per un parcheggio, zone a traffico limitato e altro).

Un'altra - che richiede una sensoristica ulteriore - è il riconoscimento delle automobili autorizzate (possibile con sensore [[w:RFID|RFID]]).
 
[[Categoria:Arduino]]