Loyiha #46: Vaqt o'tishi bilan harakatlanuvchi ob'ektning holatini qayd etish
Endi siz GPS koordinatalarini qanday qabul qilishni va ularni oddiy o'zgaruvchilarga aylantirishni bilganingizdan so'ng, biz ushbu ma'lumotni 8-bobdagi microSD karta ekrani yordamida GPS logger yaratish uchun ishlatishimiz mumkin. Bizning loggerimiz vaqt o'tishi bilan GPS ma'lumotlarini qayd qilib, bizning joylashuvimizni yozib oladi. MicroSD karta ekranining qo'shilishi sizga avtomobil, yuk mashinasi, qayiq yoki GPS signalini qabul qilish imkonini beruvchi boshqa harakatlanuvchi ob'ektning harakatini yozib olish imkonini beradi; keyinroq ma'lumotni kompyuterda ko'rib chiqishingiz mumkin.
Texnik qism
Kerakli uskuna oldingi misollar uchun ishlatilgani bilan bir xil, faqat LCD ekranni 8-bobdagi microSD ekrani bilan almashtirishingiz kerak va siz tashqi quvvatdan foydalanasiz. Bizning misolimizda biz vaqtni, joylashuv ma'lumotlarini va sayohatning taxminiy tezligini yozamiz.
Eskiz
Uskunangizni yig'gandan so'ng, quyidagi eskizni kiriting va yuklang:
// 46-loyiha - Vaqt o'tishi bilan harakatlanuvchi ob'ektning holatini qayd etish #include
#include
// quyidagining misolini yarating
TinyGPS object TinyGPS gps;
void getgps(TinyGPS &gps);
void setup()
{
pinMode(10, OUTPUT);
Serial.begin(9600);
// microSD karta mavjudligini va undan foydalanish mumkinligini tekshiring
if (!SD.begin(8))
{
Serial.println("Card failed, or not present");
// eskizni to'xtating
return;
}
Serial.println("microSD card is ready");
}
void getgps(TinyGPS &gps)
{
float latitude, longitude;
int year;
byte month, day, hour, minute, second, hundredths;
// dekodlash va joylashuv ma'lumotlarini ko'rsatish
gps.f_get_position(&latitude, &longitude);
File dataFile = SD.open("DATA.TXT", FILE_WRITE);
// agar fayl tayyor bo'lsa, unga yozing
if (dataFile)
{
dataFile.print("Lat: ");
dataFile.print(latitude,5);
dataFile.print(" ");
dataFile.print("Long: ");
dataFile.print(longitude,5);
dataFile.print(" ");
// dekodlash va vaqt ma'lumotlarini ko'rsatish
gps.crack_datetime
(
&year,&month,&day,&hour,&minute,&second,&hundredths
);
// 45-loyihadagi kabi vaqt mintaqangiz uchun to'g'rilang
hour=hour+11;
if (hour>23)
{
hour=hour-24;
}
if (hour<10)
{
dataFile.print("0");
}
dataFile.print(hour, DEC);
dataFile.print(":");
if (minute<10)
{
dataFile.print("0");
}
dataFile.print(minute, DEC);
dataFile.print(":");
if (second<10)
{
dataFile.print("0");
}
dataFile.print(second, DEC);
dataFile.print(" ");
dataFile.print(gps.f_speed_kmph());
dataFile.println("km/h");
dataFile.close();
delay(30000);
// har 30 soniyada o'lchovni yozib oling
}
}
void loop()
{
byte a;
if ( Serial.available() > 0 ) // agar ketma-ket qatorga ma'lumotlar kirsa {
a = Serial.read();
// ma'lumotlar baytini oling
if(gps.encode(a))
// agar haqiqiy GPS ma'lumotlari mavjud bo'lsa ...
{
getgps(gps);
// keyin ma'lumotlarni oling va uni LCD displeyda ko'rsating
}
}
}
Ushbu eskiz GPS qabul qiluvchisidan ma'lumotlarni qabul qilish va uni boshqa funktsiyalarga o'tkazish uchun 44 va 45 loyihalarda void loop() da qo'llangan bir xil koddan foydalanadi. da, GPS qabul qiluvchisidan olingan matn ma'lumotlarni foydali o'zgaruvchilarga dekodlash uchun TinyGPS kutubxonasiga o'tkaziladi. da, microSD karta unga ma'lumotlarni yozish mumkinligini aniqlash uchun tekshiriladi va dan gacha, tegishli GPS ma'lumotlari microSD kartasidagi matn fayliga yoziladi. Har bir yozishdan keyin fayl yopilganligi sababli, eskizni ogohlantirmasdan Arduino'dan quvvat manbasini olib tashlashingiz mumkin va buni microSD kartani o'rnatish yoki olib tashlashdan oldin qilishingiz kerak. Nihoyat, delay() funksiyasidagi qiymatni o'zgartirish orqali ma'lumotlarni yozib olish oralig'ini da belgilashingiz mumkin.
Do'stlaringiz bilan baham: |