资讯详情

基于OpenHarmony的智能金属探测器

一、简介

二、运行效果

三、功能实现

四、总结

五、参考链接


基于智能金属探测器的智能金属探测器 OpenAtom OpenHarmony(以下简称(以下简称OpenHarmony操作系统,利用电磁感应原理探测周围的金属物体。该示例采用多设备协作的方式,兼容性 OpenHarmony 设备开发反映了设备开发和应用开发 OpenHarmony 的 NAPI、eTS UI、UI 管理状态 @state 和音频播放等技术特性。

本项目由 Geek_Lite_Board 和润和开发板 RK3568 开发板构成,Geek_Lite_Board 开发板主控芯片为 STM32F427IIH6.用于检测设备端磁场强度的变化 OpenHarmony 3.0 LTS 版本。润和 RK3568 开发板采用瑞芯微 RK3568 芯片用作显示金属探测信息的应用端 OpenHarmony 3.1 Release 版本。

当周围的金属靠近时,设备端的蜂鸣器会发出警报并通过检测信息 Wi-Fi 模块发送到应用程序端。在应用程序端收到检测信息后,检测状态将通过屏幕显示,检测结果将通过语音播。

Geek_Lite_Board 开发板通过 AK8963 获得地球磁场强度的电子罗盘芯片。通常地球的磁场强度是 0.4-0.6 当金属靠近电子罗盘芯片时,根据电磁感应原理,磁场中金属的感应会引起磁场信号的变化。Geek_Lite_Board 开发板通过 Wi-Fi 与润和 RK3568 实时通信开发板,实时上传检测到的信息。润和 RK3568 以方舟开发框架为应用端的开发板(ArkUI)基于 eTS 通过扩展声明开发范式编写页面, NAPI 接口接收设备端 Geek_Lite_Board 使用开发板的检测信息 OpenHarmony 语音广播金属检测状态是媒体子系统中的音频播放功能。

AK8963 三轴电子罗盘集成芯片具有高灵敏度霍尔传感器技术,内部包含磁性传感器,可用于 x 轴、y 轴、z 地球磁场强度的轴检测。

● 通过Mpu_Read_Bytes()函数读取芯片数据寄存器的值。

uint8_t Mpu_Read_Bytes(uint8_t const regAddr, uint8_t *pData, uint8_t len)

● 获取 AK8963 磁场原始数据。

Mpu_Data.mag_x = (MPU_BUFF[16] << 8) | MPU_BUFF[15]; // x轴磁场数据 Mpu_Data.mag_y = (MPU_BUFF[18] << 8) | MPU_BUFF[17]; // y轴磁场数据 Mpu_Data.mag_z = (MPU_BUFF[20] << 8) | MPU_BUFF[19]; // z轴磁场数据

● 对 AK8963 转换原始磁场数据,获得单位高斯的磁场强度。

Gauss_Mag_z = Mpu_Calc.mag_z * 0.15f * 0.01f;

首先采集 100 组 z 轴磁场强度基准数据,然后对这些数据做平均处理,由此得到 z 轴磁场强度的零点数据。

const uint16_t calibrateCount = 1000; // 最大测量次数为1000 const uint16_t calibrateFrequency = 5; // 每5次测量一次有效值 const uint16_t calibrateAverageCount = 100; // 取100次有效值 if(i < calibrateCount){ 
            i++;  if(i%calibrateFrequency == calibrateFrequency){ 
            Mag_z_buff[j++] = Gauss_Mag_z;  if(j >= calibrateAverageCount){ 
            i = calibrateCount;  Mag_z_Flag = true;  for(k=0;k<calibrateAverageCount;k++){ 
            origin_mag_z += Mag_z_buff[k];  }  origin_mag_z = origin_mag_z / calibrateAverageCount;  // 校准完成,蓝灯亮,发送给应用端 "CalibrateOK"  BLUE_LED_ON();  memset(buff,0x00,sizeof(buff));  sprintf(buff,"angle:%s","CalibrateOK");  ESP8266_send_data(buff,strlen(buff));  }  } }

以  origin_mag_z  作为零点,把获取到的磁场数据与它进行对比,以此来判断是否检测到金属。

NAPI(Native API)是  OpenHarmony  标准系统的一种 JS API 实现机制,适合封装 IO、CPU 密集型、OS 底层等能力并对外暴露 JS 接口,通过 NAPI 可以实现 JS 与 C/C++ 代码互相访问。润和 RK3568 应用端通过 NAPI 来接受设备端发出的检测信息。

● 底层 NAPI 模块封装

封装模块名为 tcpserverapi,下载至 tcpservermodule 文件夹。

下载完成后放到 3.1Release 源码根目录,并配置编译脚本;第一次编译完成需要烧写整个镜像,后面修改模块源码,只需将库 send 到板子里面。命令如下:

// 先挂载,再send hdc_std shell mount -oremount,rw /  hdc_std file send libtcpserverapi.z.so system/lib/module/libtcpserverapi.z.so

● 应用端导入 NAPI 模块

import tcpserverapi from '@ohos.tcpserverapi'

● 应用端 NAPI 接口调用

// 调用initServer接口 初始化 TCP 服务器 tcpserverapi.initServer()  // 调用recvMsg 获取并解析Geek_Lite_Board开发板发送过来的角度 tcpserverapi.recvMsg().then((result) => {   var resultAngle = result.angle; })

如上图所示为检测中页面,整体布局分为文字标题和检测状态示意图。

文字标题由 Flex 布局容器 text 组件实现,用于呈现一段信息,如下为 text 接口相关属性。

● 检测状态示意图包括页面背景图,检测状态图,检测结果说明文字,具体功能由 Flex 弹性布局组件实现。接口原型如下所示:

Flex(options?: { direction?: FlexDirection, wrap?: FlexWrap, justifyContent?: FlexAlign, alignItems?: ItemAlign, alignContent?: FlexAlign }) 

● 通过调用 recvMsg 接口接送金属探测器的消息,并修改首页展示状态,关键实现代码描述如下:

aboutToAppear() { 
            var intervalID = setInterval(() => { 
            tcpserverapi.recvMsg().then((result) => { 
            }  } }

其中 “ var intervalID = setInterval(() => ” 使用了定时器,定时调用 “recvMsg” 方法,通过 NAPI 获取金属检测结果。

if (resultMetal.match("metal:")) { 
            this.metal = resultMetal.slice(6);  console.info('=======' + this.metal)  if (this.metal === 'Detected') { 
            this.detectionState = '发现金属';  this.detection = $r("app.media.img_detected");  this.isDisplay = false;  }  else if (this.metal === 'UnDetected' || this.metal ==='CalibrateOK') { 
            this.detectionState = '检测中';  this.detection = $r("app.media.img_detecting");  this.isDisplay = true;  } } 

当通过 NAPI 方式获取到检测信息为 “ metal:Detected ” 时,设置 detectionState 为发现金属状态,屏幕显示检测到金属页面;当通过 NAPI 方式获取到的检测信息为 “ metal:UnDetected ” 时,此时并未检测到任何金属信息,设置 detectionState 为检测中状态,屏幕显示检测中状态页面。

检测到金属后,RK3568 会播报已探测到金属的语音信息,达到通知用户的目的,通过 OpenHarmony 媒体子系统的音频播放功能实现。

OpenHarmony 媒体子系统为开发者提供一套简单且易于理解的接口,使得开发者能够方便接入系统并使用系统的媒体资源。媒体子系统包含了音频播放、视频播放、音频录制和视频录制等常用功能。

音频播放的主要工作是将音频数据转码为可听见的音频模拟信号并通过输出设备进行播放,同时对播放任务进行管理。本样例主要通过导入 media 模块、创建音频播放实例、实现音频播放接口和实现暂停播放接口等流程实现。

● 导入media模块

import media from '@ohos.multimedia.media';

● 创建音频播放实例

// OH media对象 private player = media.createAudioPlayer(); 

● 实现音频播放接口

使用 play() 调用开始播放音频资源,需在完成音频数据加载后,即 src 属性设置完成后才能调用。

play():void 

本文简述了如何使用 OpenHarmony 进行多设备的开发,演示了 NAPI、eTS UI、UI 管理状态 @state 和音频播放等技术特性的应用,通过这些多元化的功能,我们最终实现了金属探测器样例。丰富多样的 OpenHarmony 开发样例离不开广大合作伙伴和开发者的贡献,如果你也想把自己开发的样例分享出来,欢迎把样例提交到 OpenHarmony 知识体系 SIG 仓来,一起实现开发样例共建。

RK3568开发板上丝滑体验OpenHarmony标准系统

https://gitee.com/openharmony-sig/knowledge_demo_smart_home/tree/master/dev/docs/rk3568_quick_start

在Windows编译OpenHarmony工程

https://gitee.com/Cruise2019/team_x/blob/master/homework/ohos_build_win/readme.md

OpenHarmony NAPI 学习文档

https://gitee.com/javen678/hello-ohos-napi/tree/master/doc#/javen678/hello-ohos-napi/blob/master/doc/1.HelloNAPI.md

OpenHarmony基于eTS扩展的声明式开发范式

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/Readme-CN.md

音频播放开发指导

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/audio-playback.md

从零开发金属探测器应用

https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/metal_detection/quick_develop.md

GEEKROS官网

https://www.geekros.com/

标签: ts03s型传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台