Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Mich verfolgen

Komponenten und Verbrauchsmaterialien

Arduino Mega 2560
× 1
NEO 6 GPS
× 1
Adafruit SD-Kartenschild
× 1
Adafruit SD-Kartenschild
× 1
Seeedstudio gprs Shield V2.0
× 1
Seeed GPRS Shield V2.0
× 1
Jumper (generisch)
× 1
9-V-Batterie (generisch)
× 1
Box
× 1
Box
× 1

Über dieses Projekt

Vor einiger Zeit habe ich beschlossen, einen Auto-/Personal-Tracker zu bauen.

Dies war mein erster Prototyp in dieser Richtung.


Das System selbst ist sehr einfach. Nur ein Arduino Mega, ein GPS, ein GPRS-Shield und eine SD-Karte. Dieser ist optional, aber ich habe ihn hinzugefügt, weil ich dachte, dass meine Freunde beim Starten einer Herausforderung in Facebook das System anrufen und eine SMS mit meiner Position oder meiner letzten bekannten Position erhalten.


Das System sucht immer nach der aktuellen Position. Ruft jemand die Nummer der SIM-Karte an, sendet das System eine SMS mit der aktuellen Position und einem Link zu Google Maps. Zum Beispiel:


Der Standort von Hugo ist jetzt:Lat.:54.315010, Log:10.130997. http://maps.google.com/maps?q=54.315010,+10.130997


Wenn das GPS keine Position empfängt, sendet das System die letzte bekannte Position. Zum Beispiel:


Ich kann Hugo nicht finden. Das letzte Mal, dass ich ihn gesehen habe, war in: Lat:54.315010, Log: 10.130997. http://maps.google.com/maps?q=54.315010,+10.130997


Datum, Uhrzeit, Position und SMS-Status werden dann auf der SD-Karte gespeichert.


Komponenten

Ich habe verwendet:


1x Arduino MEGA

1x GPRS-Schild (Es ist auch möglich, andere auf dem Markt erhältliche GSM-Schilde zu verwenden) 

1x GPS (ich habe das NEO 6 verwendet, sehr beliebt bei ebay)

1x SD-Kartenschild 

1x 9V Batterie

1x Plastikbox

Einige Drähte


Verbinden Sie die Komponenten


Da der Arduino Mega eine andere Pinbelegung verwendet, sind einige Neuverkabelungen erforderlich.

Zuerst verwendet das SD Card Shield, das für Arduino Uno entwickelt wurde, die Pins 10 bis 13 für SPI. Damit dies auf Mega funktioniert, müssen sie an die SPI-Pins von MEGA "übergeben" werden.

Arduino UNO SPI-Pins - Arduino MEGA SPI-Pins

MOSI - 11 bis 51

MISO - 12 bis 50

SCK - 13 bis 52

SS - 10 bis 53

Beim GPRS-Shield müssen zuerst die Kommunikationspins auf Software Serial im J7-Jumper des Shields eingerichtet werden.

Dann habe ich mit einigen Drähten die Pins 7 und 8 im GPRS-Schild mit dem seriellen 1-Port verbunden (Pins 18 und 19 im Arduino Mega).

Weitere Informationen zum Anschließen der SIM-Karte im GPRS-Shield finden Sie in meinem anderen Projekt in Hackster.


Das GPS ist mit dem Serial 2-Port (Pins 16 und 17) im Arduino Mega verbunden.

Auch die für das GPS notwendige Stromversorgung wird aus dem 5V-Pin und dem GND-Pin der SD-Karte entnommen.


Die 9V-Batterie kann an den Vin-Pin oder den Power-Klinkenstecker angeschlossen werden.

Vorbereitung zum Schließen der Box und Feldtest.

Code


Ich hinterlasse hier einige kurze Notizen zum Code.


Ich habe diese Bibliothek für das GPRS Shield verwendet.

Um das Arduino Mega verwenden zu können, müssen einige Änderungen vorgenommen werden:


1) Öffnen Sie GSM.h und kommentieren Sie die entsprechenden Zeilen wie unten, z.B. für Arduino Mega:

//#define UNO

#define MEGA


2) Decommentieren Sie in HWSerial.h die Zeile für Mega-Definition, z.B. für Arduino Mega:

#define MEGA


Für GPS verwende ich diese Bibliothek.


Das Programm selbst läuft sehr einfach. Nach allen Startroutinen (GPRS-, GPS- und SD-Karteninitialisierung) versucht das GPS, die Anzahl der verfügbaren Satelliten und einen gültigen GPS-Koordinatenpunkt zu ermitteln.

Wenn während dieser Zeit ein Anruf getätigt wird, wird der Anruf automatisch abgewiesen und es passiert nichts.

Wenn das GPS einen gültigen Standort hat und mehr als 3 Satelliten erkennt (ich gehe davon aus, dass das GPS guten Empfang hat), sendet das System bei einem Anruf eine SMS mit meiner Position an die Rufnummer. Alle diese Daten werden auf der SD-Karte gespeichert.

Wenn das GPS weniger als 3 Satelliten hat, kann keine gültige Position abgerufen werden. Wenn also ein Anruf getätigt wird, erhält die Rufnummer eine SMS mit meiner letzten bekannten Position. Auch hier werden alle Daten auf der SD-Karte gespeichert.


Vor- und Nachteile


Da dies ein Prototyp ist, gibt es viele Dinge, die nicht richtig funktioniert haben. Aber das Ziel ist immer, sich zu verbessern.

Zuerst hält der Akku nur eine Stunde!! Ich habe keine Energiesparmechanismen in die Software implementiert. Für zukünftige Verbesserungen ist der "Schlafmodus" daher ein Muss.

Auch die Größe wurde überprüft und ich entwerfe ein komplett neues Board. Der erste Blick ist dieser:

Bitte schreiben Sie mir, wenn Sie einen Fehler gefunden haben, Anregungen/Verbesserungen oder Fragen haben.

Danke fürs Lesen.

Hugo Gomes

Code

  • Code
CodeArduino
#include "SIM900.h"#include #include "sms.h"#include "call.h"#include //Um Pins für Software/Hardware Serial zu ändern, verwenden Sie 27, 28 Zeilen in GSM.cpp.//Um Arduino Mega zu verwenden, definieren Sie bitte MEGA in Zeile 5 in GSM.h.#include #include //Mega CS pinconst int chipSelect =53; //Wir müssen die Klassen für SMS und Anrufe erstellen.CallGSM call;SMSGSM sms;char number[20];byte stat =0;int value =0;char value_str[5];//GPS Variable// Das TinyGPS++ ObjektTinyGPSPlus gps;const char *googlePrefix ="http://maps.google.com/maps?q=";double Lat;double Long;int Tag, Monat, Jahr;int Stunde, Minute, Sekunde;int num_sat;boolean one_point_true =false;void setup(){//Serielle Verbindung. Serial.begin (9600); // GPRS-Verbindung Serial.print (F ("Starting GSM ...")); //Konfiguration des Shields mit Baudrate starten. if (gsm.begin (9600)) Serial.println (F ("READY")); sonst Serial.println (F ("IDLE")); // GPS-Verbindung Serial.println (F ("Starting GPS")); // GPS-Com-Port Serial2.begin (9600); // SD-Karte starten Serial.print (F ("SD-Karte initialisieren ...")); // Stellen Sie sicher, dass der Standard-Chipauswahl-Pin auf // Ausgang gesetzt ist, auch wenn Sie ihn nicht verwenden:pinMode(53, OUTPUT); // sehen, ob die Karte vorhanden ist und initialisiert werden kann:if (! SD.begin (chipSelect)) { Serial.println (F ("Karte fehlgeschlagen oder nicht vorhanden")); // nichts weiter tun:return; } Serial.println (F ("Karte initialisiert."));} //******************************** ********************************************* // Main Loopvoid Schleife () { Get_GPS (); // Hole die Position Check_call(); //Sehen, ob jemand anruft};//////////////////////////////////////// ////////////////////////////////////////********* ************************************************* ****************** // Hole die Position vom GPSvoid Get_GPS(){ while (Serial2.available()> 0) if (gps.encode(Serial2.read ())) num_sat =gps.satellites.value(); //Seriell.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()) {Tag =gps.date.day(); Monat =gps.Datum.Monat(); Jahr =gps.date.year(); aufrechtzuerhalten. Wenn (gps.time.isValid()) {Stunde =gps.time.hour(); Minute =GPS.Zeit.Minute(); Sekunde =GPS.Zeit.Sekunde(); } smartDelay(500); if (millis ()> 5000 &&gps.charsProcessed () <10) { Serial.println (F ("Kein GPS erkannt:Verkabelung überprüfen")); während (wahr); }} //************************************************ ********************************// Diese benutzerdefinierte Version von delay() stellt sicher, dass das GPS-Objekt// "fed".static void smartDelay(unsigned long ms){ unsigned long start =millis(); do { while (Serial2.available ()) gps.encode (Serial2.read ()); } while (millis() - start =3 &&one_point_true ==true) { char sms_OK[160]; sprintf(sms_OK, "Hugo Standort ist jetzt:Lat:%s, Log:%s. %s%s,+%s\n", lat_print, Long_print, googlePrefix, lat_print, Long_print); Serial.println (sms_OK); error =sms.SendSMS(Nummer, sms_OK); Verzögerung (500); if (error ==0) // Status prüfen {Serial.println (F ("SMS ERROR")); aufrechtzuerhalten. Sonst {Serial.println (F ("SMS OK")); } } else if (num_sat <3 &&one_point_true ==true) { char sms_NOK[150]; sprintf(sms_NOK, "Ich kann Hugo nicht finden. Das letzte Mal, als ich ihn gesehen habe, war in:Lat:%s, Log:%s. %s%s,+%s\n", lat_print, Long_print , googlePrefix, lat_print, Long_print); Serial.println (sms_NOK); int error =sms.SendSMS(Zahl, sms_NOK); if (error ==0) // Status prüfen {Serial.println (F ("SMS ERROR")); aufrechtzuerhalten. Sonst {Serial.println (F ("SMS OK")); } } else if (one_point_true ==false) { Serial.println (F ("Kein gültiger GPS-Punkt")); } // Alles in der SD-Kartendatei speichern dataFile =SD.open("datalog.txt", FILE_WRITE); // wenn die Datei verfügbar ist, schreibe hinein:if (dataFile) { dataFile.print(Date); dataFile.print(" "); dataFile.print(time1); dataFile.print(" "); dataFile.print (Nummer); dataFile.print(" "); dataFile.print (lat_print); dataFile.print(", "); dataFile.print (Long_print); dataFile.print(" "); dataFile.print (Fehler); dataFile.println(); dataFile.close(); } // Wenn die Datei nicht geöffnet ist, wird ein Fehler angezeigt:else { Serial.println (F ("Fehler beim Öffnen von datalog.txt")); }}///////////////////////////////////////////// ////////////////////////////////

Schaltpläne


Herstellungsprozess

  1. Roboter mit Raspberry Pi und Bridge Shield
  2. Webbetriebener DMX-Controller
  3. Arduino Spybot
  4. UnifiedWater v1
  5. HSVClock
  6. Schneepflugroboter
  7. Mobile Abstimmungsbox
  8. Whac-A-Mole (Button Edition)
  9. Moderne Jukebox
  10. Arduino Apple Watch