ARDUNİO UNO R3 İLE PROJE GELİŞTİRMEK :
GPS
(Global Positining System ) MODÜLÜ İLE KONUM BİLGİSİ ALMA
Günümüzde karşımıza sıkça çıkan, mikrodenetleyicilerin yeni gözdesi Ardunio açık kaynak kodlu ve esnek, kolay kullanımlı donanım ve yazılım tabanlı bir elektronik prototip platformudur. Bizde bu yazımızda Ardunio Uno R3 ile birlikte GPS modülü kullanarak konum bilgisi alacağız.
19.02.2013 tarihli yazı 21594 kez okunmuştur.
ARDUNİO NEDİR ?
Arduino İtalyan elektronik mühendisleri tarafından açık kaynak kodlu geliştirilen, isteyen herkesin baskı devreleri indirerek kendi devrelerini basabilecekleri dilerlerse şık bir görüntüye sahip hazır basılmış ve bileşenleri yerleştirilmiş halde alabilecekleri, esnek, kolay kullanımlı donanım ve yazılım tabanlı bir elektronik prototip platformudur. Öncelikle açık kaynak nedir dersek hemen şöyle açıklamak gerekirse, devre şemaları, pcb baskı devreleri, yerleşim planları, varsa üzerindeki programlanabilir elemanların kodları, bütün detaylarıyla herkesin kullanımına açılmış ve ticari bir kaygı olmadan tamamen paylaşıma açık bir platformdur.
Arduino geliştirme kartı üzerindeki mikroişlemci (AtmegaXX) arduino programlama dili (wiring tabanlı) ile programlanır ve bu program processing tabanlı Ardunio Yazılım Geliştirme Ortamı (IDE) yardımı ile karta yüklenir.
Arduino’nun kullandığı dilden bahsedicek olursak, kullandığı dil oldukça basittir, çok temel bir C bilgisi ile usb üzerinden direkt olarak mikrodenetleyicimizi programlayabiliyoruz ve gerçek zamanlı uygulamalar çalıştırabiliyoruz. Programlama yaparken java üzerine yazılmış güzel, sade bir o kadarda akıllı bir editör tasarlanmıştır ve bu editörün içerisinde birçok kütüphane mevcuttur. Bu editör geliştiricileri tarafından sürekli güncel tutulması sebebiyle gün geçtikçe daha kullanışlı ve fonksiyonel hale getirildiği görülüyor. Bütün bunları göz önünde bulundurduğumuzda çok ileri bir yazılımcı olmadan birçok uygulamayı arduino kullanarak yapabiliriz. Arduino yazılımının diğer bir güzel yanı ise geliştiricileri tarafından hazırlanan zengin kütüphaneleridir. Bu kütüphane dosyaları sayesinde, birçok kod yükünden kurtularak, sadece yapmak istediğiniz projenin kodlarına yönelebiliyorsunuz.
Biraz da donanımdan bahsedecek olursak, Arduino kartlarında Atmel işlemcilerini kullanmaktadır. Mikrodenetleyicimiz önceden Bootloader programı içine atılmış şekilde geldiğinden dolayı harici bir programlama cihazına ihtiyaç duymaz. Bu da bizim için çok büyük bir avantaj, yani ek bir programlayıcı gereksinimini ortadan kaldırıyor. Arduinonun bir çok çeşidi bulunmaktadır, uygulamanızın büyüklüğü veya küçüklüğüne göre bu çeşitlerden herhangi birini seçebiliriz. Uzun bir araştırma sürecine girdiğinizde karşınıza çok fazla çeşidinin çıktığını göreceksiniz ve halen daha bu kartlar yenilenmekte ve geliştirilmektedir. Fakat şunu söyleyebiliriz ki, arduino’nun şu an ki kartlarına uygun olarak geliştirilen bir çok shield Türkçesi kalkan olan ek donanımlar yapılmıştır(Bluetooth, Ethernet, Wireless, Motor sürücü katmanları vs.). Bu yüzden donanımsal olarak çok ciddi bir değişikliğe en azından şu an ki kullanılan kartlarda gidileceğini düşünmüyorum. Çünkü kullanılan kartlarda gidilecek donanımsal değişiklikler shield lerin kullanılamaması anlamına gelir.
GPS İLE NASIL KONUM BELİRLENİR ?
GPS (
Konum Belirleme
Bu sistem, ABD Savunma Bakanlığı’na ait, yörüngede sürekli olarak dönen 24 uydudan oluşur. Bu uydular çok düşük güçlü radyo sinyalleri yayarlar. Yeryüzündeki GPS alıcısı, bu sinyalleri alır. Böylece konum belirlenmesi mümkün olur.
Bu sisteminilk kuruluş hedefi tamamen askeri amaçlar içindi. GPS alıcıları yön bulmakta, askeri çıkartmalarda ve roket atışlarında kullanılmak üzere tasarlanmıştır. Ancak, 1980′lerde GPS sistemi sivil kullanıma da açılmıştır.
Mesela diyelim ki ilk uydudan aldığımız verilere göre 30 000 km uzaklık bilgisini aldık. Bu uzaklık bilgisi, dünya üzerinde o uyduyu merkez kabul edip etrafına yarıçapı 30 000 km olan bir alan çizmemiz olarak yorumlanabilir. Daha sonra ikinci uydudan aynı şekilde 22 000 km uzaklık değeri aldığımızı düşünün ve bu uydunun etrafına da aynı şekilde bir alan oluşturulduğunu var sayalım. Bu uydu bilgilerinin 3 tanesinin oluşturduğu alanlar bir yerde kesişecek ve bize dünya üzerindeki yerimizi verecektir.
Bu sistemin
Mesela diyelim ki ilk uydudan aldığımız verilere göre 30 000 km uzaklık bilgisini aldık. Bu uzaklık bilgisi, dünya üzerinde o uyduyu merkez kabul edip etrafına yarıçapı 30 000 km olan bir alan çizmemiz olarak yorumlanabilir. Daha sonra ikinci uydudan aynı şekilde 22 000 km uzaklık değeri aldığımızı düşünün ve bu uydunun etrafına da aynı şekilde bir alan oluşturulduğunu var sayalım. Bu uydu bilgilerinin 3 tanesinin oluşturduğu alanlar bir yerde kesişecek ve bize dünya üzerindeki yerimizi verecektir.
ARDUNİO ÜZERİNDEKİ İŞLEMLER
Öncelikle C dilinde yazmış olduğumuz aşağıdaki kodları usb bağlantısını kullanarak bilgisayarımızdan mikrodenetleyicimize aktarıyoruz.
Arduino programlamak için kullanılan yazılım.
#include <SoftwareSerial.h>
#include <TinyGPS.h>
/* This sample code demonstrates the normal use of a TinyGPS object. It requires the use of SoftwareSerial, and assumes that you have a 4800-baud serial GPS device hooked up on pins 3(rx) and 4(tx).*/
TinyGPS gps;
SoftwareSerial nss(3, 4);
static void gpsdump(TinyGPS &gps);
static bool feedgps();
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);
void setup()
{
Serial.begin(115200);
nss.begin(9600);
Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
Serial.println("by Mikal Hart");
Serial.println();
Serial.print("Sizeof(gpsobject) = "); Serial.println(sizeof(TinyGPS));
Serial.println();
Serial.println("Sats HDOP Latitude Longitude Fix Date Time Date Alt Course Speed Card Distance Course Card Chars Sentences Checksum");
Serial.println(" (deg) (deg) Age Age (m) --- from GPS ---- ---- to GANTEP ---- RX RX Fail");
Serial.println("--------------------------------------------------------------------------------------------------------------------------------------");
}
void loop()
{
bool newdata = false;
unsigned long start = millis();
// Every second we print an update
while (millis() - start < 1000)
{
if (feedgps())
newdata = true;
}
gpsdump(gps);
}
static void gpsdump(TinyGPS &gps)
{
float flat, flon;
unsigned long age, date, time, chars = 0;
unsigned short sentences = 0, failed = 0;
static const float GANTEP_LAT = 37.034828, GANTEP_LON = 37.317451;
print_int(gps.satellites(), TinyGPS::GPS_INVALID_SATELLITES, 5);
print_int(gps.hdop(), TinyGPS::GPS_INVALID_HDOP, 5);
gps.f_get_position(&flat, &flon, &age);
print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 9, 5);
print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 10, 5);
print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
print_date(gps);
print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 8, 2);
print_float(gps.f_course(), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(gps.f_course()), 6);
print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0UL : (unsigned long)TinyGPS::distance_between(flat, flon, GANTEP_LAT, GANTEP_LON) / 1000, 0xFFFFFFFF, 9);
print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : TinyGPS::course_to(flat, flon, 37.034828, 37.317451), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
print_str(flat == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(TinyGPS::course_to(flat, flon, GANTEP_LAT, GANTEP_LON)), 6);
gps.stats(&chars, &sentences, &failed);
print_int(chars, 0xFFFFFFFF, 6);
print_int(sentences, 0xFFFFFFFF, 10);
print_int(failed, 0xFFFFFFFF, 9);
Serial.println();
}
static void print_int(unsigned long val, unsigned long invalid, int len)
{
char sz[32];
if (val == invalid)
strcpy(sz, "*******");
else
sprintf(sz, "%ld", val);
sz[len] = 0;
for (int i=strlen(sz); i<len; ++i)
sz[i] = ' ';
if (len > 0)
sz[len-1] = ' ';
Serial.print(sz);
feedgps();
}
static void print_float(float val, float invalid, int len, int prec)
{
char sz[32];
if (val == invalid)
{
strcpy(sz, "*******");
sz[len] = 0;
if (len > 0)
sz[len-1] = ' ';
for (int i=7; i<len; ++i)
sz[i] = ' ';
Serial.print(sz);
}
else
{
Serial.print(val, prec);
int vi = abs((int)val);
int flen = prec + (val < 0.0 ? 2 : 1);
flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
for (int i=flen; i<len; ++i)
Serial.print(" ");
}
feedgps();
}
static void print_date(TinyGPS &gps)
{
int year;
byte month, day, hour, minute, second, hundredths;
unsigned long age;
gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
if (age == TinyGPS::GPS_INVALID_AGE)
Serial.print("******* ******* ");
else
{
char sz[32];
sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d ",
month, day, year, hour, minute, second);
Serial.print(sz);
}
print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
feedgps();
}
static void print_str(const char *str, int len)
{
int slen = strlen(str);
for (int i=0; i<len; ++i)
Serial.print(i<slen ? str[i] : ' ');
feedgps();
}
static bool feedgps()
{
while (nss.available())
{
if (gps.encode(nss.read()))
return true;
}
return false;
}
Daha sonra yukarıda yazmış olduğumuz kodlara göre GPS modülümüz ile Ardunio Uno R3 arasındaki gerekli donanımsal bağlantıları yaptıktan (serial communication) sonra, mikrodenetleyicimizin ara yüzünde enlem (latitude) ve boylam (longitute) türünden iki veri elde edeceğiz. Elde ettiğimiz bu konum bilgilerini Google map’ e yazdığımız zaman harita üzerinden konumumuzu görebileceğiz.
Google Map üzerinden konumumuzun belirlenmesi
5-10 metre kadar hata payı var. Böylelikle GPS ile konum belirlemeyi tamamlamış bulunuyoruz.
Kaynaklar:
►http://www.arduino.cc/
►Wikipedia
►Arduiniana
►Wireless communication and netwoking – JonW. Mark and Weihua Zhqung, PHI,2005.
Kaynaklar:
►http://www.arduino.cc/
►Wikipedia
►Arduiniana
►Wireless communication and netwoking – JonW. Mark and Weihua Zhqung, PHI,2005.
YORUMLAR
Aktif etkinlik bulunmamaktadır.
- Dünyanın En Görkemli 10 Güneş Tarlası
- Dünyanın En Büyük 10 Makinesi
- 2020’nin En İyi 10 Kişisel Robotu
- Programlamaya Erken Yaşta Başlayan 7 Ünlü Bilgisayar Programcısı
- Üretimin Geleceğinde Etkili Olacak 10 Beceri
- Olağan Üstü Tasarıma Sahip 5 Köprü
- Dünyanın En İyi Bilim ve Teknoloji Müzeleri
- En İyi 5 Tıbbi Robot
- Dünyanın En Zengin 10 Mühendisi
- Üretim için 6 Fabrikasyon İşlemi
- DrivePro Yaşam Döngüsü Hizmetleri
- Batarya Testinin Temelleri
- Enerji Yönetiminde Ölçümün Rolü: Verimliliğe Giden Yol
- HVAC Sistemlerinde Kullanılan EC Fan, Sürücü ve EC+ Fan Teknolojisi
- Su İşleme, Dağıtım ve Atık Su Yönetim Tesislerinde Sürücü Kullanımı
- Röle ve Trafo Merkezi Testlerinin Temelleri | Webinar
- Chint Elektrik Temel DIN Ray Ürünleri Tanıtımı
- Sigma Termik Manyetik Şalterler ile Elektrik Devrelerinde Koruma
- Elektrik Panoları ve Üretim Teknikleri
- Teknik Servis | Megger Türkiye
ANKET