I dati vengono salvati in un foglio di calcolo dataGPS.csv, il cui formato corrisponde ai requisiti del servizio Google Le mie mappe.

    Linguaggio di programmazione: Arduino (C++)

Istruzioni video

Quello che ti serve

Come assemblare

gps-tracker.ino // libreria per lavorare con dispositivi tramite SPI#includere // libreria per lavorare con la scheda SD#includere // libreria per lavorare con un dispositivo GPS#includere // crea un oggetto della classe GPS e gli passa l'oggetto Serial1 GPS GPS(Seriale1) ; // Perno del LED#define LED_PIN A0 // pin del pulsante #define BUTTON_PIN 13 // inserisci la scheda microSD CS#define CHIP_SELECT_PIN 9 // intervallo di tempo per la scrittura dei dati sulla scheda#define INTERVALLO 5000 // imposta la dimensione dell'array per ora, data, latitudine e longitudine#definisce MAX_SIZE_MASS 16 // array per memorizzare l'ora corrente carattere tempo[MAX_SIZE_MASS]; // registra lo stato bool stateRec = falso; // ricorda l'ora corrente long startMillis = millis() ; configurazione nulla() ( // apre la porta seriale per monitorare le azioni nel programma Serial.begin(115200); // attende l'apertura del monitor della porta seriale // per tenere traccia di tutti gli eventi nel programma// while (!Serial) ( // ) Serial.print ("Serial init OK \r\n") ; // apre una connessione seriale con il modulo GPS Serial1.begin(115200); // imposta il LED sulla modalità di uscita pinMode(PIN_LED, USCITA) ; // imposta il pulsante sulla modalità di accesso pinMode(BUTTON_PIN, INPUT_PULLUP) ; // invia informazioni sull'inizializzazione alla porta seriale Serial.println("Inizializzazione della scheda SD...") ; // inizializza la scheda SD while (! SD.begin (CHIP_SELECT_PIN) ) ( Serial.println ("Scheda guasta o non presente" ) ; ritardo(1000 ) ; ) // invia le informazioni alla porta seriale Serial.println("Scheda inizializzata"); // crea un oggetto dataFile della classe File per lavorare con i file File dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // se il file esiste se (Filedati) ( // scrive il nome dei dati futuri sulla scheda di memoria dataFile.println("Tempo, Coordinate, Velocità"); // chiude il file datiFile.close(); Serial.println("Salva OK"); ) else ( Serial.println ("Errore nell'apertura di test.csv" ) ; ) ) void loop() ( // Registra la pressione del pulsante if (! digitalRead(BUTTON_PIN) ) ( // cambia lo stato "registrazione" / "non scrittura" sulla scheda di memoria statoRec = ! statoRec; // cambia lo stato del LED di indicazione digitalWrite(LED_PIN, stateRec) ; ) // se i dati provengono dal modulo GPS if (gps.disponibile()) ( // legge i dati e li analizza gps.readParsing(); // controlla lo stato del modulo GPS switch (gps.getState ()) ( // è tutto OK case GPS_OK: Serial.println ("GPS è OK" ) ; // se l'intervallo di tempo specificato è trascorso if (millis() - startMillis > INTERVAL && stateRec) ( // salva i dati sulla scheda di memoria salvaSD(); // ricorda l'ora corrente startMillis = millis() ; ) rottura ; // caso errore dati GPS_ERROR_DATA: Serial.println ("Dati errore GPS"); rottura ; // nessuna connessione con i satelliti caso GPS_ERROR_SAT: Serial.println ( "GPS non connesso ai satelliti") ; rottura ; ) ) ) // funzione per salvare i dati su una scheda di memoria void saveSD() ( File dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // se il file esiste ed è stato aperto se (Filedati) ( // legge l'ora corrente gps.getTime(ora, MAX_SIZE_MASS); // scrive l'ora sulla scheda di memoria datiFile.print(" \" " ) ; dataFile.print(ora); datiFile.print(" \" " ) ; filedati.print ("," ) ; datiFile.print(" \" " ) ; // legge e scrive le coordinate di latitudine e longitudine sulla scheda di memoria dataFile.print(gps.getLatitudeBase10(), 6); filedati.print ("," ) ; dataFile.print(gps.getLongitudeBase10(), 6); datiFile.print(" \" " ) ; filedati.print ("," ) ; dataFile.print(gps.getSpeedKm()); dataFile.println("km/h"); datiFile.close(); Serial.println("Salva OK"); ) else ( Serial.println ("Errore nell'apertura di test.csv" ) ; ) )

Il sistema di posizionamento globale GPS è già diventato parte della nostra vita. Oggi è difficile immaginare un telefono cellulare senza modulo GPS integrato. Questo sistema di navigazione satellitare consente di tracciare qualsiasi oggetto, determinarne le coordinate e la velocità di movimento. Ora il GPS è disponibile non solo per le aziende che sviluppano le apparecchiature corrispondenti, ma anche per i normali radioamatori che già utilizzano al massimo il potenziale delle popolari schede Arduino. Questo materiale discuterà del collegamento di un localizzatore GPS in miniatura alla scheda Arduino Pro Mini. Come soggetto di prova viene utilizzato il tracker MiniGPS PG03.



Questo tracker, oltre alle coordinate geografiche dirette, mostra la direzione del movimento, la distanza percorsa e la velocità del movimento. Sfortunatamente non registra informazioni, quindi collegandolo ad Arduino puoi accedere a questi dati e farci quello che vuoi.


Innanzitutto, il tracker deve essere smontato. Di seguito sono riportate le immagini di un localizzatore GPS smontato.




Il cuore del localizzatore è il chip GPS Venus638FLP. Il suo 44esimo pin è l'uscita dell'interfaccia UART (TxD). Puoi saldare un filo direttamente a questo pin oppure puoi trovare un pin di test sulla scheda a cui è collegato anche questo pin. Di seguito sono riportate le immagini delle posizioni dei pin del microcircuito e come collegarsi al pin desiderato.





Ora prendiamo una scheda Arduino Pro Mini compatta e un modulo scheda SD per registrare i dati del protocollo NMEA. Lo schema di collegamento per Arduino Pro Mini e il modulo della scheda SD è il seguente:



Pin del modulo di collegamento per schede SD:


GND a GND
VCC a 3,3 V
MISO al pin 12
MOSI al pin 11
SCK al pin 13
CS al pin 10

Collegamento dei pin del localizzatore GPS:


GND a GND
Dal pin 2 (Arduino) al pin 44 (GPS)

È meglio prendere l'alimentazione dal localizzatore GPS (3,7 V). Dato che la sua batteria ha una bassa capacità energetica, è preferibile collegare una batteria esterna, ad esempio, quella di un cellulare da 1400 mAh, come mostrato in una delle immagini sopra.


Ora devi scaricare la libreria TinyGPS, avrai bisogno anche di una libreria per lavorare con le schede SD e della libreria SoftwareSerial, che puoi trovare in Arduino\libraries.



Nella seguente parte di codice puoi scegliere quali dati scrivere:


void gpsdump(TinyGPS &gps) ( float flat, flon; // Lat, Long float fkmph = gps.f_speed_kmph(); // Velocità in km/ora float falt = gps.f_altitude(); // +/- altitudine in metri (sembra elevazione, in effetti) float fc = gps.f_course(); // Corso in gradi unsigned long age; gps.f_get_position(&flat, &flon, &age); Serial.print(" lat "); Serial .print (piatto, 4); Serial.print(" lon "); Serial.print(flon, 4); Serial.print(" km "); Serial.print(fkmph); Serial.print(" corso ") ; Serial .print(fc); Serial.print(" elevazione "); Serial.println(falt); ////////////////////////// // /////////////////////////////////////////////// ///////////////

Carica lo sketch su Arduino, inserisci una scheda SD formattata secondo FAT32 e con un file log.txt nella root. Avvia Serial Monitor e vedrai i dati scritti sulla scheda SD.



Dopo diversi esperimenti con Arduino, ho deciso di realizzare un localizzatore GPS semplice e poco costoso con coordinate inviate tramite GPRS al server.
Usato Arduino Mega 2560 (Arduino Uno), SIM900 - modulo GSM/GPRS (per l'invio di informazioni al server), ricevitore GPS SKM53 GPS.

Il tutto è stato acquistato su ebay.com, per un totale di circa 1500 rubli (circa 500 rubli per l'arduino, un po' meno per il modulo GSM, un po' di più per il GPS).

Ricevitore GPS

Per prima cosa devi capire come lavorare con il GPS. Il modulo selezionato è uno dei più economici e semplici. Tuttavia, il produttore promette una batteria per salvare i dati satellitari. Secondo la scheda tecnica, un avvio a freddo dovrebbe durare 36 secondi, tuttavia, nelle mie condizioni (10° piano dal davanzale della finestra, nessun edificio nelle vicinanze) ci sono voluti fino a 20 minuti. Il prossimo avvio, tuttavia, è già di 2 minuti.

Un parametro importante dei dispositivi collegati ad Arduino è il consumo energetico. Se sovraccarichi il convertitore Arduino, potrebbe bruciarsi. Per il ricevitore utilizzato il consumo massimo è di 45 mA @ 3,3 V. Perché le specifiche dovrebbero indicare l'intensità di corrente ad una tensione diversa da quella richiesta (5 V) è per me un mistero. Tuttavia, il convertitore Arduino resisterà a 45 mA.

Connessione
Il GPS non è controllato, sebbene abbia un pin RX. Per quale scopo non è noto. La cosa principale che puoi fare con questo ricevitore è leggere i dati tramite il protocollo NMEA dal pin TX. Livelli: 5 V, solo per Arduino, velocità: 9600 baud. Collego VIN a VCC dell'arduino, GND a GND, TX a RX della seriale corrispondente. Ho letto i dati prima manualmente, poi utilizzando la libreria TinyGPS. Sorprendentemente, tutto è leggibile. Dopo essere passato a Uno, ho dovuto utilizzare SoftwareSerial e poi sono iniziati i problemi: alcuni caratteri del messaggio sono andati persi. Questo non è molto critico, poiché TinyGPS elimina i messaggi non validi, ma è piuttosto spiacevole: puoi dimenticarti della frequenza di 1Hz.

Una breve nota su SoftwareSerial: non ci sono porte hardware sullo Uno (oltre a quella collegata a USB Serial), quindi devi utilizzare il software. Quindi può ricevere dati solo su un pin su cui la scheda supporta gli interrupt. Nel caso di Uno, questi sono 2 e 3. Inoltre, solo una di queste porte alla volta può ricevere dati.

Ecco come appare il "banco di prova".

Ricevitore/trasmettitore GSM


Ora arriva la parte più interessante. Modulo GSM - SIM900. Supporta GSM e GPRS. Non sono supportati né EDGE, né soprattutto 3G. Per la trasmissione dei dati delle coordinate, questo probabilmente è positivo: non ci saranno ritardi o problemi nel passaggio da una modalità all'altra, inoltre il GPRS è ora disponibile quasi ovunque. Tuttavia, per alcune applicazioni più complesse, ciò potrebbe non essere sufficiente.

Connessione
Il modulo è controllato anche tramite la porta seriale, con lo stesso livello - 5V. E qui avremo bisogno sia di RX che di TX. Il modulo è scudo, cioè è installato su Arduino. Inoltre, è compatibile sia con mega che con uno. La velocità predefinita è 115200.

Lo assembliamo su Mega, e qui ci aspetta la prima spiacevole sorpresa: il pin TX del modulo cade sul 7° pin di Mega. Sul 7° pin del mega non sono disponibili interruzioni, il che significa che il 7° pin dovrà essere collegato, ad esempio, al 6° pin, sul quale sono possibili interruzioni. Quindi sprecheremo un pin di Arduino. Bene, per un mega non è molto spaventoso, dopotutto ci sono abbastanza spilli. Ma per Uno questo è già più complicato (ti ricordo che ci sono solo 2 pin che supportano gli interrupt: 2 e 3). Per risolvere questo problema possiamo suggerire di non installare il modulo su Arduino, ma di collegarlo tramite fili. Quindi puoi usare Serial1.

Dopo la connessione, proviamo a “parlare” con il modulo (non dimenticare di accenderlo). Selezioniamo la velocità della porta: 115200, ed è positivo se tutte le porte seriali integrate (4 su mega, 1 su uno) e tutte le porte software funzionano alla stessa velocità. In questo modo puoi ottenere un trasferimento dati più stabile. Non so perché, anche se posso indovinarlo.

Quindi, scriviamo codice primitivo per inoltrare dati tra porte seriali, inviare Atz e ricevere silenzio in risposta. Che è successo? Ah, distinzione tra maiuscole e minuscole. ATZ, andiamo bene. Evviva, il modulo può sentirci. Vuoi chiamarci per curiosità? ATD +7499... Il telefono fisso squilla, dall'arduino esce fumo, il portatile si spegne. Il convertitore Arduino è bruciato. È stata una cattiva idea alimentarlo a 19 volt, anche se è scritto che può funzionare da 6 a 20 V, si consiglia 7-12 V. La scheda tecnica del modulo GSM non dice da nessuna parte il consumo energetico sotto carico. Bene, Mega va al magazzino dei pezzi di ricambio. Con il fiato sospeso, accendo il portatile, che ha ricevuto +19 V tramite la linea +5 V dall'USB. Funziona e anche l'USB non si è bruciato. Grazie Lenovo per averci protetto.

Dopo che il convertitore si è bruciato, ho cercato il consumo di corrente. Quindi, picco - 2 A, tipico - 0,5 A. Questo va chiaramente oltre le capacità del convertitore Arduino. Richiede cibo separato.

Programmazione
Il modulo fornisce ampie funzionalità di trasferimento dati. A partire dalle chiamate vocali e dagli SMS per finire con il GPRS stesso. Inoltre per quest'ultimo è possibile eseguire una richiesta HTTP utilizzando i comandi AT. Dovrai inviarne diversi, ma ne vale la pena: non vuoi davvero creare una richiesta manualmente. Ci sono un paio di sfumature nell'apertura di un canale di trasmissione dati tramite GPRS: ricordate il classico AT+CGDCONT=1, “IP”, “apn”? Quindi, qui è necessaria la stessa cosa, ma un po 'più astuta.

Per ottenere una pagina a un URL specifico, è necessario inviare i seguenti comandi:
AT+SAPBR=1,1 //Operatore aperto (Operatore) AT+SAPBR=3,1,"CONTYPE","GPRS" //tipo di connessione - GPRS AT+SAPBR=3,1,"APN","internet" //APN, per Megafon - internet AT+HTTPINIT //Inizializza HTTP AT+HTTPPARA="CID",1 //ID operatore da utilizzare. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //L'URL effettivo, dopo sprintf con le coordinate AT+HTTPACTION=0 // Richiedi dati utilizzando il metodo GET //attendi la risposta AT+HTTPTERM //interrompi HTTP

Di conseguenza, se c'è una connessione, riceveremo una risposta dal server. Cioè, infatti, sappiamo già come inviare i dati delle coordinate se il server li riceve tramite GET.

Nutrizione
Dato che alimentare il modulo GSM da un convertitore Arduino, come ho scoperto, è una pessima idea, si è deciso di acquistare sullo stesso ebay un convertitore 12v->5v, 3A. Tuttavia, al modulo non piace l'alimentazione a 5 V. Facciamo un trucco: collega 5V al pin da cui provengono 5V dall'arduino. Quindi il convertitore integrato nel modulo (molto più potente del convertitore Arduino, MIC 29302WU) produrrà da 5 V ciò di cui il modulo ha bisogno.

server

Il server ne ha scritto uno primitivo: memorizzando le coordinate e disegnando su Yandex.maps. In futuro sarà possibile aggiungere varie funzionalità, tra cui il supporto per più utenti, lo stato “armato/disarmato”, lo stato dei sistemi del veicolo (accensione, fari, ecc.) ed eventualmente anche il controllo dei sistemi del veicolo. Naturalmente, con il supporto appropriato per il localizzatore, che si trasforma senza problemi in un vero e proprio sistema di allarme.

Prove sul campo

Ecco come appare il dispositivo assemblato, senza custodia:

Dopo aver installato il convertitore di alimentazione e averlo inserito nella custodia da un modem DSL guasto, il sistema si presenta così:

Ho saldato i fili e rimosso diversi contatti dai blocchi Arduino. Sembrano così:

Ho collegato la corrente a 12 V in macchina, ho girato per Mosca e ho preso la pista:


I punti traccia sono piuttosto distanti tra loro. Il motivo è che l'invio dei dati tramite GPRS richiede un tempo relativamente lungo e durante questo tempo le coordinate non vengono lette. Si tratta chiaramente di un errore di programmazione. Viene trattato, in primo luogo, inviando immediatamente un pacchetto di coordinate nel tempo e, in secondo luogo, lavorando in modo asincrono con il modulo GPRS.

Il tempo di ricerca dei satelliti sul sedile del passeggero di un'auto è di un paio di minuti.

conclusioni

Creare un localizzatore GPS su Arduino con le proprie mani è possibile, anche se non è un compito banale. La domanda principale ora è come nascondere il dispositivo nell'auto in modo che non sia esposto a fattori dannosi (acqua, temperatura), non sia coperto di metallo (GPS e GPRS saranno schermati) e non sia particolarmente evidente. Per ora sta semplicemente nell'abitacolo e si collega alla presa dell'accendisigari.

Bene, dobbiamo anche correggere il codice per una traccia più fluida, sebbene il tracker svolga già il compito principale.

Dispositivi usati

  • Arduino Mega2560
  • ArduinoUno
  • GPS SkyLab SKM53
  • Schermatura GSM/GPRS basata su SIM900
  • Convertitore DC-DC 12v->5v 3A

Dopo diversi esperimenti con Arduino, ho deciso di realizzare un localizzatore GPS semplice e poco costoso con coordinate inviate tramite GPRS al server.
Usato Arduino Mega 2560 (Arduino Uno), SIM900 - modulo GSM/GPRS (per l'invio di informazioni al server), ricevitore GPS SKM53 GPS.

Il tutto è stato acquistato su ebay.com, per un totale di circa 1500 rubli (circa 500 rubli per l'arduino, un po' meno per il modulo GSM, un po' di più per il GPS).

Ricevitore GPS

Per prima cosa devi capire come lavorare con il GPS. Il modulo selezionato è uno dei più economici e semplici. Tuttavia, il produttore promette una batteria per salvare i dati satellitari. Secondo la scheda tecnica, un avvio a freddo dovrebbe durare 36 secondi, tuttavia, nelle mie condizioni (10° piano dal davanzale della finestra, nessun edificio nelle vicinanze) ci sono voluti fino a 20 minuti. Il prossimo avvio, tuttavia, è già di 2 minuti.

Un parametro importante dei dispositivi collegati ad Arduino è il consumo energetico. Se sovraccarichi il convertitore Arduino, potrebbe bruciarsi. Per il ricevitore utilizzato il consumo massimo è di 45 mA @ 3,3 V. Perché le specifiche dovrebbero indicare l'intensità di corrente ad una tensione diversa da quella richiesta (5 V) è per me un mistero. Tuttavia, il convertitore Arduino resisterà a 45 mA.

Connessione

Il GPS non è controllato, sebbene abbia un pin RX. Per quale scopo non è noto. La cosa principale che puoi fare con questo ricevitore è leggere i dati tramite il protocollo NMEA dal pin TX. Livelli: 5 V, solo per Arduino, velocità: 9600 baud. Collego VIN a VCC dell'arduino, GND a GND, TX a RX della seriale corrispondente. Ho letto i dati prima manualmente, poi utilizzando la libreria TinyGPS. Sorprendentemente, tutto è leggibile. Dopo essere passato a Uno, ho dovuto utilizzare SoftwareSerial e poi sono iniziati i problemi: alcuni caratteri del messaggio sono andati persi. Questo non è molto critico, poiché TinyGPS elimina i messaggi non validi, ma è piuttosto spiacevole: puoi dimenticarti della frequenza di 1Hz.

Una breve nota su SoftwareSerial: non ci sono porte hardware sullo Uno, quindi devi usare quella software. Quindi può ricevere dati solo su un pin su cui la scheda supporta gli interrupt. Nel caso di Uno, questi sono 2 e 3. Inoltre, solo una di queste porte alla volta può ricevere dati.

Ecco come appare il "banco di prova".


Ricevitore/trasmettitore GSM


Ora arriva la parte più interessante. Modulo GSM - SIM900. Supporta GSM e GPRS. Non sono supportati né EDGE, né soprattutto 3G. Per la trasmissione dei dati delle coordinate, questo probabilmente è positivo: non ci saranno ritardi o problemi nel passaggio da una modalità all'altra, inoltre il GPRS è ora disponibile quasi ovunque. Tuttavia, per alcune applicazioni più complesse, ciò potrebbe non essere sufficiente.

Connessione

Il modulo è controllato anche tramite la porta seriale, con lo stesso livello - 5V. E qui avremo bisogno sia di RX che di TX. Il modulo è scudo, cioè è installato su Arduino. Inoltre, è compatibile sia con mega che con uno. La velocità predefinita è 115200.

Lo assembliamo su Mega, e qui ci aspetta la prima spiacevole sorpresa: il pin TX del modulo cade sul 7° pin di Mega. Sul 7° pin del mega non sono disponibili interruzioni, il che significa che il 7° pin dovrà essere collegato, ad esempio, al 6° pin, sul quale sono possibili interruzioni. Quindi sprecheremo un pin di Arduino. Bene, per un mega non è molto spaventoso, dopotutto ci sono abbastanza spilli. Ma per Uno questo è già più complicato (ti ricordo che ci sono solo 2 pin che supportano gli interrupt: 2 e 3). Per risolvere questo problema possiamo suggerire di non installare il modulo su Arduino, ma di collegarlo tramite fili. Quindi puoi usare Serial1.

Dopo la connessione, proviamo a “parlare” con il modulo (non dimenticare di accenderlo). Selezioniamo la velocità della porta: 115200, ed è positivo se tutte le porte seriali integrate (4 su mega, 1 su uno) e tutte le porte software funzionano alla stessa velocità. In questo modo puoi ottenere un trasferimento dati più stabile. Non so perché, anche se posso indovinarlo.

Quindi, scriviamo codice primitivo per inoltrare dati tra porte seriali, inviare Atz e ricevere silenzio in risposta. Che è successo? Ah, distinzione tra maiuscole e minuscole. ATZ, andiamo bene. Evviva, il modulo può sentirci. Vuoi chiamarci per curiosità? ATD +7499... Il telefono fisso squilla, dall'arduino esce fumo, il portatile si spegne. Il convertitore Arduino è bruciato. È stata una cattiva idea alimentarlo a 19 volt, anche se è scritto che può funzionare da 6 a 20 V, si consiglia 7-12 V. La scheda tecnica del modulo GSM non dice da nessuna parte il consumo energetico sotto carico. Bene, Mega va al magazzino dei pezzi di ricambio. Con il fiato sospeso, accendo il portatile, che ha ricevuto +19 V tramite la linea +5 V dall'USB. Funziona e anche l'USB non si è bruciato. Grazie Lenovo per averci protetto.


Dopo che il convertitore si è bruciato, ho cercato il consumo di corrente. Quindi, picco - 2 A, tipico - 0,5 A. Questo va chiaramente oltre le capacità del convertitore Arduino. Richiede cibo separato.

Programmazione

Il modulo fornisce ampie funzionalità di trasferimento dati. A partire dalle chiamate vocali e dagli SMS per finire con il GPRS stesso. Inoltre per quest'ultimo è possibile eseguire una richiesta HTTP utilizzando i comandi AT. Dovrai inviarne diversi, ma ne vale la pena: non vuoi davvero creare una richiesta manualmente. Ci sono un paio di sfumature nell'apertura di un canale di trasmissione dati tramite GPRS: ricordate il classico AT+CGDCONT=1, “IP”, “apn”? Quindi, qui è necessaria la stessa cosa, ma un po 'più astuta.

Per ottenere una pagina a un URL specifico, è necessario inviare i seguenti comandi:

AT+SAPBR=1,1 //Operatore aperto (Operatore) AT+SAPBR=3,1,"CONTYPE","GPRS" //tipo di connessione - GPRS AT+SAPBR=3,1,"APN","internet" //APN, per Megafon - internet AT+HTTPINIT //Inizializza HTTP AT+HTTPPARA="CID",1 //ID operatore da utilizzare. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //L'URL effettivo, dopo sprintf con le coordinate AT+HTTPACTION=0 // Richiedi dati utilizzando il metodo GET //attendi la risposta AT+HTTPTERM //interrompi HTTP

Di conseguenza, se c'è una connessione, riceveremo una risposta dal server. Cioè, infatti, sappiamo già come inviare i dati delle coordinate se il server li riceve tramite GET.

Nutrizione

Dato che alimentare il modulo GSM da un convertitore Arduino, come ho scoperto, è una pessima idea, si è deciso di acquistare sullo stesso ebay un convertitore 12v->5v, 3A. Tuttavia, al modulo non piace l'alimentazione a 5 V. Facciamo un trucco: collega 5V al pin da cui provengono 5V da Arduino. Quindi il convertitore integrato nel modulo (molto più potente del convertitore Arduino, MIC 29302WU) produrrà da 5 V ciò di cui il modulo ha bisogno.

server

Il server ne ha scritto uno primitivo: memorizzando le coordinate e disegnando su Yandex.maps. In futuro sarà possibile aggiungere varie funzionalità, tra cui il supporto per più utenti, lo stato “armato/disarmato”, lo stato dei sistemi del veicolo (accensione, fari, ecc.) ed eventualmente anche il controllo dei sistemi del veicolo. Naturalmente, con il supporto appropriato per il localizzatore, che si trasforma senza problemi in un vero e proprio sistema di allarme.

Prove sul campo

Ecco come appare il dispositivo assemblato, senza custodia:


Dopo aver installato il convertitore di alimentazione e averlo inserito nella custodia da un modem DSL guasto, il sistema si presenta così:

Ho saldato i fili e rimosso diversi contatti dai blocchi Arduino. Sembrano così:

Ho collegato la corrente a 12 V in macchina, ho girato per Mosca e ho preso la pista:


La pista risulta essere strappata. Il motivo è che l'invio dei dati tramite GPRS richiede un tempo relativamente lungo e durante questo tempo le coordinate non vengono lette. Si tratta chiaramente di un errore di programmazione. Viene trattato, in primo luogo, inviando immediatamente un pacchetto di coordinate nel tempo e, in secondo luogo, lavorando in modo asincrono con il modulo GPRS.

Trasmettitori GPS personali

Oggi, il progresso procede a un ritmo tale che i dispositivi che prima erano ingombranti, costosi e altamente specializzati stanno rapidamente perdendo dimensioni, peso e prezzo, ma acquisendo molte nuove funzioni.

È così che i dispositivi basati sulla tecnologia GPS hanno raggiunto i gadget tascabili e vi si sono stabiliti saldamente, offrendo alle persone nuove opportunità. Vale soprattutto la pena evidenziare i singoli trasmettitori GPS.

In sostanza, si tratta degli stessi localizzatori GPS, progettati solo per l'uso non su un veicolo, ma da una persona nella vita di tutti i giorni.

A seconda del modello è possibile combinare diversi dispositivi in ​​un unico alloggiamento. Nella sua forma più semplice, è semplicemente una piccola scatola senza display, che ti permette di controllare i movimenti di bambini, animali o altri oggetti, su cui è fissato.

Al suo interno si trova un modulo GPS che determina le coordinate a terra, un modulo GSM/GPRS che trasmette informazioni e riceve comandi di controllo, nonché una fonte di alimentazione che garantisce un funzionamento autonomo per lungo tempo.

Funzionalità dei trasmettitori GPS

Man mano che la funzionalità aumenta, vengono visualizzate le seguenti capacità del dispositivo:


Opzioni per trasmettitori GPS

A seconda della configurazione, le custodie del trasmettitore possono differire notevolmente. Sono disponibili diversi modelli sotto forma di cellulari, classici navigatori o addirittura orologi da polso.

Il design colorato di versioni speciali e utili aggiunte consentono ai bambini di trattare questi dispositivi non come “spie dei genitori”, ma come gadget pratici e alla moda.

Come vantaggio, vale la pena menzionare il fatto che molte versioni del dispositivo funzionano bene senza costi di abbonamento per i servizi di operatori specializzati e tutte le informazioni necessarie vengono inviate al cliente direttamente tramite Internet o messaggi SMS, il che consente risparmi significativi sulla manutenzione di tali apparecchiature.

Articoli sui localizzatori GPS

In questo articolo mostrerò come utilizzare un modulo GSM con arduino utilizzando come esempio il sim800L. Le stesse istruzioni sono abbastanza adatte per l'utilizzo di qualsiasi altro modulo GSM, ad esempio sim900, ecc., Perché tutti i moduli funzionano più o meno allo stesso modo: questo è lo scambio di comandi AT attraverso la porta.

Mostrerò l'utilizzo del modulo con arduino utilizzando l'esempio di un relè SMS, che può essere utilizzato per controllare il dispositivo da remoto tramite comandi SMS. Può essere utilizzato insieme agli allarmi per auto, ecc.

Il modulo è collegato ad Arduino tramite l'interfaccia UART di una porta seriale software che funziona su 2 e 3 pin digitali di Arduino nano.

Lavorare con Arduino con moduli GSM

Per alimentare il modulo è necessaria una tensione compresa tra 3,6 V e 4,2 V, ciò significa che dovrai utilizzare uno stabilizzatore di tensione aggiuntivo, poiché Arduino ha installato uno stabilizzatore da 3,3 Volt, che non è adatto per alimentare il modulo , il secondo motivo per installare uno stabilizzatore aggiuntivo è che il modulo GSM è un carico serio, poiché ha un trasmettitore debole che fornisce una comunicazione stabile con la stazione cellulare. L'alimentazione per Arduino nano viene fornita al pin VIN: si tratta di uno stabilizzatore integrato nell'Arduino che garantisce il funzionamento del modulo su un ampio intervallo di tensione (6-10 V). Il modulo relè è collegato secondo il testo del programma fornito al pin 10 dell'Arduino nano e può essere facilmente sostituito con qualsiasi altro che funzioni come uscita digitale.

Funziona così: installiamo una SIM card nel modulo GSM, diamo tensione e inviamo un SMS con il testo “1” al numero della SIM card per accendere il nostro relè, per spegnerlo inviamo un SMS con il testo “0”.

#includere
SoftwareSerial gprsSerial(2, 3); // imposta i pin 2 e 3 per la porta software
int LedPin = 10; // per il relè

configurazione nulla()
{
gprsSerial.begin(4800);
modalità pin(LedPin, USCITA);

// imposta la ricezione dei messaggi

gprsSerial.print("AT+CMGF=1\r");
gprsSerial.print("AT+IFC=1, 1\r");
ritardo(500);
gprsSerial.print("AT+CPBS=\"SM\"\r");
ritardo(500); // ritardo nell'elaborazione dei comandi
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
ritardo(700);
}

String currStr = "";
// se questa riga è un messaggio, la variabile assumerà il valore True
booleano isStringMessage = false;

ciclo vuoto()
{
if (!gprsSerial.available())
ritorno;

char currSymb = gprsSerial.read();
if ('\r' == currSymb) (
if (isStringMessage) (
// se la riga corrente è un messaggio, allora...
if (!currStr.compareTo("1")) (
digitalWrite(LedPin, ALTO);
) else if (!currStr.compareTo("0")) (
digitalWrite(LedPin, BASSO);
}
isStringMessage = falso;
) altro (
if (currStr.startsWith("+CMT")) (
// se la riga corrente inizia con "+CMT", quindi il messaggio successivo
isStringMessage = vero;
}
}
currStr = "";
) altrimenti se ('\n' != currSymb) (
currStr += String(currSymb);
}
}

Versione video dell'articolo:

Tag: #Arduino, #SIM800L

Il tuo segno:

Prodotti utilizzati in questo articolo:

← Registratore GPS su arduino | Controllo relè tramite porta COM →

Scanner GSM su RTL-SDR

| casa| Inglese | Sviluppo | Domande frequenti |

Principali caratteristiche dello scanner

Lo scanner GSM esegue la scansione dei canali GSM downstream e visualizza informazioni sul livello del segnale e se il canale appartiene a uno dei tre principali operatori cellulari MTS, Beeline e Megafon. In base ai risultati del suo lavoro, lo scanner consente di salvare un elenco di identificatori di stazioni base MCC, MNC, LAC e CI per tutti i canali scansionati.
Uno scanner GSM può essere utilizzato per valutare il livello del segnale GSM, confrontare la qualità del segnale di diversi operatori, valutare la copertura radio, quando si decide se installare amplificatori di segnale cellulare e regolarne i parametri, per scopi didattici, ecc.
Lo scanner funziona sotto Windows e utilizza un ricevitore semplice ed economico: RTL-SDR. Puoi leggere informazioni su RTL-SDR su:
RTL-SDR (RTL2832U) e notizie e progetti radiofonici definiti dal software,
RTL-SDR – OsmoSDR,
RTL-SDR in russo.
I parametri RTL-SDR determinano le caratteristiche principali dello scanner. Naturalmente uno scanner GSM non sostituisce i normali strumenti di misurazione.
Lo scanner è distribuito gratuitamente, senza alcuna restrizione d'uso.
La versione attuale supporta la banda GSM 900 e non supporta GSM 1800. Ciò è determinato dal fatto che la frequenza operativa dell'RTL-SDR con il sintonizzatore R820T è limitata a 1760 MHz. C'è speranza che l'uso del driver sperimentale RTL-SDR consenta il funzionamento almeno in parte della gamma 1800 MHz.

Avvio dello scanner

L'ultima versione dello scanner può essere scaricata da questo collegamento. Basta decomprimere il file in una posizione comoda ed eseguire gsmscan.exe.
Nella pagina di sviluppo si trovano le versioni precedenti dello scanner, un collegamento al repository con le fonti e altre informazioni relative allo sviluppo.
Per il funzionamento dello scanner è necessaria l'installazione dei driver RTL-SDR; se non sono già stati installati, è possibile farlo comodamente utilizzando il programma Zadig per descrivere la procedura di installazione.

Utilizzo dello scanner

Di seguito è riportata una vista della finestra del programma dello scanner:

L'asse orizzontale mostra il numero del canale GSM sotto forma di ARFCN o in MHz, mentre l'asse verticale mostra il livello del segnale in dBm. L'altezza della linea mostra la potenza del segnale.

Modulo GSM NEOWAY M590 comunicazione con Arduino

Se gli identificatori BS sono stati decodificati con successo e corrispondono agli identificatori dei tre principali operatori di telecomunicazioni, le linee vengono dipinte con i colori corrispondenti.
Gli elenchi a discesa nella parte superiore dello schermo consentono di selezionare il ricevitore SDR, se ne sono collegati più, la portata operativa GSM 900 o GSM 1800 e le unità di misura lungo l'asse orizzontale ARFCN o MHz.
I pulsanti consentono di salvare un rapporto sul funzionamento dello scanner sotto forma di un elenco di stazioni base decodificate, cancellare i risultati della decodifica BS e ottenere informazioni sul programma.

Principi e caratteristiche del lavoro.

Durante il funzionamento il programma scansiona la gamma di frequenze operative con passo di 2,0 MHz (10 canali GSM) e digitalizza il segnale con una frequenza di campionamento di 2,4 MHz. Il processo di scansione consiste in un passaggio veloce attraverso l'intera gamma per misurare la potenza del segnale e in un passaggio lento per decodificare gli identificatori BS.

Viene eseguita una fase di decodifica dopo aver attraversato l'intero intervallo per misurare la potenza. Pertanto, nella gamma GSM 900, il livello del segnale viene aggiornato circa una volta ogni 2 s e un passaggio di decodifica completo richiede circa 1 minuto.
A causa della scarsa qualità del segnale ricevuto da RTL-SDR, la probabilità di decodificare correttamente le informazioni di sistema (SI) del canale di controllo della trasmissione BS (BCCH) non è elevata. Le fluttuazioni del livello del segnale come risultato della propagazione multipercorso riducono anche la probabilità di decodificare le informazioni del sistema. Per questi motivi, per ottenere gli identificatori BS, è necessario che lo scanner accumuli informazioni in un periodo di circa 10 minuti. Ma anche in questo caso, non tutti i canali forniscono in una determinata posizione un livello e una qualità del segnale sufficienti per la decodifica anche da parte del ricevitore più ideale. Inoltre, non tutti i canali GSM vengono utilizzati per funzionare secondo lo standard GSM, come si può vedere nella figura sopra, i canali 975 - 1000 sono occupati da Megafon per funzionare secondo lo standard UMTS.
Durante il funzionamento, lo scanner aggiunge informazioni di sistema sui nuovi canali decodificati alla serie generale di informazioni sui canali. Ma le informazioni sui canali precedentemente decodificati non vengono cancellate quando le informazioni di sistema non vengono decodificate in questa fase e rimangono nell'array. Per cancellare queste informazioni, utilizzare il pulsante per cancellare i risultati della decodifica BS.
Quando si fa clic sul pulsante Salva rapporto, i risultati accumulati vengono salvati in un file di testo con un nome composto dal nome del programma, dalla data e dall'ora in cui i dati sono stati salvati. Di seguito è riportato un esempio di parte del file di report:
Lo scanner è progettato per funzionare con Windows 7, 8.1 e 10. Il lavoro è stato testato con tre copie dell'RTL-SDR con il sintonizzatore R820T, altri tipi di sintonizzatori non sono stati testati.
Per funzionare sotto Windows XP è stata compilata una versione speciale del programma che funziona molte volte più lentamente della versione standard.

Sviluppo.

Il programma dello scanner viene fornito così com'è, senza alcuna garanzia o responsabilità. Se hai idee ragionevoli su come espandere le funzionalità o migliorare le prestazioni dello scanner, siamo pronti a discutere la possibilità della loro implementazione.
Puoi prendere parte allo sviluppo dello scanner; per fare ciò, visita la pagina di sviluppo.
È previsto un ulteriore sviluppo dello scanner GSM, possibilmente con la vostra partecipazione.