Módulo Arduino + GPS - Notificador de Destino
Componentes e suprimentos
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Ferramentas e máquinas necessárias
| ||||
|
Aplicativos e serviços online
|
Sobre este projeto
Introdução:o problema e a solução
Todos sabem que os engarrafamentos podem ser uma grande perda de tempo. E é impossível prever quanto tempo levaria da origem ao destino.
O problema dos engarrafamentos me afetou quando vim para uma cidade há dois meses. Todos os dias passo mais de duas horas presa em congestionamentos. E eu senti o seguinte:por que não posso utilizar esse tempo para fazer algo?
Nota:eu uso transporte público. :-)
Há muitas outras coisas que você pode fazer enquanto está preso no trânsito!
Alguns dos itens abaixo não são apenas divertidos, mas também produtivos:
- Use o tempo para pensar e planejar, seja para projetos atuais e futuros.
- Aproveite o tempo para se educar, assistir a vídeos de instrução ou fazer um curso de e-learning no Udemy, Coursera etc.
E, claro, fazendo produtos eletrônicos sempre me inspiram. Portanto, construí um notificador de destino usando o Arduino e o módulo GPS. Então, o que ele faz é sempre que você estiver próximo ao seu destino, ele o notifica por LED brilhante ou por vibração (usando um mini motor vibratório). Eu forneci circuitos para LED e motor vibratório.
Para isso, primeiro você precisa encontrar a latitude e a longitude para definir a localização. Depois de encontrar sua localização, você pode usar os valores de latitude e longitude para encontrar a distância até a localização e, mantendo um intervalo, você pode ligar o notificador. A lógica é simples, certo ?!
Então vamos começar.......
Peças e ferramentas:
Para começar com seu notificador de destino, aqui estão as partes necessárias:
- Arduino UNO
- Módulo GPS NEO-6M
GPS significa sistema de posicionamento global e pode ser usado para determinar a posição, o tempo e a velocidade se você estiver viajando.
- Este módulo possui uma antena externa e EEPROM embutida.
- Interface:RS232 TTL
- Fonte de alimentação:3V a 5V
- Baudrate padrão:9600 bps
- Funciona com frases NMEA padrão
O módulo NEO-6M GPS possui quatro pinos:VCC, RX, TX e GND. O módulo se comunica com o Arduino via comunicação serial usando os pinos TX e RX, então a fiação não poderia ser mais simples:
Módulo NEO-6M GPS Fiação para Arduino UNO
VCC VIN
Pino RX TX definido no serial do software
Pino TX RX definido no serial do software
GND GND
L293D IC
O L293D é um driver de motor IC de 16 pinos que pode controlar até dois motores CC simultaneamente em qualquer direção.
Por que usar o L293D?
A entrada para o IC do driver do motor ou driver do motor é um sinal de baixa corrente. A função do circuito é converter o sinal de baixa corrente em um sinal de alta corrente. Esse sinal de alta corrente é então fornecido ao motor.
Biblioteca TinyGPS ++ :
A biblioteca TinyGPS ++ simplifica a obtenção de informações sobre a localização em um formato útil e fácil de entender.
A biblioteca TinyGPS ++ permite que você obtenha muito mais informações do que apenas a localização, e de forma simples, além da localização, você pode obter:
>> data
>> tempo
>> velocidade
>> curso
>> altitude
>> satélites
>> hdop
Capturando Latitude e Longitude:
Vou sugerir baixar arquivos fritzing fornecidos no final do projeto para melhor esclarecimento de conexão ou se tiver alguma dúvida sinta-se à vontade para perguntar nos comentários.
Código Arduino para captura de localização:
#include
#include
static const int RXPin =4, TXPin =3;
static const uint32_t GPSBaud =9600;
// O objeto TinyGPS ++
TinyGPSPlus gps;
// A conexão serial com o dispositivo GPS
SoftwareSerial ss (RXPin, TXPin);
configuração void () {
Serial.begin (9600);
ss.begin (GPSBaud);
}
void loop () {
// Este esboço exibe informações sempre que um novo frase está codificada corretamente.
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);
}
}
}
Observação:você deve instalar Biblioteca TinyGPS ++
conecte de acordo com o diagrama de circuito e carregue o código acima, abra o monitor serial a uma taxa de transmissão de 9600 e você verá a seguinte saída
Nota: Para obter a latitude e longitude pode demorar algum tempo, porque o receptor precisa capturar os sinais. sempre que começa a receber sinais, o LED do módulo GPS pisca.
Notificador de destino através de LED:
Então para garantir que minha ideia funcione fiz um protótipo usando LED para avisar o destino. Então o que eu fiz foi adicionar valores de Latitude e Longitude de destino do código anterior (Read_Lat_Lng.ino) e encontrei a distância até o destino da localização atual. E usado para definir a faixa na qual o LED deve acender.
Código:
#include
#include
static const int RXPin =4, TXPin =3;
static const uint32_t GPSBaud =9600;
// O objeto TinyGPS ++
TinyGPSPlus gps;
// A conexão serial com o dispositivo GPS
SoftwareSerial ss (RXPin, TXPin);
// Para estatísticas que acontecer a cada 5 segundos
unsigned long last =0UL;
int ledPin =13;
configuração void ()
{
Serial.begin (115200);
ss.begin (GPSBaud);
pinMode (ledPin, OUTPUT);
}
void loop ()
{
// Despachar caracteres de entrada
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 () - último> 5000)
{
Serial.println ();
if (gps.location.isValid ())
{
// substituir os valores 'Dest_LAT' e 'Dest_LON' bas edon sua localização
// você pode encontrar Latitude e Longitude em 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 ("Distância até Destino ="));
Serial.print (distanceToDest / 1000, 6); // * Imprime a distância até o destino
if (distanceToDest / 1000 <0,050000) // Aqui, quando distanceToDest / 1000 é menor que 0,050000, o LED acende. Portanto, altere * a distância até o destino de acordo com sua necessidade.
{
digitalWrite (ledPin, HIGH);
}
outro
{
digitalWrite (ledPin, LOW);
}
}
if (gps.charsProcessed () <10)
Serial.println (F ("AVISO:Sem dados GPS. Verifique a fiação."));
last =millis ();
Serial.println ();
}
}
Carregue o código e você verá o seguinte no monitor serial.
Portanto, a distância até o destino pode ser usada para definir o intervalo em que a operação de saída (notificação) deve ser executada.
O último!
OK, meu protótipo funcionou bem. Agora quero encerrar meu projeto em uma caixa que pode acomodar um Arduino, módulo GPS, motor com driver IC e fonte de alimentação de 9V.
Conexão ao IC L293D
- Conecte 5V para ativar 1, Vs e Vss no L293D
- Conecte os pinos de saída digital (estamos usando 6 e 7) à entrada 1 e à entrada 2 no L293D.
- Conecte o GND do Arduino a ambos os pinos GND no mesmo lado do L293D
- Por fim, conecte a saída 1 e a saída 2 do L293D aos pinos do motor.
Código:
#include
#include
static const int RXPin =4, TXPin =3;
static const uint32_t GPSBaud =9600;
// O objeto TinyGPS ++
TinyGPSPlus gps;
// A conexão serial com o dispositivo GPS
SoftwareSerial ss (RXPin, TXPin);
// Para estatísticas que acontecer a cada 5 segundos
unsigned long last =0UL;
int motorpin1 =6;
int motorpin2 =7;
configuração vazia ()
{
Serial .begin (115200);
ss.begin (GPSBaud);
pinMode (motorpin1, OUTPUT);
pinMode (motorpin2, OUTPUT);
}
void loop ()
{
// Despachar caracteres de entrada
while (ss.available ()> 0)
gps.encode (ss.read ());
se (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 ( ) - último> 5000)
{
Serial.println ();
if (gps.location.isValid ())
{
// substitua os valores 'Dest_LAT' e 'Dest_LON' com base em sua localização
// você pode encontrar Latitude e Longitude em 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 ("Distância até o destino ="));
Serial.print (distanceToDest / 1000, 6); // * Imprime a distância até o destino
if (distanceToDest / 1000 <0,050000) // Aqui, quando distanceToDest / 1000 é menor que 0,050000, o LED acende. Portanto, altere * a distância até o destino de acordo com sua necessidade.
{
digitalWrite (motorpin1, LOW);
digitalWrite (motorpin2, HIGH);
}
else
{
digitalWrite (motorpin1, ALTO);
digitalWrite (motorpin2, ALTO);
}
}
if (gps.charsProcessed () <10)
Serial.println (F ("AVISO:Sem dados GPS. Verifique a fiação."));
último =milis ();
Serial.println ();
}
}
Bom trabalho!
Código
- Read_Lat_Lng.ino
- Destination_notifier_LED.ino
- Destination_notifier_motor.ino
Read_Lat_Lng.ino Arduino
#include#include static const int RXPin =4, TXPin =3; static const uint32_t GPSBaud =9600; // O TinyGPS ++ objectTinyGPSPlus gps; // A conexão serial com o GPS deviceSoftwareSerial ss (RXPin, TXPin); configuração vazia () {Serial.begin (9600); ss.begin (GPSBaud);} void loop () {// Este esboço exibe informações sempre que uma nova frase é codificada corretamente. 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); }}}
Destination_notifier_LED.ino Arduino
#include#include static const int RXPin =4, TXPin =3; static const uint32_t GPSBaud =9600; // O TinyGPS ++ objectTinyGPSPlus gps; // A conexão serial com o GPS deviceSoftwareSerial ss (RXPin, TXPin); // Para estatísticas que acontecem a cada 5 segundosunsigned long last =0UL; int ledPin =13; void setup () {Serial.begin (115200); ss.begin (GPSBaud); pinMode (ledPin, OUTPUT);} void loop () {// Despacha caracteres de entrada enquanto (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 ()) {// substitua os valores 'Dest_LAT' e 'Dest_LON' com base em sua localização // você pode encontrar Latitude e Longitude em 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 ("Distância até o destino =")); Serial.print (distanceToDest / 1000, 6); // * Imprime a distância até o destino se (distanceToDest / 1000 <0,050000) // Aqui, quando distanceToDest / 1000 é menor que 0,050000, o LED acende. Portanto, altere * a distância até o destino de acordo com sua necessidade. {digitalWrite (ledPin, HIGH); } else {digitalWrite (ledPin, LOW); }} if (gps.charsProcessed () <10) Serial.println (F ("AVISO:Sem dados GPS. Verifique a fiação.")); último =milis (); Serial.println (); }}
Destination_notifier_motor.ino Arduino
#include#include static const int RXPin =4, TXPin =3; static const uint32_t GPSBaud =9600; // O TinyGPS ++ objectTinyGPSPlus gps; // A conexão serial com o GPS deviceSoftwareSerial ss (RXPin, TXPin); // Para estatísticas que acontecem a cada 5 segundosunsigned 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 () {// Despacha caracteres de entrada enquanto (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 ()) {// substitua os valores 'Dest_LAT' e 'Dest_LON' com base em sua localização // você pode encontrar Latitude e Longitude em 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 ("Distância até o destino =")); Serial.print (distanceToDest / 1000, 6); // * Imprime a distância até o destino se (distanceToDest / 1000 <0,050000) // Aqui, quando distanceToDest / 1000 é menor que 0,050000, o LED acende. Portanto, altere * a distância até o destino de acordo com sua necessidade. {digitalWrite (motorpin1, LOW); digitalWrite (motorpin2, HIGH); } else {digitalWrite (motorpin1, HIGH); digitalWrite (motorpin2, HIGH); }} if (gps.charsProcessed () <10) Serial.println (F ("AVISO:Sem dados GPS. Verifique a fiação.")); último =milis (); Serial.println (); }}
Esquemas
read_lat_lng_l3VSL54w0k.fzz destination_notifier_led_c7qaqTImXg.fzz destination_notifier_motor_fGc8OV6Y0w.fzzProcesso de manufatura