1 有用
3 下载

在Arduino中添加GPS并记录车辆位置信息

文件列表(压缩包大小 86.08K)

免费

概述

需要的元件

  • Arduino UNO

  • NEO-GM GPS Arduino模块

  • Arduino的SD卡模块

  • SparkFun按钮开关12mm

  • 杜邦线

  • 面包板

  • LED 5mm

  • 电阻221Ω

  • 电容100nF

  • Arduino IDE

原理及流程

介绍

在这个项目中,你将学习如何构建自己的GPS和Arduino车辆位置记录器系统。

项目简介

首先,我们将使用一些模块来创建该项目。根据物料清单中的规定,我们将使用GPS来收集位置数据,并使用存储卡模块来存储GPS读取的位置。

Arduino Nano将在该项目中用于执行编程逻辑的所有控制。

根据该工作原理,电子电路图如图1所示。

0027424051076

图1-GPS系统的电子原理图。

在该项目中可以看到,有两个按钮。每个按钮负责启动和停止SD卡中GPS位置的注册处理。

当数据位置存储在SD卡中时,红色LED将用于发出信号。

根据原型板上的该电路,建立了电子方案。电子方案如图2所示。

0041247126640

图2-GPS寄存器位置的原理图。

此后,设计印刷电路板如图3所示。

0044409911521

图3-带有Arduino的GPS寄存器位置的印刷电路板

根据此项目,创建了下面显示的代码。

该代码用于将Arduino Nano与SD卡模块和GPS模块进行通信。

#include <SD.h>
#include <SPI.h>
#include <SoftwareSerial.h>    
#include <TinyGPS.h>           


SoftwareSerial SerialGPS(4,3);     //Pino 4 - TX do Modulo e Pino 3 - RX do Modulo GPS


TinyGPS GPS;              
File myFile;


bool controle = 0;
float lat, lon;
byte pinoCS = 10; //Pin 10 para Nano/UNO
 
#define INICIA 9
#define TERMINA 5
#define LEDVERMELHO 2
 
void setup() 
{
 
  SerialGPS.begin(9600);
    
  Serial.begin(9600);
  
  pinMode(pinoCS, OUTPUT); //Define o pinoSS como saida
  pinMode(LEDVERMELHO, OUTPUT);
  
    if (SD.begin())//Inicializa o SD Card
    { 
      Serial.println("SD Card pronto para uso."); //Imprime na tela
    }
    else
    {
      Serial.println("Falha na inicializa??o do SD Card.");
      return;
    }
}
 
void loop() 
{
 
    bool BotaoInicia = digitalRead(INICIA);
    bool BotaoTermina = digitalRead(TERMINA);
 
    if(BotaoInicia == 1 && controle == 0)
    {
      controle = 1;
      myFile = SD.open("GPS.txt", FILE_WRITE); //Cria e abre o arquivo
      delay(1000);
 
      myFile.print("Latitude");
      myFile.println("  Longitude");
    }


    if(controle == 1)
    {
        while (SerialGPS.available())
        {
          if (GPS.encode(SerialGPS.read())) 
          {
            digitalWrite(LEDVERMELHO, HIGH);
            
            //latitude e longitude
            GPS.f_get_position(&lat, &lon);
       
            myFile.print(lat  , 6);
            myFile.println(lon, 6);
            delay(1000);
          }
        }
    }
 
    if(BotaoTermina == 1 && controle == 1)
    {
      controle = 0;
      myFile.close();
      digitalWrite(LEDVERMELHO, LOW);
    }


}

在第一行中,将声明模块的库以及用于操作项目中数据的变量,如以下代码所示。

#include <SD.h>
#include <SPI.h>
#include <SoftwareSerial.h>    
#include <TinyGPS.h>           


SoftwareSerial SerialGPS(4,3);     //Pino 4 - TX do Modulo e Pino 3 - RX do Modulo GPS


TinyGPS GPS;              
File myFile;


bool controle = 0;
float lat, lon;
byte pinoCS = 10; //Pin 10 para Nano/UNO
 
#define INICIA 9
#define TERMINA 5
#define LEDVERMELHO 2

此后,系统将执行空隙设置功能。在此功能中,系统将配置用于连接LED ,按钮和其他引脚(如数字输入或输出)的引脚。

稍后,将通过以下代码测试SD卡的初始化过程

if (SD.begin())//Inicializa o SD Card
    { 
      Serial.println("SD Card ready for use"); //Imprime na tela
    }
    else
    {
      Serial.println("SD Card initialization failed");
      return;
    }

如果系统执行测试并且SD卡正确初始化,它将打印以下消息:SD卡准备就绪。否则,它将打印消息SD卡初始化失败。

此后,系统将进入空循环功能。在此功能中,将执行主系统逻辑。

首先,将读取按钮START和END。接下来,如果按下“开始”按钮,则将打开.txt文件并打印纬度和经度名称,以创建两列数据。

该部分代码如下所示。

bool BotaoInicia = digitalRead(INICIA);
    bool BotaoTermina = digitalRead(TERMINA);
 
    if(BotaoInicia == 1 && controle == 0)
    {
      controle = 1;
      myFile = SD.open("GPS.txt", FILE_WRITE); //Cria e abre o arquivo
      delay(1000);
 
      myFile.print("Latitude");
      myFile.println("  Longitude");
    }

此后,系统将进入下面显示的下一个条件,因为变量控制等于1。

if(controle == 1)
    {
        while (SerialGPS.available())
        {
          if (GPS.encode(SerialGPS.read())) 
          {
            digitalWrite(LEDVERMELHO, HIGH);
            
            //latitude e longitude
            GPS.f_get_position(&lat, &lon);
       
            myFile.print(lat  , 6);
            myFile.println(lon, 6);
            delay(1000);
          }
        }
    }

在这种情况下,系统将设置红色LED并每秒钟在文本文件GPS.txt中打印纬度和经度。系统将存储GPS的数据位置,直到用户按下“结束”按钮为止。

当按下结束按钮时,变量控件将等于0,文件将关闭,红色指示灯将熄灭,如下面代码部分所示。

if(BotaoTermina == 1 && controle == 1)
    {
      controle = 0;
      myFile.close();
      digitalWrite(LEDVERMELHO, LOW);
    }

此后,系统返回循环以开始并再次执行代码。

结论

因此,可以看到,该系统可用于将车辆行驶的位置存储在SD卡模块中。此外,该系统可用于监视承载价值负载的车辆从一个位置到另一位置的行驶路径。gerber文件下载区已给出。

最后

所有需要的文件在下载区均可找到。

via:https://www.hackster.io/312679/arduino-gps-register-with-arduino-5eab87

理工酷提示:

如果遇到文件不能下载或其他产品问题,请添加管理员微信:ligongku001,并备注:产品反馈

评论(0)

0/250