Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Rastreie-ME

Componentes e suprimentos

Arduino Mega 2560
× 1
NEO 6 GPS
× 1
Adafruit SD Card Shield
× 1
Adafruit SD Card Shield
× 1
Seeedstudio gprs shield V2.0
× 1
Viu o GPRS Shield V2.0
× 1
Fios de jumpers (genérico)
× 1
Bateria de 9 V (genérica)
× 1
Caixa
× 1
Caixa
× 1

Sobre este projeto


Há algum tempo, decidi construir um rastreador de carro / pessoal.

Este foi meu primeiro protótipo nesta direção.




O próprio sistema é muito simples. Apenas um Arduino Mega, um GPS, um GPRS Shield e um cartão SD. Este é opcional mas incluí porque pensei em lançar um desafio aos meus amigos do Facebook, eles ligam para o sistema e recebem um SMS com a minha posição ou a minha última posição conhecida.




O sistema está sempre procurando a posição real. Se alguém ligar para o número do cartão SIM, o sistema enviará um SMS com a posição real e com um link para o google maps. Por exemplo:




A localização do Hugo agora é:Lat:54.315010, Log:10.130997. http://maps.google.com/maps?q=54.315010,+10.130997




Se o GPS não estiver recebendo nenhuma posição, o sistema enviará a última posição conhecida. Por exemplo:




Não consigo encontrar Hugo. A última vez que o vi foi em:Lat:54.315010, Log:10.130997. http://maps.google.com/maps?q=54.315010,+10.130997




A data, hora, posição e status do SMS são armazenados no cartão SD.







Componentes




Eu usei:




1x Arduino MEGA

1x Escudo GPRS (também é possível usar outros escudos GSM disponíveis no mercado)

1x GPS (usei o NEO 6, muito popular no ebay)

1x escudo do cartão SD

1 bateria de 9V

1x caixa de plástico

Alguns fios







Conecte os componentes





Uma vez que o Arduino Mega usa uma pinagem diferente, algumas religações são necessárias.

Primeiro, o SD Card Shield, que foi projetado para Arduino Uno, usa os pinos 10 a 13 para SPI, então para que funcione no Mega, eles precisam ser "passados" para os pinos SPI no MEGA.

Pinos Arduino UNO SPI - pinos Arduino MEGA SPI

MOSI - 11 a 51

MISO - 12 a 50

SCK - 13 a 52

SS - 10 a 53

No GPRS Shield primeiro é necessário configurar os pinos de comunicação para Software Serial no jumper J7 do shield.

Em seguida, usando alguns fios, conectei os pinos 7 e 8 na blindagem GPRS à porta Serial 1 (pinos 18 e 19 no Arduino Mega).

Para obter mais detalhes sobre como conectar o cartão SIM no GPRS Shield, consulte meu outro projeto no Hackster.




O GPS é conectado à porta Serial 2 (pinos 16 e 17) no Arduino Mega.

Além disso, a energia necessária para o GPS é retirada do pino 5V do cartão SD e do pino GND.




A bateria de 9 V pode ser conectada ao pino Vin ou ao plugue de alimentação.

Preparando para fechar a caixa e teste de campo.





Código





Deixo aqui algumas notas rápidas sobre o código.




Usei essa biblioteca para o GPRS Shield.

É necessário fazer algumas alterações para usar o Arduino Mega:




1) Abra GSM.h e comente as linhas apropriadas como abaixo, por exemplo para Arduino Mega:

// # define UNO

#define MEGA




2) Em HWSerial.h descomente a linha para definição de Mega, por ex. para Arduino Mega:

#define MEGA




Para GPS, estou usando esta biblioteca.




O programa em si é executado de maneira muito simples. Após todas as rotinas de inicialização (inicialização GPRS, GPS e cartão SD), o GPS tentará determinar a quantidade de satélites que tem disponíveis e um ponto de coordenadas GPS válido.

Se a chamada for feita durante este período, a chamada será automaticamente rejeitada e nada acontecerá.

Quando o GPS tem uma localização válida e está detectando mais de 3 satélites (presumo onde o GPS tem boa recepção), se uma chamada for feita, o sistema enviará um SMS para o número de chamada com a minha posição. Todos esses dados serão armazenados no cartão SD.

Se o GPS tiver menos de 3 satélites, nenhuma posição válida pode ser recuperada, então se uma chamada for feita, o número da chamada receberá um SMS com minha última posição conhecida. Novamente, todos os dados são armazenados no cartão SD.







Prós e contras





Por ser um protótipo, muitas coisas não funcionaram bem. Mas o objetivo é sempre melhorar.

Primeiro a bateria dura apenas uma hora !! Não implementei nenhuma mecânica de economia de energia no software. Portanto, para melhorias futuras, o "Modo de suspensão" é obrigatório.

O tamanho também foi revisado e eu projetei uma nova placa completa. A primeira olhada é esta:

Por favor, escreva-me se você encontrou algum erro ou se você tiver alguma sugestão / melhoria ou perguntas.

Obrigado pela leitura.

Hugo gomes

Código

  • Código
Código Arduino
 #include "SIM900.h" #include  #include "sms.h" #include "call.h" #include  // Para alterar os pinos para Software / Hardware Serial, use 27, 28 linhas em GSM.cpp.//Para usar Arduino Mega, defina MEGA na linha 5 em GSM.h. # include  #include  // Mega CS pinconst int chipSelect =53; // Temos que criar as classes para SMSs e chamadas.CallGSM call; SMSGSM sms; char number [20]; byte stat =0; int value =0; char value_str [5]; // GPS Variable // O TinyGPS ++ objectTinyGPSPlus gps; const char * googlePrefix ="http://maps.google.com/maps?q=";double Lat; double Long; int dia, mês, ano; int hora, minuto, segundo; int num_sat; booleano one_point_true =false; void setup () {// Conexão serial. Serial.begin (9600); // Conexão GPRS Serial.print (F ("Iniciando GSM ...")); // Inicie a configuração do escudo com baudrate. if (gsm.begin (9600)) Serial.println (F ("PRONTO")); senão Serial.println (F ("IDLE")); // Conexão GPS Serial.println (F ("Iniciando GPS")); // Porta de comunicação GPS Serial2.begin (9600); // SD Card start Serial.print (F ("Inicializando cartão SD ...")); // certifique-se de que o pino de seleção de chip padrão está configurado para // saída, mesmo se você não o usar:pinMode (53, OUTPUT); // veja se o cartão está presente e pode ser inicializado:if (! SD.begin (chipSelect)) {Serial.println (F ("O cartão falhou ou não está presente")); // não faça mais nada:return; } Serial.println (F ("cartão inicializado."));} // ******************************** *********************************************** // Loopvoid principal loop () {Get_GPS (); // Obtenha a posição Check_call (); // Veja se alguém está ligando}; /////////////////////////////////////////// ///////////////////////////////////////////// ********* *************************************************** ******************* // Obter a posição do GPSvoid Get_GPS () {while (Serial2.available ()> 0) if (gps.encode (Serial2.read ())) num_sat =gps.satellites.value (); //Serial.println(num_sat); if (gps.location.isValid () ==1) {Lat =gps.location.lat (); Long =gps.location.lng (); if (Lat! =0 &&Long! =0) one_point_true =true; } if (gps.date.isValid ()) {day =gps.date.day (); mês =gps.date.month (); ano =gps.data.ano (); } if (gps.time.isValid ()) {hour =gps.time.hour (); minuto =gps.time.minute (); segundo =gps.time.second (); } smartDelay (500); if (millis ()> 5000 &&gps.charsProcessed () <10) {Serial.println (F ("Nenhum GPS detectado:verifique a fiação.")); enquanto (verdadeiro); }} // ********************************************* ********************************* // Esta versão personalizada de delay () garante que o objeto GPS // está sendo "alimentado" .static void smartDelay (unsigned long ms) {unsigned long start =millis (); fazer {while (Serial2.available ()) gps.encode (Serial2.read ()); } while (millis () - start  =3 &&one_point_true ==true) {char sms_OK [160]; sprintf (sms_OK, "a localização do Hugo é agora:Lat:% s, Log:% s.% s% s, +% s \ n", lat_print, Long_print, googlePrefix, lat_print, Long_print); Serial.println (sms_OK); erro =sms.SendSMS (número, sms_OK); atraso (500); if (erro ==0) // Verificar status {Serial.println (F ("SMS ERROR")); } else {Serial.println (F ("SMS OK")); }} else if (num_sat <3 &&one_point_true ==true) {char sms_NOK [150]; sprintf (sms_NOK, "Não consigo encontrar o Hugo. A última vez que o vi, foi em:Lat:% s, Log:% s.% s% s, +% s \ n", lat_print, Long_print , googlePrefix, lat_print, Long_print); Serial.println (sms_NOK); erro interno =sms.SendSMS (número, sms_NOK); if (erro ==0) // Verificar status {Serial.println (F ("SMS ERROR")); } else {Serial.println (F ("SMS OK")); }} else if (one_point_true ==false) {Serial.println (F ("Nenhum ponto GPS válido")); } // Salvar tudo no arquivo do cartão SD dataFile =SD.open ("datalog.txt", FILE_WRITE); // se o arquivo estiver disponível, escreva nele:if (dataFile) {dataFile.print (Date); dataFile.print (""); dataFile.print (time1); dataFile.print (""); dataFile.print (número); dataFile.print (""); dataFile.print (lat_print); dataFile.print (","); dataFile.print (Long_print); dataFile.print (""); dataFile.print (erro); dataFile.println (); dataFile.close (); } // se o arquivo não estiver aberto, aparecerá um erro:else {Serial.println (F ("erro ao abrir datalog.txt")); }} //////////////////////////////////////////////////// //////////////////////////////////// 

Esquemas


Processo de manufatura

  1. Robô usando Raspberry Pi e Bridge Shield
  2. Controlador DMX operado pela web
  3. Arduino Spybot
  4. UnifiedWater v1
  5. HSVClock
  6. Robô SnowPlow
  7. Caixa de votação móvel
  8. Whac-A-Mole (Edição de botão)
  9. Jukebox moderna
  10. Arduino Apple Watch