衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【技術分享】電子指南針項目分享 含設備端+應用端講解

電子發燒友論壇 ? 2022-07-18 10:07 ? 次閱讀

電子指南針是現代的一種重要導航工具,大到飛機船舶的導航,小到個人手機導航,電子指南針可以說和咱們生活息息相關,密不可分。為什么電子指南針能指示方向?本 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 來接收設備端發出的檢測信息。

當設備應用啟動之后,運行效果如下動圖所示:

b08e4e62-0616-11ed-9ade-dac502259ad0.gif

一、基本原理

地球是一個大磁體,地球的兩個極分別在接近地理南極和地理北極的地方,一般情況下地球的磁場強度在 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 軸)。

數據流程

b10a6cb8-0616-11ed-9ade-dac502259ad0.png

智能指南針整體方案如上圖所示,主要由 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 while(SPI_I2S_GetFlagStatus(SPI5, SPI_I2S_FLAG_TXE) == RESET); SPI_I2S_SendData(SPI5, 0x00); while(SPI_I2S_GetFlagStatus(SPI5, SPI_I2S_FLAG_RXNE) == RESET); pData[i] = SPI_I2S_ReceiveData(SPI5); } MPU_DISABLE; return 0;}

● AK8963數據處理得到磁力數據

調用 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<14;i++) { ? ?mag_x_buff[i] = mag_x_buff[i+1] ? //滑動 ?} ? ? ?if(Mpu_Data.mag_x > -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<14;i++){ ? ? ?mag_y_buff[i] = mag_y_buff[i+1]; ?//滑動 ? ? ? ? ? ?} ? ? ? ? ? ?if(Mpu_Data.mag_y > -500 && Mpu_Data.mag_y < 500){ ? ? mag_y_buff[14] = Mpu_Data.mag_y; ? ?} ? ?//取平均值 ? ?Mpu_Calc.mag_y = ( mag_y_buff[0] + mag_y_buff[1] + mag_y_buff[2] \ ? ?+ mag_y_buff[3] + mag_y_buff[4] + mag_y_buff[5] + mag_y_buff[6] \ ? ?+ mag_y_buff[7] + mag_y_buff[8] + mag_y_buff[9] + mag_y_buff[10] \ ? ?+ mag_y_buff[11] + mag_y_buff[12] + mag_y_buff[13] ? ?+ mag_y_buff[14] )/15.0f; ? ?// 對磁力計z軸方向進行濾波 ? ?mag_z_buff[0] = mag_z_buff[1]; ? ?mag_z_buff[1] = Mpu_Data.mag_z; ? ?Mpu_Calc.mag_z = (int16_t)((mag_z_buff[0] + mag_z_buff[1])/ 2.0f);}

● 角度數據計算

磁力計數據通過濾波后得到 x y z 三個軸方向的磁力分量,計算出 x 和 y軸的 tan 值,再通過反正切計算出角度,角度經過滑動平均得到最終需要顯示出來的指南針角度值,計算過程見如下代碼。

angle_buff[0] = angle_buff[1]; angle_buff[1] = angle_buff[2]; angle_buff[2] = ((uint16_t)(atan2((Mpu_Calc.mag_y - Mag_y_OffSet),\ (Mpu_Calc.mag_x - Mag_x_OffSet)) *180 / PI + 180 )); angle = ((uint16_t)((angle_buff[0] + angle_buff[1] + angle_buff[2]) \ / 3.0 + 0.5));

指南針數據的傳輸

Geek_Lite_Board 開發板外掛 ESP8266 Wi-Fi 模組通過局域網 TCP 通信的方式將角度數據傳輸給潤和 RK3568 開發板,潤和 RK3568 開發板通過 NAPI 接口獲取底層網絡數據,從網絡數據中解析出角度數據,并在顯示屏上顯示出來。

角度數據的顯示

角度數據的顯示由潤和 RK3568 開發板實現,主要分為指南針顯示頁面的繪制和 NAPI 從局域網上獲取角度數據并展示到界面上。

指南針顯示頁面

指南針的顯示頁面主要通過 Canvas 組件畫圖完成,包含方位角度、指南針針盤和指示線,顯示整體效果如下圖所示。

b133ae84-0616-11ed-9ade-dac502259ad0.png

指南針針盤由一個 Canvas 組件構成,包含了三個部分,分別為刻度盤、角度數字、方位文字,他們的效果圖分別如下:

● 刻度盤

b17f1aa4-0616-11ed-9ade-dac502259ad0.png

● 角度數字

b194e26c-0616-11ed-9ade-dac502259ad0.png

● 方位文字

b1aaf804-0616-11ed-9ade-dac502259ad0.png

Canvas組件相關知識可以參考:https://gitee.com/openharmony/do ... ts-canvas-canvas.md

NAPI

NAPI(Native API)是 OpenHarmony 標準系統的一種 JS API 實現機制,適合封裝 IO、CPU 密集型、OS 底層等能力并對外暴露 JS 接口,通過 NAPI 可以實現 JS 與 C/C++ 代碼互相訪問。潤和 RK3568 應用端通過 NAPI 來接收設備端發出的檢測信息。

底層 NAPI 模塊封裝

● 本應用封裝的模塊名為 tcpserverapi,先下載源碼,源碼路徑為:


https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/dev/team_x/napi_tcpservermodule/tcpservermodule

● 下載完成后放到 OpenHarmony 3.1 Release 版本源碼根目錄,并配置編譯腳本;第一次編譯完成需要燒寫整個鏡像,請參考[開發板上新 | RK3568 開發板上絲滑體驗 OpenHarmony 標準系統]:


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

● 后面修改模塊源碼,只需將庫send到板子里面。命令如下:

先掛載,再sendhdc_std shell mount -o remount,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 獲取并解析SMT32板子發送過來的角度tcpserverapi.recvMsg().then((result) => { var resultAngle = result.angle; })

更多 NAPI 相關知識請參考《標準設備應用開發 Native Api》視頻課程。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
收藏 人收藏

    評論

    相關推薦

    自動駕駛技術研究與分析

    編者語:「智駕最前沿」微信公眾號后臺回復:C-0450,獲取本文參考報告:《自動駕駛行業研究報告》pdf下載方式。 自動駕駛進入2024年,無疑成為其最火熱的一項
    的頭像 發表于 12-19 13:07 ?315次閱讀

    爆火的如何加速智駕落地?

    編者語:「智駕最前沿」微信公眾號后臺回復:C-0551,獲取本文參考報告:《智能汽車技術研究報告》pdf下載方式。 “”無疑是2
    的頭像 發表于 11-26 13:17 ?387次閱讀
    爆火的<b class='flag-5'>端</b>到<b class='flag-5'>端</b>如何加速智駕落地?

    充電協議和受電協議有什么區別及協議芯片的應用

    隨著手機快充技術出現,傳統的慢充模式已經滿足不了人們對充電速度的要求,很多電子產品也已經紛紛用上了快充模式。在快充的技術又區分充電快充協議和受電
    的頭像 發表于 10-17 16:14 ?595次閱讀
    充電<b class='flag-5'>端</b>協議和受電<b class='flag-5'>端</b>協議有什么區別及協議芯片的應用

    放大器單輸出的區別

    放大器是電子學中的一種重要設備,用于增強信號的幅度。在放大器的設計和應用中,單輸出和雙輸出是兩種常見的輸出方式。這兩種方式各有特點和應用場景。 1. 單
    的頭像 發表于 10-08 16:36 ?1993次閱讀

    功放和雙的區別是什么

    功放和雙功放是兩種不同的音頻放大器設計,它們在結構、性能和應用方面都有各自的特點。以下是對這兩種功放的比較: 1. 定義與基本原理 單功放(Single-Ended Amplifier
    的頭像 發表于 10-08 16:35 ?1524次閱讀

    測試用例怎么寫

    編寫測試用例是確保軟件系統從頭到尾能夠正常工作的關鍵步驟。以下是一個詳細的指南,介紹如何編寫測試用例: 一、理解
    的頭像 發表于 09-20 10:29 ?568次閱讀

    芯盾時代設備指紋技術如何助力移動安全

    隨著移動互聯網的快速發展,移動安全風險頻發。設備指紋技術憑借高精度的設備識別能力,能夠幫助企業提升移動安全防護能力,精準區分合法與風險行
    的頭像 發表于 08-28 09:41 ?602次閱讀

    恩智浦完整的Matter解決方案

    恩智浦為打造Matter設備,提供了完整的解決方案,從連接和安全解決方案到處理器和軟件,應有盡有,為Matter標準的規模化商用提供有力支撐。
    的頭像 發表于 08-26 18:04 ?2650次閱讀
    恩智浦完整的Matter<b class='flag-5'>端</b>到<b class='flag-5'>端</b>解決方案

    醫療機器人的“指南針”:MT6701磁編碼IC實現精確導航

    ,MT6701 磁編碼 IC 憑借其卓越的性能,成為了實現精密導航的核心力量。 MT6701 磁編碼 IC 究竟有何獨特之處?它就像是醫療機器人的“指南針”,能夠在復雜的醫療環境中為機器人提供精確無誤的位置和方向信息。想象一下,在一臺精密的
    的頭像 發表于 08-23 17:23 ?501次閱讀

    saas模式的一套智慧工地云平臺源碼,支持多端展示:PC、大屏、手機、平板

    基于微服務架構+Java+Spring Cloud +UniApp +MySql技術開發saas模式的一套智慧工地云平臺源碼,支持多端展示:PC、大屏、手機、平板
    的頭像 發表于 08-06 16:41 ?406次閱讀
    saas模式的一套智慧工地云平臺源碼,支持多端展示:PC<b class='flag-5'>端</b>、大屏<b class='flag-5'>端</b>、手機<b class='flag-5'>端</b>、平板<b class='flag-5'>端</b>

    電阻的電流和電壓是如何區分的

    電阻,又稱為四測量電阻或凱爾文電阻,是一種特殊的電阻器,主要用于精密測量電路中的電阻值。四電阻的電流和電壓的區分對于測量的準確性
    的頭像 發表于 08-05 10:48 ?1467次閱讀

    輸入和雙輸入的區別是什么

    輸入和雙輸入是電子電路設計中的兩種不同的輸入方式。它們在電路設計、性能和應用方面存在一些關鍵的區別 單輸入 單輸入是一種常見的輸入
    的頭像 發表于 07-31 10:50 ?3005次閱讀

    比較器輸入和輸出的關系

    比較器是一種電子設備,用于比較兩個電壓或電流信號的大小。比較器的輸入和輸出之間的關系是其核心功能之一。 比較器的基本原理 比較器是一種模擬電路,其基本原理是將兩個輸入信號進行比較,并根據比較結果
    的頭像 發表于 07-10 10:39 ?2684次閱讀

    小鵬汽車發布大模型

    小鵬汽車近日宣布,其成功研發并發布了“國內首個量產上車”的大模型,該模型可直接通過傳感器輸入內容來控制車輛,標志著智能駕駛技術的新突破。
    的頭像 發表于 05-21 15:09 ?747次閱讀

    科學指南針&amp;華東理工大學XPS表面分析技術課程圓滿落幕

    在科學探索的道路上,不斷學習和掌握先進的科研技術對于推動學術創新至關重要。近日,科學指南針與華東理工大學聯合舉辦的XPS表面分析技術課程在華東理工大學奉賢校區圓滿結束。本次課程吸引了眾多
    的頭像 發表于 05-18 15:01 ?594次閱讀
    威尼斯人娱乐网站怎么样| 大发888亚洲城娱乐城| 百家乐开发| 百家乐官网博乐36bol在线| 百家乐规则好学吗| 大发888娱乐场下载iypu rd| 哈尔滨百家乐官网赌场| 新加坡百家乐官网规则| 百家乐打印机破解| 咸丰县| 百家乐2号干扰| 大发888-大发娱乐城| 网上百家乐官网导航| 百家乐台布21点| 澳门葡京赌场官网| 手机百家乐官网的玩法技巧和规则| 嘉禾百家乐的玩法技巧和规则 | 做生意的好风水好吗| 大发888娱乐在线| 百家乐官网免费下| 威尼斯人娱乐城真钱百家乐| 澳门百家乐官网技巧| 百家乐如何打轮盘| 百家乐官网最新首存优惠| 圆梦城百家乐娱乐城| bet365维护| A8百家乐官网的玩法技巧和规则| 大发888游戏平台 送1666元礼金领取lrm | 永春县| 百家乐筹码价格| 伯爵百家乐官网娱乐城| 玩网上百家乐的技巧| 澳门百家乐官网免费开户| 百家乐有无技巧| 网上百家乐官网的赌博网站| 太阳城菲律宾官网| 百家乐官网娱乐网官网网| 大发888真人娱乐场游戏平台| 新彩百家乐官网的玩法技巧和规则| 德州扑克概率计算器| 奥斯卡百家乐官网的玩法技巧和规则 |