Мазмуну:

Arduino GPS Logger: 3 кадам
Arduino GPS Logger: 3 кадам

Video: Arduino GPS Logger: 3 кадам

Video: Arduino GPS Logger: 3 кадам
Video: Arduino в космосе. Часть 3. Запускаем платы в стратосферу. С GPRS-шилдом, GPS-трекером и DS18b20 2024, Июль
Anonim
Arduino GPS Logger
Arduino GPS Logger
Arduino GPS Logger
Arduino GPS Logger

Салам балдар, Мен адамдарга биздин күнүмдүк технологиябызды түшүнүүгө мүмкүндүк берген кичинекей долбоорлор үчүн супер чыгам.

Бул долбоор GPS бузулушу жана SD журналына байланыштуу. Мен бул нерселерди жасоодо көп нерсени үйрөндүм.

Бул үйрөткүчтөн кийин сиз ала турган көптөгөн түшүнүктөр бар жана темаларга тереңирээк кирүү үчүн мен берген шилтеме аркылуу дагы көп нерселерди таба аласыз.

Демек, бул эмне? Жөнөкөй: microSDдеги орундарды (бийиктиги менен), ылдамдыгын жана датасын/убактысын жазуучу GPS трекери.

Эмне керек болот:

- Ардуино Нано (Мен эскизди түзүү үчүн UNO колдонгом, бирок алар бирдей!)- 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 модулун туташтыргычтар менен туура эмес багытта ширеттим, бул менин күнөөм болчу жана мен каалабадым, бирок ал иштейт жана мен кичинекей сойкуларды тазалоо үчүн аны сындыргым келбейт! Жөн гана туура жолго салгыла, баары жакшы болот!

Бул жерде кээ бир пайдалуу ширетүүчү видео: башталгычтар үчүн Soldering guideA desolder жөнүндө видео

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 форумунда бул жөнүндө айткам, бирок дагы эле жооп ала алган жокмун.

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

Эми бизге бардык өзгөрмөлөрүбүз керек: эки сап GPSтен пайдалуу маалыматтарды топтоо үчүн керек болгон эки сүйлөмдү окуу үчүн. Чарлар сүйлөмдөрдү талдоодон мурун камтылган үчүн, калкып чыгуулар координаттарды даражалар менен эсептөө үчүн (GPS колдонуу координаттарын градус жана мүнөттөрдө жөнөтөт, аларга Google жеринде окуу үчүн даражалар керек). ChipSelect - бул биз MicroSD картанын CS'син туташтырган пин. Бул учурда D4, бирок эгер сиз SD калканы колдонуп жатсаңыз, анда D10ду бул жерге коюуга туура келет.

String NMEA1;

String NMEA2; char c; float deg; 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 үчүн Serial 115200 жана GPS модулу Arduino үчүн 9600 боюнча байланышты ачабыз. Экинчиден, биз GPS модулуна үч буйрук жөнөтөбүз: биринчиси - антеннанын жаңыртуусун жабуу, экинчиси - RMC жана GGA саптарын суроо үчүн (биз сизге керектүү болгон бардык маалыматка ээ болгондорду гана колдонобуз. а GPS), үчүнчү жана акыркы буйрук Adafruit тарабынан сунушталган жаңыртуу ылдамдыгын 1Гцке коюу.

Андан кийин, биз D10 пинди OUTPUTка койдук, эгерде сиздин SD моделиңиздин CS пини D10дон башка болсо. Ошол замат CS чипин тандоо чипиндеги SD модулуна орнотуңуз.

Биз 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.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", биз координаттарды (мурда көргөн функциялар менен которулган) жана бийиктикти кошобуз. Бул маалыматтар Google Жеринде жол түзүү үчүн.kml файлын түзүү үчүн жетиштүү. Файлдарды бир нерсе жазуу үчүн ачкан сайын жаап салабыз!

void loop () {

readGPS (); // Condizione if che controlla se l'antenna ha segnale. Алсак, бул жерде сиз өзүңүздү караңыз. эгерде (GPS.fix == 1) {// Маалыматты бизде оңдоо болгондо гана сактоо mySensorData = SD.open ("NMEA.txt", FILE_WRITE); // Бул файл NMEA боюнча иштейт mySensorData.println (NMEA1); // MySensorData.println (NMEA2) баштапкы NMEA файлын жазыңыз; // NMEA файлын mySensorData.close () менен бөлүп жазыңыз; // Chiude файл !!

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

// Convert Convert e longitudine convLong (); mySensorData.print (даража, 4); // MySensorData.print файлынын координаттарын текшерүү (","); // Скрипировать бесплатно и разделиться для Serial.print (deg); Serial.print (","); // Convert l en latineine convLati (); mySensorData.print (даража, 4); // MySensorData.print файлынын координаттарын текшерүү (","); // Скрипировать бесплатно и разделиться для 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 File

Аппарат менен эскиз толук, алар жакшы иштеп жатат. Эсиңизде болсун, оңдоону алуу үчүн (спутниктер менен байланышта болуу үчүн) жарылуу асманга каралышы керек.

Кичинекей кызыл жарык ар бир 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 = Fix 12:35:19 UTC A = Status A = активдүү же V = Void 4807.038, N = Latitude 48 deg 07.038 'N 01131.000, E = Longitude 11 deg 31.000' E 022.4 = Speed түйүндөрдө жер үстүндө 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 Global Positioning System Fix Data 123519 Fix on 12:35:19 UTC 4807.038, N Latitude 48 deg 07.038 'N 01131.000, E Longitude 11 deg 31.000' E 1 Fix сапаты: 0 = жараксыз; 1 = GPS оңдоо (SPS); 2 = DGPS оңдоо; 3 = PPS оңдоо; 4 = Кинематикалык реалдуу убакыт; 5 = Float RTK; 6 = болжолдуу (өлгөн эсеп) (2.3 өзгөчөлүк); 7 = Кол менен киргизүү режими; 8 = Симуляция режими; 08 Изделип жаткан спутниктердин саны 0.9 545.4 позициясынын горизонталдуу суюлушу, М бийиктиги, метр, орточо деңиз деңгээлинен 46.9, M WGS84 эллипсоидинин үстүндөгү геоиддин бийиктиги (орточо деңиз деңгээли) (бош талаа) акыркы DGPS жаңыртуусунан кийин (бош талаа)) DGPS станциясынын ID номери *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, сиз жөн гана координаттарыңызды чаптай аласыз. Бул синтаксисти коюуну унутпаңыз: узундук, кеңдик, бийиктик

Сунушталууда: