Bir cümlelik özet
Kütüphane, başkalarının yazıp hazır hale getirdiği kod parçalarını projene ekleyip zor işleri kısa komutlarla yapmanı sağlayan bir araçtır.
Neden önemli?
Bir önceki derste motoru bir sürücü kartıyla çalıştırdık. Sürücünün pinlerini elle HIGH ve LOW yapmak işe yarıyordu ama biraz uzundu. Bir servo motoru veya mesafe sensörünü sıfırdan sürmek istersek işler daha da karışır: doğru zamanlamayı mikrosaniye hassasiyetiyle hesaplamak gerekir.
İyi haber şu: bu zor işleri daha önce birçok kişi çözmüş ve çözümlerini paylaşmış. Bu paylaşılan çözümlere kütüphane (library) denir. Kütüphane kullanınca hem daha az kod yazarsın hem de test edilmiş, güvenilir bir temel üzerine kurarsın. Bu yüzden gerçek projelerde neredeyse her zaman hazır kütüphanelerden yararlanırız.
Kütüphane nedir?
Adı tesadüf değil. Bir kütüphaneyi düşün: ihtiyacın olan bilgiyi baştan yazmazsın, rafta hazır bulunan kitabı alıp kullanırsın. Kod kütüphaneleri de aynı mantıkla çalışır.
Bir kütüphane, belirli bir işi yapan hazır fonksiyonların bir araya toplandığı koddur. Örneğin bir servo motoru döndürmek, bir ultrasonik sensörle mesafe ölçmek veya küçük bir ekrana yazı yazmak için kütüphaneler vardır.
Günlük hayattan iki örnek
- Kütüphane rafı: Bir konuyu araştırırken her şeyi sıfırdan öğrenmezsin; konuyla ilgili hazır bir kitabı açarsın. Kod kütüphanesi de senin için önceden yazılmış "kitap" gibidir.
- Telefon uygulamaları: Fotoğraf çekmek için kamera devresini sen programlamazsın; telefonun kamera uygulamasını açar, tek dokunuşla çekersin. Kütüphane de karmaşık işi tek komutun arkasına saklar.
Her iki örnekte de ortak fikir aynı: zor kısmı başkası bir kez çözmüş, sen sonucu kısa yoldan kullanıyorsun.
#include ile kütüphaneyi çağırmak
Bir kütüphaneyi kullanmadan önce Arduino'ya "bu hazır kodu da işime kat" demen gerekir. Bunu programın en üstünde #include satırıyla yaparız.
#include <Servo.h> // Servo kütüphanesini projeye ekle
Köşeli parantez içindeki isim, kullanmak istediğin kütüphanenin dosya adıdır. Bu satır sayesinde kütüphanenin sunduğu tüm komutlara erişebilirsin. #include satırlarını her zaman void setup() ve void loop() bloklarından önce, dosyanın en üstüne yazarız.
Kütüphane Yöneticisiyle kurulum
Bazı kütüphaneler (örneğin Servo) Arduino ile birlikte hazır gelir. Ama NewPing gibi başkalarının yazdığı kütüphaneleri önce bilgisayarına kurman gerekir. Bunun için Arduino IDE içindeki Kütüphane Yöneticisi'ni (Library Manager) kullanırız.
- Arduino IDE'de Sketch → Include Library → Manage Libraries menüsünü aç.
- Arama kutusuna kütüphanenin adını yaz (örneğin
NewPing). - Doğru kütüphaneyi bulunca Install düğmesine bas.
- Kurulum bitince programının en üstüne
#includesatırını ekle.
Kütüphane Yöneticisi, kütüphaneleri güvenilir bir listeden indirir. Bu yüzden internette rastgele bir siteden dosya indirmek yerine mümkün olduğunca Kütüphane Yöneticisi'ni veya kütüphanenin resmi sayfasını kullan. Böylece hem doğru sürümü alırsın hem de bilinmeyen kaynaklardan gelen riskli kodlardan uzak durursun.
Kütüphaneyle daha kısa kod
Kütüphanelerin faydasını en iyi bir karşılaştırma gösterir. Bir servo motoru 90 dereceye götürmek istediğimizi düşünelim.
Kütüphanesiz yaklaşım
Servo, kaç dereceye döneceğini her 20 milisaniyede bir gönderilen darbelerden anlar. 90 derece için darbe uzunluğu yaklaşık 1500 mikrosaniyedir. Bunu elle yapmak şöyle görünür:
// 90 dereceyi elle sürmek: bu darbeyi sürekli tekrarlamak gerekir
digitalWrite(9, HIGH);
delayMicroseconds(1500); // 90 derece için darbe uzunluğu
digitalWrite(9, LOW);
delay(20); // sonraki darbeye kadar bekle
Zamanlamayı azıcık şaşırırsak servo titrer veya yanlış açıya gider. Üstelik her açı için bu hesabı biz yapmak zorunda kalırız.
Servo kütüphanesiyle
Aynı işi kütüphaneyle çok daha okunaklı yazarız:
#include <Servo.h>
Servo kapiServo; // bir servo nesnesi oluştur
void setup() {
kapiServo.attach(9); // servo sinyali pin 9'a bağlı
}
void loop() {
kapiServo.write(0); // 0 dereceye git
delay(1000);
kapiServo.write(90); // 90 dereceye git
delay(1000);
}
kapiServo.write(90) satırı, darbe hesabını bizim yerimize yapar. Biz sadece istediğimiz açıyı söyleriz. Kod hem kısaldı hem de çok daha anlaşılır oldu.
İkinci örnek: NewPing ile mesafe ölçmek
Ultrasonik sensörle mesafe ölçmek için de hazır bir kütüphane var. NewPing sayesinde sensörün trig ve echo sinyallerini elle yönetmek zorunda kalmayız.
#include <NewPing.h>
#define TRIG_PIN 12
#define ECHO_PIN 11
#define MAX_MESAFE 200 // ölçülecek en büyük mesafe (cm)
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_MESAFE);
void setup() {
Serial.begin(9600);
}
void loop() {
int mesafe = sonar.ping_cm(); // mesafeyi santimetre olarak ölç
Serial.print("Mesafe: ");
Serial.print(mesafe);
Serial.println(" cm");
delay(500);
}
sonar.ping_cm() tek satırda ölçümü yapıp sonucu santimetre olarak verir. Aynı işi sıfırdan yazmak onlarca satır ve dikkatli zamanlama isterdi.
Mini uygulama
Yukarıdaki Servo örneğini kendi projenle birleştir:
- Kütüphane Yöneticisi'ni açıp
Servo'nun kurulu olduğunu kontrol et (Arduino ile hazır gelir). - Programı yükle ve servonun 0 ile 90 derece arasında gidip geldiğini gözlemle.
write(90)satırınıwrite(180)yap. Servo şimdi nereye gidiyor?delay(1000)değerlerinidelay(300)yaparsan hareket nasıl değişir?- İleri seviye: Bir servoyu, bir düğmeye basınca hareket edecek şekilde değiştirmeyi dene.
Her değişiklikten sonra sadece bir şeyi değiştir ve sonucu izle. Böyle küçük denemeler, kütüphanenin komutlarını gerçekten anlamanı sağlar.
Uygulama laboratuvarı: Kütüphaneler
Kütüphaneler konusunu kalıcı hâle getirmenin en iyi yolu, kavramı küçük ve ölçülebilir bir göreve dönüştürmektir. Bu çalışmada Kütüphane nedir? ile #include ile kütüphaneyi çağırmak arasındaki ilişkiyi kullanarak bağlantı şeması, derlenebilen Arduino kodu, seri monitör kaydı ve test sonucu hazırlayacaksın. Amaç yalnız sonucun çalışması değil; hangi kararı neden verdiğini, neyi test ettiğini ve hangi durumda tasarımı değiştireceğini açıklayabilmektir.
Görev senaryosu
Şu senaryoyu ele al: buton sıçramasını yazılımla azaltan kontrollü sayaç. Dersin ana hedefi “#include ve Kütüphane Yöneticisiyle hazır kütüphaneleri güvenle kullanmayı öğren” olduğuna göre önce problemi tek cümleyle tanımla. Ardından sistemin alacağı girdiyi, uygulayacağı işlemi ve üreteceği çıktıyı ayrı ayrı yaz. Bilmediğin bir ayrıntı varsa onu varsayım olarak işaretle; varsayımı gerçek bilgi gibi kullanma.
- Planla: Başlangıç durumunu, beklenen sonucu ve kullanacağın kavramları yaz.
- En küçük sürümü kur: Yalnız temel davranışı çalıştır; süsleme ve ek özellikleri sonraya bırak.
- Üç test hazırla: Normal bir durum, sınırda bir durum ve hatalı ya da beklenmeyen bir durum seç.
- Sonucu kaydet: Beklenen ile gerçekleşeni yan yana yaz; fark varsa olası nedeni belirt.
- Tek değişiklik yap: Aynı anda birçok şeyi değiştirmek yerine bir kararı düzeltip testi yeniden çalıştır.
Başarı ölçütleri
- Kartın 5 V veya 3,3 V çalışma sınırı doğru mu?
- Pin numaraları kod ve devrede eşleşiyor mu?
- Seri monitör ölçümü beklenen aralıkta mı?
- Motor veya servo karttan doğrudan aşırı akım çekiyor mu?
- Güç kesildiğinde sistem güvenli duruma dönüyor mu?
“Kütüphaneler” çalışmasını bitirdiğinde ürünü bir arkadaşına yalnız bölüm başlıklarıyla anlat. Arkadaşın buton sıçramasını yazılımla azaltan kontrollü sayaç senaryosundaki adımları ve karar nedenlerini takip edebiliyorsa anlatım yeterince açıktır. Anlaşılmayan noktayı daha fazla terim ekleyerek değil, Kütüphane nedir? ve #include ile kütüphaneyi çağırmak ilişkisini daha küçük adımlara bölerek düzelt.
Sık yapılan hatalar
#include satırını unutmak
Kütüphanenin komutunu yazıp #include satırını eklemezsen Arduino "bu komutu tanımıyorum" der ve derleme hatası verir. Her kütüphane için üstteki #include satırı şarttır.
Kütüphaneyi kurmadan çağırmak
#include <NewPing.h> yazdın ama kütüphaneyi Kütüphane Yöneticisi'nden kurmadıysan Arduino dosyayı bulamaz. Önce kur, sonra çağır.
Yanlış kütüphane adı yazmak
Kütüphane adları büyük-küçük harfe duyarlıdır. <servo.h> yerine <Servo.h> yazılır. Küçük bir harf hatası bile hataya yol açar.
Bilinmeyen kaynaklardan indirmek
İnternette rastgele bir siteden indirilen kütüphane hem yanlış çalışabilir hem de güvenli olmayabilir. Mümkün olduğunca Kütüphane Yöneticisi'ni veya kütüphanenin resmi sayfasını kullan.
Güvenlik notu
- Bu derste yalnızca USB veya düşük gerilimli pil paketleriyle çalış; asla şebeke (priz) elektriği kullanma.
- Servo veya başka bir motor, yük altında Arduino'nun pininden çekebileceğinden fazla akım çeker. Küçük bir servoyu kısa süre denerken bile, birden fazla veya güçlü motor kullanacaksan bir motor sürücü ve ayrı bir güç kaynağı gerekir. Motoru doğrudan Arduino pininden besleme.
- Motorları her zaman düşük hızda ve az yükle denemeye başla; ani hareketler parmaklarını sıkıştırabilir.
- Suyla ilgili bir düzenek (pompa gibi) kuruyorsan elektronik parçaları sudan uzak tut.
- Kurulum, güç bağlantısı ve ilk denemeleri bir yetişkinle birlikte yap.
Ders özeti
- Kütüphane, zor işleri kısa komutlarla yapmanı sağlayan hazır kod topluluğudur.
- Bir kütüphaneyi kullanmadan önce programın en üstüne
#includesatırı eklenir. - Bazı kütüphaneler Arduino ile gelir; diğerleri Kütüphane Yöneticisi'nden kurulur.
- Kütüphaneler kodu kısaltır ve test edilmiş, güvenilir bir temel sağlar.
- Kütüphaneleri güvenilir kaynaklardan, tercihen Kütüphane Yöneticisi'nden edin.
Kontrol soruları
- Kütüphane nedir ve neden kullanırız?
- Bir kütüphaneyi programda kullanabilmek için hangi satırı, nereye yazarız?
ServoileNewPingkütüphanelerinin kurulumu arasındaki fark nedir?kapiServo.write(90)komutu bizim yerimize hangi zor işi yapar?- Kütüphaneyi neden rastgele bir siteden değil de Kütüphane Yöneticisi'nden indirmeliyiz?
Cevaplar
- Kütüphane, belirli bir işi yapan hazır fonksiyonların toplandığı koddur. Zor işleri kısa komutlarla yapmamızı, daha az ve daha güvenilir kod yazmamızı sağlar.
#include <KütüphaneAdı.h>satırını, programın en üstüne,setupveloopbloklarından önce yazarız.ServoArduino ile hazır gelir, ayrıca kurmak gerekmez.NewPingbaşkasının yazdığı bir kütüphanedir; kullanmadan önce Kütüphane Yöneticisi'nden kurulmalıdır.- Servoyu 90 dereceye götürmek için gereken darbe zamanlamasını (yaklaşık 1500 mikrosaniyelik darbeleri) bizim yerimize hesaplar; biz sadece açıyı söyleriz.
- Kütüphane Yöneticisi kütüphaneleri güvenilir bir listeden indirir. Böylece hem doğru sürümü alırız hem de bilinmeyen kaynaklardan gelen hatalı veya riskli koddan uzak dururuz.
Kaynak ve doğrulama notu
“Kütüphaneler” dersi için doğrulama odağı Kütüphane nedir? ile #include ile kütüphaneyi çağırmak arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Arduino uyumlu kartlarda pin, gerilim ve akım sınırları modele göre değişebilir. Kod derlense bile devre güvenli olmayabileceğinden, motor ve servo gibi yükler uygun sürücü ve harici besleme ile kullanılmalıdır.
Sonraki ders
Kod Yapısını Fonksiyonlara Bölmek: Uzayan loop bloğunu, her biri tek bir işi yapan kendi fonksiyonlarına ayırarak kodu daha okunaklı hale getirmeyi öğreneceğiz.