同步操作将从 OpenHarmony-SIG/knowledge_demo_temp 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
金属探测器demo是基于OpenHarmony 3.1 release版本,通过磁场强度判断是否检测到金属。当检测到金属物体后,设备端会发出报警并发送信号到应用端。
应用是使用润和大禹系列HH-SCDAYU200开发板套件,采用方舟开发框架(ArkUI)基于eTS扩展的声明式开发范式编写页面;通过NAPI接口接送设备的消息;页面进行发现中,发现到金属,未发现金属的页面展示。
以润和大禹系列HH-SCDAYU200开发板套件为例
1)git下载
git clone https://gitee.com/chenchenfangfang/knowledge_demo_attitude_control.git
2)项目导入
打开DevEco Studio,点击File->Open->下载路径/metal_detection/app-code/metalDetection
配置应用签名信息,点击File > Project Structure > Project > Signing Configs界面勾选“Automatically generate signing”,等待自动签名完成即可,点击“OK”。如下图所示:
安装应用 识别到设备后点击,或使用默认快捷键Shift+F10(macOS为Control+R)运行应用。
如果IDE没有识别到设备就需要通过命令安装,如下
打开OpenHarmony SDK路径 \toolchains 文件夹下,执行如下hdc_std命令,其中path为hap包所在绝对路径。
hdc_std install -r path\entry-debug-standard-ark-signed.hap
应用安装到3568开发板后,需要SMT32开发板发送角度数据,才能看到效果;两个板子连接同一个wifi或使用网线连接并配置同一网段IP地址
hdc_std shell ifconfig eth0 192.168.1.111 netmask 255.255.255.0
entry
│ └─src
│ └─main
│ │ config.json // 应用配置文件
│ │
│ ├─ets
│ │ └─MainAbility
│ │ │ app.ets // 应用程序主入口
│ │ │
│ │ ├─common // 动画源图片目录
│ │ │ img_1.png
│ │ │ img_2.png
│ │ │
│ │ ├─model
│ │ │ CommonLog.ets // 日志打印模块
│ │ │ PlayerManager.ets // 音频播放模块
│ │ └─pages
│ │ index.ets // 金属探测器首页
│ │
│ └─resources
│ ├─base
│ │ ├─element
│ │ │ string.json
│ │ │
│ │ ├─graphic
│ │ ├─layout
│ │ ├─media // 存放媒体资源
│ │ │ icon.png
│ │ │ img_background.png
│ │ └─profile
│ └─rawfile
hdc_std shell
hilog | grep "metalDetected" (metalDetected表示你添加的日志标记)
金属检测demo设备端基于Geek_Lite_Board开发板,上位机使用RK3568。通过AK8963电子罗盘芯片,对磁场数据对比后来判断附近有无金属物体。当检测到金属物体后,设备端会发出报警并发送信号到应用端。
设备上电后,首先进行硬件初始化,初始化完成红色指示灯亮起;设备端通过ESP8266与应用端建立连接,连接成功后绿色指示灯亮起;初始化与连接成功后,设备根据周围磁场强度进行自校准,校准完成后蓝色指示灯亮起。三个指示灯都常量表示设备已经正常工作,可以进入工作状态。
当有金属物体靠近设备时,设备会检测到磁场强度发生波动。磁场强度波动0.03高斯时,此时认为附近检测到金属物体,蜂鸣器开启并向应用端发送信号。
AK8963电子罗盘芯片可以在x、y、z轴检测当前位置的位置的磁场强度,当检测到金属物体后,磁场会生较大波动,当我们平行于电子罗盘芯片放置金属物体时,z轴磁场波动尤为明显,所以我们以z轴磁场强度的波动程度来进行判断。
AK8963电子IC内置于mpu9250模块中,通过对mpu9250数据寄存器的读取就能获得ak8963的磁场数据。
(1)通过Mpu_Read_Bytes()函数得到mpu9250数据寄存器的值。
uint8_t Mpu_Read_Bytes(uint8_t const regAddr, uint8_t *pData, uint8_t len)
(2)通过mpu9250的寄存器手册获取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轴磁场数据
(3)对原始数据进行转化,得到磁场强度,单位高斯。
Gauss_Mag_z = Mpu_Calc.mag_z * 0.15f * 0.01f;
首先采集100组z轴磁场强度基准数据,然后对这些数据做平均处理,由此得到z轴磁场强度的零点数据。
if(i<1000){
i++;
if(i%5 == 0){
Mag_z_buff[j++] = Gauss_Mag_z;
if(j>=100){
i = 1000;
Mag_z_Flag = true;
for(k=0;k<100;k++){
origin_mag_z += Mag_z_buff[k];
}
origin_mag_z = origin_mag_z / 100.0f;
// 校准完成,蓝灯亮,发送给应用端 "CalibrateOK"
BLUE_LED_ON();
memset(buff,0x00,sizeof(buff));
sprintf(buff,"angle:%s","CalibrateOK");
ESP8266_send_data(buff,strlen(buff));
}
}
}
当标志位Mag_z_Flag置1,表示已经完成校准。
设置磁场强度波动范围大于0.03Gauss,当超过这个范围,就可以认定为有金属靠近对磁场产生影响。蜂鸣器发出报警信息,然后把检测信息"Detected"发送给应用端。金属离开磁场范围时,设备发送"UnDetected"到应用端。
if(Mag_z_Flag){
if(fabs(Gauss_Mag_z - origin_mag_z) > 0.03f)
{
// 检测到金属,开启蜂鸣器, 发送给应用端
TIM_SetCompare1(TIM12, 50);
memset(buff,0x00,sizeof(buff));
sprintf(buff,"angle:%s","Detected");
ESP8266_send_data(buff,strlen(buff));
}
else
{
// 未检测到金属,关闭蜂鸣器, 发送给应用端
TIM_SetCompare1(TIM12, 300);
memset(buff,0x00,sizeof(buff));
sprintf(buff,"angle:%s","UnDetected");
ESP8266_send_data(buff,strlen(buff));
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。