فهرست مطالب:

Arduino GPS Logger: 3 مرحله
Arduino GPS Logger: 3 مرحله

تصویری: Arduino GPS Logger: 3 مرحله

تصویری: Arduino GPS Logger: 3 مرحله
تصویری: LDmicro 18: Ublox NEO-6M GPS Alarm Clock (Microcontroller PLC Ladder Programming with LDmicro) 2024, جولای
Anonim
Arduino GPS Logger
Arduino GPS Logger
Arduino GPS Logger
Arduino GPS Logger

سلام بچه ها،

من برای پروژه های کوچکی که به مردم امکان می دهد بیشتر از فناوری هایی که هر روز در اختیار داریم بفهمند بسیار هیجان زده می شوم.

این پروژه در مورد شکست GPS و ثبت SD است. من فقط با ساختن این چیزها چیزهای زیادی آموختم.

مفاهیم زیادی وجود دارد که در پی این آموزش به دست خواهید آورد ، و خیلی بیشتر از پیوندی که ارائه می دهم برای عمیق تر شدن موضوعات استفاده می کنید.

بنابراین ، آن چیست؟ ساده: یک ردیاب GPS است که موقعیت ها (با ارتفاع) ، سرعت و تاریخ/زمان را روی microSD ثبت می کند.

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

- Arduino Nano (من در واقع از UNO برای ساخت طرح استفاده کردم ، اما آنها یکسان هستند!)- شکست نهایی GPS Adafruit- شکست کارت MicroSD- ابزارهای لحیم کاری (همه چیزهایی که برای لحیم کاری نیاز دارید)- Universal Stripboard (من استفاده کردم a 5x7cm)- سیم

همه این قطعات به جز ماژول GPS بسیار ارزان هستند. این حدود 30-40 دلار است و گران ترین قسمت است. حتی یک دستگاه لحیم کاری جدید می تواند هزینه کمتری داشته باشد.

همچنین دارای یک سپر Adafruit با ماژول های GPS و کارت SD با هم است. اگر می خواهید از آن استفاده کنید ، به خاطر داشته باشید که برای Arduino UNO ساخته شده است ، بنابراین به UNO و نه نانو احتیاج دارید. هرچند تفاوتی در طرح وجود ندارد.

بریم جلوتر…

مرحله 1: اتصال قطعات

اتصال قطعات
اتصال قطعات
اتصال قطعات
اتصال قطعات
اتصال قطعات
اتصال قطعات
اتصال قطعات
اتصال قطعات

خوب ، پس از دریافت اجزاء ، باید آنها را وصل کنید. در اینجا می توانید طرحهای تکان دهنده ای را پیدا کنید که کاملاً واضح است. با این حال ، در اینجا راه حل نیز وجود دارد:

شکست MicroSD

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (اگر از سپر استفاده می کنید این در D10 ساخته شده است)

شکست GPS

Vin -> 5VGnn -> GnnRx -> D2Tx -> D3

نکات کوچکی در مورد آن ماژول: آن دو پسر کوچک از طریق مسیرهای مختلف با آردوینو ارتباط برقرار می کنند. GPS از یک سریال TTL استفاده می کند ، همان چیزی که ما هنگام ارتباط با Arduino از طریق Serial Monitor استفاده می کنیم ، به همین دلیل ما باید از طریق کتابخانه یک سریال جدید (Tx و Rx) اعلام کنیم زیرا GPS به طور پیش فرض می خواهد از 9600 استفاده کند ، و ما می خواهم از آن نیز استفاده کنم ماژول GPS همیشه و به طور مداوم در حال پخش داده است ، اگر متصل باشد. این قسمت پیچیده ای است که باید با آن کنار بیایید ، زیرا اگر جمله ای را بخوانیم و آن را چاپ کنیم ، ممکن است جمله بعدی را از دست بدهیم ، که به آن نیز نیاز است. هنگام کد نویسی باید آن را در نظر داشته باشیم!

MicroSD از طریق SPI (Serial Peripheral Interface) ، راه دیگری برای ارتباط با برد ، است. این نوع ماژول ها همیشه از CLK در D13 ، DO در D12 و DI در D11 استفاده می کنند. گاهی اوقات این اتصالات دارای نام های متفاوتی مانند CLK = SCK یا SCLK (سریال ساعت) ، DO = DOUT ، SIMO ، SDO ، SO ، MTSR (همه آنها خروجی اصلی را نشان می دهند) و DI = SOMI ، SDI ، MISO ، MRST (ورودی اصلی) هستند. در نهایت ما CS یا SS داریم که پینی را نشان می دهد که ما آنچه را که می خواهیم در MicroSD بنویسیم ارسال می کنیم. اگر می خواهید از دو ماژول SPI مختلف استفاده کنید ، فقط باید این پین را برای استفاده از هر دو متمایز کنید. به عنوان مثال ، صفحه LCD و یک MicroSd مانند آنچه که ما از آن استفاده می کنیم. همچنین باید از دو LCD مختلف متصل به CS های مختلف کار کند.

این قسمت را با هم در تخته بچسبانید و همه چیز آماده است تا طرح را بارگذاری کنید!

همانطور که در طرح می بینید ، من برخی از اتصالات زن dupont را به جای قطعه مستقیم لحیم کردم ، زیرا در آینده ممکن است بخواهم از جزء مجدداً استفاده کنم یا یکی را تغییر دهم.

من همچنین ماژول GPS را با اتصالات در جهت اشتباه لحیم کردم ، این تقصیر من بود و من نمی خواستم ، اما این کار می کند و من نمی خواهم ریسک کنم که آن را شکستن و سعی در جدا کردن این حرامزاده های کوچک کنم! فقط به روش مناسب لحیم کنید و همه چیز خوب خواهد بود!

در اینجا چند فیلم لحیم کاری مفید وجود دارد: راهنمای لحیم کاری برای مبتدیان ویدئویی در مورد desolder

کانال Adafruit Youtube ، بسیاری از موارد جالب وجود دارد!

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

مرحله 2: طرح

البته ابتدا کتابخانه را وارد می کنیم و اشیاء آنها را برای کار می سازیم: SPI.h برای ارتباط با ماژول های SPI ، SD کتابخانه MicroSD و Adafruit_GPS کتابخانه ماژول GPS است. SoftwareSerial.h برای ایجاد یک پورت سریال از طریق نرم افزار است. نحو "mySerial (TxPin ، RxPin) ؛" است. ". هدف GPS باید به یک سریال (در براکت) اشاره شود. در اینجا پیوندهای کتابخانه ها برای Adafruit GPS breakout ، MicroSD Breakout (برای انجام کار تمیز ، همچنین باید SD را با این نرم افزار از انجمن SD فرمت کنید) و کتابخانه سریال نرم افزار (باید در IDE گنجانده شود).

توجه: هنگام تلاش برای افزودن اطلاعات زیادی در یک فایل یا استفاده از بیش از دو فایل در طرح ، با مشکل خاصی روبرو شدم. من SD را با آن نرم افزار فرمت نکردم ، شاید بتواند مشکل را حل کند. همچنین ، سعی کردم سنسور دیگری را در دستگاه اضافه کنم ، BMP280 (ماژول I2C) ، اما هیچ موفقیتی نداشت. به نظر می رسد استفاده از ماژول I2C این طرح را دیوانه می کند! من قبلاً در انجمن Adafruit در مورد آن صحبت کردم ، اما هنوز پاسخی دریافت نکردم.

#شامل "SPI.h"#شامل "SD.h"#شامل "Adafruit_GPS.h"#شامل "SoftwareSerial.h" SoftwareSerial mySerial (3، 2)؛ GPS Adafruit_GPS (& mySerial) ؛

اکنون ما به همه متغیرهای خود نیاز داریم: این دو رشته برای خواندن دو جمله است که برای محاسبه دسته ای از اطلاعات مفید از GPS نیاز داریم. این علامت برای ذخیره جملات قبل از تجزیه آنها ، شناورها برای محاسبه مختصات بر حسب درجه است (ارسال GPS استفاده از مختصات در درجه و دقیقه ، ما آنها را در درجه نیاز داریم تا اجازه دهیم در google earth خوانده شوند). chipSelect پینی است که ما CS کارت MicroSD را وصل می کنیم. در این مورد D4 است ، اما اگر از SD shield استفاده می کنید ، باید D10 را در اینجا قرار دهید. متغیر فایل کسی است که اطلاعات فایل مورد استفاده ما را در طول طرح ذخیره می کند.

رشته NMEA1 ؛

رشته NMEA2 ؛ char c؛ شناور درجه؛ float degWhole؛ شناور degDec؛ int chipSelect = 4؛ فایل mySensorData؛

در حال حاضر ما چند عملکرد را برای ایجاد طرح کمی ظریف تر و نامرتب تر اعلام می کنیم:

آنها اساساً همین کار را می کنند: خواندن جملات NMEA. clearGPS () سه جمله را نادیده می گیرد و readGPS () دو مورد از آنها را در متغیرها ذخیره می کند.

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

این بسیار مهم است! قبل از ذخیره هر دو جمله کاری انجام ندهید ، در غیر این صورت جمله دوم در نهایت خراب یا اشتباه می شود.

پس از دریافت دو جمله ، آنها را در سریال چاپ می کنیم تا کنترل شود که خوب پیش می رود.

void readGPS () {

clearGPS ()؛ در حالی که (! GPS.newNMEAreceived ()) {c = GPS.read ()؛ } GPS.parse (GPS.lastNMEA ()) ؛ NMEA1 = GPS.lastNMEA ()؛ در حالی که (! GPS.newNMEAreceived ()) {c = GPS.read ()؛ } GPS.parse (GPS.lastNMEA ()) ؛ NMEA2 = GPS.lastNMEA ()؛ Serial.println (NMEA1) ؛ Serial.println (NMEA2) ؛ } void clearGPS () {while (! GPS.newNMEAreceived ()) {c = GPS.read ()؛ } GPS.parse (GPS.lastNMEA ()) ؛ در حالی که (! GPS.newNMEAreceived ()) {c = GPS.read ()؛ } GPS.parse (GPS.lastNMEA ()) ؛ w در حالی که (! GPS.newNMEA دریافت ()) {c = GPS.read () ؛ } GPS.parse (GPS.lastNMEA ()) ؛ }

خوب ، اکنون که همه ما آماده هستیم ، می توانیم از راه اندازی () عبور کنیم:

اول: ما در Serial 115200 برای Arduino PC و در 9600 برای ماژول GPS Arduino ارتباط برقرار می کنیم. دوم: ما سه فرمان به ماژول GPS ارسال می کنیم: اول این است که به روزرسانی آنتن را ببندیم ، دوم این است که فقط از رشته RMC و GGA بخواهیم (ما فقط از آنهایی استفاده می کنیم که دارای تمام اطلاعاتی هستند که از آنها نیاز دارید) a GPS) ، سومین و آخرین فرمان این است که میزان به روزرسانی را توسط Adafruit روی 1HZ تنظیم کنید.

پس از آن ما پین D10 را روی OUTPUT تنظیم می کنیم ، اگر ، و فقط اگر ، پین CS مدل SD شما غیر از D10 باشد. بلافاصله پس از آن ، CS را روی ماژول SD روی پین chipSelect کنید.

ما توابع readGPS () را که شامل cleanGPS () است اجرا می کنیم.

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

توجه: کتابخانه SD در مورد باز و بسته کردن پرونده هر بار جدی است! آن را در نظر داشته باشید و هر بار آن را ببندید! برای آشنایی با کتابخانه این پیوند را دنبال کنید.

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

void setup () {

Serial.begin (115200) ؛ GPS.begin (9600) ؛ // ارسال دستورات به ماژول GPS GPS.sendCommand ("$ PGCMD ، 33 ، 0*6D") ؛ GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA) ؛ GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ) ؛ تاخیر (1000) ؛ // فقط در صورتی که پین CS ماژول SD شما روی پین D10 نباشد

pinMode (10 ، OUTPUT) ؛

SD.begin (chipSelect) ؛ readGPS ()؛ if (SD.exists ("NMEA.txt")) {mySensorData = SD.open ("NMEA.txt" ، FILE_WRITE) ؛ mySensorData.println ("")؛ mySensorData.print ("***") ؛ mySensorData.print (GPS.day) ؛ mySensorData.print (".") ؛ mySensorData.print (GPS.month) ؛ mySensorData.print (".") ؛ mySensorData.print (GPS.year) ؛ mySensorData.print (" -") ؛ mySensorData.print (GPS.hour) ؛ mySensorData.print (":")؛ mySensorData.print (GPS.minute) ؛ mySensorData.print (":")؛ mySensorData.print (GPS.seconds) ؛ mySensorData.println ("***") ؛ mySensorData.close ()؛ } if (SD.exists ("GPSData.txt")) {mySensorData = SD.open ("GPSData.txt" ، FILE_WRITE) ؛ mySensorData.println ("")؛ mySensorData.println ("")؛ mySensorData.print ("***") ؛ mySensorData.print (GPS.day) ؛ mySensorData.print (".") ؛ mySensorData.print (GPS.month) ؛ mySensorData.print (".") ؛ mySensorData.print (GPS.year) ؛ mySensorData.print (" -") ؛ mySensorData.print (GPS.hour) ؛ mySensorData.print (":")؛ mySensorData.print (GPS.minute) ؛ mySensorData.print (":")؛ mySensorData.print (GPS.seconds) ؛ mySensorData.println ("***") ؛ mySensorData.close ()؛ }}

اکنون ما به هسته طرح می رسیم.

فوق العاده ساده است ، واقعاً

ما قصد داریم جریان GPS را با تابع readGPS () بخوانیم ، در صورتی که ثابت کنیم که برابر 1 است ، کنترل می کنیم ، به این معنی که ما با ماهواره ارتباط داریم. اگر آن را دریافت کردیم ، اطلاعات خود را در پرونده ها می نویسیم. در اولین فایل "NMEA.txt" ، ما فقط جملات خام را می نویسیم. در فایل دوم ، "GPDData.txt" ، مختصات (با عملکردهایی که قبلاً مشاهده کردیم) و ارتفاع را اضافه می کنیم. این اطلاعات برای جمع آوری یک فایل.kml برای ایجاد مسیر در Google Earth کافی است. توجه داشته باشید که ما هر بار که پرونده را باز می کنیم برای نوشتن چیزی می بندیم!

حلقه خالی () {

readGPS ()؛ // Condizione if che controlla se l'antenna ha segnale. Se si، procede con la scrittura dei dati. if (GPS.fix == 1) {// فقط در صورتی که داده ها را ذخیره کنیم mySensorData = SD.open ("NMEA.txt" ، FILE_WRITE) ؛ // Apre il file per le frasi NMEA grezze mySensorData.println (NMEA1)؛ // Scrive prima NMEA sul file mySensorData.println (NMEA2) ؛ // Scrive seconda NMEA sul file mySensorData.close ()؛ // فایل Chiude !!

mySensorData = SD.open ("GPSData.txt" ، FILE_WRITE) ؛

// تبدیل e scrive la longitudine convLong ()؛ mySensorData.print (درجه ، 4) ؛ // Scrive le coordinate در فایل gradi sul mySensorData.print ("،") ؛ // Scrive una virgola per separare i dati Serial.print (درجه)؛ Serial.print ("،") ؛ // تبدیل e scrive la latitudine convLati ()؛ mySensorData.print (درجه ، 4) ؛ // Scrive leordinate در فایل gradi sul mySensorData.print ("،") ؛ // Scrive una virgola per separare i dati Serial.print (deg)؛ Serial.print ("،") ؛ // Scrive l'altitudine mySensorData.print (GPS.altitude)؛ mySensorData.print ("")؛ Serial.println (GPS.altitude) ؛ mySensorData.close ()؛ }}

اکنون که همه چیز به پایان رسیده است ، می توانید طرح را بارگذاری کنید ، دستگاه را بسازید و از آن لذت ببرید!

توجه داشته باشید که برای برطرف کردن مشکل = 1 باید از آن با GPS borad به آسمان استفاده کنید ، یا می توانید آنتن خارجی را به آن وصل کنید.

همچنین ، به خاطر داشته باشید که در صورت رفع مشکل ، چراغ قرمز هر 15 ثانیه چشمک می زند ، در غیر این صورت ، بسیار سریعتر (هر 2-3 ثانیه یک بار).

اگر می خواهید در مورد جملات NMEA چیزهای بیشتری بیاموزید ، فقط مرحله بعدی این راهنما را دنبال کنید.

مرحله 3: جملات NMEA و فایل.kml

دستگاه و طرح کامل هستند ، خوب کار می کنند. به خاطر داشته باشید که برای رفع مشکل (برای برقراری ارتباط با ماهواره ها) ، شکست باید رو به آسمان باشد.

چراغ قرمز کوچک هر 15 ثانیه چشمک می زند هنگامی که به رفع مشکل رسیدید

اگر می خواهید جملات NMEA را بهتر درک کنید ، می توانید بیشتر بخوانید.

در طرح فقط از دو جمله GGA و RMC استفاده می کنیم. آنها فقط چند جمله هستند که ماژول GPS در حال پخش است.

بیایید ببینیم که در آن رشته چیست:

$ GPRMC ، 123519 ، A ، 4807.038 ، N ، 01131.000 ، E ، 022.4 ، 084.4 ، 230394 ، 003.1 ، W*6A

RMC = حداقل جمله توصیه شده C 123519 = تصحیح در 12:35:19 UTC A = وضعیت A = فعال یا V = خالی 4807.038 ، N = عرض جغرافیایی 48 درجه 07.038 'N 01131.000 ، E = طول جغرافیایی 11 درجه 31.000' E 022.4.4 = سرعت بر روی زمین در گره 084.4 = زاویه پیگیری در درجه درست 230394 = تاریخ - 23 مارس 1994 003.1 ، W = تغییرات مغناطیسی *6A = داده های چک چک ، همیشه با *شروع می شود

$ GPGGA، 123519، 4807.038، N، 01131.000، E، 1، 08، 0.9، 545.4، M، 46.9، M،، *47

سیستم ثابت موقعیت یابی جهانی GGA 123519 رفع شده در 12:35:19 UTC 4807.038 ، N عرض جغرافیایی 48 درجه 07.038 'N 01131.000 ، طول جغرافیایی 11 درجه 31.000' E 1 کیفیت ثابت: 0 = نامعتبر؛ 1 = رفع GPS (SPS) ؛ 2 = رفع DGPS ؛ 3 = رفع PPS ؛ 4 = زمان واقعی سینماتیک ؛ 5 = شناور RTK ؛ 6 = برآورد شده (حساب مرده) (2.3 ویژگی) ؛ 7 = حالت ورودی دستی ؛ 8 = حالت شبیه سازی ؛ 08 تعداد ماهواره های در حال ردیابی 0.9 رقیق سازی افقی موقعیت 545.4 ، ارتفاع M ، متر ، بالاتر از میانگین سطح دریا 46.9 ، M ارتفاع زمین زمین (متوسط سطح دریا) بالاتر از بیضی WGS84 (میدان خالی) زمان در ثانیه از آخرین به روز رسانی DGPS (میدان خالی)) شماره شناسه ایستگاه DGPS *47 داده های چک چک ، همیشه با *شروع می شود

همانطور که می بینید ، اطلاعات بسیار بیشتری از آنچه شما نیاز دارید در آنجا وجود دارد. با استفاده از کتابخانه Adafruit ، می توانید با برخی از آنها تماس بگیرید ، مانند GPS.latitude یا GPS.lat (عرض جغرافیایی و نیمکره جغرافیایی) ، یا GPS.day/month/year/hour/minute/seconds/milliseconds …… نگاهی به Adafruit بیندازید وب سایت برای دانستن چیزهای بیشتر چندان واضح نیست ، اما با رعایت برخی نکات در راهنمای ماژول های GPS ، می توانید آنچه را که نیاز دارید پیدا کنید.

با فایل های موجود چه می توانیم انجام دهیم؟ آسان: یک فایل kml را برای نشان دادن مسیر در Google Earth کامپایل کنید. برای انجام این کار ، کافی است کدی را که در زیر این پیوند پیدا می کنید کپی/از بین ببرید (در زیر بخش Path) ، مختصات خود را از فایل GPDData.txt بین برچسب ها قرار دهید ، فایل را با پسوند.kml ذخیره کرده و بارگذاری کنید گوگل ارث.

توجه: زبان نشانه گذاری.kml ساده است ، اگر از قبل می دانید که زبان نشانه گذاری چیست ، وقت خود را برای خواندن پیوند قبلی و اسناد داخل آن اختصاص دهید ، در واقع جالب است!

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

فایلی که در این بخش اضافه کردم یک.kml است که در آن می توانید مختصات خود را در آن بچسبانید. در نظر داشته باشید که با این نحو جایگذاری کنید: طول ، عرض ، ارتفاع

توصیه شده: