Мазмұны:

Arduino GPS тіркеуші: 3 қадам
Arduino GPS тіркеуші: 3 қадам

Бейне: Arduino GPS тіркеуші: 3 қадам

Бейне: Arduino GPS тіркеуші: 3 қадам
Бейне: Использование карты Micro SD и регистрация данных с Arduino | Пошаговый курс Arduino, урок 106 2024, Шілде
Anonim
Arduino GPS тіркеуші
Arduino GPS тіркеуші
Arduino GPS тіркеуші
Arduino GPS тіркеуші

Cәлем жігіттер, Мен адамдарға күнделікті қолданыстағы көптеген технологияларды түсінуге мүмкіндік беретін шағын жобалардан бас тартамын.

Бұл жоба GPS -тің үзілуі мен SD -ге тіркеу туралы. Мен бұл материалды жасау арқылы көп нәрсені үйрендім.

Тақырыптарды тереңдету үшін осы оқулықтан кейін сіз алатын көптеген түсініктер бар, және мен берген сілтеме бойынша тағы басқалар.

Сонымен, бұл не? Қарапайым: microSD картасындағы орындарды (биіктікте де), жылдамдық пен күнді/уақытты тіркейтін GPS трекері.

Сізге не қажет болады:

- Ардуино Нано (мен эскиз жасау үшін БҰҰ-ды қолдандым, бірақ олар бірдей!)- Adafruit GPS-тің соңғы үзілуі- MicroSD картасының үзілуі- Дәнекерлеу құралдары (дәнекерлеуге қажет нәрсенің бәрі)- Әмбебап стриптоны (мен қолдандым) 5х7 см)- сымдар

Бұл компоненттердің барлығы GPS модулін қоспағанда өте арзан. Бұл шамамен 30-40 доллар және бұл ең қымбат бөлігі. Тіпті жаңа дәнекерлегіш қондырғы да арзанға түсуі мүмкін.

Сондай -ақ, GPS және SD -карта модульдері бар Adafruit қалқаны бар. Егер сіз оны қолданғыңыз келсе, Arduino UNO үшін жасалғанын есте сақтаңыз, сондықтан сізге нано емес, БҰҰ қажет. Эскизде ешқандай айырмашылық жоқ.

Әрі қарай барайық …

1 -қадам: компоненттерді қосу

Қосылатын компоненттер
Қосылатын компоненттер
Қосылатын компоненттер
Қосылатын компоненттер
Қосылатын компоненттер
Қосылатын компоненттер
Қосылатын компоненттер
Қосылатын компоненттер

Компоненттерді алғаннан кейін оларды қосу керек. Мұнда сіз өте айқын схемаларды таба аласыз. Сонымен қатар, түйін түйіні де осында:

MicroSD үзілуі

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (егер сіз қалқанды қолдансаңыз, бұл D10 -де салынған)

GPS үзілуі

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

Бұл модуль туралы шағын ескертулер: Бұл екі кішкентай бала Arduino -мен әр түрлі жолмен сөйлеседі. GPS TTL сериясын пайдаланады, біз Arduino -мен Serial Monitor арқылы сөйлескенде қолданамыз, сондықтан біз кітапхана арқылы жаңа серияны (Tx және Rx) жариялауымыз керек, себебі GPS әдепкі бойынша 9600 -ді қолданғысы келеді және біз оны да қолданғым келеді. GPS модулі қосулы болса, үнемі және үнемі деректерді жібереді. Бұл қиын бөлік, өйткені егер біз сөйлемді оқып, оны басып шығарудан гөрі келесі сөйлемді жоғалтуымыз мүмкін, бұл да қажет. Біз кодтау кезінде оны есте ұстауымыз керек!

MicroSD тақтамен байланысудың басқа әдісі SPI (Serial Perifheral Interface) арқылы байланысады. Мұндай модуль әрқашан D13 -те CLK, D12 -де DO және D11 -де DI қолданады. Кейде бұл қосылыстарда CLK = SCK немесе SCLK (Serial Clock), DO = DOUT, SIMO, SDO, SO, MTSR (барлығы Master Output көрсетеді) және DI = SOMI, SDI, MISO, MRST (Master Input) сияқты әр түрлі атау болады. Ақырында бізде MicroSD -те жазғымыз келетін нәрсені көрсететін түйреуішті көрсететін CS немесе SS бар. Егер сіз екі түрлі SPI модулін қолданғыңыз келсе, екеуін де пайдалану үшін осы түйреуішті ажырату қажет. Мысалы, СКД экраны мен MicroSd біз қолданатын сияқты. Ол сонымен қатар әр түрлі CS -ге қосылған екі түрлі СКД көмегімен жұмыс істеуі керек.

Бұл бөліктерді тақтаға дәнекерлеңіз және сіз эскизді жүктеуге дайынсыз!

Эскизде көріп тұрғандай, мен тікелей компоненттің орнына бірнеше дупонтты аналық коннекторларды дәнекерлеймін, себебі болашақта мен компонентті қайта қолданғым келеді немесе біреуін өзгерткім келеді.

Мен сондай -ақ GPS модулін коннекторлармен дұрыс емес бағытта дәнекерледім, бұл менің кінәм болды, мен қаламадым, бірақ ол жұмыс істейді, мен оны бұзу қаупін қаламаймын! Дұрыс пісіріңіз, бәрі жақсы болады!

Мұнда бірнеше пайдалы дәнекерлеу бейнесі: Жаңадан бастаушыларға арналған дәнекерлеу нұсқаулығы

Adafruit Youtube каналы, онда көптеген қызықты нәрселер бар!

Дәнекерлеу кезінде сізге қажет металл мөлшерін қолдануға тырысыңыз, әйтпесе сіз тәртіпсіздікке ұшырайсыз. Мұны жасаудан қорықпаңыз, мүмкін қымбат емес нәрседен бастаңыз, және әр түрлі заттарды дәнекерлеп ұстаңыз. Дұрыс материал да айырмашылықты жасайды!

2 -қадам: Эскиз

Біріншіден, әрине, біз кітапхананы импорттаймыз және олардың объектілерімен жұмыс жасаймыз: SPI.h SPI модульдерімен байланысқа арналған, SD - MicroSD кітапханасы және Adafruit_GPS - GPS модулінің кітапханасы. SoftwareSerial.h - бағдарламалық қамтамасыз ету арқылы сериялық портты құруға арналған. Синтаксис - «mySerial (TxPin, RxPin);». GPS объектісін сериялы (жақшаларда) көрсету керек. Міне, кітапханалардың сілтемелері Adafruit GPS -тің бұзылуы, MicroSD -тің үзілуі (таза жұмыс істеу үшін SD -ді осы бірлестіктің бағдарламалық қамтамасыз етуімен SD форматтау керек) және Бағдарламалық қамтамасыз етудің сериялық кітапханасы (ол IDE -ге енгізілуі керек).

ЕСКЕРТПЕ: Мен бір файлға көп ақпаратты қосуға тырысқанда немесе эскизде екіден көп файлды пайдалану кезінде кейбір қиындықтарға тап болдым. Мен SD бағдарламалық жасақтамасымен пішімдемедім, мүмкін бұл мәселені шешуі мүмкін. Сондай -ақ, мен құрылғыға басқа сенсорды қосуға тырыстым, BMP280 (I2C модулі). I2C модулін пайдалану эскизді ақылға сыйғызатын сияқты! Мен бұл туралы Adafruit форумында айттым, бірақ мен әлі жауап ала алмадым.

#«SPI.h» қосу#«SD.h» қосу#«Adafruit_GPS.h» қосу#«SoftwareSerial.h» SoftwareSerial mySerial қосу (3, 2); Adafruit_GPS GPS (& mySerial);

Енді бізге барлық айнымалылар қажет: екі жол GPS -тен көптеген пайдалы ақпаратты есептеу үшін қажет екі сөйлемді оқуға арналған. Char - сөйлемдерді талдаудан бұрын жинақтау үшін, қалқымалы координаттарды градуспен есептеуге арналған (GPS пайдалану координаттарын градус пен минутпен жібереді, оларды Google жерінде оқуға рұқсат ету үшін бізге градус қажет). ChipSelect - бұл MicroSD картасының CS ұяшығын қосатын түйреуіш. Бұл жағдайда D4, бірақ егер сіз SD қалқанын қолдансаңыз, мұнда D10 қоюға тура келеді. Файл айнымалысы эскиз кезінде біз қолданатын файл туралы ақпаратты сақтайтын болады.

NMEA1 жолы;

NMEA2 жолы; char c; өзгермелі градус; float degWhole; float degDec; int chipSelect = 4; MySensorData файлын;

Енді біз эскизді әлдеқайда талғампаз және аз ластау үшін бірнеше функцияларды жариялаймыз:

Олар негізінен солай істейді: NMEA сөйлемдерін оқу. clearGPS () үш сөйлемді елемейді және readGPS () олардың екеуін айнымалыларда сақтайды.

Келіңіздер, көрейік: уақытша цикл модульде NMEA жаңа сөйлемдері бар -жоғын бақылайды және GPS ағыны бар болғанша оқиды. Жаңа сөйлем болған кезде, біз сөйлем шынымен оқылатын, талданатын және NMEA бірінші айнымалыларында жинақталатын уақытша циклден шығамыз. Біз келесі әрекетті бірден жасаймыз, өйткені GPS үнемі ағып тұрады, бізді дайын болуды күтпейді, оны бірден басып шығаруға уақыт жоқ

Бұл өте маңызды! Екі сөйлемді жинамас бұрын ештеңе жасамаңыз, әйтпесе екіншісі бүлінеді немесе қате болады.

Біз екі сөйлем алғаннан кейін, біз оларды серияға басып шығарамыз, сонда бұл жақсы.

жарамсыз 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.newNMEAreceived ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); }

Жақсы, енді бәріміз дайын болдық, біз баптаудан өтуге болады ():

Біріншіден: Arduino PC үшін 115200 сериясында және Arduino GPS модулі үшін 9600 -де байланыс ашамыз. Екіншіден: біз GPS модуліне үш пәрмен жібереміз: біріншісі - антеннаның жаңартылуын жабу, екіншісі - тек RMC және GGA жолын сұрау үшін (біз сізге қажет болатын барлық ақпаратты алатындарды қолданамыз. GPS), үшінші және соңғы пәрмен - бұл Adafruit ұсынған жаңарту жылдамдығын 1 Гц -ге орнату.

Осыдан кейін біз D10 түйреуішін OUTPUT күйіне қойдық, егер сіздің SD -модульдің CS -пині D10 -дан басқа болса. Осыдан кейін бірден микросхемадағы SD модулінде CS орнатыңыз.

Біз cleanGPS () кіретін readGPS () функцияларын орындаймыз.

Енді файлдарға бірдеңе жазу уақыты келді! Егер файл Sd картасында болса, оларға уақыт белгісін қосыңыз. Осылайша, біз сеанстарды қадағалап отырудың немесе файлдарды өшірудің қажеті жоқ. Орнату функциясында уақыт белгісі жазылған кезде, біз файлдарға бөлуді бір сессияға бір рет қосатынымызға сенімдіміз.

ЕСКЕРТПЕ: SD кітапханасы файлды ашуға және жабуға өте маңызды! Есіңізде болсын және оны әр уақытта жабыңыз! Кітапхана туралы білу үшін мына сілтемеге өтіңіз.

Жарайды, біз эскиздің ағын мен журнал бөлігінің өзегін алуға дайынбыз.

жарамсыз орнату () {

Serial.begin (115200); GPS.begin (9600); // GPS.sendCommand GPS модуліне командалар жіберу («$ PGCMD, 33, 0*6D»); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); кешіктіру (1000); // егер SD модулінің CS түйрегіші D10 түйреуішінде болмаса

pinMode (10, OUTPUT);

SD.begin (chipSelect); readGPS (); егер (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.жыл); 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.жыл); 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», біз координаттарды (бұрын көрген функциялармен түрлендірілген) және биіктікті қосамыз. Бұл ақпарат Google Earth -те жол құру үшін.kml файлын құрастыру үшін жеткілікті. Назар аударыңыз, біз файлдарды бірдеңе жазу үшін ашқан сайын жабамыз!

void loop () {

readGPS (); // Condizione if che controlla se l'antenna ha segnale. Сын -ескертпелерді қарау керек. if (GPS.fix == 1) {// Деректерді тек бізде mySensorData = SD.open («NMEA.txt», FILE_WRITE) түзетуі болған жағдайда ғана сақтаңыз; // NMEA grezze mySensorData.println (NMEA1) файлына сәйкес файлдар; // mySensorData.println (NMEA2) NMEA файлының бастапқы нұсқасын тексеру; // mySensorData.close () NMEA құпия файлын сканерлеңіз; // Chiude файлы !!

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

// Convertte e scrive la longitudine convLong (); mySensorData.print (градус, 4); // MySensorData.print («,») файлының координатасын тексеру; // Сериялық.приграфия бойынша бірегей деректерді жазыңыз (басып шығару); Serial.print («,»); // En latine convLati түрлендіру (); mySensorData.print (градус, 4); // MySensorData.print («,») файлының координатасын өзгерту; // Сериялық.приграфия бойынша бірегей деректерді жазыңыз (басып шығару); Serial.print («,»); // Scrive l'altitudine mySensorData.print (GPS.altitude); mySensorData.print («»); Serial.println (GPS.altitude); mySensorData.close (); }}

Енді біз бәрін аяқтадық, сіз эскизді жүктей аласыз, құрылғыны жасай аласыз және ләззат ала аласыз!

Назар аударыңыз, оны түзету = 1 алу үшін оны GPS борада аспанға қаратып қолдану керек, немесе оған сыртқы антеннаны қосуға болады.

Есіңізде болсын, егер түзету болса, қызыл жарық әр 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 = А күйі = белсенді немесе V = Жарамсыз 4807.038, N = Ендік 48 градус 07.038 'N 01131.000, E = Бойлық 11 градус 31.000' E 022.4 = Жылдамдық жердегі түйіндерде 084.4 = Жолдың бұрышы градус бойынша Шын 230394 = Күні - 23 наурыз 1994 ж. 003.1, W = Магниттік вариация *6А = Бақылау сомасының деректері әрқашан *деп басталады

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

GGA Global Positioning System Fix Data 123519 12:35:19 UTC 4807.038, N Latitude 48 deg 07.038 'N 01131.000, E Longitude 11 deg 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 позициясының көлденең сұйылтылуы, М биіктігі, метр, орташа теңіз деңгейінен 46.9, M WGS84 эллипсоидынан (бос өріс) геоидтың биіктігі (бос өріс) соңғы DGPS жаңартудан кейінгі уақыт (бос өріс)) DGPS станциясының идентификатор нөмірі *47 бақылау сомасы деректері әрқашан *деп басталады

Көріп отырғаныңыздай, бұл жерде сізге қажет көптеген ақпарат бар. Adafruit кітапханасын қолдана отырып, олардың кейбіреулеріне GPS.latitude немесе GPS.lat (ендік және жарты шар) немесе GPS.day/month/year/hour/minute/seconds/milliseconds қоңырау шалуға болады. толығырақ білу үшін веб -сайт. Бұл түсінікті емес, бірақ GPS модульдерінің нұсқаулығындағы кейбір кеңестерге сүйене отырып, сізге қажет нәрсені таба аласыз.

Бізде бар файлдармен не істей аламыз? Оңай: Google Earth жолын көрсету үшін kml файлын құрастырыңыз. Мұны істеу үшін, осы сілтеме бойынша таба алатын кодты көшіру/қою (Жол параграфының астында), координаттарыңызды GPDData.txt файлынан тегтердің арасына салыңыз, файлды.kml кеңейтімімен сақтаңыз және оны жүктеңіз. Google Earth.

ЕСКЕРТПЕ:.kml белгілеу тілі қарапайым, егер сіз белгілеу тілі не екенін білсеңіз, алдыңғы сілтеме мен құжаттаманы оқуға уақыт бөліңіз, бұл өте қызықты!

Kml пайдалану - бұл оның тегтері мен дәлелдерін білу. Мен тек Google -дан нұсқаулықты таптым, мен бұрын сілтеме жасадым және маңызды бөлігі - бұл тегтер арасындағы стильді анықтау және координаттарды жазу уақыты келгенде оны # белгісімен шақыру.

Мен осы бөлімге қосқан файл.kml, онда сіз тек координаттарыңызды қоюға болады. осы синтаксисті қоюды ұмытпаңыз: бойлық, ендік, биіктік

Ұсынылған: