基于OpenHarmony的智能指南针 Canvas组件+RK3568开发板设计

刘丽红
openharmony 知识体系工作组 电子指南针是现代的一种重要导航工具,大到飞机船舶的导航,小到个人手机导航,电子指南针可以说和咱们生活息息相关,密不可分。为什么电子指南针能指示方向?本 demo 将为你呈现,其中蕴含了人类智慧及大自然的奥妙。 本项目分为数据采集端(设备端)和效果展示端(应用端):
1、指南针数据采集端:使用的是 geek_lite_board 开发板,其内置了三轴磁力计 ak8963,通过解析磁力计数据获得指南针数据信息,操作系统版本为 openatom openharmony 3.0(以下简称“openharmony”);
2、指南针效果展示端:使用的是润和 rk3568 开发板,操作系统版本为 openharmony 3.1 release。
效果展示端则体现了 openharmony js ui、canvas 组件和 napi 的能力:
1、canvas 组件是一个画布组件,获取到画布对象后,可以自定义绘制图形,比如圆形,线条等,本项目中应用端的指南针界面是基于 canvas 组件开发;
2、napl (nativeapi)是 openharmony 标准系统的一种 js api 实现机制,通过 napi 可以实现 js 与 c/c++ 代码互相访问。本项目应用端通过 napi 来接收设备端发出的检测信息。
当设备应用启动之后,运行效果如下动图所示:
一、基本原理
地球是一个大磁体,地球的两个极分别在接近地理南极和地理北极的地方,一般情况下地球的磁场强度在 0.5 高斯左右(高斯是磁场强度单位)。 geek_lite_board 开发板带有 ak8963 三轴磁力计。三轴磁力计能够测出相互垂直的三个方向的磁力大小。通常我们把传感器平放,即让重力方向与传感器垂直,假设重力方向为 z 轴,其余两轴为 x 轴和 y 轴。在只受地球磁场的环境下(忽略其余弱小干扰),x 轴 y 轴检测到的磁力数据的矢量和就等于接收到的地球磁场。 我们利用 x 轴与 y 轴的比值,就能确定目前朝向正北边差多少角度。例如现测到 x 轴数据接近 0.5 高斯,y 轴数据接近 0,就认为目前的 x 轴方向就是正北方。那 x 轴方向是哪个方向?关于 x 轴方向,生产传感器芯片的厂商会预定义好传感器的 x 轴、y 轴及 z 轴方向(通常垂直芯片表面的为 z 轴)。
数据流程
智能指南针整体方案如上图所示,主要由 geek_lite_board 开发板和润和 rk3568 开发板构成,它们采用局域网(路由器)tcp 协议的通信方式。
1. geek_lite_board 开发板通过板载的磁力计获取磁场数据,磁场数据经过处理后得到角度数据;
2. 角度信息通过 esp8266 无线 wi-fi 模块发送到指南针应用端;
3. 指南针应用端通过 napi 接口获取底层网络数据,并在页面展示。
  二、功能实现
指南针数据的获取
geek_lite_board 开发板通过 iic 接口与 ak8963 三轴磁力计通信,读取三轴方向的磁场数据,通过磁场数据计算后得到指南针的方位数据。● ak8963介绍 ak8963是采用高灵敏度霍尔传感器技术,内部集成了检测x、y、z轴的磁传感器、传感器驱动电路、信号放大器和用于处理每个传感器信号的算术电路。同时,还配备了自测功能。其紧凑的封装,还可适用于配备gps的手机的地图导航,实现行人导航等功能。● ak8963测量数据的读取 ak8963 和单片机通过 iic 接口连接,单片机操作 iic 总线按照数据手册的操作时序操作即可读取 ak8963 的数据,ak8963 获取测量数据的函数实现如下:
                                  uint8_t mpu_read_bytes(uint8_t const regaddr, uint8_t *pdata, uint8_t len){ int i = 0; mpu_enable; while (spi_i2s_getflagstatus(spi5, spi_i2s_flag_txe) == reset); spi_i2s_senddata(spi5, regaddr | 0x80); while (spi_i2s_getflagstatus(spi5, spi_i2s_flag_rxne) == reset); spi_i2s_receivedata(spi5); for(i=0; i 调用 mpu_read_bytes 函数获取测量数据,其中 mpu_buff[15] 到 mpu_buff[20] 这六个字节的数据就是磁力计的数据。此时的磁力计数据还不稳定不能直接用来计算指南针的角度,还需要进行滤波处理,此处用到的滤波算法是滑动均值滤波。数据处理代码如下:
                                                                          mpu_read_bytes(mpureg_accel_xout_h, mpu_buff, 28);if(mpu_buff[14] == 1) { // 从 mpu_buff[]中提取磁力数据 mpu_data.mag_x = (mpu_buff[16] << 8) | mpu_buff[15]; mpu_data.mag_y = (mpu_buff[18] << 8) | mpu_buff[17]; mpu_data.mag_z = (mpu_buff[20] << 8) | mpu_buff[19]; // 对x轴方向磁力计数据进行滤波,取滑动平均 for(i=0;i -500 && mpu_data.mag_x < 500) { mag_x_buff[14] = mpu_data.mag_x; } //取平均值 mpu_calc.mag_x = ( mag_x_buff[0] + mag_x_buff[1] + mag_x_buff[2] + mag_x_buff[3] + mag_x_buff[4] + mag_x_buff[5] + mag_x_buff[6] + mag_x_buff[7] + mag_x_buff[8] + mag_x_buff[9] + mag_x_buff[10] + mag_x_buff[11] + mag_x_buff[12] + mag_x_buff[13] + mag_x_buff[14] )/15.0f; // 对y轴方向磁力计数据进行滤波,取滑动平均 for(i=0;i -500 && mpu_data.mag_y { var resultangle = result.angle;                })  
更多 napi 相关知识请参考《标准设备应用开发 native api》视频课程。   https://www.bilibili.com/video/bv1l44y1p7ke/
    应用端代码地址 https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/fa/electronic_compass
设备侧代码地址
https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/dev/team_x/electronic_compass
https://gitee.com/geekros/openharmony_for_stm32f427/tree/master/dev-code
参考文档
【电子指南针】
https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/electronic_compass_fa
https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/electronic_compass_dev
【rk3568指导】
https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld
【geek_lite_board相关网址】
www.geekros.com
丰富多样的 openharmony 开发样例离不开广大合作伙伴和开发者的贡献,如果你也想把自己开发的样例分享出来,欢迎把样例提交到 openharmony 知识体系 sig 仓来。
  如何共建开发样例
https://gitee.com/openharmony-sig/knowledge/blob/master/docs/co-construct_demos/readme_zh.md

51单片机程序执行流程详细分析
戴森放弃电动汽车项目,无法将其商业化
5G即将商用 TD-SCDMA退网已是必然趋势
奥克斯推出的“互联网直卖”模式 让消费者以更优价格买到品质好空调
5G时代区块链手机的应用场景有哪些
基于OpenHarmony的智能指南针 Canvas组件+RK3568开发板设计
频段、信道、信道带宽、传输速率知识科普
制造成本快速下降,Micro LED 显示屏应用日趋广泛
AI观察 | 今年最火的GPT-4,正在缔造科幻版妙手仁心!
除去这些“绊脚石”,Micro LED量产指日可待
车身控制器的作用
请问什么原因导致在匹配正常情况下,插损出现周期性谐振?
苹果启动安全研究设备计划 为安全研究人员提供越狱iPhone
小电流互感器检测电流电路的原理
D类功放IC应用设计散热注意事项,D类放大器散热设计
不对称(CMOS)多谐振荡器
搅拌站维护的苦,不只有厂商懂
七条虚拟现实发展的现状总结
青岛杰生电气宣布深紫外LED产品各项技术指标进一步取得突破 已达到世界先进水平
PADS logic与PADS layout连接步骤记录