Araç hırsızları bu proje ile artık çok kolay bir şekilde yakalanacak.Arduino ve gps gprs modül kullanarak telefonumuzdan veya bilgisayarımızdan harita üzerinden anlık olarak aracımızın bulunduğu yeri görebileceğiz.
Malzemeler:
- Arduino Uno
- GPRS + GPS SIM908 Modül
- 2300mAh Şarj Edilebilir Pil
- GPRS-GSM Dış Anten
- Harici GPS Anteni
- 9V Pil
- 9V Pil Tutucu
Elektronik Kısım:
GPRS+GPS shield Devre Diyagramı(ÖN):
GPRS+GPS shield Devre Diyagramı(ARKA):
GPRS+GPS shield üzerinde bulunan ledin durumuna göre aşağıdaki işlemler gerçekleşmektedir.
LED DURUM | SIM908 DAVRANIŞI |
---|---|
Sönük | SIM908 Çalışmıyor. |
64ms Yanıyor 800ms Sönüyor | SIM908 Ağa kayıtlı değil |
64ms Yanıyor / 3000ms Sönüyor | SIM908 Ağa kaydedildi |
SIM908 Ağa kaydedildi | PPP GPRS İletişim Kuruldu |
GPS Modülümüze antenimizi bağlıyoruz.
Arduino ve gps modülümüzün bağlantılarını yapıyoruz.Modülümüz arduino uyumlu olduğu için üst üste direk birleştiriyoruz.
Dikkat Edilecek Noktalar:
- Dahili antenimizi dikkatli bir şekilde yerleştirelim.Aksi taktirde kırılabilir.
- GPS anteni yatay konumda olmalıdır.
- Uydular sinyali iyileştirmek için, anten açık alanda olmak zorunda.
GPS anteni konumu çok önemlidir! Harici GPS anteni yukarıda olmalı dahili GPS anteni seramik tarafa doğru işaret edilmelidir.
Telefon numarası doğru olduğunda, modül numaraya sms ile gps pozisyonunu gönderecektir.Bilgisayarınızdaki php script ile internet üzerinden GPS e veri göndererek, enlem ve boylamını alır.
Yazılım Kısmı:
Arduino Yazılımı:
APN, kullanıcı adı ve şifre yapılandırmanız gerekir. Bunu yapmazsanız, GPRS + GPS GPRS şebekesine bağlanamassınız. Ayrıca, bilgisayarınıza (dış IP, değil LAN IP adresi) veya sunucunun etki alanı IP adresiyle URL’yi ayarlamanız gerekir.
int8_t answer; int onModulePin= 2; char aux_string[30]; int flag = 0; char number [20]; char realnumber[9]; char mynumber[9]; int a=0; int b=0; int c=0; //Your phone number char phone_number[]="012345678"; // telefon numaranızı girin char data[100]; int data_size; char aux_str[30]; char aux; int x = 0; char N_S,W_E; char url[] = "pruebas.libelium.com"; char frame[200]; char latitude[15]; char longitude[15]; char altitude[6]; char date[16]; char time[7]; char satellites[3]; char speedOTG[10]; char course[10]; void setup(){ mynumber[0]='0'; mynumber[1]='1'; mynumber[2]='2'; mynumber[3]='3'; mynumber[4]='4'; mynumber[5]='5'; mynumber[6]='6'; mynumber[7]='7'; mynumber[8]='8'; pinMode(onModulePin, OUTPUT); Serial.begin(115200); power_on(); power_onGPS(); power_onSMS(); delay(5000); sendATcommand("AT+CPIN=****", "OK", 2000); delay(3000); while( (sendATcommand("AT+CREG?", "+CREG: 0,1", 1000) || sendATcommand("AT+CREG?", "+CREG: 0,5", 1000)) == 0 ); sendATcommand("AT+CLIP=1", "OK", 1000); while ( start_GPS() == 0); while (sendATcommand("AT+CREG?", "+CREG: 0,1", 2000) == 0); // sets APN , user name and password sendATcommand("AT+SAPBR=3,1,\"Contype\",\"GPRS\"", "OK", 2000); sendATcommand("AT+SAPBR=3,1,\"APN\",\"*******\"", "OK", 2000); sendATcommand("AT+SAPBR=3,1,\"USER\",\"*******\"", "OK", 2000); sendATcommand("AT+SAPBR=3,1,\"PWD\",\"*******\"", "OK", 2000); // gets the GPRS bearer while (sendATcommand("AT+SAPBR=1,1", "OK", 20000) == 0) { delay(5000); } delay(1000); while(Serial.available() != 0) { Serial.read(); } } void loop(){ answer = sendATcommand("", "+CLIP", 1000); //Detect incomming call if (answer == 1) { Serial.println("Incoming call"); if ( flag == 0){ for (int i=0; i<19; i++){ // read the incoming byte: while (Serial.available() == 0) { delay (50); } //Stores phone number number[i]= Serial.read(); } Serial.flush(); flag = 1; } //Stores phone calling number for (int i=0; i<=14; i++){ if(number[i]== '"'){ i++; realnumber[0]=number[i]; i++; realnumber[1]=number[i]; i++; realnumber[2]=number[i]; i++; realnumber[3]=number[i]; i++; realnumber[4]=number[i]; i++; realnumber[5]=number[i]; i++; realnumber[6]=number[i]; i++; realnumber[7]=number[i]; i++; realnumber[8]=number[i]; break; } } //Check phone number for (int i=0;i<9;i++){ if (realnumber[i]== mynumber[i]){ a++; if( a==9){ Serial.println("Correct number"); sendATcommand("ATH", "OK", 1000); if(b==1){ b=0; }else{ b=1; c=1; } break; } }else{ Serial.println("Wrong number"); break; } } a=0; answer=0; flag = 0; } //Send SMS once and position to HTTP if (b==1){ get_GPS(); send_HTTP(); delay(500); if (c==1){ sendSMS(); delay(100); c=0; } } } void power_on(){ uint8_t answer=0; digitalWrite(onModulePin,HIGH); delay(3000); digitalWrite(onModulePin,LOW); while(answer == 0){ // Send AT every two seconds and wait for the answer answer = sendATcommand("AT", "OK", 2000); } } int8_t sendATcommand(char* ATcommand, char* expected_answer, unsigned int timeout){ uint8_t x=0, answer=0; char response[100]; unsigned long previous; memset(response, '\0', 100); // Initialice the string delay(100); while( Serial.available() > 0) Serial.read(); // Clean the input buffer if (ATcommand[0] != '\0') { Serial.println(ATcommand); // Send the AT command } x = 0; previous = millis(); // this loop waits for the answer do{ if(Serial.available() != 0){ // if there are data in the UART input buffer, reads it and checks for the asnwer response[x]= Serial.read(); //Serial.print(response[x]); x++; if (strstr(response, expected_answer) != NULL) // check if the desired answer (OK) is in the response of the module { answer = 1; } } }while((answer == 0) && ((millis() - previous) < timeout)); // Waits for the asnwer with time out return answer; } void power_onGPS(){ uint8_t answer=0; // checks if the module is started answer = sendATcommand("AT", "OK", 2000); if (answer == 0) { // power on pulse digitalWrite(onModulePin,HIGH); delay(3000); digitalWrite(onModulePin,LOW); // waits for an answer from the module while(answer == 0){ // Send AT every two seconds and wait for the answer answer = sendATcommand("AT", "OK", 2000); } } } int8_t start_GPS(){ unsigned long previous; previous = millis(); // starts the GPS sendATcommand("AT+CGPSPWR=1", "OK", 2000); sendATcommand("AT+CGPSRST=0", "OK", 2000); // waits for fix GPS while(( (sendATcommand("AT+CGPSSTATUS?", "2D Fix", 5000) || sendATcommand("AT+CGPSSTATUS?", "3D Fix", 5000)) == 0 ) && ((millis() - previous) < 90000)); if ((millis() - previous) < 90000) { return 1; } else { return 0; } } int8_t get_GPS(){ int8_t counter, answer; long previous; // First get the NMEA string // Clean the input buffer while( Serial.available() > 0) Serial.read(); // request Basic string sendATcommand("AT+CGPSINF=0", "AT+CGPSINF=0\r\n\r\n", 2000); counter = 0; answer = 0; memset(frame, '\0', 100); // Initialize the string previous = millis(); // this loop waits for the NMEA string do{ if(Serial.available() != 0){ frame[counter]= Serial.read(); counter++; // check if the desired answer is in the response of the module if (strstr(frame, "OK") != NULL) { answer = 1; } } // Waits for the asnwer with time out } while((answer == 0) && ((millis() - previous) < 2000)); frame[counter-3] = '\0'; // Parses the string strtok(frame, ","); strcpy(longitude,strtok(NULL, ",")); // Gets longitude strcpy(latitude,strtok(NULL, ",")); // Gets latitude strcpy(altitude,strtok(NULL, ".")); // Gets altitude strtok(NULL, ","); strcpy(date,strtok(NULL, ".")); // Gets date strtok(NULL, ","); strtok(NULL, ","); strcpy(satellites,strtok(NULL, ",")); // Gets satellites strcpy(speedOTG,strtok(NULL, ",")); // Gets speed over ground. Unit is knots. strcpy(course,strtok(NULL, "\r")); // Gets course convert2Degrees(latitude); convert2Degrees(longitude); return answer; } /* convert2Degrees ( input ) - performs the conversion from input * parameters in DD°MM.mmm’ notation to DD.dddddd° notation. * * Sign '+' is set for positive latitudes/longitudes (North, East) * Sign '-' is set for negative latitudes/longitudes (South, West) * */ int8_t convert2Degrees(char* input){ float deg; float minutes; boolean neg = false; //auxiliar variable char aux[10]; if (input[0] == '-') { neg = true; strcpy(aux, strtok(input+1, ".")); } else { strcpy(aux, strtok(input, ".")); } // convert string to integer and add it to final float variable deg = atof(aux); strcpy(aux, strtok(NULL, '\0')); minutes=atof(aux); minutes/=1000000; if (deg < 100) { minutes += deg; deg = 0; } else { minutes += int(deg) % 100; deg = int(deg) / 100; } // add minutes to degrees deg=deg+minutes/60; if (neg == true) { deg*=-1.0; } neg = false; if( deg < 0 ){ neg = true; deg*=-1; } float numberFloat=deg; int intPart[10]; int digit; long newNumber=(long)numberFloat; int size=0; while(1){ size=size+1; digit=newNumber%10; newNumber=newNumber/10; intPart[size-1]=digit; if (newNumber==0){ break; } } int index=0; if( neg ){ index++; input[0]='-'; } for (int i=size-1; i >= 0; i--) { input[index]=intPart[i]+'0'; index++; } input[index]='.'; index++; numberFloat=(numberFloat-(int)numberFloat); for (int i=1; i<=6 ; i++) { numberFloat=numberFloat*10; digit= (long)numberFloat; numberFloat=numberFloat-digit; input[index]=char(digit)+48; index++; } input[index]='\0'; } void send_HTTP(){ uint8_t answer=0; // Initializes HTTP service answer = sendATcommand("AT+HTTPINIT", "OK", 10000); if (answer == 1) { // Sets CID parameter answer = sendATcommand("AT+HTTPPARA=\"CID\",1", "OK", 5000); if (answer == 1) { // Sets url sprintf(aux_str, "AT+HTTPPARA=\"URL\",\"http://%s/demo_sim908.php?", url); Serial.print(aux_str); sprintf(frame, "visor=false&latitude=%s&longitude=%s&altitude=%s&time=%s&satellites=%s&speedOTG=%s&course=%s", latitude, longitude, altitude, date, satellites, speedOTG, course); Serial.print(frame); answer = sendATcommand("\"", "OK", 5000); if (answer == 1) { // Starts GET action answer = sendATcommand("AT+HTTPACTION=0", "+HTTPACTION:0,200", 30000); if (answer == 1) { Serial.println(F("Done!")); } else { Serial.println(F("Error getting url")); } } else { Serial.println(F("Error setting the url")); } } else { Serial.println(F("Error setting the CID")); } } else { Serial.println(F("Error initializating")); } sendATcommand("AT+HTTPTERM", "OK", 5000); } void power_onSMS(){ uint8_t answer=0; // checks if the module is started answer = sendATcommand("AT", "OK", 2000); if (answer == 0) { // power on pulse digitalWrite(onModulePin,HIGH); delay(3000); digitalWrite(onModulePin,LOW); // waits for an answer from the module while(answer == 0){ // Send AT every two seconds and wait for the answer answer = sendATcommand("AT", "OK", 2000); } } } void sendSMS(){ sendATcommand("AT+CPIN=****", "OK", 2000); delay(3000); Serial.println("Connecting to the network..."); while( (sendATcommand("AT+CREG?", "+CREG: 0,1", 500) || sendATcommand("AT+CREG?", "+CREG: 0,5", 500)) == 0 ); Serial.print("Setting SMS mode..."); sendATcommand("AT+CMGF=1", "OK", 1000); // sets the SMS mode to text Serial.println("Sending SMS"); sprintf(aux_string,"AT+CMGS=\"%s\"", phone_number); answer = sendATcommand(aux_string, ">", 2000); // send the SMS number if (answer == 1) { Serial.print("Help me! I've been stolen. Find me in:"); Serial.print("Latitude: "); int i = 0; while(latitude[i]!=0){ Serial.print(latitude[i]); i++; } Serial.print(" / Longitude: "); i = 0; while(longitude[i]!=0){ Serial.print(longitude[i]); i++; } Serial.write(0x1A); answer = sendATcommand("", "OK", 20000); if (answer == 1) { Serial.print("Sent "); } else { Serial.print("error "); } } else { Serial.print("error "); Serial.println(answer, DEC); } }
PHP Yazılımı:
GPRS + GPS modül ağa bağlanacak ve bilgisayarınızda php script Internet üzerinden GPS verilerini gönderecek.
Buradan indir >> https://www.robimek.com/wp-content/uploads/gps.txt
bu urunuu nasıl temın edebılİRİZ
Selam harita tek cihazı görmek için mi?
Kaç cihaz görünür haritada?
bu modülü nerden bulabilirim
mynumber[0]=’0′;
mynumber[1]=’1′;
mynumber[2]=’2′;
mynumber[3]=’3′;
mynumber[4]=’4′;
mynumber[5]=’5′;
mynumber[6]=’6′;
mynumber[7]=’7′;
mynumber[8]=’8′;
neden 9 yok?
Iyi günler sim 808 gsm module proje yapacam engeli takip gsm modülü var fakat yanit vermiyor nasil cözum bulabilirim yardimcı olursanız çok sevinirim
Arkadaşlar bu modül ile minimum ne kadarlık bir konum değişikliğini algılayabliriz? mesela 10 cm’lik bir değişim algılanabilir mi?
sezgin bey iyi günler ben üniversite öğrencisiyim bilgisayar bölümü okuyorum bu projeyi ödev olarak bağlantı şemasını atabilirmisiniz
merhaba sezgin bey bu gprs/gsm ile gps/gsm olan modüller var farkı nedir.
bu malzemeleri bulabileceğim bir yer var mı. yardımcı olurmusunuz
merhablar bir konuda sizden kaynak isteyeceğim. ben aldığım gps verilerin
tek tek google map e girmekten ziyade anlık olarak fgoogle map üzeriden göstermek istiyorum. gps verilerini alıyorum aa gerisi konuusnda bilgim yok bu konuda bilginiz var mı acaba çalışambilmem için nerden başlamam lazım veya bir ders kaynağı varsa yazabilir misinz acaba teşekküreler iyi çalışmalar
orkgks@gmail.com
Merhaba komple maaliyetler ne kadar acaba
merhaba sezgin bey
umarım yanlış anlamazsınız ama benim yardım isteyeceğim bir konu var benzer olduğundan böyle bir konun aktına yorum atmak istedim iletşim bilgilerinizi bulmadım
öncelikle ben bi makinanın elektiriği kesildiğinde bilgisyarım veya bi internet sitesi üzerinden bu makinanın elektiriğin kesildiğinde görebileceğim bir sistem yapacağım. bunu eski yolla yapmaya kalktığımda çok uğraştırıcı oluyor. açıkçası arduino konusunda pek bir bilgim yok bu konuda sizden yardımlarınızı isteyecektim. konunun üzerinden tekrak geçmek gerekirse
10 adet gibi bir pano var buraya gelen elektirik kesildiğinde bana bildirilmesini istiyorum (bilginiz varsa internet sitesi benim için mükemmel bir işlev olur) sadece kesildi bilgisini alabilsem yeter.
bana bu konu hakkında yardımız için mail hesabıma dönüş sağlarsanız çok memnun kalırım
fatih_kanidagli@hotmail.com
usta apn ayarlarını nasıl yapıyoruz anlatabilirmisin
hocam;
Ublox NEO-6M GPS Module hakkında projede yapar mısın.
Selam. bu GSM+GPRS modülü nerden alabilirim, bulamadım internette :))
direnç.net de var ama arduino üzerine takmalı değil. Robotisanda sım 900 modeli var shield halinde onunla yapabilirsin.
Robotisandaki sım 900 modeli nin burdaki modelle farklılıkları neler kodda bi düzeltme yapmam gerekiyormu sim 900 modelini aldığımda ..
Aliexpresten hazir gps takip cihazi getirtip kaydettirsek daha ucuza malolur
nRF24L01 modülü işimi görmez mi peki hocam öğrenciyim biraz aşıyor gsm modülünün ücreti
nRF24L01 modül rf modül yani konum bilgisi sadece gps modüllerle alınıyor.
yani sadece ethernet shiel işimi görmez mi ucuz bişey yapmak için
ethernet shield de internete bağlı olman gerekir. O da arabada olmaz. Bu projedeki gps-gprs modülü kullansan daha kolay ve sorunsuz takip edebilirsin.
peki hocam ben araç atkip sistemi yapsam ethernet shield mi gerekli yoksa gsm shield mi?
merhaba
ben Arduino Ethernet Shield + gps modül kullanarak bilgisayarıma koordinatları alabilirmiyim ?
tabi alabilirsin. Bu projedeki gibi web adresi tanımlayarak bir internet sitene bu php sayfasını eklersen oradan koordinatları görebilirsin. Arduino Ethernet Shield kullanmana da gerek yok norma arduino uno veya megada işini görür
sim e numara kaydetme işini bir lcd ekran vasıtasıyla nasıl yapabiliriz. bu sistemde numaraları kodlar içinde kaydediyorsunuz herhalde.
char phone_number[]=”012345678″; // telefon numaranızı girin
yukarıdaki kısım tel numarası girildiği yer. Yani yapmak istediğiniz numarayı istediğiniz zaman değiştirmek mi ?
directupload.net/images/160219/bbuugvzd.jpg bunun aynsı ama
S2-1040S-ZZ1K0C yazıyor
aldığın yerde kütüphane linki varsa onu indirip denedin mi normalde kütüphanesi var
Yardımcı olursanız sevinirim suan hersey hazır ama hiç bir işlem yapamıyorum
modelini yazarmısın
imei kaydı yapılmamıs ise bunu kaydettirme sansım varmı veya degistirme
projede kaydetme işlemi yazıyor fakat modüle göre farklı yöntemlerle kayıt edilebiliyor.
exit status 1
‘power_on’ was not declared in this scope hatası veriyor hocam birde
ime kaydı yapılmamış olabilir bir de kendi kütüphanesi varsa onunla çalıştır
hocam bende directupload.net/images/160219/bbuugvzd.jpg bu shield var ve bunla sizin verdiginiz kodlar calısmıyor yardımcı olurmusunuz
Sezgin hocam bende sim900 var bunu IMEI nasıl değiştirebilirim IMEI kayıt değil yardımcı olursanız sevinirim
Pil ne kadar dayanır bu sisteme acaba?
normal pil hemen biteceğinden lipo pil kullanıp aküden şarj ettirebilirsiniz
Php kodları düzgün gözükmüyor. Düzeltirseniz daha iyi olur 🙂
Düzeltildi link eklendi.
merhabalar elimde araç takip cihazı var gps gprs antenleri ile birlikte bunu nasıl kullanabilirim çalınmasından korktuğum eşya var onun içine koymak isityorum ancak verileri nasıl elde edeceğim pek bilmediğim hatta hiç bilmediğim bir konu yardımcı olursanız çok iyi olur teşkkürler
modeline göre pin bağlantılarını ayırmanız gerekiyor. ve yazılıma uyarlamak için de modelin kütüphanesi olması lazım ki arduino ile uyumlu olması da önemli bu konuda. Ayrıca harici sd kart modülü de kullanmalısınız o da uğraştırır sizi. Bence arduino uyumlu üzerine takılabilir modül kullanın kolay olur
Merhaba bir sorum olacak haritada kendi girdiğiniz koordinatların dışına çıkarsa bildirim vermesini sağlayabilirmiyiz.
olabilir yazılıma koordinat sınırlarını girin gelen veriye göre eşleme yapıp uygulamayı gerçekleştirin
Bu projede haritaya aktarım olayını nasıl yaptınız bende böyle bir proje yapmak istiyorum ama gpsden aldığı verileri direk android uygulamada google maps üzerinde göstersin istiyorum
Google maps kullanıyor. Aslında alınan koordinat haritanın konumunda gösteriyor. Yani harita güncel değil resim gibi düşün. Bu php kodunu siteye bir siteye gömersen ordan telefon üzerinden de veri alırsın
Peki biz belli bir alandan gezinme görüntüsü almak istiyorsak alabilir miyiz,örneğin evimizde dolaşırken ayrıntılı olarak nerelerde dolaşıyoruz güncel olarak alabilir miyiz?
Tabi alabilirsiniz ama küçük alanlarda çok farklılık göremeyebilirsiniz.
Merhaba bu devrede sim kartın görevi nedir sim kartsız yapamaz mıyız?
Araç içindeki gps (yol ve konum görebildiğimiz) sağlayıcılar simsiz çalışmıyor mu?
Simsiz olan modüller de var onlar sadece gps modül olarak geçer onlarında IM lerinden konum bilgisi alırsınız. Buradaki sim kartta gsm üzerinden veri alınıyor.