¿Quieres un sensor de aparcamiento? Arduino te asiste

Publicado por Loli Diéguez en

Los sensores de aparcamiento son muy comunes hoy en día y se pueden ver en casi todos los coches modernos y en el artículo de hoy os muestro como podemos construirnos uno de estos sensores con una placa Arduino.

Detallaré la conexión entre los componentes y el código necesario para que funcione.

Cómo funciona realmente el sensor ultrasónico Arduino

Croquis distancia del coche con distancias

Para medir distancias con Arduino podemos hacerlo de diferentes formas. Está el sensor de infrarrojos, que utiliza las propiedades de la luz para calcular la distancia.

Y también está el sensor ultrasónico Arduino, que utiliza las propiedades de la propagación del sonido para medir distancias. Más específicamente usa ultrasonido. Estos tipos de ondas sonoras están por encima del espectro audible para los humanos.

El funcionamiento es muy sencillo. El sensor envía una onda ultrasónica a través del disparador, rebota en el objeto y el receptor detecta la onda que el objeto retorna.

Sabiendo cuánto tiempo ha tardado en viajar esta onda, podemos conocer la distancia, solo necesitas usar la famosa fórmula de la velocidad:

formula de video

Donde v es la velocidad, d es la distancia y t es el tiempo. Si despejamos el espacio (d), quedaría de la siguiente manera:

d = v t

El valor de la velocidad lo conocemos porque el sonido viaja a 343 m/s. El sensor ultrasónico de Arduino nos devolverá el tiempo a través de la API de Arduino.

Con todo esto podemos calcular la distancia a un objeto.  La velocidad del sonido es de 343 m / s a una temperatura de 20º C. La velocidad aumenta o disminuye 0,6 m / s por grado centígrado. Podemos ser más exactos si usamos un sensor de temperatura como el LM35.

Sensor de temperatura

Por tanto, es importante conocer las frecuencias del espectro audible. Solo debemos quedarnos con el rango de frecuencia de 20 Hz (hercios) a 20 kHz (kilohercios).

Alrededor de los 20 Hz, el sonido es muy bajo. A medida que subimos la frecuencia, el sonido se vuelve cada vez más nítido. Esto nos servirá para avisarnos de que nos estamos acercando a un obstáculo al aparcar.

Tampoco podemos esperar un sistema de alta fidelidad con un zumbador Arduino, pero nos da la capacidad de generar tonos audibles para alarmas e incluso alguna melodía musical fácilmente reconocible. 

Sistema de alerta con LED

Finalmente, incorporamos el sistema de alerta visual para el sensor ultrasónico Arduino. Esto nos permitirá visualizar si estamos cerca o lejos de un obstáculo. Con 3 LEDs (verde, amarillo y rojo) podemos determinar si estamos lejos, cerca o en una zona de peligro.

Componentes necesarios

Listado del material necesario para realizar este proyecto:

  1. Arduino UNO
  2. Placa prototipos
  3. Cables para hacer conexiones
  4. 3 resistencias de 220 Ω
  5. 1 LED verde
  6. 1 LED amarillo
  7. 1 LED rojo
  8. 1 sensor ultrasónico Arduino (HC-SR04)
  9. 1 zumbador para Arduino

Es un circuito muy sencillo. Por un lado tendremos todas las alertas, acústicas y visuales, y por otro lado el sensor de ultrasonidos. En el siguiente diagrama se puede observar la conexión.

Diseño del esquema

Cosas a tener en cuenta

Las resistencias son de 220 Ω y están colocadas en serie con los LED. El sensor ultrasónico Arduino se conecta a dos pines digitales, uno para el disparador y otro para el receptor.

El zumbador Arduino se conecta a una salida PWM. Intenta colocar el sensor ultrasónico Arduino lo más cerca posible del borde de la placa de pruebas para que no te dé lecturas erróneas porque la señal coche con la propia placa de prototipos

Programación del sensor ultrasónico Arduino para medir la distancia

Comencemos con la parte de programación. Antes de meternos con el código analizaremos lo que tenemos que conseguir, así entenderemos mejor el código.

El sistema de estacionamiento consiste en detectar un objeto a través del sensor ultrasónico y avisar con señales luminosas y sonoras.

Por tanto, ya tenemos el primer problema, detectar el obstáculo y alerta con sonido y luces.

Umbral 1: se encuentra en la zona verde de 30 cm a 20 cm.

Umbral 2: se encuentra en la zona amarilla, de 20 cm a 10 cm.

Umbral 3: está en la zona roja, menos de 10 cm. 

Recuerda que el sensor de que vamos a usar de Arduino tiene un rango de detección que normalmente oscila entre 2 cm y 400 cm.

Código

 

// Declaracion de pines

#define LEDGREEN 2

#define LEDYELLOW 3

#define LEDRED 4

#define TRIGGER 5

#define ECHO 6

#define BUZZER 9

// Declaracion de constantes

const float sound = 34300.0; // Velocidad del sonido en cm/s

const float threshold 1 = 30.0;

const float threshold 2 = 20.0;

const float threshold 3 = 10.0;

void setup() {

  // inicia el circuito

  Serial.begin(9600);

  // definición del funcionamiento de pines

  pinMode(LEDGREEN, OUTPUT);

  pinMode(LEDYELLOW, OUTPUT);

  pinMode(LEDRED, OUTPUT);

  pinMode(ECHO, INPUT);

  pinMode(TRIGGER, OUTPUT);

  pinMode(BUZZER, OUTPUT);

  // Apagar los LEDs

  turnoffLEDs();

}

void loop() {

  // Preparar el sensor de sonido

  initiateTrigger();

  // Lee la distancia

  float distance = calculatedistance ();

  // Apaga LEDs

  turnoffLEDs();

  // Alerta si la distancia esta dentro de zona de alerta

  if (distance < threshold 1)

  {

    // lanza alertas

    alerts(distance);

  }

}

// Apaga LEDs

void turnoffLEDs()

{

  // Apaga Leds

  digitalWrite(LEDGREEN, LOW);

  digitalWrite(LEDYELLO, LOW);

  digitalWrite(LEDRED, LOW);

}

 

void alerts (float distance)

{

  if (distance < threshold 1 && distance >= threshold 2)

  {

// Enciende Led Verde

    digitalWrite(LEDGREEN, HIGH);

    tone(BUZZER, 2000, 200);

  }

  else if (distance < threshold2 && threshold > threshold3)

  {

    // Enciende Led amarillo

    digitalWrite(LEDYELLOW, HIGH);

    tone(BUZZER, 2500, 200);

  }

  else if (distance <= threshold3)

  {

    // Enciende Led rojo

    digitalWrite(LEDRED, HIGH);

    tone(BUZZER, 3000, 200);

  }

}

// Calcula distancia al objeto

float calculatedistance()

{

  unsigned long time = pulseIn(ECHO, HIGH);

  float distance = time* 0.000001 * sound / 2.0;

  Serial.print(distance);

  Serial.print(“cm”);

  Serial.println();

  delay(500);

  return distance;

}

 void initiateTrigger()

{

  digitalWrite(TRIGGER, LOW);

  delayMicroseconds(2);

  digitalWrite(TRIGGER, HIGH);

  delayMicroseconds(10);

  digitalWrite(TRIGGER, LOW);

}

 Sigue leyendo más en estos enlaces.


Compartir esta publicación



← Publicación más antigua Publicación más reciente →