0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何将GPS集成到车钥匙中

454398 来源:工程师吴畏 2019-08-21 11:53 次阅读

第1步:纸质素描

当人们按下按钮锁定汽车时,位置信息可以自动记录在微控制器中。然后,当人们开始导航到汽车时,不同的LED被点亮以指向汽车的位置,闪烁的频率显示到汽车的距离。他们可以轻松跟踪闪烁的LED并快速找到汽车。

第2步:硬件列表

这些是该项目中使用的组件。一些来自粒子套件(面包板,按钮,标题),其他来自Adafruit官方网站(Adafruit羽毛M0,Adafruit终极GPS模块,Lpoly电池和纽扣电池)和亚马逊(NeoPixel Ring - 12 RGB LED)。

步骤3:电路设计

Neopixel_LED连接到羽毛M0的PIN 6

Button_Unlock连接到羽毛M0的PIN 12

Button_Lock连接到羽毛M0的PIN 13

步骤4:硬件连接

使用Adafruit M0 Feather,Adafruit Ultimate GPS Featherwing焊接标题。将两块板堆叠在一起。 GPS FeatherWing可以直接插入您的羽毛M0板,无需任何电线。

步骤5:软件设计

测试组件

阅读FIX

void setup() {

Serial.println(“GPS echo test”);

Serial.begin(9600);

Serial1.begin(9600); // default NMEA GPS baud

} void loop() {

if (Serial.available()) {

char c = Serial.read();

Serial1.write(c);

}

if (Serial1.available()) {

char c = Serial1.read();

Serial.write(c);

}

}

闪烁LED指示灯

请参阅Adafruit NeoPixel示例。

GPS计算功能

计算方位角

// Calculate the Azimuth double azimuth(double lat_a, double lon_a, double lat_b, double lon_b) {

double d = 0;

lat_a = lat_a*PI/180;

lon_a = lon_a*PI/180;

lat_b = lat_b*PI/180;

lon_b = lon_b*PI/180;

d = sin(lat_a)*sin(lat_b)+cos(lat_a)*cos(lat_b)*cos(lon_b-lon_a);

d = sqrt(1-d*d);

d = cos(lat_b)*sin(lon_b-lon_a)/d;

d = asin(d)*180/PI; return d;

}

计算LED时钟的时间,这也是车辆的方向

// Calculate the time on LED clock int led_time(double angle){

int flag = 0;

if (angle 《 0){

flag = 1;

}

angle = abs(angle);

double angle_remainder = fmod(angle, 30);

int angle_time = (int)angle/30;

if (angle_remainder 》= 15) {

angle_time = angle_time + 1;

}

if (flag == 1){

angle_time = 12 - angle_time;

}

return angle_time;

}

计算人与车辆之间的距离

// Calculate the Distance

double distance(double lat_a, double lon_a, double lat_b, double lon_b) {

double EARTH_RADIUS = 6378137.0; double radLat1 = (lat_a * PI / 180.0);

double radLat2 = (lat_b * PI / 180.0);

double a = radLat1 - radLat2;

double b = (lon_a - lon_b) * PI / 180.0; double s = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(radLat1) * cos(radLat2) * pow(sin(b / 2), 2)));

s = s * EARTH_RADIUS / 10000000;

return s;

}

LED显示功能

点亮LED显示它开始导航的圆圈

// LED ring lighting one by one shows that the navigation begins void colorWipe(uint32_t c, uint8_t wait) {

for(uint16_t i=0; i strip.setPixelColor(i, c);

strip.show();

delay(wait);

}

}

根据距离获取LED频率

// Get LED Frequency int frequency(double distance){

int f = (int)distance * 20;

return f;

}

闪烁指示汽车方向的特定LED

//Display on LED

主要

strip.clear();

strip.show();

delay(frequency(car_person_distance));

// delay(500);

strip.setPixelColor(angle_time, strip.Color(0, 0, 255));

strip.show();

delay(frequency(car_person_distance));

// delay(500); //Disable LED if (button_flag == 1 && car_person_distance 《 5.0){

button_flag = 0;

led_flag = 1;

strip.clear();

strip.show();

} #include Adafruit_GPS.h

#include Adafruit_NeoPixel.h

#include HardwareSerial.h

#include Button.h

#include math.h #define Neopixel_LED_PIN 6

#define Neopixel_LED_NUM 12

#define Button_Lock_PIN 13

#define Button_Unlock_PIN 12

#define GPSSerial Serial1

#define GPSECHO false

步骤6:在面包板上调试

步骤7:硬件组装

步骤8:Adobe Illustrator中的电子设备外壳设计

步骤9:纸板原型

此步骤用于确认外壳尺寸和每个型号,确保盒子尺寸,按钮位置和LED位置适合组装的电子元件。

步骤10:桦木胶合板原型

这是最初的原型。最后将一个用于插入充电器的方孔添加到其中一个部件中。

步骤11:最终装配原型

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • gps
    gps
    +关注

    关注

    22

    文章

    2750

    浏览量

    164363
  • 汽车钥匙
    +关注

    关注

    1

    文章

    21

    浏览量

    11616
收藏 人收藏

    评论

    相关推荐

    如何将Kile 5项目移动到stm32cubeide

    如何将Kile 5项目移动到stm32cubeide,菜菜,捞捞
    发表于 03-08 08:01

    TARGET3001!用法篇-如何将Altium文件导入TARGET

    大概讲一下如何将Altium文件导入TARGET 3001!,所以真正使用一段时间你就会发现它确实是一款性价比很高的EDA软件! ①首先,Altium Designer的
    发表于 02-21 10:11

    如何将UCOSIII系统移植ADSPBF609建立的工程文件

    如何将UCOSIII系统移植ADSPBF609建立的工程文件,编译环境是CCES
    发表于 01-12 08:20

    如何将SCOUT的工程关联STEP7

    如何将SCOUT的工程关联STEP7,就是SCOUT添加了一个伺服的设置,然后如何关联STEP7,可以在STEP7
    发表于 01-09 13:16

    如何将ADI公司的Spice模型导入Multisim仿真软件呢?

    请问如何将ADI公司的Spice模型导入Multisim仿真软件呢? 当我导入时为什么找不到该文件呢?
    发表于 11-17 06:20

    如何将FreeMODBUS协议栈移植AT32F43x单片机

    本应用笔记介绍了如何将FreeMODBUS协议栈移植AT32F43x单片机方法。本文档提供的源代码演示了使用Modbus的应用程序。单片机作为Modbus从机,可通过RS485或RS232与上位机相连,与Modbus Poll调试工具(Modbus主机)进行通讯。
    发表于 10-26 06:18

    用Keil编程时如何将源文件加入工程?

    用Keil编程时如何将源文件加入工程
    发表于 10-25 06:19

    如何将采集摄像头数据完全传输到PC?

    如何将采集摄像头数据完全传输到PC有什么好的方法?
    发表于 10-18 08:31

    如何将意法半导体环境传感器集成Linux/Android系统

    本应用笔记为意法半导体环境传感器 (气压、湿度、紫外线传感器)成功集成Linux/Android 操作系统提供指南。
    发表于 09-05 06:08

    如何将Git与用于DS-5 1.0版的Eclipse配合使用

    源代码管理系统(SCS)允许您对源文件进行版本设置,并与其他开发人员共享。有许多可用的源代码管理系统,既有商业的,也有开源的。 本教程介绍如何将开源Git源代码管理系统集成Eclipse for DS-5
    发表于 08-10 07:11

    如何将Unity着色器移植通用渲染管道

    介绍如何将为内置管道编写的Unity着色器移植URP。本指南还介绍了如何将自定义着色器移植URP。这是因为这些着色器无法自动移植URP
    发表于 08-02 13:39

    如何将应用程序移植运行在基于Arm的设备上的Windows?

    本指南介绍如何将应用程序移植运行在基于Arm的设备上的Windows。该指南首先回顾了一般指南,然后展示了不同框架的示例:Tweeten应用程序的Electron移植、StaffPad应用程序
    发表于 08-02 06:06

    如何将mbedtls库升级3.0.0版?

    如何将 mbedtls 库升级 3.0.0 版?目前,我正在使用 SDK_2.13.0_LPCXpresso55S16 的 mbedtls 库。有没有人对如何进行有建议或指示?
    发表于 05-18 08:30

    如何将memtool集成i.MX8MM Android 12平台

    Memtool 是一个有用的调试工具,可以读/写一些 i.MX 寄存器。Linux 默认支持,Android 不支持。 本文介绍如何将 memtool 集成 i.MX8MM Android 12 平台中,这在其他 i.MX
    发表于 05-16 06:56

    如何将CLRC663移植IMX6 Linux内核?

    如何将CLRC663移植IMX6 Linux内核?
    发表于 05-06 08:14