Sensore di parcheggio
Il progetto che segue è pensato per la realizzazione di un sensore di parcheggio.
Descrizione del progetto
Nella 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
La 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
Di 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
Connessione dei vari pin
Come 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
Di 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
tPè 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
Nel 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
Naturalmente, 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.