داده ها در صفحه گسترده dataGPS.csv ذخیره می شوند که فرمت آن مطابق با الزامات سرویس است. Google My Maps.

    زبان برنامه نویسی: آردوینو (C++)

آموزش تصویری

آنچه شما نیاز دارید

نحوه مونتاژ

gps-tracker.ino // کتابخانه برای کار با دستگاه ها از طریق SPI#عبارتند از // کتابخانه برای کار با کارت SD#عبارتند از // کتابخانه برای کار با دستگاه GPS#عبارتند از // یک شی از کلاس GPS ایجاد کنید و شی Serial1 را به آن ارسال کنید GPS GPS (Serial1) ; // پین LED#define LED_PIN A0 // پین دکمه #define BUTTON_PIN 13 // کارت CS micro-sd را پین کنید#define CHIP_SELECT_PIN 9 // فاصله زمانی برای نوشتن اطلاعات روی کارت#تعریف INTERVAL 5000 // اندازه آرایه را برای زمان، تاریخ، عرض جغرافیایی و طول جغرافیایی تنظیم کنید#define MAX_SIZE_MASS 16 // آرایه برای ذخیره زمان جاریزمان کاراکتر[MAX_SIZE_MASS]؛ // وضعیت رکورد bool stateRec = false ; // زمان فعلی را به خاطر می آوردطولانی شروعMillis = millis(); void setup() ( // پورت سریال را برای نظارت بر اقدامات در برنامه باز کنید Serial.begin(115200); // صبر کنید تا مانیتور پورت سریال باز شود // به منظور ردیابی تمام رویدادهای برنامه// while (!Serial) ( // ) Serial.print ("Serial init OK \r\n") ; // یک اتصال سریال با ماژول GPS باز کنید Serial1.begin(115200); // LED را روی حالت خروجی قرار دهید pinMode(LED_PIN، OUTPUT) ; // دکمه را روی حالت ورود قرار دهید pinMode(BUTTON_PIN، INPUT_PULLUP)؛ // اطلاعات خروجی در مورد مقداردهی اولیه به پورت سریال Serial.println("در حال راه اندازی کارت SD...") ; // کارت SD را مقداردهی اولیه کنید while (! SD.begin (CHIP_SELECT_PIN) ) ( Serial.println ("کارت ناموفق، یا موجود نیست" ) ؛ تاخیر (1000 ) ؛ ) // اطلاعات خروجی به پورت سریال Serial.println("کارت اولیه شد"); // یک شی dataFile از کلاس File برای کار با فایل ها ایجاد کنیدفایل dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // اگر فایل وجود داشته باشد if (dataFile) ( // نام داده های آینده را روی کارت حافظه بنویسید dataFile.println("زمان، مختصات، سرعت") ; // فایل را ببندید dataFile.close(); Serial.println("Save OK"); ) else ( Serial.println ("خطا در باز کردن test.csv") ; ) ) void loop() ( // فشار دکمه را ضبط کنیداگر (! DigitalRead(BUTTON_PIN) ) ( // وضعیت "ضبط" / "نوشتن" را به کارت حافظه تغییر دهید stateRec = ! stateRec; // وضعیت LED نشانگر را تغییر دهید digitalWrite(LED_PIN، stateRec) ; ) // اگر داده ها از ماژول GPS آمده باشد if (gps.available()) ( // داده ها را بخوانید و تجزیه کنید gps.readParsing(); // وضعیت ماژول GPS را بررسی کنیدسوئیچ (gps.getState () ) ( // همه چیز درست است مورد GPS_OK: Serial.println ("GPS خوب است" ) ; // اگر بازه زمانی مشخص شده گذشته باشد if (millis() - startMillis > INTERVAL && stateRec) ( // داده ها را در کارت حافظه ذخیره کنید saveSD(); // زمان فعلی را به خاطر بسپارید startMillis = millis(); ) زنگ تفريح ؛ // مورد خطای داده GPS_ERROR_DATA: Serial.println ("داده های خطای GPS" ) ; زنگ تفريح ؛ // بدون ارتباط با ماهوارهکیس GPS_ERROR_SAT: Serial.println ( "GPS بدون اتصال به ماهواره") ؛ زنگ تفريح ؛ )))) // عملکرد برای ذخیره داده ها در کارت حافظه void saveSD() ( File dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // اگر فایل وجود داشته باشد و باز شده باشد if (dataFile) ( // زمان فعلی را می خواند gps.getTime (زمان، MAX_SIZE_MASS)؛ // زمان را روی کارت حافظه بنویسید dataFile.print(" \" " ) ؛ dataFile.print(time); dataFile.print(" \" " ) ؛ dataFile.print ("") ; dataFile.print(" \" " ) ; // خواندن و نوشتن مختصات طول و عرض جغرافیایی در کارت حافظه dataFile.print(gps.getLatitudeBase10(), 6); dataFile.print ("") ; dataFile.print(gps.getLongitudeBase10(), 6); dataFile.print(" \" " ) ؛ dataFile.print ("" ); dataFile.print(gps.getSpeedKm()); dataFile.println("km/h"); dataFile.close(); Serial.println("Save OK"); ) else ( Serial.println ("خطا در باز کردن test.csv" ) ) )

سیستم موقعیت یابی جهانی GPS در حال حاضر بخشی از زندگی ما شده است. امروزه تصور یک تلفن همراه بدون ماژول GPS داخلی دشوار است. این سیستم ناوبری ماهواره ای به شما اجازه می دهد تا هر جسمی را ردیابی کنید، مختصات و سرعت حرکت آنها را تعیین کنید. اکنون GPS نه تنها برای شرکت‌هایی که تجهیزات مربوطه را توسعه می‌دهند، بلکه برای آماتورهای رادیویی معمولی که قبلاً از بردهای محبوب آردوینو تا حد توان خود استفاده می‌کنند نیز در دسترس است. این مطلب در مورد اتصال یک ردیاب GPS مینیاتوری به برد آردوینو پرو مینی بحث خواهد کرد. ردیاب MiniGPS PG03 به عنوان سوژه آزمایشی استفاده می شود.



این ردیاب علاوه بر مختصات مستقیم جغرافیایی، جهت حرکت، مسافت طی شده و سرعت حرکت را نشان می دهد. متأسفانه اطلاعات را ضبط نمی کند، بنابراین با اتصال آن به آردوینو می توانید به این داده ها دسترسی داشته باشید و هر کاری که می خواهید با آن انجام دهید.


ابتدا باید ردیاب جدا شود. در زیر تصاویری از یک ردیاب GPS جدا شده را مشاهده می کنید.




قلب ردیاب تراشه GPS Venus638FLP است. چهل و چهارمین پایه آن خروجی رابط UART (TxD) است. می توانید یک سیم را مستقیماً به این پین لحیم کنید یا می توانید یک پین آزمایشی را روی برد پیدا کنید که این پین نیز به آن متصل است. در زیر تصاویری از محل پین های میکرو مدار و نحوه اتصال به پین ​​مورد نظر را مشاهده می کنید.





حالا بیایید یک برد آردوینو پرو مینی جمع و جور و یک ماژول کارت SD برای ضبط داده های پروتکل NMEA بگیریم. نمودار اتصال آردوینو پرو مینی و ماژول کارت SD به شرح زیر است:



اتصال پین های ماژول برای کارت های SD:


GND به GND
VCC به 3.3 ولت
MISO به پین ​​12
MOSI به پین ​​11
SCK به پین ​​13
CS به پین ​​10

اتصال پین های ردیاب GPS:


GND به GND
پین 2 (آردوینو) به پین ​​44 (GPS)

بهتر است از ردیاب GPS (3.7 ولت) برق بگیرید. از آنجایی که باتری آن ظرفیت انرژی پایینی دارد، بهتر است مانند یکی از تصاویر بالا، یک باتری خارجی مثلاً از یک تلفن همراه 1400 میلی آمپر ساعتی وصل شود.


اکنون باید کتابخانه TinyGPS را دانلود کنید، همچنین به یک کتابخانه برای کار با کارت های SD و کتابخانه SoftwareSerial نیاز دارید که در Arduino\libraries یافت می شود.



در کد زیر می توانید انتخاب کنید چه داده هایی بنویسید:


void gpsdump(TinyGPS &gps) ( float flat, flon; // Lat, Long float fkmph = gps.f_speed_kmph(); // سرعت در کیلومتر/ساعت float falt = gps.f_altitude(); // +/- ارتفاع بر حسب متر (در واقع ارتفاع به نظر می رسد) float fc = gps.f_course(); // دوره در درجه بدون علامت سن طولانی؛ gps.f_get_position(&flat, &flon, &age); Serial.print("lat"); Serial .print (مسطح، 4); Serial.print (" lon "); Serial.print (flon, 4); Serial.print ("kms"); Serial.print(fkmph); Serial.print("دوره") Serial .print(fc); Serial.print("elevation"); Serial.println(falt); ///////////////////////// // /////////////////////////////////////////////////////////////////////// ///////////////

طرح را در آردوینو آپلود کنید، یک کارت SD فرمت شده مطابق با FAT32 و داشتن یک فایل log.txt در ریشه قرار دهید. Serial Monitor را اجرا کنید و مشاهده خواهید کرد که داده ها روی کارت SD نوشته می شوند.



پس از چندین آزمایش با آردوینو، تصمیم گرفتم یک ردیاب GPS ساده و نه چندان گران قیمت با مختصات ارسال شده از طریق GPRS به سرور بسازم.
Arduino Mega 2560 (Arduino Uno)، SIM900 - ماژول GSM/GPRS (برای ارسال اطلاعات به سرور)، گیرنده GPS SKM53 GPS.

همه چیز در ebay.com خریداری شد، در مجموع حدود 1500 روبل (حدود 500 روبل برای آردوینو، کمی کمتر برای ماژول GSM، کمی بیشتر برای GPS).

گیرنده جی پی اس

ابتدا باید نحوه کار با GPS را بدانید. ماژول انتخاب شده یکی از ارزان ترین و ساده ترین است. با این حال، سازنده قول باتری برای ذخیره داده های ماهواره ای را داده است. طبق دیتاشیت، شروع سرد باید 36 ثانیه طول بکشد، اما در شرایط من (طبقه 10 از طاقچه، بدون ساختمان نزدیک) 20 دقیقه طول کشید. با این حال، شروع بعدی در حال حاضر 2 دقیقه است.

یکی از پارامترهای مهم دستگاه های متصل به آردوینو مصرف برق است. اگر مبدل آردوینو را بیش از حد بارگذاری کنید، ممکن است بسوزد. برای گیرنده استفاده شده، حداکثر توان مصرفی 45 میلی آمپر @ 3.3 ولت است. اینکه چرا مشخصات باید قدرت جریان را در ولتاژی غیر از ولتاژ مورد نیاز (5 ولت) نشان دهد برای من یک راز است. با این حال، مبدل آردوینو 45 میلی آمپر را تحمل خواهد کرد.

ارتباط
GPS کنترل نمی شود، اگرچه دارای پین RX است. برای چه هدفی مشخص نیست. اصلی ترین کاری که می توانید با این گیرنده انجام دهید خواندن داده ها از طریق پروتکل NMEA از پین TX است. سطوح - 5 ولت، فقط برای آردوینو، سرعت - 9600 باد. VIN را به VCC آردوینو، GND را به GND، TX را به RX سریال مربوطه وصل می کنم. من داده ها را ابتدا به صورت دستی خواندم، سپس با استفاده از کتابخانه TinyGPS. با کمال تعجب همه چیز قابل خواندن است. پس از تغییر به Uno، مجبور شدم از SoftwareSerial استفاده کنم و سپس مشکلات شروع شد - برخی از کاراکترهای پیام گم شدند. این خیلی مهم نیست، زیرا TinyGPS پیام های نامعتبر را قطع می کند، اما بسیار ناخوشایند است: می توانید فرکانس 1 هرتز را فراموش کنید.

نکته ای سریع در مورد SoftwareSerial: هیچ درگاه سخت افزاری در Uno وجود ندارد (به غیر از پورت متصل به سریال USB)، بنابراین باید از نرم افزار استفاده کنید. بنابراین، فقط می تواند داده ها را روی پینی دریافت کند که برد روی آن وقفه ها را پشتیبانی می کند. در مورد Uno، اینها 2 و 3 هستند. علاوه بر این، تنها یک چنین پورت می تواند در یک زمان داده را دریافت کند.

این همان چیزی است که "پایگاه آزمون" به نظر می رسد.

گیرنده/فرستنده GSM


حالا قسمت جالب تر می آید. ماژول GSM - SIM900. از GSM و GPRS پشتیبانی می کند. نه EDGE و نه به خصوص 3G پشتیبانی نمی شوند. برای انتقال داده های مختصات، این احتمالاً خوب است - هیچ تأخیر یا مشکلی در هنگام جابجایی بین حالت ها وجود نخواهد داشت، به علاوه GPRS اکنون تقریباً در همه جا در دسترس است. با این حال، برای برخی از برنامه های پیچیده تر این ممکن است کافی نباشد.

ارتباط
ماژول همچنین از طریق پورت سریال با همان سطح - 5 ولت کنترل می شود. و در اینجا ما به هر دو RX و TX نیاز خواهیم داشت. ماژول شیلد است، یعنی روی آردوینو نصب شده است. علاوه بر این، آن را با هر دو mega و uno سازگار است. سرعت پیش فرض 115200 است.

ما آن را روی مگا مونتاژ می کنیم و اینجا اولین سورپرایز ناخوشایند در انتظار ما است: پین TX ماژول روی پایه هفتم مگا می افتد. وقفه در پایه هفتم مگا موجود نیست، به این معنی که شما باید پایه هفتم را مثلاً به پایه ششم متصل کنید، که در آن وقفه ممکن است. بنابراین، یک پین آردوینو را هدر خواهیم داد. خوب، برای یک مگا خیلی ترسناک نیست - از این گذشته، پین های کافی وجود دارد. اما برای Uno این در حال حاضر پیچیده تر است (به شما یادآوری می کنم که فقط 2 پین وجود دارد که از وقفه ها پشتیبانی می کند - 2 و 3). به عنوان راه حلی برای حل این مشکل می توان پیشنهاد داد که ماژول را روی آردوینو نصب نکنید، بلکه آن را با سیم وصل کنید. سپس می توانید از Serial1 استفاده کنید.

پس از اتصال، سعی می کنیم با ماژول "صحبت کنیم" (فراموش نکنید آن را روشن کنید). ما سرعت پورت را انتخاب می کنیم - 115200، و خوب است که تمام پورت های سریال داخلی (4 در مگا، 1 در uno) و همه پورت های نرم افزار با سرعت یکسان کار کنند. به این ترتیب می توانید به انتقال داده با ثبات تری دست پیدا کنید. نمی دانم چرا، اگرچه می توانم حدس بزنم.

بنابراین، ما کدهای اولیه را برای ارسال داده ها بین پورت های سریال می نویسیم، atz را ارسال می کنیم و سکوت را در پاسخ دریافت می کنیم. چه اتفاقی افتاده است؟ آه، به حروف کوچک و بزرگ حساس است. ATZ، ما خوب می شویم. هورای، ماژول می تواند صدای ما را بشنود. آیا باید از روی کنجکاوی با ما تماس بگیرید؟ ATD +7499 ... تلفن ثابت زنگ می زند، دود از آردوینو می آید، لپ تاپ خاموش می شود. مبدل آردوینو سوخت. تغذیه 19 ولت ایده بدی بود، هرچند نوشته شده که از 6 تا 20 ولت کار می کند، 7-12 ولت توصیه می شود. دیتاشیت ماژول GSM هیچ جایی در مورد مصرف برق تحت بار بیان نمی کند. خب مگا میره انبار لوازم یدکی. با نفس بند آمده لپ تاپ را روشن می کنم که +19 ولت از طریق خط +5 ولت از USB دریافت می کرد. کار می کند و حتی USB هم نسوخت. از لنوو برای محافظت از ما متشکریم.

بعد از سوختن مبدل دنبال مصرف جریان گشتم. بنابراین، اوج - 2A، معمولی - 0.5A. این به وضوح فراتر از توانایی های مبدل آردوینو است. نیاز به غذای جداگانه دارد.

برنامه نويسي
این ماژول قابلیت انتقال داده گسترده ای را ارائه می دهد. شروع از تماس های صوتی و پیامک و پایان دادن به خود GPRS. علاوه بر این، برای دومی امکان اجرای یک درخواست HTTP با استفاده از دستورات AT وجود دارد. شما باید چندین مورد را ارسال کنید، اما ارزشش را دارد: واقعاً نمی خواهید درخواستی را به صورت دستی ایجاد کنید. چند تفاوت در باز کردن یک کانال انتقال داده از طریق GPRS وجود دارد - کلاسیک AT+CGDCONT=1، "IP"، "apn" را به خاطر دارید؟ بنابراین، در اینجا به همان چیز نیاز است، اما کمی حیله گری بیشتر.

برای دریافت یک صفحه در یک URL خاص، باید دستورات زیر را ارسال کنید:
AT+SAPBR=1,1 // حامل باز (Carrier) AT+SAPBR=3,1,"CONTYPE"، "GPRS" //نوع اتصال - GPRS AT+SAPBR=3،1"APN"،"اینترنت" //APN، برای Megafon - اینترنت AT+HTTPINIT //Initialize HTTP AT+HTTPPARA="CID",1 //شناسه حامل برای استفاده. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //نشانی اینترنتی واقعی، پس از sprintf با مختصات AT+HTTPACTION=0 // درخواست داده با استفاده از روش GET // منتظر پاسخ AT+HTTPTERM //توقف HTTP

در نتیجه در صورت وجود ارتباط، پاسخی از سرور دریافت خواهیم کرد. یعنی در واقع، ما قبلاً می دانیم که چگونه داده مختصات را اگر سرور از طریق GET دریافت کند، ارسال کنیم.

تغذیه
از آنجایی که تغذیه ماژول GSM از مبدل آردوینو، همانطور که متوجه شدم، ایده بدی است، تصمیم گرفته شد که یک مبدل 12v->5v، 3A در همان ebay خریداری شود. با این حال، ماژول منبع تغذیه 5 ولت را دوست ندارد. بیایید هک کنیم: 5 ولت را به پینی که 5 ولت از آردوینو می آید وصل کنید. سپس مبدل داخلی ماژول (بسیار قدرتمندتر از مبدل آردوینو، MIC 29302WU) از 5 ولت آنچه ماژول نیاز دارد را می سازد.

سرور

سرور یک نمونه ابتدایی نوشت - ذخیره مختصات و ترسیم در Yandex.maps. در آینده، امکان افزودن ویژگی‌های مختلفی از جمله پشتیبانی از بسیاری از کاربران، وضعیت «مسلح/غیر مسلح»، وضعیت سیستم‌های خودرو (اشتعال، چراغ‌های جلو و غیره) و احتمالاً حتی کنترل سیستم‌های خودرو وجود دارد. البته با پشتیبانی مناسب از ردیاب که به آرامی به یک سیستم هشدار تمام عیار تبدیل می شود.

تست های میدانی

این چیزی است که دستگاه مونتاژ شده بدون قاب به نظر می رسد:

پس از نصب مبدل برق و قرار دادن آن در کیس از یک مودم DSL مرده، سیستم به شکل زیر است:

سیم ها را لحیم کردم و چندین کنتاکت از بلوک های آردوینو برداشتم. آنها به این شکل هستند:

من 12 ولت را در ماشین وصل کردم، در اطراف مسکو رانندگی کردم و مسیر را دریافت کردم:


نقاط مسیر بسیار دور از یکدیگر هستند. دلیل آن این است که ارسال اطلاعات از طریق GPRS زمان نسبتاً طولانی دارد و در این مدت مختصات خوانده نمی شود. این به وضوح یک خطای برنامه نویسی است. اولاً با ارسال فوری بسته ای از مختصات در طول زمان و ثانیاً با کار ناهمزمان با ماژول GPRS درمان می شود.

زمان جستجوی ماهواره در صندلی سرنشین خودرو چند دقیقه است.

نتیجه گیری

ایجاد یک ردیاب GPS در آردوینو با دستان خود امکان پذیر است، اگرچه کار بی اهمیتی نیست. اکنون سوال اصلی این است که چگونه می توان دستگاه را در خودرو پنهان کرد تا در معرض عوامل مضر (آب، دما) قرار نگیرد، با فلز پوشیده نشود (GPS و GPRS محافظ خواهند شد) و به ویژه قابل توجه نباشد. در حال حاضر فقط در کابین قرار دارد و به سوکت فندک وصل می شود.

خوب، ما همچنین باید کد را برای یک مسیر صاف تر تصحیح کنیم، اگرچه ردیاب از قبل وظیفه اصلی را انجام می دهد.

دستگاه های مورد استفاده

  • آردوینو مگا 2560
  • آردوینو اونو
  • GPS SkyLab SKM53
  • سپر GSM/GPRS مبتنی بر SIM900
  • مبدل DC-DC 12v->5v 3A

پس از چندین آزمایش با آردوینو، تصمیم گرفتم یک ردیاب GPS ساده و نه چندان گران قیمت با مختصات ارسال شده از طریق GPRS به سرور بسازم.
Arduino Mega 2560 (Arduino Uno)، SIM900 - ماژول GSM/GPRS (برای ارسال اطلاعات به سرور)، گیرنده GPS SKM53 GPS.

همه چیز در ebay.com خریداری شد، در مجموع حدود 1500 روبل (حدود 500 روبل برای آردوینو، کمی کمتر برای ماژول GSM، کمی بیشتر برای GPS).

گیرنده جی پی اس

ابتدا باید نحوه کار با GPS را بدانید. ماژول انتخاب شده یکی از ارزان ترین و ساده ترین است. با این حال، سازنده قول باتری برای ذخیره داده های ماهواره ای را داده است. طبق دیتاشیت، شروع سرد باید 36 ثانیه طول بکشد، اما در شرایط من (طبقه 10 از طاقچه، بدون ساختمان نزدیک) 20 دقیقه طول کشید. با این حال، شروع بعدی در حال حاضر 2 دقیقه است.

یکی از پارامترهای مهم دستگاه های متصل به آردوینو مصرف برق است. اگر مبدل آردوینو را بیش از حد بارگذاری کنید، ممکن است بسوزد. برای گیرنده استفاده شده، حداکثر توان مصرفی 45 میلی آمپر @ 3.3 ولت است. اینکه چرا مشخصات باید قدرت جریان را در ولتاژی غیر از ولتاژ مورد نیاز (5 ولت) نشان دهد برای من یک راز است. با این حال، مبدل آردوینو 45 میلی آمپر را تحمل خواهد کرد.

ارتباط

GPS کنترل نمی شود، اگرچه دارای پین RX است. برای چه هدفی مشخص نیست. اصلی ترین کاری که می توانید با این گیرنده انجام دهید خواندن داده ها از طریق پروتکل NMEA از پین TX است. سطوح - 5 ولت، فقط برای آردوینو، سرعت - 9600 باد. VIN را به VCC آردوینو، GND را به GND، TX را به RX سریال مربوطه وصل می کنم. من داده ها را ابتدا به صورت دستی خواندم، سپس با استفاده از کتابخانه TinyGPS. با کمال تعجب همه چیز قابل خواندن است. پس از تغییر به Uno، مجبور شدم از SoftwareSerial استفاده کنم و سپس مشکلات شروع شد - برخی از کاراکترهای پیام گم شدند. این خیلی مهم نیست، زیرا TinyGPS پیام های نامعتبر را قطع می کند، اما بسیار ناخوشایند است: می توانید فرکانس 1 هرتز را فراموش کنید.

نکته ای کوتاه در مورد SoftwareSerial: هیچ پورت سخت افزاری در Uno وجود ندارد، بنابراین باید از نرم افزار استفاده کنید. بنابراین، فقط می تواند داده ها را روی پینی دریافت کند که برد روی آن وقفه ها را پشتیبانی می کند. در مورد Uno، اینها 2 و 3 هستند. علاوه بر این، تنها یک چنین پورت می تواند در یک زمان داده را دریافت کند.

این همان چیزی است که "پایگاه آزمون" به نظر می رسد.


گیرنده/فرستنده GSM


حالا قسمت جالب تر می آید. ماژول GSM - SIM900. از GSM و GPRS پشتیبانی می کند. نه EDGE و نه به خصوص 3G پشتیبانی نمی شوند. برای انتقال داده های مختصات، این احتمالاً خوب است - هیچ تأخیر یا مشکلی در هنگام جابجایی بین حالت ها وجود نخواهد داشت، به علاوه GPRS اکنون تقریباً در همه جا در دسترس است. با این حال، برای برخی از برنامه های پیچیده تر این ممکن است کافی نباشد.

ارتباط

ماژول همچنین از طریق پورت سریال با همان سطح - 5 ولت کنترل می شود. و در اینجا ما به هر دو RX و TX نیاز خواهیم داشت. ماژول شیلد است، یعنی روی آردوینو نصب شده است. علاوه بر این، آن را با هر دو mega و uno سازگار است. سرعت پیش فرض 115200 است.

ما آن را روی مگا مونتاژ می کنیم و اینجا اولین سورپرایز ناخوشایند در انتظار ما است: پین TX ماژول روی پایه هفتم مگا می افتد. وقفه در پایه هفتم مگا موجود نیست، به این معنی که شما باید پایه هفتم را مثلاً به پایه ششم متصل کنید، که در آن وقفه ممکن است. بنابراین، یک پین آردوینو را هدر خواهیم داد. خوب، برای یک مگا خیلی ترسناک نیست - از این گذشته، پین های کافی وجود دارد. اما برای Uno این در حال حاضر پیچیده تر است (به شما یادآوری می کنم که فقط 2 پین وجود دارد که از وقفه ها پشتیبانی می کند - 2 و 3). به عنوان راه حلی برای حل این مشکل می توان پیشنهاد داد که ماژول را روی آردوینو نصب نکنید، بلکه آن را با سیم وصل کنید. سپس می توانید از Serial1 استفاده کنید.

پس از اتصال، سعی می کنیم با ماژول "صحبت کنیم" (فراموش نکنید آن را روشن کنید). ما سرعت پورت را انتخاب می کنیم - 115200، و خوب است که تمام پورت های سریال داخلی (4 در مگا، 1 در uno) و همه پورت های نرم افزار با سرعت یکسان کار کنند. به این ترتیب می توانید به انتقال داده با ثبات تری دست پیدا کنید. نمی دانم چرا، اگرچه می توانم حدس بزنم.

بنابراین، ما کدهای اولیه را برای ارسال داده ها بین پورت های سریال می نویسیم، atz را ارسال می کنیم و سکوت را در پاسخ دریافت می کنیم. چه اتفاقی افتاده است؟ آه، به حروف کوچک و بزرگ حساس است. ATZ، ما خوب می شویم. هورای، ماژول می تواند صدای ما را بشنود. آیا باید از روی کنجکاوی با ما تماس بگیرید؟ ATD +7499 ... تلفن ثابت زنگ می زند، دود از آردوینو می آید، لپ تاپ خاموش می شود. مبدل آردوینو سوخت. تغذیه 19 ولت ایده بدی بود، هرچند نوشته شده که از 6 تا 20 ولت کار می کند، 7-12 ولت توصیه می شود. دیتاشیت ماژول GSM هیچ جایی در مورد مصرف برق تحت بار بیان نمی کند. خب مگا میره انبار لوازم یدکی. با نفس بند آمده لپ تاپ را روشن می کنم که +19 ولت از طریق خط +5 ولت از USB دریافت می کرد. کار می کند و حتی USB هم نسوخت. از لنوو برای محافظت از ما متشکریم.


بعد از سوختن مبدل دنبال مصرف جریان گشتم. بنابراین، اوج - 2A، معمولی - 0.5A. این به وضوح فراتر از توانایی های مبدل آردوینو است. نیاز به غذای جداگانه دارد.

برنامه نويسي

این ماژول قابلیت انتقال داده گسترده ای را ارائه می دهد. شروع از تماس های صوتی و پیامک و پایان دادن به خود GPRS. علاوه بر این، برای دومی امکان اجرای یک درخواست HTTP با استفاده از دستورات AT وجود دارد. شما باید چندین مورد را ارسال کنید، اما ارزشش را دارد: واقعاً نمی خواهید درخواستی را به صورت دستی ایجاد کنید. چند تفاوت در باز کردن یک کانال انتقال داده از طریق GPRS وجود دارد - کلاسیک AT+CGDCONT=1، "IP"، "apn" را به خاطر دارید؟ بنابراین، در اینجا به همان چیز نیاز است، اما کمی حیله گری بیشتر.

برای دریافت یک صفحه در یک URL خاص، باید دستورات زیر را ارسال کنید:

AT+SAPBR=1,1 // حامل باز (Carrier) AT+SAPBR=3,1,"CONTYPE"، "GPRS" //نوع اتصال - GPRS AT+SAPBR=3،1"APN"،"اینترنت" //APN، برای Megafon - اینترنت AT+HTTPINIT //Initialize HTTP AT+HTTPPARA="CID",1 //شناسه حامل برای استفاده. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //نشانی اینترنتی واقعی، پس از sprintf با مختصات AT+HTTPACTION=0 // درخواست داده با استفاده از روش GET // منتظر پاسخ AT+HTTPTERM //توقف HTTP

در نتیجه در صورت وجود ارتباط، پاسخی از سرور دریافت خواهیم کرد. یعنی در واقع، ما قبلاً می دانیم که چگونه داده مختصات را اگر سرور از طریق GET دریافت کند، ارسال کنیم.

تغذیه

از آنجایی که تغذیه ماژول GSM از مبدل آردوینو، همانطور که متوجه شدم، ایده بدی است، تصمیم گرفته شد که یک مبدل 12v->5v، 3A در همان ebay خریداری شود. با این حال، ماژول منبع تغذیه 5 ولت را دوست ندارد. بیایید هک کنیم: 5 ولت را به پینی که 5 ولت از آردوینو می آید وصل کنید. سپس مبدل داخلی ماژول (بسیار قدرتمندتر از مبدل آردوینو، MIC 29302WU) از 5 ولت آنچه ماژول نیاز دارد را می سازد.

سرور

سرور یک نمونه ابتدایی نوشت - ذخیره مختصات و ترسیم در Yandex.maps. در آینده، امکان افزودن ویژگی‌های مختلفی از جمله پشتیبانی از بسیاری از کاربران، وضعیت «مسلح/غیر مسلح»، وضعیت سیستم‌های خودرو (اشتعال، چراغ‌های جلو و غیره) و احتمالاً حتی کنترل سیستم‌های خودرو وجود دارد. البته با پشتیبانی مناسب از ردیاب که به آرامی به یک سیستم هشدار تمام عیار تبدیل می شود.

تست های میدانی

این چیزی است که دستگاه مونتاژ شده بدون قاب به نظر می رسد:


پس از نصب مبدل برق و قرار دادن آن در کیس از یک مودم DSL مرده، سیستم به شکل زیر است:

سیم ها را لحیم کردم و چندین کنتاکت از بلوک های آردوینو برداشتم. آنها به این شکل هستند:

من 12 ولت را در ماشین وصل کردم، در اطراف مسکو رانندگی کردم و مسیر را دریافت کردم:


معلوم می شود که مسیر پاره شده است. دلیل آن این است که ارسال اطلاعات از طریق GPRS زمان نسبتاً طولانی دارد و در این مدت مختصات خوانده نمی شود. این به وضوح یک خطای برنامه نویسی است. اولاً با ارسال فوری بسته ای از مختصات در طول زمان و ثانیاً با کار ناهمزمان با ماژول GPRS درمان می شود.

فرستنده GPS شخصی

امروزه پیشرفت با چنان سرعتی پیش می‌رود که دستگاه‌هایی که قبلاً حجیم، گران‌قیمت و بسیار تخصصی بودند به سرعت اندازه، وزن و قیمت خود را از دست می‌دهند، اما عملکردهای جدید بسیاری پیدا می‌کنند.

اینگونه بود که دستگاه‌های مبتنی بر فناوری GPS به ابزارهای جیبی رسیدند و محکم در آنجا مستقر شدند و فرصت‌های جدیدی را در اختیار مردم قرار دادند. به ویژه ارزش برجسته کردن فرستنده های GPS فردی را دارد.

در اصل، اینها همان ردیاب های GPS هستند که فقط برای استفاده نه در وسیله نقلیه، بلکه توسط یک فرد در زندگی روزمره طراحی شده اند.

بسته به مدل، چندین دستگاه مختلف را می توان در یک محفظه ترکیب کرد. در ساده ترین شکل آن، به سادگی یک جعبه کوچک بدون نمایشگر است که به شما این امکان را می دهد که حرکات کودکان، حیوانات یا برخی از اشیاء دیگر را کنترل کنید، که روی آن ثابت شده است.

داخل آن یک ماژول GPS است که مختصات را روی زمین تعیین می‌کند، یک ماژول GSM/GPRS که اطلاعات را ارسال می‌کند و دستورات کنترلی را دریافت می‌کند، و همچنین یک منبع انرژی که عملکرد مستقل را برای مدت طولانی تضمین می‌کند.

عملکرد فرستنده های GPS

با افزایش عملکرد، قابلیت های زیر دستگاه ظاهر می شود:


گزینه هایی برای فرستنده های GPS

بسته به پیکربندی، محفظه فرستنده ممکن است به طور قابل توجهی متفاوت باشد. مدل های مختلفی به شکل تلفن همراه، ناوبری کلاسیک یا حتی ساعت مچی موجود است.

طراحی رنگارنگ نسخه‌های ویژه و افزودنی‌های مفید به کودکان این امکان را می‌دهد که با این دستگاه‌ها نه به عنوان «جاسوس‌های والدین»، بلکه به‌عنوان ابزارهای شیک و کاربردی رفتار کنند.

به عنوان یک مزیت، لازم به ذکر است که بسیاری از نسخه های دستگاه بدون هزینه اشتراک برای خدمات اپراتورهای تخصصی به خوبی کار می کنند و کلیه اطلاعات لازم مستقیماً از طریق اینترنت یا پیامک برای مشتری ارسال می شود که باعث صرفه جویی قابل توجهی می شود. در تعمیر و نگهداری چنین تجهیزاتی

مقالاتی در مورد ردیاب های GPS

در این مقاله نحوه استفاده از ماژول gsm با آردوینو را با استفاده از sim800L به عنوان مثال نشان خواهم داد. دستورالعمل های مشابه برای استفاده از هر ماژول gsm دیگر، به عنوان مثال، sim900 و غیره کاملاً مناسب است، زیرا همه ماژول ها تقریباً به یک شکل کار می کنند - این تبادل دستورات AT از طریق پورت است.

من استفاده از ماژول را با آردوینو با استفاده از مثال یک رله SMS نشان خواهم داد که می توان از آن برای کنترل دستگاه از راه دور از طریق دستورات SMS استفاده کرد. این را می توان همراه با دزدگیر ماشین و غیره استفاده کرد.

این ماژول از طریق رابط UART یک پورت سریال نرم افزاری که روی 2 و 3 پین دیجیتال آردوینو نانو کار می کند به آردوینو متصل می شود.

کار با آردوینو با ماژول های GSM

برای تغذیه ماژول، ولتاژی در محدوده 3.6 ولت تا 4.2 ولت مورد نیاز است، این بدان معنی است که شما باید از تثبیت کننده ولتاژ اضافی استفاده کنید، زیرا آردوینو دارای یک تثبیت کننده 3.3 ولتی است که برای تغذیه ماژول مناسب نیست. دلیل دوم برای نصب تثبیت کننده اضافی این است که ماژول GSM بار جدی دارد، زیرا فرستنده ضعیفی دارد که ارتباط پایدار با ایستگاه تلفن همراه را فراهم می کند. برق آردوینو نانو به پین ​​VIN تامین می شود - این یک تثبیت کننده است که در آردوینو تعبیه شده است که تضمین می کند ماژول در محدوده ولتاژ وسیع (6-10 ولت) کار می کند. ماژول رله مطابق متن برنامه داده شده به پایه 10 نانو آردوینو متصل می شود و به راحتی می توان آن را به هر دیگری که به عنوان خروجی دیجیتال کار می کند تغییر داد.

این کار به این صورت است: ما یک سیم کارت را در ماژول GSM نصب می کنیم، برق را روشن می کنیم و یک پیامک با متن "1" به شماره سیم کارت ارسال می کنیم تا رله خود را روشن کنیم، برای خاموش کردن آن یک اس ام اس ارسال می کنیم. با متن "0".

#عبارتند از
SoftwareSerial gprsSerial(2, 3); // پایه های 2 و 3 را برای پورت نرم افزار تنظیم کنید
int LedPin = 10; // برای رله

تنظیم خالی ()
{
gprsSerial.begin(4800);
pinMode (LedPin، OUTPUT)؛

// تنظیم دریافت پیام

gprsSerial.print("AT+CMGF=1\r");
gprsSerial.print("AT+IFC=1, 1\r");
تاخیر (500);
gprsSerial.print("AT+CPBS=\"SM\"\r");
تاخیر (500); // تاخیر برای پردازش فرمان
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
تاخیر(700);
}

String currStr = "";
// اگر این خط یک پیام باشد، متغیر مقدار True را می گیرد
boolean isStringMessage = false;

حلقه خالی()
{
if (!gprsSerial.available())
برگشت؛

char currSymb = gprsSerial.read();
اگر ('\r' == currSymb) (
if (isStringMessage) (
// اگر خط فعلی یک پیام است، پس...
if (!currStr.compareTo("1")) (
digitalWrite (LedPin، HIGH)؛
) else if (!currStr.compareTo("0")) (
digitalWrite (LedPin، LOW)؛
}
isStringMessage = false;
) دیگر (
if (currStr.startsWith("+CMT")) (
// اگر خط فعلی با "+CMT" شروع شود، پیام بعدی
isStringMessage = true;
}
}
currStr = "";
) else if ('\n' != currSymb) (
currStr += رشته (currSymb);
}
}

نسخه ویدیویی مقاله:

برچسب‌ها: آردوینو #SIM800L

علامت شما:

محصولات استفاده شده در این مقاله:

← GPS Logger در آردوینو | کنترل رله از طریق پورت COM →

اسکنر GSM در RTL-SDR

| خانه| انگلیسی | توسعه | سوالات متداول |

ویژگی های اصلی اسکنر

اسکنر GSM کانال های پایین دستی GSM را اسکن می کند و اطلاعاتی در مورد سطح سیگنال و اینکه آیا کانال متعلق به یکی از سه اپراتور اصلی سلولی MTS، Beeline و Megafon است را نمایش می دهد. بر اساس نتایج کار خود، اسکنر به شما امکان می دهد لیستی از شناسه های ایستگاه پایه MCC، MNC، LAC و CI را برای همه کانال های اسکن شده ذخیره کنید.
یک اسکنر GSM می تواند برای ارزیابی سطح سیگنال GSM، مقایسه کیفیت سیگنال اپراتورهای مختلف، ارزیابی پوشش رادیویی، هنگام تصمیم گیری در مورد نصب تقویت کننده سیگنال سلولی و تنظیم پارامترهای آنها، برای اهداف آموزشی و غیره استفاده شود.
اسکنر تحت ویندوز اجرا می شود و از یک گیرنده ساده و ارزان استفاده می کند - RTL-SDR. شما می توانید در مورد RTL-SDR در اینجا بخوانید:
RTL-SDR (RTL2832U) و نرم افزار تعریف شده اخبار و پروژه های رادیویی،
RTL-SDR – OsmoSDR،
RTL-SDR در روسی.
پارامترهای RTL-SDR مشخصه های اصلی اسکنر را تعیین می کنند. البته اسکنر GSM جایگزینی برای تجهیزات اندازه گیری معمولی نیست.
اسکنر به صورت رایگان و بدون هیچ گونه محدودیتی در استفاده توزیع می شود.
نسخه فعلی از باند GSM 900 پشتیبانی می کند و از GSM 1800 پشتیبانی نمی کند. این با این واقعیت مشخص می شود که فرکانس کاری RTL-SDR با تیونر R820T به 1760 مگاهرتز محدود شده است. این امید وجود دارد که استفاده از درایور آزمایشی RTL-SDR اجازه عملکرد حداقل در بخشی از محدوده 1800 مگاهرتز را بدهد.

راه اندازی اسکنر

آخرین نسخه اسکنر را می توانید از این لینک دانلود کنید. فقط فایل را در یک مکان مناسب از حالت فشرده خارج کرده و gsmscan.exe را اجرا کنید.
نسخه های قبلی اسکنر، پیوندی به مخزن با منابع و سایر اطلاعات مربوط به توسعه در صفحه توسعه قرار دارد.
برای کارکرد اسکنر، نصب درایورهای RTL-SDR مورد نیاز است؛ اگر قبلاً نصب نشده‌اند، می‌توان این کار را به راحتی با استفاده از برنامه Zadig برای توصیف مراحل نصب انجام داد.

با استفاده از اسکنر

در زیر نمایی از پنجره برنامه اسکنر را مشاهده می کنید:

محور افقی شماره کانال GSM را به صورت ARFCN یا بر حسب مگاهرتز نشان می دهد و محور عمودی سطح سیگنال را بر حسب dBm نشان می دهد. ارتفاع خط قدرت سیگنال را نشان می دهد.

ارتباط ماژول GSM NEOWAY M590 با آردوینو

اگر شناسه‌های BS با موفقیت رمزگشایی شده باشند و با شناسه‌های سه اپراتور اصلی مخابراتی مطابقت داشته باشند، خطوط به رنگ‌های مربوطه رنگ می‌شوند.
لیست‌های کشویی در بالای صفحه به شما امکان می‌دهند گیرنده SDR را انتخاب کنید، در صورتی که چندین گیرنده متصل هستند، محدوده عملیاتی GSM 900 یا GSM 1800 و واحدهای اندازه‌گیری در امتداد محور افقی ARFCN یا MHz را انتخاب کنید.
دکمه ها به شما امکان می دهند گزارشی از عملکرد اسکنر را در قالب لیستی از ایستگاه های پایه رمزگشایی شده ذخیره کنید، نتایج رمزگشایی BS را پاک کنید و اطلاعاتی در مورد برنامه به دست آورید.

اصول و ویژگی های کار.

در حین کار، برنامه محدوده فرکانس کاری را با یک مرحله 2.0 مگاهرتز (10 کانال GSM) اسکن می کند و سیگنال را با فرکانس نمونه برداری 2.4 مگاهرتز دیجیتالی می کند. فرآیند اسکن شامل یک عبور سریع از کل محدوده برای اندازه گیری قدرت سیگنال و یک گذر آهسته برای رمزگشایی شناسه های BS است.

یک مرحله رمزگشایی پس از پیمایش کل محدوده برای اندازه گیری توان انجام می شود. بنابراین، در محدوده GSM 900، سطح سیگنال تقریباً هر 2 ثانیه یک بار به روز می شود و یک رمزگشایی کامل حدود 1 دقیقه طول می کشد.
به دلیل کیفیت پایین سیگنال دریافتی از RTL-SDR، احتمال رمزگشایی صحیح اطلاعات سیستم (SI) کانال کنترل پخش BS (BCCH) زیاد نیست. نوسانات سطح سیگنال در نتیجه انتشار چند مسیری نیز احتمال رمزگشایی اطلاعات سیستم را کاهش می دهد. به این دلایل، برای به دست آوردن شناسه های BS، لازم است اسکنر اطلاعات را در مدت زمان حدود 10 دقیقه جمع آوری کند. اما حتی در این مورد، همه کانال ها سطح سیگنال و کیفیت کافی را در یک مکان مشخص برای رمزگشایی حتی توسط ایده آل ترین گیرنده ارائه نمی دهند. علاوه بر این، همه کانال های GSM برای کار بر اساس استاندارد GSM استفاده نمی شوند، همانطور که در شکل بالا مشاهده می شود، کانال های 975 - 1000 توسط مگافون اشغال شده اند تا طبق استاندارد UMTS کار کنند.
در حین کار، اسکنر اطلاعات سیستم در مورد کانال های رمزگشایی شده جدید را به مجموعه اطلاعات کلی کانال ها اضافه می کند. اما زمانی که اطلاعات سیستم در این مرحله رمزگشایی نشده باشد، اطلاعات مربوط به کانال های رمزگشایی شده قبلی پاک نمی شود و در آرایه باقی می ماند. برای پاک کردن این اطلاعات، از دکمه پاک کردن نتایج رمزگشایی BS استفاده کنید.
وقتی روی دکمه ذخیره گزارش کلیک می کنید، نتایج انباشته شده در یک فایل متنی با نامی متشکل از نام برنامه، تاریخ و زمان ذخیره داده ها ذخیره می شود. در زیر نمونه ای از بخشی از فایل گزارش آورده شده است:
این اسکنر برای کار در ویندوزهای 7، 8.1 و 10 طراحی شده است. این کار با سه نسخه از RTL-SDR با تیونر R820T آزمایش شد؛ انواع دیگر تیونرها آزمایش نشدند.
نسخه ویژه ای از برنامه برای کار در ویندوز XP کامپایل شده است؛ این برنامه چندین برابر کندتر از نسخه استاندارد اجرا می شود.

توسعه.

برنامه اسکنر همانطور که هست، بدون هیچ گونه ضمانت یا مسئولیتی ارائه می شود. اگر ایده های معقولی در مورد چگونگی گسترش عملکرد یا بهبود عملکرد اسکنر دارید، ما آماده هستیم تا در مورد امکان اجرای آنها صحبت کنیم.
شما می توانید در توسعه اسکنر شرکت کنید؛ برای انجام این کار، به صفحه توسعه مراجعه کنید.
توسعه بیشتر اسکنر GSM احتمالاً با مشارکت شما برنامه ریزی شده است.