Introducción
Los sensores ultrasónicos miden la distancia a los objetos emitiendo ondas y midiendo el tiempo que transcurre entre la emisión y la recepción de la onda. En este artículo aprenderás a construir un detector de movimiento con este sensor.
Requisitos
- M-Duino PLC >>
- Fuente de alimentación >>
- Sensor ultrasónico HC-SR04
Montaje del detector
Lo primero es conectar el sensor al PLC como indica la tabla siguiente. Como el HC-SR04 tiene 4 pines, harán falta 4 cables.
| HC-SR04 | M-Duino PLC |
| Vcc | 5V |
| GND | GND |
| Trig | Pin 3 |
| Echo | Pin 2 |
Comprueba que los interruptores situados tras las conexiones permiten el acceso al Pin 2 y al Pin 3.
Una vez conectado el sensor, ya puedes cargar el programa en el PLC. El código que hay que subir es el siguiente:
#define threshold 200
bool cooldown = false;
const int E = 2;
const int T = 3;
void setup() {
Serial.begin(9600);
pinMode(T, OUTPUT);
pinMode(E, INPUT);
digitalWrite(2, LOW);
}
void loop() {
long t;
long d;
digitalWrite(T, HIGH);
delayMicroseconds(10);
digitalWrite(T, LOW);
t = pulseIn(E, HIGH);
d = t / 59;
if (d > threshold ) {
cooldown = false;
digitalWrite(Q0_0, LOW);
}
else if (d <= threshold and !cooldown) {
Serial.print("Someone passed at "); Serial.print(d); Serial.println(" cm");
digitalWrite(Q0_0, HIGH);
cooldown = true;
}
delay(60);
}
Las primeras líneas definen dónde están conectados los pines Trigger y Echo (pines 2 y 3). El valor threshold es la distancia límite a la que el sensor detecta movimiento: si algo se mueve a una distancia inferior a ese valor, el detector lo advierte. Después se inicializan el puerto serie y los modos de los pines del sensor.
En la función loop se envía un pulso de 10 microsegundos desde el pin Trigger y, con la función pulseIn(), el pin Echo mide exactamente cuánto tiempo ha pasado desde que se emitió el pulso. Con ese tiempo se calcula la distancia a partir de la fórmula v = d / t, tomando v como 340 m/s (velocidad del sonido en el aire). Al pasarlo a cm/us, la distancia al objeto es igual al tiempo medido con pulseIn() dividido entre 29,5. Como el tiempo que recibe el pin Echo es el de ida y vuelta de la onda, hay que dividir el resultado entre 2. La fórmula final es la siguiente:
d (cm) = t (us) / (2*29,5) = t (us) / 59
Una vez conocida la distancia al objeto, una sentencia if decide si es menor que el valor threshold. En ese caso se muestra un mensaje y se enciende un LED. Para evitar mensajes repetidos si el objeto permanece delante del sensor, el código incluye una variable cooldown que solo permite nuevos mensajes cuando el objeto que activó el sensor ya ha pasado.