平时,我们在军事题材的电影中看到雷达扫描的画面,感觉很酷很炫,实际,对于今天的我们来说这个效果要实现并不是很难,只不过步骤较多而已。所以我们需要一步一步来实现,也就有了我这篇(或者要用几篇的篇幅来实现)《一步一步用arduino与Processing实现雷达扫描》。
整体效果我已经上传到优酷了
首先把我们要实现的步骤简单勾勒一下(我们要制作一个360度的雷达扫描):
一、软件实现
1、绘制雷达表盘
2、增加扫描线
3、实现拖影效果
4、实现目标扫描点显示(渐出效果)
二、硬件实现
1、准备器材(arduino UNO、360度舵机、超声波传感器、扩展板)
2、雷达平台
三、联合调试
1、串口通讯接受数据
2、扫描点的显示函数改造
废话不多说,我们就用Processing来绘制雷达扫描的表盘。实现后的效果如下:
步骤如下
1、我们首先在一个高宽均为600的画布中绘制一个半径为300的圆,并且依次递减半径产生6个同心圆;
2、绘制十字坐标
3、绘制刻度距离
4、绘制扫描线
代码如下:
int offset=10;
float x, y;
float r=300;
float a=0;
float pi=3.141592697932;
void setup()
{
size(600,600);
background(0);
}
void draw()
{
background(0);
x=r*cos(a);
y=r*sin(a);
//绘制扫描线
fill(0,180,0); //设置扫描线颜色
line(width/2, height/2, //扫描线的起点在屏幕中央
width/2+x, height/2+y); //x,y分别是两个方向上的增量
//绘制坐标轴
fill(0,110,0,50); //设置四轴颜色
for(int i=0;i<4;i++)
{
line( width/2, height/2, //扫描线的起点在屏幕中央
width/2+r*cos(i*pi/2), height/2+r*sin(i*pi/2));
}
//同心圆绘制
//fill(0,0,110,2);
stroke(0,110,0);
for(int j=1;j<7;j++)
ellipse(width/2,height/2,
2*50*j,2*50*j);
//刻度标识距离
fill(160,250,160);
for(int ii=0;ii<4;ii++)
{
for(int t=0;t<6;t++)
text(t*50,width/2+t*50*cos(ii*pi/2), height/2+t*50*sin(ii*pi/2));
}
fill(0,180,00);
text("Angle:"+(a/pi)*180,480,580);
//扫描角度变化
a=a+0.0124;
}
这里要注意,扫描线是动态变化的,需要用到cos和sin函数,好在Processing中不需要引入math库,直接可以使用cos和sin,的确很方便。
到现在为止,我们利用Processing完成了第一步,表盘的绘制和简单扫描线的实现。下一篇,我们实现扫描线的拖影效果和模拟扫描点的显示效果。
这里预告一下增加拖影及模拟扫描点的效果: