1、什么是微波传感器
微波传感器是一种利用微波技术进行探测和测量的传感器。
一般来说,微波是波长为1到1000毫米的电磁波。使用微波传感器,在不接触目标物体的情况下,通过检测和分析微波信号的反射、散射等特性,获取目标物体的信息和状态,并实现自动控制、检测、安防、通讯等多种应用。
2、微波传感器是如何工作的
我们通常使用到的微波传感器大多是微波运动传感器,它是基于多普勒雷达原理设计的微波移动物体探测器。根据多普勒效应,传感器发射的电磁波频率和接收到的由被测对象反射回来的电磁波频率不同,即产生频移,对其进行放大和信号处理就可以实现对移动物体的检测。
不同于红外探测器,微波传感器检测的对象将并不局限于人体,还可检测很多其他的事物。微波传感器不容易受环境温度,湿度,气流,尘埃的影响,具有穿透能力强,灵敏度高的特点,被广泛应用于工业、交通及民用装置中,如车辆测速、自动门、感应灯、倒车雷达等。
微波传感器用于工业和汽车雷达应用,并不是如相机一样产生图像。它们是形成一种点云,可以粗略地指示物体的轮廓和周围环境的基础设施。相对于图像,点云有其不可替代的优势——深度,也就是说它直接提供了三维空间的数据。
3、常见的微波传感器的种类
微波传感器按照工作频段分类:主要有C波段、X波段、Ku波段、Ka波段等。频率越高,波长就越短,带来更高分辨率的同时大气衰减也就越严重。
微波传感器依据工作方式来分类:分为连续波微波传感器(即前面提到的感应运动的多普勒效应传感器)、调制微波传感器、常用于检测物体位置以及液体的液面位置。还有一种脉冲式发射微波的传感器,由于需要应用比较昂贵的磁体控制脉冲开关,相对应用较少。
4、微波传感器与红外,超声波以及激光传感器的比较
这是常用的几种传感器的特性比较,包括了微波,红外线,超声,激光四种传感器的各自特点。可以看到微波在多项比较中都有较好的表现,但是在成本方面是红外线和超声传感器比较有优势。
5、微波传感器实验演示
我们来演示使用 MCU 读取显示微波传感器的数据,实验中使用的是一款连续型微波传感器。当周围没有运动物体时,屏幕显示safe,表示安全状态。当检测到物体运动时,屏幕显示warning,表示警告状态。当手在传感器周围移动,可以看到微波传感器可以在很大角度范围内检测到运动物体。
主控板卡:基于RP2040的带屏调试助手
以下是主程序中对于微波传感器数据的获取代码示例:
from breakout_colourlcd240x240 import BreakoutColourLCD240x240
from machine import ADC, Pin, Timer, PWM,I2C
from utime import sleep
import time, math,array
#------------------------------------------------------------------
######################################################################
######################################################################
#初始化
#显示屏
width = BreakoutColourLCD240x240.WIDTH
height = BreakoutColourLCD240x240.HEIGHT
display_buffer = bytearray(width * height*2)
display = BreakoutColourLCD240x240(display_buffer)
alarm_pin = Pin(20,Pin.IN)
global current_temp
current_temp = 0
#-------------------------------------------------------------------
#屏幕基本图形绘制
def display_init():
display.set_pen(0,255,0)
display.rectangle(58,30,13,160)
display.circle(64,190,6)
display.set_pen(255,0,0)
display.text("current", 150, 20, 194, 2)
display.text("status", 150, 35, 194, 2)
display.update()
for i in range(6):
display.set_pen(0,200,0)
display.pixel_span(80,27 + i*30,10)
display.text(str(100 - i *20), 100, 20+i*30, 194, 2)
display.set_pen(0,0,220)
if i < 5:
for j in range(4):
display.pixel_span(80,33 + j*6 + i * 30,5)
display.update()
display.update()
#---------------------------------------------------------------------
def display_change(temp, color):
global current_temp
current_temp = temp
#print(temp)
if temp ==1 :
display.set_pen(color[0], color[1], color[2])
display.rectangle(58,30,13,160)
display.circle(64,190,6)
display.set_pen(0,0,150)
display.rectangle(58,20,13,7+int((50-(0*100)/2)/2)*6)
display.set_pen(0,0,0)
display.rectangle(140,50,100,40)
display.set_pen(0,255,0)
display.text('safe', 140, 50, 5, 5)
display.update()
else :
display.set_pen(255,0,0)
display.rectangle(58,30,13,160)
display.circle(64,190,6)
display.set_pen(0,0,150)
display.rectangle(58,20,13,7+int((50-(1*100)/2)/2)*6)
display.set_pen(0,0,0)
display.rectangle(140,50,100,40)
display.set_pen(255,0,0)
display.text('war', 140, 50, 5, 5)
display.update()
sleep(1)
#----------------------------------------------------------------------
def get_temp():
Analogvalue=stemp.read_u16()
voltage=(81-100*float(Analogvalue)/65535)
return voltage
def main():
global current_temp
color = [0,255,0]
timer1 = Timer()
#基本图形绘制
display_init()
#timer1初始化
timer1.init(freq=100,mode=Timer.PERIODIC, callback=lambda t:display_change(alarm_pin.value(), color))
while True:
# print(alarm_pin.value())
sleep(0.01)
main()