SD kart modülleri, mikrodenetleyici ile yüksek hızlı veri aktarımına olanak tanıyan SPI (Serial Peripheral Interface) protokolü üzerinden haberleşir. Bu protokolde pin eşleşmeleri kullanılan Arduino modeline göre değişiklik gösterir.
Görsel: Arduino Geliştirme Platformu ve SPI Protokolü Destekli Donanımlar
Standart bir SD kart modülünün Arduino Uno ve Arduino Mega üzerindeki doğru pin eşleşmeleri aşağıdaki tabloda belirtilmiştir:
| SD Kart Modülü Pin | Arduino Uno / Nano | Arduino Mega | İşlevi |
|---|---|---|---|
| VCC | 5V / 3.3V | 5V / 3.3V | Güç Girişi |
| GND | GND | GND | Toprak Hattı |
| MISO | Pin 12 | Pin 50 | Veri Çıkışı (Master In Slave Out) |
| MOSI | Pin 11 | Pin 51 | Veri Girişi (Master Out Slave In) |
| SCK | Pin 13 | Pin 52 | Saat Sinyali (Serial Clock) |
| CS / SS | Pin 10 | Pin 10 | Çip Seçimi (Chip Select) |
Kritik Uyarı: SD kartlar yerel lojik seviyede 3.3V gerilimle çalışır. Eğer satın aldığınız modülün üzerinde dahili bir voltaj regülatörü ve lojik seviye dönüştürücü (level shifter) entegresi yer almıyorsa, Arduino'nun gönderdiği 5V sinyaller karta kalıcı hasar verecektir. Projeyi yaparken modülünüzün 5V uyumlu olduğundan emin olun.
Arduino'nun yerleşik SD.h kütüphanesi, modern işletim sistemlerinin kullandığı karmaşık NTFS veya exFAT gibi dosya sistemlerini doğrudan okuyamaz. Kartın sistem tarafından sorunsuz tanınması için şu hazırlıkların yapılması gerekir:
Aşağıdaki kod bloğu, SD karta veri ekleme ve yazılan verinin doğruluğunu kontrol etme amacıyla geri okuma işlemlerini gerçekleştiren, bellek optimizasyonu yapılmış tam sürüm bir taslaktır:
#include <SPI.h>
#include <SD.h>
const int chipSelect = 10; // CS pini projenize göre değiştirilebilir
void setup() {
Serial.begin(9600);
while (!Serial) { ; } // Seri portun hazır olmasını bekle (Mega/Leonardo için)
Serial.print(F("SD kart baslatiliyor... "));
// Kartın varlığını ve başlatılmasını kontrol et
if (!SD.begin(chipSelect)) {
Serial.println(F("Basarisiz veya kart bulunamadi!"));
return;
}
Serial.println(F("Kart hazir."));
// ---- DOSYAYA VERİ YAZMA İŞLEMİ ----
File dataFile = SD.open("log.txt", FILE_WRITE);
if (dataFile) {
dataFile.println("Sistem_Aktif;Veri_Giris_Testi;2026");
dataFile.close(); // Arabellekteki veriyi karta fiziksel olarak kaydeder
Serial.println(F("Veri basariyla yazildi."));
} else {
Serial.println(F("Dosya acilirken hata olustu (Yazma)"));
}
// ---- DOSYADAN VERİ OKUMA İŞLEMİ ----
dataFile = SD.open("log.txt");
if (dataFile) {
Serial.println(F("Dosya Icerigi:"));
while (dataFile.available()) {
Serial.write(dataFile.read());
}
dataFile.close();
} else {
Serial.println(F("Dosya acilirken hata olustu (Okuma)"));
}
}
void loop() {
// Döngüsel veri kayıtları buraya eklenebilir
}
Projelerinizin sahada yarıda kalmaması ve Arduino'nun kilitlenmesini önlemek için şu üç parametreye dikkat etmelisiniz:
Standart SD.h kütüphanesi uzun dosya adlarını tanımaz. Oluşturacağınız dosyaların adı en fazla 8 karakter, uzantısı ise en fazla 3 karakter olmalıdır (Örneğin: sicaklik_sensor_verileri.txt yerine data.txt veya log2026.txt tercih edilmelidir).
SD kütüphanesi yapısı gereği Arduino'nun kısıtlı RAM belleğinden (SRAM) yaklaşık 512 byte harcar. Kod içerisindeki sabit metinleri Serial.println(F("Mesaj")) formunda yazarak F() makrosu içine almak, bu metinlerin RAM yerine program belleğinde tutulmasını sağlar ve bellek yetersizliğinden kaynaklanan çökmelerin önüne geçer.
Kod bloğunda dataFile.close() komutu tetiklenene kadar yazılan veriler RAM arabelleğinde bekletilir. Olası ani enerji kesintilerinde veri kaybı yaşamamak adına, her döngü sonunda ya dosyayı kapatmalı ya da dataFile.flush() komutunu kullanarak veriyi fiziksel olarak karta işlemelisiniz.
Henüz yorum yapılmamış. İlk yorumu siz yapın!