Mündəricat:

Arduino GPS Logger: 3 addım
Arduino GPS Logger: 3 addım

Video: Arduino GPS Logger: 3 addım

Video: Arduino GPS Logger: 3 addım
Video: 🛰 GPS TRACKER С ОТПРАВКОЙ ДАННЫХ НА СЕРВЕР. АВТОНОМНЫЙ GPS НА ARDUINO. СВОИМИ РУКАМИ. 2024, Iyul
Anonim
Arduino GPS Logger
Arduino GPS Logger
Arduino GPS Logger
Arduino GPS Logger

Salam uşaqlar, İnsanların hər gün sahib olduğumuz bir çox texnologiyanı anlamalarına imkan verən kiçik layihələr üçün çox təəccüblənirəm.

Bu layihə GPS qırılması və SD girişi haqqındadır. Sadəcə bu materialı qurarkən çox şey öyrəndim.

Mövzulara daha dərindən daxil olmaq üçün bu dərsdən sonra əldə edəcəyiniz bir çox anlayış və daha çoxunu verdiyim linki izləyərək əldə edə bilərsiniz.

Yaxşı, bu nədir? Sadə: Bir microSD -də mövqeləri (çox yüksəklikdə), sürəti və tarix/saatı qeyd edən bir GPS izləyicisidir.

Nə lazımdır:

- Arduino Nano (eskizi hazırlamaq üçün əslində UNO-dan istifadə etdim, amma onlar eynidır!)- Adafruit-in son GPS çıxışı- MicroSD kart qırılması- Lehim alətləri (lehim üçün lazım olan hər şey)- Universal Stripboard (istifadə etdim) 5x7 sm)- Tellər

GPS modulu istisna olmaqla bütün bu komponentlər olduqca ucuzdur. Bu təxminən 30-40 dollardır və ən bahalı hissəsidir. Hətta yeni bir lehimləmə dəmir dəsti daha ucuz başa gələ bilər.

GPS və SD kart modulları ilə birlikdə Adafruit qalxanı da mövcuddur. İstifadə etmək istəyirsinizsə, Arduino UNO üçün hazırlandığını unutmayın, buna görə də Nano deyil, UNO -ya ehtiyacınız olacaq. Eskizdə heç bir fərq yoxdur.

Daha irəli gedək…

Addım 1: Komponentləri birləşdirin

Komponentləri birləşdirmək
Komponentləri birləşdirmək
Komponentləri birləşdirmək
Komponentləri birləşdirmək
Komponentləri birləşdirmək
Komponentləri birləşdirmək
Komponentləri birləşdirmək
Komponentləri birləşdirmək

Yaxşı, komponentləri əldə etdikdən sonra onları birləşdirməlisiniz. Burada olduqca aydın olan qarmaqarışıq sxemləri tapa bilərsiniz. Bununla birlikdə, pinout da budur:

MicroSD qırılması

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (Qalxandan istifadə edirsinizsə, bu D10 -da qurulmuşdur)

GPS qırılması

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

Bu modul haqqında kiçik qeydlər: Bu iki kiçik oğlan Arduino ilə fərqli yollarla ünsiyyət qurur. GPS, Arduino ilə Serial Monitor vasitəsi ilə ünsiyyət qurduğumuz zaman istifadə etdiyimiz TTL Serialından istifadə edir, buna görə də kitabxana vasitəsilə yeni bir serial (Tx və Rx) elan etməliyik, çünki GPS standart olaraq 9600 -dən istifadə etmək istəyir. ondan da istifadə etmək istəyirəm. GPS modulu, bağlı olduqda həmişə və daim məlumat axını edir. İşləmək çətin olan hissədir, çünki bir cümləni oxuyub çap etməkdənsə, sonrakı birini də itirə bilərik, buna da ehtiyac var. Kodlaşdırarkən bunu nəzərə almalıyıq!

MicroSD lövhə ilə əlaqə qurmağın başqa bir yolu olan SPI (Serial Periferik İnterfeysi) vasitəsi ilə ünsiyyət qurur. Bu cür modullar həmişə D13 -də CLK, D12 -də DO və D11 -də DI istifadə edir. Bəzən bu əlaqələrin fərqli adları olur: CLK = SCK və ya SCLK (Serial Clock), DO = DOUT, SIMO, SDO, SO, MTSR (bunların hamısı Master Çıxışını göstərir) və DI = SOMI, SDI, MISO, MRST (Master Giriş). Nəhayət, MicroSD -də yazmaq istədiyimizi göndərdiyimiz nöqtəni göstərən CS və ya SS var. İki fərqli SPI modulundan istifadə etmək istəyirsinizsə, hər ikisini də istifadə etmək üçün bu pimi fərqləndirməlisiniz. Məsələn, LCD ekran VƏ istifadə etdiyimiz kimi bir MicroSd. Fərqli CS -lərə bağlı iki fərqli LCD istifadə edərək də işləməlidir.

Lövhədə bu hissələri birlikdə lehimləyin və eskizi yükləməyə hazırsınız!

Eskizdə gördüyünüz kimi, birbaşa komponent əvəzinə bəzi dupont dişi bağlayıcıları lehimləyirəm, çünki gələcəkdə komponenti yenidən istifadə etmək və ya birini dəyişdirmək istəyə bilərəm.

Mən də GPS modulunu bağlayıcılarla yanlış istiqamətdə lehimlədim, bu mənim günahım idi və istəmədim, amma işləyir və bu kiçik piçləri təmizləmək üçün sındırmaq riskini almaq istəmirəm! Yalnız düzgün şəkildə lehimləyin və hər şey yaxşı olacaq!

Burada bəzi faydalı lehim videosu: Yeni başlayanlar üçün lehimləmə bələdçisi Sökmə haqqında bir video

Adafruit Youtube kanalı, orada çox maraqlı şeylər var!

Lehim edərkən lazım olan metal miqdarını istifadə etməyə çalışın, əks halda qarışıqlıq edəcəksiniz. Bunu etməkdən qorxmayın, bəlkə də çox bahalı olmayan bir şeylə başlayın və fərqli şeyləri lehimləyin. Doğru material da fərq yaradır!

Addım 2: Eskiz

Birincisi, əlbəttə ki, kitabxananı idxal edirik və işləmək üçün obyektlərini qururuq: SPI.h SPI modulları ilə əlaqə qurmaq üçün, SD MicroSD kitabxanasıdır və Adafruit_GPS GPS modulunun kitabxanasıdır. SoftwareSerial.h, proqram vasitəsi ilə serial port yaratmaq üçündür. Sintaksis "mySerial (TxPin, RxPin);" dir. GPS obyekti bir seriyaya (mötərizədə) göstərilməlidir. Burada kitabxanaların Adafruit GPS breakout, MicroSD breakout üçün bağlantıları (təmiz bir iş görmək üçün SD birliyindən bu proqramla SD formatlaşdırmalısınız) və Proqram Serial kitabxanası (IDE -yə daxil edilməlidir).

DİQQƏT: Bir fayla çoxlu məlumat əlavə etmək istəyərkən və ya eskizdə ikidən çox fayl istifadə edərkən bir problemlə üzləşdim. SD -ni bu proqramla format etmədim, bəlkə də bu problemi həll edə bilər. Ayrıca, cihaza başqa bir sensor əlavə etməyə çalışdım, heç bir nəticə vermədən BMP280 (I2C modulu). I2C modulundan istifadə etmək eskizi dəli edir! Adafruit forumunda bu barədə artıq danışmışam, amma hələ də cavab ala bilməmişəm.

#include "SPI.h" #include "SD.h" #include "Adafruit_GPS.h" #include "SoftwareSerial.h" SoftwareSerial mySerial (3, 2); Adafruit_GPS GPS (və mySerial);

İndi bütün dəyişənlərimizə ehtiyacımız var: İki sətir GPS -dən bir çox faydalı məlumat hesablamaq üçün lazım olan iki cümləni oxumaq üçündür. Char, cümlələri təhlil etməzdən əvvəl yığmaq üçün, üzənlər koordinatları dərəcələrlə hesablamaq üçündür (GPS istifadə koordinatlarını dərəcə və dəqiqələrlə göndərir, Google yerində oxumaq üçün dərəcələrə ehtiyacımız var). ChipSelect, MicroSD kartının CS -ni bağladığımız pindir. Bu vəziyyətdə D4, ancaq bir SD qalxanı istifadə edirsinizsə, D10 -u bura qoymalısınız. Dəyişən, eskiz zamanı istifadə etdiyimiz faylın məlumatlarını saxlayandır.

NMEA1 sətri;

NMEA2 sətri; char c; üzmək dərəcəsi; float degWhole; float degDec; int chipSelect = 4; MySensorData faylı;

Eskizi bir az daha zərif və daha az qarışıq etmək üçün bir neçə funksiya elan edirik:

Əsasən eyni şeyi edirlər: NMEA cümlələrini oxumaq. clearGPS () üç cümləyə məhəl qoymur və readGPS () ikisini dəyişənlərdə saxlayır.

Necə olacağını görək: Bir müddət loop, modulda yeni NMEA cümlələrinin olub olmadığını yoxlayır və bir GPS axını olana qədər oxuyur. Yeni bir cümlə olduqda, cümlənin əslində oxunduğu, təhlil edildiyi və ilk NMEA dəyişənlərində toplandığı müddət döngəsindən kənarda qalırıq. Növbəti üçün də eyni şeyi edirik, çünki GPS daim axın edir, hazır olmağımızı gözləmir, dərhal çap etməyə vaxtımız yoxdur

Bu çox vacibdir! Hər iki cümləni yığmadan əvvəl heç bir şey etməyin, əks halda ikincisi nəticədə korlanar və ya səhv olar.

İki cümləni aldıqdan sonra, yaxşı getdiyini nəzarət etmək üçün serialda çap edirik.

etibarsız readGPS () {

clearGPS (); while (! GPS.newNMEAreceived ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); NMEA1 = GPS.lastNMEA (); while (! 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 ()); while (! GPS.newNMEAreceived ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); w while (! GPS.newNMEAQəbul ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); }

Yaxşı, indi hamımız hazır olduqdan sonra () qura bilərik:

Birincisi: Arduino PC üçün 115200 Serialında və Arduino GPS modulu üçün 9600 -də əlaqə qururuq. İkincisi: GPS moduluna üç əmr göndəririk: birincisi anten yeniləməsini bağlamaq, ikincisi yalnız RMC və GGA simini istəmək üçündür (yalnız ehtiyac duyacağınız bütün məlumatlara sahib olanlardan istifadə edəcəyik. a GPS), üçüncü və son əmr, Adafruit tərəfindən təklif olunan yeniləmə sürətini 1HZ olaraq təyin etməkdir.

Bundan sonra, D10 pinini Çıxışa qoyduq, əgər SD modulunuzun CS pimi D10 -dan başqa olarsa. Bundan dərhal sonra, çipdə SD moduluna CS qoyun.

CleanGPS () daxil olan readGPS () funksiyalarını yerinə yetiririk.

İndi fayllara bir şey yazmağın vaxtı gəldi! Fayl artıq Sd kartındadırsa, onlara bir zaman damgası əlavə edin. Bu şəkildə hər dəfə sessiyaları izləmək və ya faylları silmək məcburiyyətində deyilik. Quraşdırma funksiyası daxilində yazılmış bir zaman damgası ilə, hər seansda yalnız bir dəfə fayllara ayrılıq əlavə edəcəyimizə əminik.

Qeyd: SD kitabxana hər dəfə faylı açmaq və bağlamaq mövzusunda olduqca ciddidir! Yadınızda saxlayın və hər dəfə bağlayın! Kitabxana haqqında məlumat əldə etmək üçün bu linkə daxil olun.

Tamam, hamımız eskizin axın-giriş hissəsinin əsasını əldə etməyə hazırıq.

boş quraşdırma () {

Serial.begin (115200); GPS.begin (9600); // GPS.sendCommand GPS moduluna əmr göndərin ("$ PGCMD, 33, 0*6D"); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); gecikmə (1000); // yalnız SD modulunuzun CS pimi D10 pinində deyilsə

pinMode (10, Çıxış);

SD.begin (chipSelect); oxumaqGPS (); əgər (SD.exists ("NMEA.txt")) {mySensorData = SD.open ("NMEA.txt", FILE_WRITE); mySensorData.println (""); mySensorData.print ("***"); mySensorData.print (GPS.day); mySensorData.print ("."); mySensorData.print (GPS.ay); mySensorData.print ("."); mySensorData.print (GPS.yıl); mySensorData.print (" -"); mySensorData.print (GPS.hour); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS saniyələri); 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.ay); mySensorData.print ("."); mySensorData.print (GPS.yıl); mySensorData.print (" -"); mySensorData.print (GPS.hour); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS saniyələri); mySensorData.println ("***"); mySensorData.close (); }}

İndi eskizin əsasını alırıq.

Həqiqətən də çox sadədir.

GPS axınını readGPS () funksiyası ilə oxuyacağıq, 1 -ə bərabər bir düzəlişimiz olub olmadığını yoxladığımızdan daha çox, bir peyk e ilə bağlı olduğumuz deməkdir. Əldə etsək, məlumatlarımızı fayllara yazacağıq. "NMEA.txt" ilk faylında yalnız xam cümlələri yazırıq. İkinci faylda "GPDData.txt", koordinatları (əvvəl gördüyümüz funksiyalarla çevrilmiş) və yüksəkliyi əlavə edirik. Bu məlumatlar Google Earth -də yol yaratmaq üçün.kml faylını tərtib etmək üçün kifayətdir. Diqqət yetirin ki, hər dəfə bir şey yazmaq üçün faylları bağlayırıq!

boşluq döngəsi () {

oxumaqGPS (); // Condizione əgər che controlla se l'antenna ha segnale. Əlavə olaraq, bu sənədlərin siyahısını hazırlayın. əgər (GPS.fix == 1) {// Məlumat yalnız mySensorData = SD.open ("NMEA.txt", FILE_WRITE) düzəlişimiz varsa saxlanılır; // Başqa bir fayl NMEA grezze mySensorData.println (NMEA1); // NMEA faylını mySensorData.println (NMEA2) ilə yoxlayın; // NMEA faylını mySensorData.close () ilə yoxlayın; // Chiude faylı !!

mySensorData = SD.open ("GPSData.txt", FILE_WRITE);

// Uzunlamasına convLong () çevirmək; mySensorData.print (dərəcə, 4); // MySensorData.print (",") faylında koordinatı yoxlayın; // Serial.print (dərəcəsi) üçün bir virgola yazın; Serial.print (","); // Dönüşdürün və latitudine convLati () çevirin; mySensorData.print (dərəcə, 4); // MySensorData.print (",") faylında koordinatı yoxlayın; // Serial.print (dərəcəsi) üçün bir virgola yazın; Serial.print (","); // Səlam l'altitudine mySensorData.print (GPS.altitude); mySensorData.print (""); Serial.println (GPS.altitude); mySensorData.close (); }}

Hamımız hazır olduqdan sonra eskizi yükləyə, cihazı qura və zövq ala bilərsiniz!

Diqqət yetirin ki, düzəltmək üçün onu göyə baxan GPS borad ilə istifadə etməlisiniz = 1, ya da ona xarici anten bağlaya bilərsiniz.

Həm də unutmayın ki, bir düzəliş varsa, qırmızı işıq hər 15 saniyədə yanıb-sönür, yoxsa çox daha sürətli (hər 2-3 saniyədə bir).

NMEA cümlələri haqqında daha çox şey öyrənmək istəyirsinizsə, bu təlimatın növbəti addımını izləyin.

Addım 3: NMEA Cümlələri və.kml Fayl

Cihaz və eskiz tamamdır, yaxşı işləyirlər. Unutmayın ki, bir düzəliş əldə etmək üçün (peyklərlə əlaqə qurmaq üçün) qırılma göyə baxmalıdır.

Kiçik qırmızı işıq hər 15 saniyədə bir düzəliş aldığınız zaman yanıb -sönür

NMEA cümlələrini daha yaxşı başa düşmək istəyirsinizsə, daha çox oxuya bilərsiniz.

Eskizdə yalnız iki cümlə istifadə edirik, GGA və RMC. GPS modulunun axdığı bir neçə cümlədir.

Gəlin görək bu sətirdə nə var:

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

RMC = Tövsiyə olunan minimum cümlə C 123519 = 12:35:19 UTC A = Status A = aktiv və ya V = Void 4807.038, N = Enlem 48 deg 07.038 'N 01131.000, E = Boylam 11 deg 31.000' E 022.4 = Sürət düyünlərdə yerin üstündə 084.4 = İzləmə bucağı dərəcə ilə Doğru 230394 = Tarix - 23 Mart 1994 003.1, W = Maqnit Variasiyası *6A = Nəzarət məbləği məlumatları həmişə *ilə başlayır

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

GGA Qlobal Konumlandırma Sistemi Düzəltmə Məlumatı 123519 12:35:19 UTC 4807.038, N Enlik 48 dərəcə 07.038 'N 01131.000, E Boylam 11 dərəcə 31.000' E 1 Düzəldilmiş keyfiyyət: 0 = etibarsız; 1 = GPS düzəlişi (SPS); 2 = DGPS düzəlişi; 3 = PPS düzəlişi; 4 = Real vaxt kinematik; 5 = Float RTK; 6 = təxmin edilən (ölü hesab) (2.3 xüsusiyyət); 7 = Manual giriş rejimi; 8 = Simulyasiya rejimi; 08 İzlənilən peyklərin sayı 0.9 545.4 mövqeyinin üfüqi seyreltilməsi, M yüksəklik, Metrlər, orta dəniz səviyyəsindən 46.9, M WGS84 ellipsoiddən (boş sahə) yuxarıdakı geoidin hündürlüyü (boş sahə) son DGPS yeniləməsindən (boş sahə)) DGPS stansiya ID nömrəsi *47 checksum data, həmişə *ilə başlayır

Gördüyünüz kimi, orada ehtiyacınız olan daha çox məlumat var. Adafruit kitabxanasından istifadə edərək GPS.latitude və ya GPS.lat (enlem və en yarımkürə) və ya GPS.day/month/year/hour/minute/seconds/milliseconds kimi zəng edə bilərsiniz. daha çox şey bilmək üçün veb sayt. O qədər də aydın deyil, ancaq GPS modullarının təlimatında olan bəzi göstərişlərə əməl edərək ehtiyacınız olanı tapa bilərsiniz.

Əlimizdəki fayllarla nə edə bilərik? Asan: Google Earth -də bir yol göstərmək üçün bir kml fayl tərtib edin. Bunu etmək üçün, bu linkdən sonra tapa biləcəyiniz kodu (Paraqrafın altında) kopyalayın/keçin, koordinatlarınızı GPDData.txt faylından etiketlər arasına qoyun, faylı.kml uzantısı ilə qeyd edin və yükləyin. Google Earth.

Qeyd:.kml işarələmə dili sadədir, əgər işarələmə dilinin nə olduğunu artıq bilirsinizsə, əvvəlki linki və sənədləri içərisində oxumağa vaxt ayırın, əslində maraqlıdır!

Kml istifadə etmək, etiketlərini və arqumentlərini bilməkdir. Yalnız Google -dan bir bələdçi tapdım, əvvəllər bağladığım və əsas hissəsi etiketlər arasındakı üslubu təyin etmək və koordinatları yazmaq vaxtı gəldikdə # işarəsi ilə zəng etməkdir.

Bu hissəyə əlavə etdiyim fayl, koordinatlarınızı yapışdıra biləcəyiniz bir.kml -dir. bu sintaksisi yapışdırmağı unutmayın: uzunluq, enlik, yüksəklik

Tövsiyə: