亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」

本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

带GPS的安全装置

发布时间:2021-06-18
分享到:

带GPS的安全装置

发布时间:2021-06-18
分享到:

该项目是设计一个女士佩戴的表带,它通过ESP8266将其与GSM和GPS模块连接,所以它不仅可以产生紧急警报,还会向家人、朋友或有关人员SOS紧急短信以及当前所处位置。

硬件部件:

电路图:

添加了一个小的按钮开关,它与NODEMCU一起用作SOS按钮。

GPS模块:

NEO6M GPS模块:

  • 工作电压:(2.7-3.6)V DC
  • 工作电流:67 mA
  • 波特率:4800-230400 bps(9600默认)
  • 通讯协议:NEMA
  • 接口:UART
  • 外部天线和内置EEPROM

使用板载信号指示器,可以监视模块的网络状态,且它具有数据备用电池,可以在意外关闭主电源时保存数据。

GPS接收器模块内部的核心是u-blox的NEO-6M GPS芯片,它可以在50个频道上跟踪多达22颗卫星,并且灵敏度非常高,为-161 dBm,该定位引擎的首次定位时间(TTFF)不到1秒,且支持4800-230400 bps的波特率,默认波特率为9600。

GPS模块的引脚排列:

  • VCC:模块的输入电压引脚
  • GND:接地引脚
  • RX,TX:带微控制器的UART通信引脚

 GPS与ESP12E NodeMCU的接口:

NodeMCU是基于ESP8266的开发板:

  • 以ESP-12E为处理核心
  • 是32位MCU
  • 有14个GPIO引脚
  • 单通道10位集成ADC
  • 支持UART,I2C,SPI通信
  • 兼容3.3V,不能处理5V

NodeMCU和GPS模块之间的连接:

  • 3V3——Vcc
  • GND ——GND
  • D1(GPIO5)——接收
  • D2(GPIO4)——发送

SIM900 :

  • 电源电压:3.4V – 4.5V
  • 省电模式:睡眠模式功耗= .5mA
  • 频段:SIM900A双频段:EGSM900,DCS1800。
  • 工作温度:-30ºC至+80ºC
  • 支持MIC和音频输入
  • 喇叭输入
  • UART接口支持
  • 通过调试端口进行固件升级
  • 通讯:AT命令(简介

GSM / GPRS调制解调器具有内部TCP / IP堆栈,能够通过GPRS与Internet连接。

这是一个SMT类型的模块,并有集成AMR926EJ-S内核的功能非常强大的单芯片处理器,该处理器在各种工业产品中都非常流行。

项目演示:

代码:

#include <SoftwareSerial.h>
#include <TinyGPS++.h>
static const int RXPin = 2, TXPin = 3;
static const uint32_t GPSBaud = 9600;
int  m = 9740;
int y = 71;
TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin); 
SoftwareSerial SIM900(7, 8);
int Buzzer = 4; 
String textForSMS;
int Switch = 5; 

String datareal;
String dataimaginary;
String combined;
int raw = 1000000;

String datareal2;
String dataimaginary2;
String combined2;

double longitude;
double latitude;

void setup()
{
  SIM900.begin(19200);
  Serial.begin(9600);
  ss.begin(GPSBaud);
  delay(10000); 
  Serial.println(" logging time completed!");
  randomSeed(analogRead(0));
  pinMode(Switch, INPUT);
  digitalWrite(Switch, HIGH);
  pinMode(Buzzer, OUTPUT);
  digitalWrite(Buzzer, LOW);

  Serial.println(F("DeviceExample.ino"));
  Serial.print(F("Testing TinyGPS++ library v. "));
  Serial.println(TinyGPSPlus::libraryVersion());

  Serial.println();
}

void sendSMS(String message)
{
  SIM900.print("AT+CMGF=1\r");                     
  delay(100);
  SIM900.println("AT + CMGS = \"+918830584864\"");  
  delay(100);
  SIM900.println(message);                         
  delay(100);
  SIM900.println((char)26);                        
  delay(100);
  SIM900.println();
  delay(5000);                                     

}

void loop()
{
  int reading;
  
  while (ss.available() > 0)
    if (gps.encode(ss.read()))
      displayInfo();

  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));
    while (true);
  }
  
  if (digitalRead(Switch) == LOW)
  {
    displayInfo();
    latitude = gps.location.lat(), 6 ;
    longitude = gps.location.lng(), 6 ;
    long datareal = int(latitude);
    int fahad = ( latitude - datareal) * 100000;
    long datareal2 = int(longitude);
    int fahad2 = (longitude - datareal2 ) * 100000;
    textForSMS.concat(fahad);
    //textForSMS = "Longitude:  ";
    textForSMS.concat(datareal2);
    textForSMS = textForSMS + ".";
    textForSMS.concat(fahad2);
    //textForSMS = textForSMS + " Latitude: ";
    textForSMS.concat(datareal);
    textForSMS = textForSMS + ".";
    sendSMS(textForSMS);
    Serial.println(textForSMS);
    Serial.println("message sent.");
    delay(5000);
  }
  else
    digitalWrite(Switch, HIGH);
  digitalWrite(Buzzer, LOW);
}


void displayInfo()
{
  Serial.print(F("Location: "));
  if (gps.location.isValid())
  {
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6);
    Serial.print(" ");
    Serial.print(F("Speed:"));
    Serial.print(gps.speed.kmph());
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.print(F("  Date/Time: "));
  if (gps.date.isValid())
  {
    Serial.print(gps.date.month());
    Serial.print(F("/"));
    Serial.print(gps.date.day());
    Serial.print(F("/"));
    Serial.print(gps.date.year());
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.print(F(" "));
  if (gps.time.isValid())
  {
    if (gps.time.hour() < 10) Serial.print(F("0"));
    Serial.print(gps.time.hour());
    Serial.print(F(":"));
    if (gps.time.minute() < 10) Serial.print(F("0"));
    Serial.print(gps.time.minute());
    Serial.print(F(":"));
    if (gps.time.second() < 10) Serial.print(F("0"));
    Serial.print(gps.time.second());
    Serial.print(F("."));
    if (gps.time.centisecond() < 10) Serial.print(F("0"));
    Serial.print(gps.time.centisecond());
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.println();
}

gps
加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论