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
== Descrizione del progetto ==
[[File:HC_SR04_Ultrasonic_sensor_1480322_3_4_HDR_Enhancer.jpg|miniatura|Il sensore a ultrasuoni HC-SR04]]
[[
[[File:Gestione_di_un_telepass_con_Arduino.webm|centro|600x600px]]
Il sistema ha il seguente funzionamento:
# in ingresso
# in uscita si hanno:
##un segnale acustico, generato dal cicalino piezoelettrico;
##un
##un servomotore, per alzare e abbassare la sbarra.
Questo processo ha
# 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 (
# si richiude la sbarra.
Tutti i parametri sono regolabili attraverso le variabili nella prima
Il sensore capta la distanza, convertita in centimetri nel codice, inviando e ricevendo un segnale
{{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
== 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
=== 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>
===
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]]
|