Sensor de aparcamiento con Arduino

Sigo con Arduino, y esta vez realizando un sensor de aparcamiento por ultrasonidos, con un Arduino UNO, un sensor HC-SR04 y un altavoz para señal acústica.
Antes que nada, como siempre una pequeña explicación extraída de la Wikipedia, sobre el principal elemento de este proyecto:

¿Qué son los ultrasonidos?
Un ultrasonido es una onda acústica o sonora cuya frecuencia está por encima del espectro audible del oído humano (aproximadamente 20.000 Hz).
Sabiendo esto, veamos como es y como funciona el sensor utilizado:

El sensor HC-SR04 y su funcionamiento
Como componente principal del proyecto, utilizaré un sensor de ultrasonidos HC-SR04. Este sensor contiene un emisor y un receptor de ondas de ultrasonidos, y funciona a modo de sonar, de tal forma que el emisor lanza un tren de pulsos ultrasónicos – de 40 kHz en este caso  – y el receptor espera el «eco» de dicho tren de pulsos en algún objeto.

En el datasheet del sensor podemos ver que la distancia medida es proporcional a la amplitud del eco de la señal enviada, y para calcular dicha distancia, nos remitimos a la formula «Distancia = Velocidad x Tiempo».

Sigue leyendo!

Si tenemos en cuenta que la velocidad del sonido a temperatura ambiente (20º) es de:
343 m/s o 34300 cm/s, podemos calcular que las ondas tardan en recorrer 1 centímetro:
1 centímetro = 1 segundo / 34300 = 29,15 uS

Sabiendo que la onda tarda 29,15 uS en recorrer 1 cm, y que el sensor nos dará el tiempo de la señal desde que es enviada hasta que el receptor captura su eco, calculamos la distancia de la siguiente manera: «Distancia en cm = (tiempo de la señal / 29,15 uS) / 2 »

La división por 2 se debe a que la señal desde que es enviada por el emisor, recorre la distancia hasta el objeto, y vuelve por el mismo camino hasta el receptor como se puede ver en la siguiente imagen, de modo que la onda recorre 2 veces el mismo camino, por lo que si no realizamos esta operación, la distancia resultante en centímetros sería el doble de la que hay realmente entre el sensor y el objeto.


Para nuestra suerte, existen librerías para Arduino y PIC que realizan estos cálculos por nosotros, y nos dejan la simple tarea de hacer una llamada a una función que nos dará el valor de la distancia lista para utilizar en nuestro proyecto.

Sabiendo como funciona el sensor me he puesto a programar un sensor de aparcamiento.

El funcionamiento de un sensor de aparcamiento es muy sencillo, simplemente se basa en un sensor colocado en la parte trasera de un coche que se activa en el momento en que se mete la marcha atrás, que mide la distancia que hay entre nuestro coche y el objeto que esté detrás (otro coche o una pared), y mediante una señal acústica nos va indicando.

La frecuencia de la señal acústica irá en aumento a medida que se reduce la distancia con el objeto y a una mínima distancia, la señal acústica es continua. Si la distancia aumenta, la frecuencia de la señal acústica aumentará hasta una distancia máxima.

El proyecto consta de varios componentes como es una placa Arduino UNO, un Sensor HC-SR04 y un Altavoz 8Ω  con su resistencia 120Ω,  la forma de conectarlos es la siguiente:

El código de programación de la placa Arduino es muy simple, aunque consta de varias librerías para el control del sensor HC-SR04 y una librería de sonidos.
Los archivos son los siguientes:

– Código programa «Sensor de Aparcamiento» : SensorParking.pde
– Librería Sensor HC-SR04: Ultrasonic.cppUltrasonic.h
– Librería Sonidos: Pitches.h

Y conectado y programado… a funcionar!

😀

106 comentarios en “Sensor de aparcamiento con Arduino

    • Hola. Si no me equivoco, con silicona normal se puede hacer un aislamiento perfecto, ya que una vez seca, es impermeable y es aislante.

  1. hola es muy interesante el proyecto…
    me gustaria realizar este proyecto pero necesito el codigo. el link del codigo no funciona.

    quien me puede facilitar..

    mi corrreo es: capry.13@live.com.mx

    compartamelo graciassss….

  2. Hola

    En primer lugar gracias por el blog

    En segundo lugar, he hecho mi propia versión de esta aplicación. He creado un programa para un sensor, y luego otro para dos sensores.
    Para el sonido, en lugar de implementar una librería, que no he podido instalar, utilizo tone.
    Luego, he programado que en función de la distancia varíe la frecuencia del pitido (menos distancia, más frecuencia)

    Programa un sensor:
    Salida audio pin 7
    trig sonar pin 5
    echo sonar pin 6

    //Sensor d’aparcament por ultrasons
    //Sonar + Senyal acustica d’avis

    #include
    Ultrasonic ultrasonic(5,6); // (Trig PIN,Echo PIN)

    int w,s; // definir variables w i s
    int sonar;

    void setup() {
    pinMode(13, OUTPUT); //es defineix pin 13 com a sortida
    Serial.begin(9600);
    }

    void loop()
    {
    s=7; //es defineix sortida d’audio
    w=(ultrasonic.Ranging(CM))*20; // es defineix el delay entre tons quan es detecta vehicle posterior, amb 20 vegades la distncia en centmetres
    noTone(s);

    Serial.print(ultrasonic.Ranging(CM)); // CM or INC
    sonar = ultrasonic.Ranging(CM);
    if (sonar<50) // si la distncia s menor a 50 cm, sona audio
    {

    digitalWrite(13, HIGH); // canvia el LED a ON (HIGH is the voltage level)
    tone(s,440,31);delay(w); // s'activa la sortida d'audio a la freqencia definida (440Hz), i amb la duracio establerta (31ms)
    }
    else
    {
    digitalWrite(13, LOW); // canvia el LED a OFF by making the voltage LOW
    noTone(s);
    }
    }

    Y esta la versión de dos sensores
    Salida audio pin 7
    trig sonarL pin 5
    echo sonarL pin 6
    trig sonarR pin 9
    echo sonarR pin 8

    //Sensor d'aparcament por ultrasons
    //2 x Sonar + Senyal acustica d'avis

    #include
    Ultrasonic ultrasonicL(9,8); // (Trig PIN,Echo PIN)
    Ultrasonic ultrasonicR(5,6); // (Trig PIN,Echo PIN)

    int v,w,s; // definir variables v, w i s
    int sonarL,sonarR;

    void setup() {
    pinMode(13, OUTPUT); //es defineix pin 13 com a sortida
    Serial.begin(9600);

    }

    void loop()
    {
    s=7; //es defineix sortida d’audio
    v=(ultrasonicL.Ranging(CM))*15; // es defineix el delay entre tons quan es detecta vehicle posterior, amb 20 vegades la distncia en centmetres
    w=(ultrasonicR.Ranging(CM))*15; // es defineix el delay entre tons quan es detecta vehicle posterior, amb 20 vegades la distncia en centmetres
    noTone(s);

    Serial.print(ultrasonicL.Ranging(CM)); // CM or INC
    Serial.print(ultrasonicR.Ranging(CM)); // CM or INC
    sonarL = ultrasonicL.Ranging(CM);
    sonarR = ultrasonicR.Ranging(CM);
    if (sonarL<50 && sonarL<sonarR) // si la distncia s menor a 50 cm, sona audio
    {
    digitalWrite(13, HIGH); // canvia el LED a ON (HIGH is the voltage level)
    tone(s,440,31);delay(v); // s'activa la sortida d'audio a la freqencia definida (440Hz), i amb la duracio establerta (31ms)
    }
    else if (sonarR<50 && sonarR<sonarL) // si la distncia s menor a 50 cm, sona audio
    {
    digitalWrite(13, HIGH); // canvia el LED a ON (HIGH is the voltage level)
    tone(s,440,31);delay(w); // s'activa la sortida d'audio a la freqencia definida (440Hz), i amb la duracio establerta (31ms)
    }
    else
    {
    digitalWrite(13, LOW); // canvia el LED a OFF by making the voltage LOW
    noTone(s);
    }
    }

Deja un comentario!