37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器与模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备逐一做做实验,不管能否成功,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 


【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)

实验之三:微波雷达感应开关模块



无意中得到一块RCWL-0516微波雷达传感器模块,也称RCWL-0516多普勒运动模块,或叫做人体感应智能探测器。RCWL-0516模块在芯片中集成了低压调节器,所以它很容易使用,也很容易被拼接到一些小项目中去。

RCWL-0516传感器模块是替代常见的PIR运动传感器的极佳选择,RCWL-0516传感器广泛应用于防盗报警器和安全灯。RCWL-0516传感器与PIR传感器一样,只能检测到探测范围内的物体运动,不能探测到移动物体的黑体辐射。RCWL-0516传感器是采用“微波多普勒雷达”技术来探测移动物体,因此它也被称作多普勒传感器,探测距离范围是7米左右。 当被触发时,它的TTL-level (OUT)针将在2s到3s内从低电平(0V)转换到高电平(3.5V),然后返回到IDLE(低)状态.

模块特性:
电压范围:4–28 VDC
工作频率:  3.2 GHz
发射功率:  20 mW (typical)/30 mW (max)
感应距离:  5–7 m
RCWL-0516微波雷达运动传感器模块引脚图:

CDS —禁用传感器输入(low = disable);VIN — 4~ 28VDC电源输入;OUT — HIGH (3.3 V) 动态侦测/LOW (0 V) 空闲;GND — 地/0 V;3V3 — 调节直流输出 (最大100 mA)。

RCWL-0516传感器模块可以很容易地与许多微控制器一起使用,甚至可以单独使用。它支持4~28 v的电源。输出接口可用于许多任务场景,例如直接驱动一个听觉/视觉指示器,或者与微控制器的连接更深入的对数据进行处理。在运用过程中,RCWL-0516传感器模块的前方不能有任何金属部件。

​实验仿真图

微波雷达感应开关模块检测到人体运动时,触发高电平输出,并延时2-3秒

 

实验三:微波雷达感应开关模块实验逻辑流程图

/*
  【Arduino】37种传感器模块系列实验(3)
    实验三---微波雷达感应开关模块
    源代码
*/
  
void setup()
{
    pinMode(3,INPUT);
    pinMode(13,OUTPUT);
}
  
void loop() {
  if (digitalRead(3)) {
    digitalWrite(13,LOW);
  }
  else {
    digitalWrite(13,HIGH);
    delay(3000);
  }
}

源代码之二

/*
【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
实验三:多普勒微波雷达感应开关模块
GND – [connects to ground]
OUT -[connects to digital input]
VIN – [connects to 5v]
*/
 
#include <VirtualWire.h>
  
#define PIN_RADAR 2
#define PIN_TX 9
#define PIN_LED 13
  
void setup() {
  Serial.begin(9600);
  pinMode(PIN_LED, OUTPUT);
  vw_set_tx_pin(PIN_TX);        // Arduino pin to connect the receiver data pin   
  vw_setup(6000);               // bps connection speed
}
  
int rv = -1;
  
void loop() {
  digitalWrite(PIN_LED, HIGH);
  int v = digitalRead(PIN_RADAR);
  if (v != rv) {
    rv = v;
    char msg[20];
    sprintf(msg, "R %lu %d", millis() / 1000, v);
    vw_send((uint8_t *)msg, strlen(msg));
    Serial.println(msg);
    vw_wait_tx();        // Wait to finish sending the message
  }
  digitalWrite(PIN_LED, LOW);
  delay(100);
}