亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino + GPS 模块 - 目的地通知器

组件和用品

Arduino UNO
× 1
GPS 模块(通用)
NEO-6M GPS 模块
× 1
LED(通用)
× 1
Texas Instruments 双 H 桥电机驱动器 L293D
× 1
Brown Dog Gadgets 太阳能蟑螂振动盘马达
× 1
SparkFun Snappable Protoboard
× 1
9V 电池(通用)
× 1
9V to Barrel Jack Connector
× 1
一个盒子
将项目括在其中的东西。
× 1
跳线(通用)
× 1

必要的工具和机器

烙铁(通用)
剥线钳

应用和在线服务

Arduino IDE

关于这个项目

简介:问题与解决方案

每个人都知道交通拥堵会浪费大量时间。而且无法预测从出发地到目的地需要多长时间。

两个月前我来到一个城市时,交通堵塞的问题影响了我。每天我都要花两个多小时陷入困境。我觉得我为什么不能利用这段时间做点什么?

注意:我使用公共交通工具。 :-)

堵车时还有很多其他事情可以做!

下面的一些不仅有趣,而且还富有成效:

  • 利用时间为当前和未来的项目思考和计划。
  • 利用时间自学,观看教学视频或参加 Udemy、Coursera 等在线学习课程。

当然制作 电子产品总是激励着我。所以我使用 Arduino 和 GPS 模块构建了一个目的地通知程序。所以它的作用是每当您靠近目的地时,它都会通过发光的 LED 或通过振动(通过使用微型振动电机)通知您。我提供了LED和振动电机的电路。

为此,首先您需要找到纬度和经度来定义位置。找到您的位置后,您可以使用纬度和经度值来查找到该位置的距离,并通过保持一个范围来打开通知程序。逻辑很简单吧?!

那么让我们开始吧......

零件和工具:

要开始使用目的地通知程序,以下是必需的部分:

  • Arduino UNO
  • NEO-6M GPS 模块

全球定位系统 代表全球定位系统,可用于在旅行时确定位置、时间和速度。

  • 该模块具有外置天线和内置 EEPROM。
  • 接口:RS232 TTL
  • 电源:3V 至 5V
  • 默认波特率:9600 bps
  • 适用于标准的 NMEA 句子

NEO-6M GPS 模块有四个引脚:VCC、RX、TX 和 GND。该模块使用 TX 和 RX 引脚通过串行通信与 Arduino 通信,因此接线非常简单:

NEO-6M GPS 模块接线到 Arduino UNO

VCC VIN

软件串口中定义的RX TX引脚

TX RX 引脚定义在软件串口

地 地

L293D 集成电路

L293D是一款16针电机驱动IC,可同时控制任意方向的两个直流电机。

为什么要使用L293D?

电机驱动IC或电机驱动器的输入是一个低电流信号。该电路的作用是将低电流信号转换为高电流信号,然后将这个高电流信号提供给电机。

TinyGPS++ 库 :

TinyGPS++ 库使以有用且易于理解的格式获取位置信息变得简单。

TinyGPS++ 库可以让你获得更多的信息,而不仅仅是位置,而且很简单,除了位置,你还可以获得:

>>日期

>>时间

>>速度

>>课程

>>海拔

>>卫星

>>高清

捕获纬度和经度:

我建议下载项目结束时给出的 fritzing 文件,以便更好地阐明连接,或者如果您有任何疑问,请随时在评论中提问。

用于位置捕获的 Arduino 代码:

#include 
#include
static const int RXPin =4, TXPin =3;
static const uint32_t GPSBaud =9600;
// TinyGPS++ 对象
TinyGPSPlus gps;
// GPS 设备的串行连接
SoftwareSerial ss(RXPin, TXPin);
void setup(){
Serial.begin(9600);
ss.begin(GPSBaud);
}
void loop(){
// 此草图显示每次新的信息句子编码正确。
while (ss.available()> 0){
gps.encode(ss.read());
if (gps.location.isUpdated()){
Serial.print("Latitude=");
Serial.print(gps.location.lat(), 6);
Serial.print(" Longitude=");
Serial.println(gps.location.lng(), 6);
}
}
}

注意:您必须安装 TinyGPS++ 库

按照电路图连接并上传上面的代码,以9600的波特率打开串口监视器,您将看到以下输出

注意: 获取纬度和经度可能需要一些时间。因为接收器需要捕获信号。每当它开始收到信号时,GPS 模块上的 LED 就会闪烁。

通过 LED 的目的地通知:

所以为了确保我的想法可行,我制作了一个使用 LED 通知目的地的原型。所以我所做的是,我从以前的代码(Read_Lat_Lng.ino)中添加了目的地的纬度和经度值,并找到了从当前位置到目的地的距离。并用于设置LED必须点亮的范围。

代码:

#include 
#include
static const int RXPin =4, TXPin =3;
static const uint32_t GPSBaud =9600;
// TinyGPS++ 对象
TinyGPSPlus gps;
// 与 GPS 设备的串行连接
SoftwareSerial ss(RXPin, TXPin);
// 对于统计数据每 5 秒发生一次
unsigned long last =0UL;
int ledPin =13;
void setup()
{
Serial.begin(115200);
ss.begin(GPSBaud);
pinMode(ledPin, OUTPUT);
}
void loop()
{
// 分派输入字符
while (ss.available()> 0)
gps.encode(ss.read());
if (gps.location.isUpdated())
{
串行。 print(F(" Lat="));
Serial.print(gps.location.lat(), 6);
Serial.print(F(" Long="));
Serial.println(gps.location.lng(), 6);
}
else if (millis() - last> 5000)
{
Serial.println();
if (gps.location.isValid())
{
// 替换 'Dest_LAT' 和 'Dest_LON' 值 bas edon 你的位置
// 你可以从 Read_Lat_Lng.ino 中找到纬度和经度
static const double Dest_LAT =18.786254, Dest_LON =73.880798;
double distanceToDest =
TinyGPSPlus::distanceBetween(
gps.location.lat(),
gps.location.lng(),
Dest_LAT,
Dest_LON);
Serial.print(F("距离到目的地 ="));
Serial.print(distanceToDest/1000, 6); // *打印到目的地的距离
if(distanceToDest/1000 <0.050000) //这里当 distanceToDest/1000 小于 0.050000 时 LED 亮起。因此,根据您的要求更改*到目的地的距离。
{
digitalWrite(ledPin, HIGH);
}
else
{
digitalWrite(ledPin, LOW);
}
}
if (gps.charsProcessed() <10)
Serial.println(F("警告:没有 GPS 数据。检查接线。"));
last =millis();
Serial.println();
}
}

上传代码,你会在串口监视器上看到以下内容。

所以到目的地的距离可以用来定义输出操作(通知)必须执行的范围。

最后一个!

好的,我的原型工作正常。现在我想把我的项目装进一个盒子里,盒子里可以装一个Arduino、GPS模块、带驱动IC的电机和9V电源。

连接到 L293D IC

  • 连接 5V 以启用 L293D 上的 1、Vs 和 Vss
  • 将数字输出引脚(我们使用 6 和 7)连接到 L293D 上的输入 1 和输入 2。
  • 将 Arduino 的 GND 连接到 L293D 同一侧的两个 GND 引脚
  • 最后将 L293D 的输出 1 和输出 2 连接到您的电机引脚。

代码:

#include 
#include
static const int RXPin =4, TXPin =3;
static const uint32_t GPSBaud =9600;
// TinyGPS++ 对象
TinyGPSPlus gps;
// 与 GPS 设备的串行连接
SoftwareSerial ss(RXPin, TXPin);
// 对于统计数据每 5 秒发生一次
unsigned long last =0UL;
int motorpin1=6;
int motorpin2=7;
void setup()
{
串行.begin(115200);
ss.begin(GPSBaud);
pinMode(motorpin1,OUTPUT);
pinMode(motorpin2,OUTPUT);
}
void loop ()
{
// 分派输入字符
while (ss.available()> 0)
gps.encode(ss.read());
if (gps.location.isUpdated())
{
Serial.print(F(" Lat="));
Serial.print(gps.location.lat(), 6);
Serial.print(F(" Long="));
Serial.println(gps.location.lng(), 6);
}
else if (millis( ) - last> 5000)
{
Serial.println();
if (gps.location.isValid())
{
// 根据您的位置替换 'Dest_LAT' 和 'Dest_LON' 值
// 您可以从 Read_Lat_Lng.ino 中找到纬度和经度
static const double Dest_LAT =18.786254, Dest_LON =73.880798;
double distanceToDest =
TinyGPSPlus::distanceBetween(
gps.location.lat(),
gps.location.lng(),
Dest_LAT,
Dest_LON);
Serial.print(F("到目的地的距离="));
Serial.print(distanceToDest/1000, 6); // *打印到目的地的距离
if(distanceToDest/1000 <0.050000) //这里当 distanceToDest/1000 小于 0.050000 时 LED 亮起。因此,根据您的要求更改*到目的地的距离。
{
digitalWrite(motorpin1,LOW);
digitalWrite(motorpin2,HIGH);
}
else
{
digitalWrite(motorpin1, HIGH);
digitalWrite(motorpin2,HIGH);
}
}
if (gps.charsProcessed() <10)
Serial.println(F("警告:没有 GPS 数据。检查接线。"));
last =millis();
Serial.println();
}
}

制作愉快!

代码

  • Read_Lat_Lng.ino
  • Destination_notifier_LED.ino
  • Destination_notifier_motor.ino
Read_Lat_Lng.inoArduino
 #include #include static const int RXPin =4, TXPin =3;static const uint32_t GPSBaud =9600;// The TinyGPS++ objectTinyGPSPlus gps;// GPS的串行连接deviceSoftwareSerial ss(RXPin, TXPin);void setup(){Serial.begin(9600); ss.begin(GPSBaud);}void loop(){ // 每次正确编码新句子时,此草图都会显示信息。而 (ss.available()> 0){ gps.encode(ss.read()); if (gps.location.isUpdated()){ Serial.print("Latitude="); Serial.print(gps.location.lat(), 6); Serial.print(" 经度 ="); Serial.println(gps.location.lng(), 6); } }}
Destination_notifier_LED.inoArduino
#include #include static const int RXPin =4, TXPin =3;static const uint32_t GPSBaud =9600;// The TinyGPS++ objectTinyGPSPlus gps;// GPS的串行连接deviceSoftwareSerial ss(RXPin, TXPin);// 对于每 5 秒发生一次的统计信息unsigned long last =0UL;int ledPin =13;void setup(){ Serial.begin(115200); ss.begin(GPSBaud);pinMode(ledPin, OUTPUT);}void loop(){ // 当 (ss.available()> 0) gps.encode(ss.read()); if (gps.location.isUpdated()) { Serial.print(F(" Lat=")); Serial.print(gps.location.lat(), 6); Serial.print(F(" Long=")); Serial.println(gps.location.lng(), 6); } else if (millis() - last> 5000) { Serial.println(); if (gps.location.isValid()) { // 根据您的位置替换 'Dest_LAT' 和 'Dest_LON' 值 // 您可以从 Read_Lat_Lng.ino 中找到纬度和经度 static const double Dest_LAT =18.786254, Dest_LON =73.880798; double distanceToDest =TinyGPSPlus::distanceBetween( gps.location.lat(), gps.location.lng(), Dest_LAT, Dest_LON); Serial.print(F("到目的地的距离=")); Serial.print(distanceToDest/1000, 6); // *打印到目的地的距离 if(distanceToDest/1000 <0.050000) //这里当 distanceToDest/1000 小于 0.050000 时 LED 亮起。因此,根据您的要求更改*到目的地的距离。 { 数字写入(ledPin,高); } else { digitalWrite(ledPin, LOW); if (gps.charsProcessed() <10) Serial.println(F("警告:没有 GPS 数据。检查接线。"));最后=毫秒(); Serial.println(); }}
Destination_notifier_motor.inoArduino
#include #include static const int RXPin =4, TXPin =3;static const uint32_t GPSBaud =9600;// The TinyGPS++ objectTinyGPSPlus gps;// GPS的串行连接deviceSoftwareSerial ss(RXPin, TXPin);// 对于每 5 秒发生一次的统计信息unsigned long last =0UL;int motorpin1=6;int motorpin2=7;void setup(){ Serial.begin(115200); ss.begin(GPSBaud);pinMode(motorpin1,OUTPUT);pinMode(motorpin2,OUTPUT); }void loop(){ // 当 (ss.available()> 0) gps.encode(ss.read()); if (gps.location.isUpdated()) { Serial.print(F(" Lat=")); Serial.print(gps.location.lat(), 6); Serial.print(F(" Long=")); Serial.println(gps.location.lng(), 6); } else if (millis() - last> 5000) { Serial.println(); if (gps.location.isValid()) { // 根据您的位置替换 'Dest_LAT' 和 'Dest_LON' 值 // 您可以从 Read_Lat_Lng.ino 中找到纬度和经度 static const double Dest_LAT =18.786254, Dest_LON =73.880798; double distanceToDest =TinyGPSPlus::distanceBetween( gps.location.lat(), gps.location.lng(), Dest_LAT, Dest_LON); Serial.print(F("到目的地的距离=")); Serial.print(distanceToDest/1000, 6); // *打印到目的地的距离 if(distanceToDest/1000 <0.050000) //这里当 distanceToDest/1000 小于 0.050000 时 LED 亮起。因此,根据您的要求更改*到目的地的距离。 { digitalWrite(motorpin1,LOW);数字写入(motorpin2,高); } else { digitalWrite(motorpin1,HIGH);数字写入(motorpin2,高); if (gps.charsProcessed() <10) Serial.println(F("警告:没有 GPS 数据。检查接线。"));最后=毫秒(); Serial.println(); }}

示意图

read_lat_lng_l3VSL54w0k.fzz destination_notifier_led_c7qaqTImXg.fzz destination_notifier_motor_fGc8OV6Y0w.fzz

制造工艺

  1. Arduino 数字骰子
  2. JX 波形发生器
  3. 钢铁侠
  4. 找到我
  5. Arduino 3D 打印机械臂
  6. 如何将 Arduino Mega 与 NEO-6M GPS 模块连接
  7. Arduino 加湿器控制
  8. u-blox LEA-6H 02 GPS 模块,带有 Arduino 和 Python
  9. NeoMatrix Arduino Pong
  10. Arduino Joystick
  11. Arduino TEA5767 FM 收音机接收器
  12. 计步器(Arduino 101)