Sensore di parcheggio

Da Wikiversità, l'apprendimento libero.
Jump to navigation Jump to search
laboratorio
laboratorio
Sensore di parcheggio
Tipo di risorsa Tipo: laboratorio
Materia di appartenenza Materia: Sistemi automatici per le superiori 2
Avanzamento Avanzamento: laboratorio completa al 100%

Il progetto che segue è pensato per la realizzazione di un sensore di parcheggio.

Descrizione del progetto[modifica]

Nella galleria vengono mostrati dei sensori di parcheggio, come siamo abituati a vederli quotidianamente.

Cenni teorici[modifica]

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[modifica]

Di seguito lo schema di montaggio

Schema di montaggio realizzato con Tinkercad
Schema di montaggio realizzato con Tinkercad

Il quale utilizza i seguenti componenti:

Componenti
Componente Descrizione Q.tà
Sensore di prossimità Sensore a ultrasuoni HY-SRF04 1
Buzzer Cicalino piezoelettrico 1

Codice[modifica]

Connessione dei vari pin[modifica]

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[modifica]

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[modifica]

  • 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[modifica]

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[modifica]

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.