基于Atmega128L单片机控制的声音监测与无线定位系统
void display()
{
outChinese(0x80,1,Place_show+0*2);
outChinese(0x81,1,Place_show+1*2);
outChinese(0x82,1,Place_show+2*2);
outChinese(0x83,1,Place_show+3*2);
outChinese(0x84,1,Place_show+4*2);
outChinese(0x85,1,Place_show+5*2);
outchar(0x90,1,Digits+soures[0]/10);
outchar(0x91,1,Digits+soures[0]%10);
outchar(0x92,1,Digits+soures[1]/10);
outchar(0x93,1,Digits+soures[1]%10);
outchar(0x94,1,Digits+soures[2]/10);
outchar(0x95,1,Digits+soures[2]%10);
outchar(0x96,1,Digits+soures[3]/10);
outchar(0x97,1,Digits+soures[3]%10);
outchar(0x88,1,Digits+soures[4]/10);
outchar(0x89,1,Digits+soures[4]%10);
outchar(0x8A,1,Digits+soures[5]/10);
outchar(0x8B,1,Digits+soures[5]%10);
outchar(0x8C,1,Digits+soures[6]/10);
outchar(0x8D,1,Digits+soures[6]%10);
outchar(0x8E,1,Digits+soures[7]/10);
outchar(0x8F,1,Digits+soures[7]%10);
}
8.定位算法
采用三点定位的方法,只需测出两个时间差即可。通过时间差及相应的几何公式可以轻易的推导出X、Y坐标。 设变量: OA=a1;OB=b1;OC=c1;
可得等式:
X^2+Y^2=b1^2; (1)
(600-X)^2+Y^2=c1^2; (2)
(300-Y)^2+X^2=a1^2; (3)
通过解方程,算出X、Y坐标值:
X=(b1^2-a1^2+4500)/80
Y=(b1^2-c1^2+3000)/120
为了使定位结果更加精确,可在软件编写过程中让单片机测量多次。然后取其平均值,作为最后结果输出。这样可以不仅提高测试结果的精确度同时也避免了结果的偶然误差。程序主流程图如图9所示。

图9
9.测试方案与结果分析
测试方法与仪器
声源定位测试方法:将声源放在坐标纸上的任意坐标,不让声源发声,记下坐标值(x0,y0)。然后启动声源,让声源发出1s左右的声音信号,同时单片机接收信号后开始进行计算,计算出的坐标值(x1,y1)通过LCD显示频显示出来。
测试数据完整性
声音定位数据
数组 声源坐标(x,y) 测量坐标(x,y) 误差
1 50,50 49,48 3%
2 120,120 118,118 1.6%
3 200,250 217,252 1.1%
评论