資料介紹
描述
該項目使用開源minmea NMEA 解析器和低成本LPC845-BRK 開發板作為簡單的位置查??找器。
MCU 將等待來自通過 UART1 連接的板外 GPS(產品鏈接*)的初始鎖定。一旦建立鎖定(通過FIX引腳檢測),當前位置將不斷更新。然后您可以定期檢查當前位置和定義的目標位置之間的距離。
可以在 UART0 上看到調試輸出,它可通過 LPC845-BRK 上的 USB CDC 獲得,從而在對源代碼進行任何修改時輕松獲得狀態更新。
* 任何通過 UART 提供標準 NMEA 語句的 GPS 都應該在這個項目中工作。

引出線
以下引腳用于連接外部 GPS(3 引腳)和 PWM 壓電蜂鳴器(1 引腳):
- 壓電蜂鳴器的 SCT_OUT2(PWM 輸出):P0.29
- USART1_RXD(GPS):P0.26
- USART1_TXD(GPS):P0.27
- GPS 定位:P0.28
?

操作(調試模式)
當您將固件閃存到 LPC845(使用免費的跨平臺 MCUXpresso IDE 和 LPC845-BRK 上的調試器)時,您可以使用任何終端仿真器包以9600bps連接到 USART1 。
退出重置后,您將看到以下消息:
LPC845 GPS Wayfinder
Waiting for a fix on the GPS module.
The GREEN LED indicates that we are waiting for a fix.
The BLUE LED indicates that we are parsing GPS data.
此時,等待鎖定 3 顆或更多衛星時,LED 上的綠色 LED 將以 1Hz 的頻率閃爍,這是位置鎖定所需的。
一旦獲得鎖定,藍色 LED 將開始閃爍,表明 MCU 當前正在處理來自 GPS 單元的 NMEA 數據,調試輸出將更新為以下(示例)輸出:
Current degree coordinates and speed: xx.xxxxxx, xx.xxxxxx (0.002333)
Distance to target: 14.30 km.
源代碼
雖然大部分源代碼相對容易理解,但下面描述了一些關鍵概念。
半正弦距離估計器
我們可以使用Haversine 公式的實現來確定兩點之間的距離,如下所示:
float
calc_distance(struct gps_coord_fp_deg *a, struct gps_coord_fp_deg *b)
{
float hav_r_meters = 6371e3; /* Mean radius of the earth in meters. */
//float hav_r_miles = 3961; /* Mean radius of the earth in miles. */
/* Convert degrees to radians and calculate the deltas. */
float lat1 = deg_to_rad(a->latitude);
float lat2 = deg_to_rad(b->latitude);
float lon1 = deg_to_rad(a->longitude);
float lon2 = deg_to_rad(b->longitude);
float delta_lat = lat2 - lat1;
float delta_long = lon2 - lon1;
/* Haversine */
float hav_a = pow(sin(delta_lat/2.0f),2.0f) + cos(lat1) * cos(lat2) * pow(sin(delta_long/2.0f),2.0f);
float hav_c = 2.0f * atan2(sqrt(hav_a), sqrt(1.0f-hav_a));
/* Calculate the great circle distance in meters. */
return hav_c * hav_r_meters;
}
Haversine 公式將近似計算兩個位置之間球體表面的距離,輸出以米為單位。您可以選擇更新代碼以通過調整函數頂部的系數來輸出英里或任何其他單位。
Haversine 有點不完美,因為地球不是一個完美的球體,它以直線計算距離,但它是一個很好的整體距離近似值,計算量最少。
GPS 位置數據
應用程序中的另一個關鍵功能是解析RMC 句子的 NMEA 解析器(基于minmea ) (其他句子可以根據需要輕松添加!):
int
parse_nmea_sentence_release(char *line)
{
switch (minmea_sentence_id(line, false))
{
case MINMEA_SENTENCE_RMC: {
struct minmea_sentence_rmc frame;
if (minmea_parse_rmc(&frame, line)) {
g_gps_coord_fp_deg_last.latitude = minmea_tocoord(&frame.latitude);
g_gps_coord_fp_deg_last.longitude = minmea_tocoord(&frame.longitude);
g_gps_coord_fp_deg_last.speed = minmea_tocoord(&frame.speed);
g_gps_coord_fp_deg_last.is_valid = true;
PRINTF("Current degree coordinates and speed: %f, %f (%f)\r\n",
g_gps_coord_fp_deg_last.latitude,
g_gps_coord_fp_deg_last.longitude,
g_gps_coord_fp_deg_last.speed);
float dist_m = calc_distance(&g_gps_coord_fp_deg_last, &g_gps_coord_fp_deg_trgt);
if (dist_m > 1000.0F) {
/* Show distance in kilometers. */
PRINTF("Distance to target: %.2f km.\r\n", dist_m / 1000.0F);
} else {
/* Show distance in meters */
PRINTF("Distance to target: %.1f meters.\r\n", dist_m);
}
} else {
PRINTF("$xxRMC sentence is not parsed\r\n");
}
} break;
case MINMEA_INVALID: {
/* $xxxxx sentence is not valid */
error_blink();
} break;
default: {
/* $xxxxx sentence is valid but wasn't handled above. */
} break;
}
return 0;
}
在這個基本示例中,我們只解析RMC語句,它代表最小推薦數據,具有以下 NMEA 語句格式(來源):
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
在哪里:
- RMC - 推薦的最低刑期 C
- 123519 - 修復時間為 12:35:19 UTC
- A - 狀態 A=active 或 V=Void。
- 4807.038, N - 北緯 48 度 07.038'
- 01131.000, E - 東經 11 度 31.000'
- 022.4 - 對地速度(節)
- 084.4 - 以度為單位的軌道角度 True
- 230394 - 日期 - 1994 年 3 月 23 日
- 003.1, W - 磁差
- *6A - 校驗和數據,始終以 * 開頭
距離事件
這個應用程序的關鍵部分是上面 GPS 解析函數中的以下幾行代碼,每當解析引擎解析到新的位置定位時,它就會不斷地將當前位置與目的地進行比較:
if (dist_m > 1000.0F) {
/* Show distance in kilometers. */
PRINTF("Distance to target: %.2f km.\r\n", dist_m / 1000.0F);
} else {
/* Show distance in meters */
PRINTF("Distance to target: %.1f meters.\r\n", dist_m);
}
根據你想做什么,你應該擴展上面的代碼,比如當你接近目的地時,壓電蜂鳴器發出越來越響亮或頻率越來越高的聲音。
壓電蜂鳴器
根據您的應用要求,您可以選擇使用以下宏啟用或禁用壓電蜂鳴器:
PIEZO_ON();
/* ... do something ... */
PIEZO_OFF();
可以使用main.c中的以下宏定義來調整壓電蜂鳴器(使用 SCT 外圍設備)發出的確切頻率:
#define SCTIMER_CLK_FREQ (CLOCK_GetFreq(kCLOCK_Fro))
#define SCTIMER_OUT (kSCTIMER_Out_2)
#define SCTIMER_PIEZO_FREQ (4000U)
#define SCTIMER_PIEZO_DUTY (25U)
#define PIEZO_ON() SCTIMER_StartTimer(SCT0, kSCTIMER_Counter_L);
#define PIEZO_OFF() SCTIMER_StopTimer(SCT0, kSCTIMER_Counter_L);
進一步發展
雖然當前的概念證明具有簡單、便攜式尋路器的關鍵要素,但我目前正在研究一種外殼,使整個設備便攜,并由 3.7V LIPO 電池供電。當我完成一些原型時,硬件文件將在此處可用。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
- Spresense GPS摄像头开源分享1次下载
- 道路质量GPS追踪器开源0次下载
- ESP32 Feather GPS接收器开源分享2次下载
- 皮划艇GPS导航开源分享0次下载
- GPS和AHRS数据记录器开源分享1次下载
- LPC845自制开发板原理图2次下载
- LoRa GPS追踪器开源设计3次下载
- RTK GPS航向开源分享10次下载
- Oak-劳拉GPS追踪器开源项目2次下载
- 基于STM32的A*(A星)寻路算法实现21次下载
- 【简单的四足机器人制作(基于STC15/LPC845)】19次下载
- 开源网络协议分析器WireShark软件下载15次下载
- 890084高衰减GPS声表面波双工器的详细资料免费下载16次下载
- 车载GPS、GSM报警器电路原理图1487次下载
- 基于ARM7的寻北仪控制模块的硬件设计与实现14次下载
- GPS校时器是什么?如何用?286次阅读
- 如何制作一个智能寻路+避障的小车?4748次阅读
- 基于LPC2132微控制器和IRIG码实现GPS时钟的应用方案2827次阅读
- 基于AT89S52单片机和GPS OEM 板实现GPS授时服务器的设计5213次阅读
- 如何提高GPS接收器的灵敏度5783次阅读
- 基于微处理器LPC2214和GPS接收器实现车载导航终端的设计4317次阅读
- 采用LPC2294四路CAN控制器实现智能通信卡系统的设计2565次阅读
- 米尔科技NXP LPC1857 LPC1850 Cortex-M3开发板概述4970次阅读
- 合路器的作用_合路器和耦合器6582次阅读
- gps和agps的区别23179次阅读
- gps追踪器接线方式8467次阅读
- GPS跟踪定位器如何使用38470次阅读
- 高通骁龙845安兔兔跑分骁龙845安兔兔跑分多少21138次阅读
- nxp单片机汇总_lpc单片机选型19481次阅读
- Unity3d自动寻路以及在Game视图中显示线段3980次阅读
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論