arduino-detector-movimiento-rcwl-0516

Detector de movimiento con Arduino y radar de microondas RCWL-0516

¿Qué es un RCWL-0516?

El RCWL-0516 es un sensor radar de microondas por efecto dopler. Podemos usarlo en solitario, o combinado con un procesador como Arduino, para hacer un detector de movimiento.

El RCWL-0516 es una alternativa a los tradicionales detectores de movimiento infrarrojos PIR. Frente a estos, tiene ciertas diferencias, que serán una ventaja o desventaja en función de las necesidades de nuestro proyecto.

En primer lugar, los sensores PIR necesitan que el objeto que se mueva tenga una diferencia de temperatura respecto al ambiente. Por este motivo, son capaces de detectar personas, pero no objetos moviéndose. Por el contrario, el RCWL-0516 detecta cualquier objeto que se esté moviendo, independientemente de su temperatura.

Por otro lado, los sensores PIR tienen problemas de sensibilidad cuando la temperatura ambiente es alta. El RCWL-0516, por el contrario, no presenta este problema y funcionan correctamente entre -20ºC a 80ºC.

En cuanto alcance de detección, el RCWL-0516 tiene un alcance mayor que los sensores PIR, pudiendo alcanzar fácilmente 5-7 metros de rango.

Finalmente, el RCWL-0516 es omnidireccional, es decir, que detecta el movimiento en 360º. Esto es una diferencia frente a los sensores PIR, que tienen un cierto “ángulo de visión”. Incluso hay versiones de PIR con un haz estrecho, por ejemplo para controlar ventanas o puertas.

Esta falta de direccionalidad del RCWL-0516 puede ser una ventaja frente a los sensores PIR si queremos detectar el movimiento en una sala. O una desventaja, por ejemplo, si queremos detectar únicamente en un pasillo, una puerta, o una ventana.

Estas diferencias hacen que el RCWL-0516 sea un buen complemento o incluso un sustituto a los sensores PIR en sistemas como alarmas, control de iluminación, o detección de presencia.

Por si a alguien le da reparo lo de “microondas”, la potencia de emisión es muy baja y, por supuesto, el RCWL-0516 es completamente seguro de operar para personas y animales.

Precio

Los RCWL-0516 son dispositivos muy baratos. Podemos encontrarlos por 0,40€ en vendedores internacionales de Ebay y Aliexpress.

arduino-RCWL-0516-componente

¿Cómo funciona un RCWL-0516?

EL RCWL-0516 basa su sistema de detección de movimiento en el efecto doppler. Básicamente, un emisor de alta frecuencia emite una onda de 3,2GHz.

Se considera microonda toda onda electromagnética con una frecuencia de entre 0,3GHz y 30 GHz.

Al incidir sobre un objeto en movimiento la onda reflejada cambia su frecuencia. Un receptor recibe la onda reflejada en el objeto, y la combina con la onda emitida.

arduino-RCWL-0516-efecto-doppler

La diferencia entre ambas ondas es filtrada por un filtro de paso bajo, y amplificada por una etapa de transistor.

arduino-RCWL-0516-funcionamiento

El RCWL-0516 opera a 3.3V, pero el módulo dispone de un regulador interno a 3.3V de 100mA. La tensión de alimentación es de 4 a 28V. El consumo energético normal es de 3mA.

La salida del módulo es una señal TTL de 0 a 3.3V. En caso de detección, la salida se pone a HIGH durante un tiempo de 2-3 segundos.

Esquema de montaje

El esquema eléctrico que necesitamos es el siguiente.

arduino-RCWL-0516-conexion

Que, visto desde Arduino quedaría de la siguiente forma.

arduino-rcwl-0516-esquema

Adicionalmente, el módulo incorpora de un pin CDS, que sirve para inhabilitar la salida cuando el pin CDS se pone a LOW.

También existe espacio en la placa para conectar añadir una LDR al módulo, de forma que la detección no funcione cuando hay luz (útil al emplearlo para control de iluminación).

Ejemplos de código

El código necesario para realizar la lectura es simple, y similar a la necesaria para un sensor PIR. Simplemente leemos la salida del RCWL-0516, y hacemos parpadear el LED mientras la señal esté activa.

const int LEDPin = 13;
const int RadarPin = 2;
 
void setup()
{
  pinMode(LEDPin, OUTPUT);
  pinMode(RadarPin, INPUT);
}
 
void loop()
{
  int value= digitalRead(RadarPin);
 
  if (value == HIGH)
  {
    digitalWrite(LEDPin, HIGH);
    delay(50);
    digitalWrite(LEDPin, LOW);
    delay(50);
  }
  else
  {
    digitalWrite(LEDPin, LOW);
  }
}

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full