Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Volg MIJ

Componenten en benodigdheden

Arduino Mega 2560
× 1
NEO 6 GPS
× 1
Adafruit SD-kaartschild
× 1
Adafruit SD-kaartschild
× 1
Seeedstudio gprs shield V2.0
× 1
Seeed GPRS Shield V2.0
× 1
Jumperdraden (algemeen)
× 1
9V-batterij (algemeen)
× 1
Box
× 1
Box
× 1

Over dit project

Een tijdje terug besloot ik een Car/Personal tracker te bouwen.

Dit was mijn eerste prototype in deze richting.


Het systeem zelf is heel eenvoudig. Gewoon een Arduino Mega, een GPS, een GPRS-schild en een SD-kaart. Deze is optioneel, maar ik heb deze toegevoegd omdat ik dacht dat ze bij het lanceren van een uitdaging aan mijn vrienden in Facebook het systeem bellen en een sms krijgen met mijn positie of mijn laatst bekende positie.


Het systeem zoekt altijd naar de actuele positie. Als iemand het nummer van de simkaart belt, stuurt het systeem een ​​sms met de actuele positie en met een link naar google maps. Bijvoorbeeld:


Hugo locatie is nu:Lat:54.315010, Log:10.130997. http://maps.google.com/maps?q=54.315010,+10.130997


Als de GPS geen positie ontvangt, stuurt het systeem de laatst bekende positie. Bijvoorbeeld:


Ik kan Hugo niet vinden. De laatste keer dat ik hem zag, was in:Lat:54.315010, Logboek:10.130997. http://maps.google.com/maps?q=54.315010,+10.130997


De datum, tijd, positie en SMS-status worden vervolgens opgeslagen op de SD-kaart.


Componenten

Ik gebruikte:


1x Arduino MEGA

1x GPRS Shield (Het is ook mogelijk om andere GSM-shields te gebruiken die op de markt verkrijgbaar zijn) 

1x GPS (ik gebruikte de NEO 6, erg populair op eBay)

1x SD-kaartschild 

1x 9V batterij

1x plastic doos

Sommige draden


Sluit de componenten aan


Aangezien de Arduino Mega een andere pinout gebruikt, is enige herbedrading nodig.

Ten eerste gebruikt het SD Card Shield, dat is ontworpen voor Arduino Uno, pinnen 10 tot 13 voor SPI, dus om dit op Mega te laten werken, moeten ze worden "doorgegeven" aan de SPI-pinnen op MEGA.

Arduino UNO SPI-pinnen - Arduino MEGA SPI-pinnen

MOSI - 11 tot 51

MISO - 12 tot 50

SCK - 13 tot 52

SS - 10 tot 53

Op GPRS Shield is het eerst nodig om de communicatiepinnen in te stellen op Software Serial in de J7-jumper van het schild.

Vervolgens heb ik met behulp van enkele draden pinnen 7 en 8 in GPRS-schild aangesloten op seriële 1-poort (pinnen 18 en 19 in de Arduino Mega).

Zie mijn andere project in Hackster voor meer informatie over het aansluiten van de simkaart in het GPRS-schild.


De GPS is verbonden met Serial 2 Port (pins 16 en 17) in de Arduino Mega.

Ook de stroom die nodig is voor de GPS wordt gehaald uit de SD-kaart 5V pin en GND pin.


De 9V batterij kan worden aangesloten op de Vin pin of op de power jack plug.

Voorbereiden om de doos te sluiten en de veldtest uit te voeren.

Code


Ik laat hier wat korte opmerkingen over de code achter.


Ik heb deze bibliotheek gebruikt voor het GPRS-schild.

Het is noodzakelijk om enkele wijzigingen aan te brengen om de Arduino Mega te gebruiken:


1) Open GSM.h en becommentarieer de betreffende regels zoals hieronder, b.v. voor Arduino Mega:

//#define UNO

#define MEGA


2) In HWSerial.h decommenteer de regel voor Mega-definitie, b.v. voor Arduino Mega:

#define MEGA


Voor GPS gebruik ik deze bibliotheek.


Het programma zelf draait op een zeer eenvoudige manier. Na alle opstartroutines (GPRS, GPS en SD-kaartinitialisatie), zal de GPS proberen het aantal beschikbare satellieten en een geldig GPS-coördinatenpunt te bepalen.

Als er tijdens deze periode wordt gebeld, wordt de oproep automatisch geweigerd en gebeurt er niets.

Wanneer de GPS een geldige locatie heeft en meer dan 3 satellieten detecteert (ik ga ervan uit waar de GPS een goede ontvangst heeft), zal het systeem bij een oproep een sms naar het oproepnummer sturen met mijn positie. Al deze gegevens worden opgeslagen op de SD-kaart.

Als de GPS minder dan 3 satellieten heeft, kan er geen geldige positie worden opgevraagd, dus als er wordt gebeld, ontvangt het oproepnummer een sms met mijn laatst bekende positie. Ook hier worden alle gegevens op de SD-kaart opgeslagen.


Voors en tegens


Aangezien dit een prototype is, zijn er veel dingen die niet goed werkten. Maar het doel is altijd om te verbeteren.

Ten eerste gaat de batterij maar een uur mee!! Ik heb geen energiebesparende mechanica geïmplementeerd in de software. Dus voor toekomstige verbeteringen is "Slaapmodus" een must.

Ook de maat is bekeken en ik ontwerp een compleet nieuw bord. De eerste look is deze:

Schrijf me alsjeblieft als je een fout hebt gevonden of als je een suggestie/verbetering of vragen hebt.

Bedankt voor het lezen.

Hugo Gomes

Code

  • Code
CodeArduino
#include "SIM900.h"#include #include "sms.h"#include "call.h"#include //Gebruik 27, 28 regels in GSM.cpp.//Om Arduino Mega te gebruiken, definieert u MEGA in regel 5 in GSM.h.#include #include //Mega CS pinconst int chipSelect =53; //We moeten de klassen voor sms'en en oproepen maken.CallGSM-oproep;SMSGSM sms;char number[20];byte stat =0;int value =0;char value_str[5];//GPS-variabele// The TinyGPS++ objectTinyGPSPlus gps;const char *googlePrefix ="http://maps.google.com/maps?q=";double Lat;double Long;int dag, maand, jaar;int uur, minuut, seconde;int num_sat;boolean one_point_true =false; ongeldige setup () { // Seriële verbinding. Serieel.begin(9600); // GPRS-verbinding Serial.print (F ("Starting GSM...")); //Start configuratie van schild met baudrate. if (gsm.begin(9600)) Serial.println(F("KLAAR")); anders Serial.println(F("IDLE")); //GPS-verbinding Serial.println (F ("Starting GPS")); //GPS-com-poort Serial2.begin (9600); //SD-kaart start Serial.print (F ("Initialiseren SD-kaart...")); // zorg ervoor dat de standaard chipselectiepin is ingesteld op // output, zelfs als u deze niet gebruikt:pinMode(53, OUTPUT); // kijk of de kaart aanwezig is en kan worden geïnitialiseerd:if (!SD.begin(chipSelect)) { Serial.println(F ("Kaart mislukt, of niet aanwezig")); // doe niets meer:​​return; } Serial.println(F("kaart geïnitialiseerd."));}//*********************************** *********************************************//Main loopvoid loop(){ Get_GPS(); // Verkrijg de positie Check_call(); // Kijk of er iemand belt};///////////////////////////////////////// /////////////////////////////////////////********* ********************************************** ********************// Haal de positie van de GPSvoid Get_GPS(){ while (Serial2.available()> 0) if (gps.encode(Serial2.read ())) num_sat =gps.satelliet.waarde(); //Serial.println(num_sat); if (gps.location.isValid() ==1) { Lat =gps.location.lat(); Lang =gps.locatie.lng(); if (Lat !=0 &&Long !=0) one_point_true =true; } if (gps.date.isValid()) { day =gps.date.day(); maand =gps.datum.maand(); jaar =gps.datum.jaar(); } if (gps.time.isValid()) { uur =gps.time.hour(); minuut =gps.tijd.minuut(); seconde =gps.tijd.seconde(); } smartDelay(500); if (millis()> 5000 &&gps.charsProcessed() <10) { Serial.println(F("Geen GPS gedetecteerd:controleer bedrading.")); terwijl (waar); }}//************************************************** *******************************// Deze aangepaste versie van delay() zorgt ervoor dat het gps-object// wordt "fed".static void smartDelay(unsigned long ms){ unsigned long start =millis(); doen { while (Serial2.available()) gps.encode(Serial2.read()); } while (millis() - start =3 &&one_point_true ==true) { char sms_OK[160]; sprintf(sms_OK, "Hugo-locatie is nu:Lat:%s, Log:%s. %s%s,+%s\n", lat_print, Long_print, googlePrefix, lat_print, Long_print); Serieel.println(sms_OK); error =sms.SendSMS (nummer, sms_OK); vertraging (500); if (fout ==0) // Controleer de 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, "Ik kan Hugo niet vinden. De laatste keer dat ik hem zag, was 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 (nummer, sms_NOK); if (fout ==0) // Controleer de status {Serial.println (F ("SMS ERROR")); } else { Serial.println(F("SMS OK")); } } else if (one_point_true ==false) { Serial.println(F("Geen geldig GPS-punt")); }//Sla alles op in het SD-kaartbestand dataFile =SD.open("datalog.txt", FILE_WRITE); // als het bestand beschikbaar is, schrijf er dan naar:if (dataFile) { dataFile.print(Date); dataFile.print(" "); dataFile.print(tijd1); dataFile.print(" "); dataFile.print(nummer); dataFile.print(" "); dataFile.print(lat_print); dataFile.print(", "); dataFile.print(Long_print); dataFile.print(" "); dataFile.print(fout); dataFile.println(); dataFile.close(); } // als het bestand niet geopend is, verschijnt er een foutmelding:else { Serial.println(F("error opening datalog.txt")); }}//////////////////////////////////////////////// ////////////////////////////////

Schema's


Productieproces

  1. Robot die Raspberry Pi &Bridge Shield gebruikt
  2. Web-gestuurde DMX-controller
  3. Arduino Spybot
  4. UnifiedWater v1
  5. HSVClock
  6. Sneeuwploegrobot
  7. Mobiele stembus
  8. Whac-A-Mole (Button Edition)
  9. Moderne jukebox
  10. Arduino Apple Watch
  11. Bedankt aan alle hoffelijke chauffeurs