X-NUCLEO-IKA01A3的磁力传感器得到的强度有x,y,z三个数值,经过测试,变动方向主要会影响数据x,y,而数据z的影响不大,为了找出x,y数值与方向之间的关系,我用开发板做了简易的测试,用量角器固定好南北方向,如下图:
然后每隔10度记录一次x,y的数值,为了让数据更可靠,我记录了两遍完整的数据。
之后在平面直角坐标系中依次将x,y标注好,发现这些数据分布在三、四象限上,正好形成了一个圆形,见下图:
我再按照16个方向测得的数据标注在坐标中(红色),并按照黄色作为各个方向的分界线,最后实现了根据磁力传感器数据用汉字显示方位。下面是显示的部分照片:
下面是根据x,y数值辨别和显示方向的代码:
void display_direction(int x,int y) //根据磁场强度x,y值判断方位,并在固定位置显示汉字
{
LCD_write_BG(45,2,(uint8_t *)" ");
if(y > -225){
if(x < -220)
LCD_write_BG(45,2,(uint8_t *)"北偏东");
else if(x < -150)
LCD_write_BG(45,2,(uint8_t *)"东北");
else if(x < -50)
LCD_write_BG(45,2,(uint8_t *)"东偏北");
else if(x < 55)
LCD_write_BG(45,2,(uint8_t *)"正东");
else if(x < 150)
LCD_write_BG(45,2,(uint8_t *)"东偏南");
else
LCD_write_BG(45,2,(uint8_t *)"东南");
}
else if(y < -510){
if(x < -115)
LCD_write_BG(45,2,(uint8_t *)"西偏北");
else if( x < -25)
LCD_write_BG(45,2,(uint8_t *)"正西");
else if(x < 75)
LCD_write_BG(45,2,(uint8_t *)"西偏南");
else
LCD_write_BG(45,2,(uint8_t *)"西南");
}
else if(y < -420){
if(x > 0)
LCD_write_BG(45,2,(uint8_t *)"南偏西");
else
LCD_write_BG(45,2,(uint8_t *)"西北");
}
else if(x > 0){
if(y > -315)
LCD_write_BG(45,2,(uint8_t *)"南偏东");
else
LCD_write_BG(45,2,(uint8_t *)"正南");
}
else if(y > -330)
LCD_write_BG(45,2,(uint8_t *)"正北");
else
LCD_write_BG(45,2,(uint8_t *)"北偏西");
}
尽管这个实验的实用价值不高,但通过实验可以初步了解磁力传感器。另外由于所处的经纬度不同,可能也会引起数据的变化。
此内容由EEWORLD论坛网友hujj原创,如需转载或用于商业用途需征得作者同意并注明出处