Sensore di parcheggio
Il progetto che segue è pensato per la realizzazione di un sensore di parcheggio.
Descrizione del progetto
modificaNella galleria vengono mostrati dei sensori di parcheggio, come siamo abituati a vederli quotidianamente.
-
Sensori di parcheggio anteriori
-
Sensori di parcheggio anteriori (dettaglio)
-
Sensore di parcheggio
Cenni teorici
modificaLa velocità del suono nell'aria è pari a alla temperatura ambiente, pari a circa .
Il tempo all'interno della scheda di Arduino, viene espresso in millisecondi. Questo ci servirà per le opportune conversioni.
Volendo esprimere la distanza in si scriverà , dove:
- la divisione per 1.000 serve per la conversione da millisecondi a secondi;
- la moltiplicazione per 100 per la conversione da metri a centimetri;
- la divisione per 2 perché il segnale ha un'andata e un ritorno.
Finalmente, si ha .
Schema di montaggio
modificaDi seguito lo schema di montaggio
Il quale utilizza i seguenti componenti:
Componente | Descrizione | Q.tà |
---|---|---|
Sensore di prossimità | Sensore a ultrasuoni HY-SRF04 | 1 |
Buzzer | Cicalino piezoelettrico | 1 |
Codice
modificaConnessione dei vari pin
modificaCome prima cosa definiamo i pin ai quali colleghiamo il buzzer (o cicalino piezoelettrico) e il sensore ad ultrasuoni (HY-SRF04).
/*
--|SENSORE PARCHEGGIO|--
*/
#define tP 7 //TriggerPort
#define eP 8 //EchoPort
#define B 6 //Buzzer
Parametri del codice
modificaDi seguito vengono definite la distanza massima di lettura del sensore distanzaMax
, la distanza minima del buzzer (se si ha una distanza minore il buzzer farà un suono continuo) dMinb
, la distanza massima del buzzer (a una distanza maggiore il buzzer non suona) dMaxB
, la velocità di trasmissione del monitor seriale (espresso in baud) baud
, infine la velocità del suono (espresso in Chilometri al secondo)VS
.
#define distanzaMax 80 //centimetri
#define dMinB 4 //centimetri
#define dMaxB 70 //centimetri
#define baud 9600
#define VS 0.343
long
è un tipo di dato che può contenere numeri a 32 bit, con segno.
long time;
long durata;
long r;
Input e output
modificatP
è il pin “Trigger”: dice al sensore quando inviare un segnale;eP
è il pin "Echo" che riceve il ritorno del segnale inviato dal sensore (ammesso che vi sia).void setup() { pinMode( tP, OUTPUT ); pinMode( eP, INPUT ); pinMode( B, OUTPUT ); Serial.begin( baud ); Serial.println( "+---------------------+"); Serial.println( "|Sensore di parcheggio|"); Serial.println( "+---------------------+"); }
Programma principale
modificaNel programma principale forniamo ad Arduino tutte le informazioni relative all'esecuzione del programma e tutti i comandi relativi.
La particolarità del void loop è che i comandi vengono ripetuti sempre fino allo spegnimento della macchina.
void loop() {
// Acquisizione della distanza
digitalWrite( tP, LOW );
digitalWrite( tP, HIGH );
delayMicroseconds( 10 );
digitalWrite( tP, LOW );
durata = pulseIn( eP, HIGH );
r = VS * durata / 2;
// Invia i dati acquisiti nel monitor seriale
Serial.print( "Distanza: " );
if( r > distanzaMax ) Serial.println( "Fuori Portata");
else { Serial.print( r ); Serial.println( " cm" );
}
// A seconda della posizione dell'ostacolo produce un
if( r > dMinB && r <= dMaxB){
// Suono intermittente
delay(r*10);
digitalWrite(B, HIGH);
delay(r*10);
}
if( r <= dMinB){
// Suono continuo
digitalWrite(B, HIGH);
delay(1000);
}
// Arresta il buzzer per evitare che suoni anche in assenza di ostacoli
digitalWrite(B, LOW);
delay(10);
}
Espansioni suggerite
modificaNaturalmente, il sensore di prossimità, trova numerose altre applicazioni. A titolo di esempio:
- interruttore quando è presente una persona;
- contapersone (ne occorrono due);
- misuratore di altezze e profondità (come l'acqua in una piscina).
- canestro contapunti.