Yazılardaki ürünleri komponentci.net'te inceleyebilir, hemen sipariş verebilirsiniz.komponentci.net →
KomponentciBlog Mağaza
Blog  ›  Projeler

Micro SD Kart Modülü ile Veri Kaydı: Bağlantı ve CSV

Micro SD Kart Modülü ile Veri Kaydı: Bağlantı ve CSV
Kısa cevap

Micro SD kart modülü Arduino'ya SPI ile bağlanır: Uno'da MOSI D11'e, MISO D12'ye, SCK D13'e, CS D4'e gider. Kart FAT32 (ya da FAT16) biçimlendirilmeli; 32 GB ve altı kartlar en az sorun çıkarır. SD kütüphanesiyle dosya açılıp her ölçüm CSV satırı olarak yazılır ve dosya kapatılır; böylece kayıt Excel'de açılabilir.

Bir seranın sıcaklığını bir hafta boyunca izlemek ya da bir aracın akü gerilimini yolculuk boyunca kaydetmek için verinin bir yerde saklanması gerekir. İnternet bağlantısı olmayan yerlerde en pratik çözüm, ölçümleri micro SD karta yazmaktır. Bu yazıda micro SD kart modülünün SPI bağlantısını, kartın nasıl biçimlendirileceğini, CSV dosyasına sıcaklık yazan örnek kodu ve sık görülen hataları anlatıyoruz.

Micro SD kart modülü nedir?

Micro SD kart modülü, bir micro SD kartı SPI haberleşmesiyle mikrodenetleyiciye bağlayan ve kartın 3,3V çalışma koşullarını sağlayan küçük bir arayüz kartıdır. Arduino bu sayede kartta dosya oluşturabilir, dosyaya yazabilir ve dosyadan okuyabilir.

SD kartlar 3,3V ile çalışır ve 5V sinyale dayanıklı değildir. Bu yüzden Arduino ile kullanılan modüllerin çoğunda bir 3,3V regülatör ve sinyal seviyesini düşüren bir dönüştürücü bulunur; VCC pini bu modüllerde 5V'a bağlanır. Micro SD kart okuyucu modül ve mikro SD kart modülü bu amaçla kullanılır. Yalnızca 3,3V girişi olan bir modülünüz varsa ürün sayfasını kontrol edin ve 5V vermeyin.

SD kart modülü Arduino'ya nasıl bağlanır?

SD kart modülü Arduino Uno'ya MOSI D11, MISO D12, SCK D13, CS D4, VCC 5V ve GND GND olacak şekilde bağlanır. D11, D12 ve D13 Uno'nun sabit donanım SPI pinleridir; CS ise koddan seçilebilir.

Modül piniArduino Uno / NanoArduino MegaESP32 (VSPI)
MOSID1151GPIO23
MISOD1250GPIO19
SCKD1352GPIO18
CSD4 (seçilebilir)D4 (seçilebilir)GPIO5 (seçilebilir)
VCC5V5VModüle göre 5V ya da 3,3V
GNDGNDGNDGND

Arduino Uno'da CS olarak D4 kullansanız bile D10 pini SPI'nin doğru çalışması için çıkış olarak kalmalıdır; D10'u giriş yapan başka bir kod parçası eklemeyin. Aynı SPI hattında başka cihaz varsa her biri kendi CS pinini kullanır, MOSI, MISO ve SCK ortak kalır.

SD kart nasıl biçimlendirilmeli?

SD kart, Arduino SD kütüphanesiyle kullanılmadan önce FAT32 ya da FAT16 olarak biçimlendirilmelidir. 64 GB ve üzeri SDXC kartlar fabrikadan exFAT gelir ve SD kütüphanesi exFAT okuyamaz.

Kart sınıfıKapasiteFabrika dosya sistemiArduino SD kütüphanesi
SD (SDSC)2 GB'a kadarFAT16Doğrudan çalışır
SDHC4-32 GBFAT32Doğrudan çalışır
SDXC64 GB ve üzeriexFATFAT32'ye biçimlendirmek ya da SdFat kütüphanesi gerekir

Veri kaydı için büyük kapasiteye nadiren ihtiyaç duyulur; birkaç baytlık satırlar yıllarca birikse bile birkaç GB'ı doldurmaz. Bu yüzden 32 GB ve altı bir SDHC kart en sorunsuz seçimdir. SD kütüphanesi dosya adlarında 8.3 biçimini kullanır: adın en fazla 8, uzantının 3 karakter olması gerekir (SICAKLIK.CSV gibi).

CSV dosyasına sıcaklık nasıl kaydedilir?

CSV dosyasına sıcaklık kaydetmek için dosya her ölçümde ekleme kipinde açılır, değerler ayırıcıyla tek satır olarak yazılır ve dosya hemen kapatılır. Aşağıdaki adımlar DS18B20 sensörüyle on saniyede bir kayıt alan bir veri kaydedici kurar.

  1. Kartı bilgisayarda FAT32 olarak biçimlendirip modüle takın.
  2. SD kart modülünü yukarıdaki tabloya göre bağlayın: MOSI D11, MISO D12, SCK D13, CS D4, VCC 5V, GND GND.
  3. DS18B20 sensörünün DATA hattını D2'ye bağlayın ve DATA ile 5V arasına 4,7 kΩ direnç ekleyin.
  4. Kütüphane yöneticisinden OneWire ve DallasTemperature kütüphanelerini kurun; SD ve SPI kütüphaneleri Arduino IDE ile birlikte gelir.
  5. Kodu yükleyin, Seri Monitör'de "SD kart bulunamadi" yazısı çıkmadığını kontrol edin.
  6. Bir süre kayıt aldıktan sonra Arduino'nun enerjisini kesin, kartı çıkarıp bilgisayarda SICAKLIK.CSV dosyasını açın.
Micro SD kart modülü Arduino Uno bağlantı şeması: MOSI D11, MISO D12, SCK D13, CS D4, VCC 5V, GND GND; DS18B20 sıcaklık sensörü DATA D2 pinine, DATA ile 5V arasında 4,7 kΩ direnç; ölçümler SICAKLIK.CSV dosyasına yazılır
SD kart modülü SPI pinlerine, DS18B20 ise D2'ye bağlanır. Her on saniyede bir ölçüm SICAKLIK.CSV dosyasına yeni satır olarak eklenir.
#include <SPI.h>
#include <SD.h>
#include <OneWire.h>
#include <DallasTemperature.h>

const int SD_CS = 4;
OneWire hat(2);
DallasTemperature sensor(&hat);
unsigned long sonKayit = 0;

void setup() {
  Serial.begin(9600);
  sensor.begin();
  if (!SD.begin(SD_CS)) {
    Serial.println("SD kart bulunamadi");
    while (true) {}
  }
  if (!SD.exists("SICAKLIK.CSV")) {
    File f = SD.open("SICAKLIK.CSV", FILE_WRITE);
    if (f) { f.println("sure_s;sicaklik_C"); f.close(); }
  }
}

void loop() {
  if (millis() - sonKayit >= 10000) {
    sonKayit = millis();
    sensor.requestTemperatures();
    float c = sensor.getTempCByIndex(0);
    File f = SD.open("SICAKLIK.CSV", FILE_WRITE);
    if (f) {
      f.print(millis() / 1000);
      f.print(';');
      f.println(c, 2);
      f.close();
      Serial.println(c);
    } else {
      Serial.println("Dosya acilamadi");
    }
  }
}

FILE_WRITE dosyanın sonuna ekler; eski kayıtlar silinmez. Sensör bağlantısının ayrıntıları için DS18B20 sıcaklık sensörü yazımıza bakın. Ölçüm için DS18B20 dijital sıcaklık sensörü ya da sıvı içinde ölçüm için DS18B20 su geçirmez sıcaklık sensörü kullanılabilir.

Kayıtlara gerçek saat nasıl eklenir?

Kayıtlara gerçek tarih ve saat eklemek için bir RTC (gerçek zaman saati) modülü kullanılır ve her satırın başına RTC'den okunan zaman yazılır. Yukarıdaki kod yalnızca açılıştan bu yana geçen saniyeyi yazar; enerji gidip gelince sayaç sıfırlanır.

DS3231 modülü I2C ile bağlanır ve SPI hattıyla çakışmaz; kurulumu DS3231 RTC modülü yazımızda anlatılıyor. Kablo kalabalığı istemeyenler için Arduino Data Logger Shield (RTC + SD kart) RTC'yi ve SD kart yuvasını Uno'nun üzerine takılan tek bir kartta birleştirir. Diğer modülleri Arduino sensör ve modüller kategorisinde bulabilirsiniz.

Sık sorulan sorular

"SD kart bulunamadı" hatası neden çıkar?

Bu hata çoğunlukla yanlış CS pini, gevşek SPI kablosu, exFAT biçimli kart ya da yetersiz besleme yüzünden çıkar. Önce koddaki CS numarasının kabloyla aynı olduğunu kontrol edin. Ardından kartı FAT32 olarak yeniden biçimlendirin ve kartın yuvaya tam oturduğundan emin olun. Uzun jumper kablolar SPI sinyalini bozabilir; kabloları kısa tutun.

CSV dosyası Excel'de neden tek sütunda açılıyor?

CSV dosyası tek sütunda açılıyorsa Excel ayırıcıyı tanımamıştır. Türkçe Excel'de liste ayırıcı noktalı virgül olduğu için örnek kodda ; kullanıldı. Ondalık sayılar ise Arduino'dan nokta ile gelir; Excel bunları tarih ya da metin sanabilir. Veri sekmesinden metin içe aktarma ile açıp ondalık ayırıcıyı nokta seçmek bu sorunu çözer.

Enerji kesilince SD karttaki veri bozulur mu?

Dosya yazma sırasında enerji kesilirse son satır ya da dosya sistemi zarar görebilir; dosya kapatıldıktan sonra kesilirse veri korunur. Bu yüzden örnek kod her kayıttan sonra dosyayı kapatır. Dosyayı sürekli açık tutmak istiyorsanız her kayıttan sonra flush() çağırın. Kartı çıkarmadan önce Arduino'nun enerjisini kesin.

SD kart modülü ESP32 ile kullanılabilir mi?

Evet, SD kart modülü ESP32'nin VSPI pinlerine (MOSI GPIO23, MISO GPIO19, SCK GPIO18, CS GPIO5) bağlanarak kullanılabilir. ESP32'nin SD kütüphanesi Arduino'dakine benzer komutlarla çalışır. Modülün besleme girişini kontrol edin: regülatörlü modüller 5V, regülatörsüz modüller 3,3V ister. ESP32 kurulumu için ESP32 başlangıç rehberimize bakabilirsiniz.

SD karta ne sıklıkla yazmak gerekir?

Yazma sıklığı ölçtüğünüz büyüklüğün ne kadar hızlı değiştiğine göre seçilir; oda ya da sera sıcaklığı için 10 saniye ile birkaç dakika arası çoğu zaman yeterlidir. Çok sık yazmak dosyayı gereksiz büyütür ve kartı daha fazla yorar. Hızlı değişen sinyallerde ölçümleri bellekte biriktirip toplu yazmak daha verimlidir.

Özet

  • Micro SD kart modülü SPI ile bağlanır: Uno'da MOSI D11, MISO D12, SCK D13, CS D4, VCC 5V, GND GND.
  • Kart FAT32 ya da FAT16 olmalıdır; 64 GB ve üzeri exFAT kartlar SD kütüphanesiyle doğrudan çalışmaz.
  • Dosya adları 8.3 biçiminde olmalıdır; FILE_WRITE dosyanın sonuna ekler.
  • Her kayıttan sonra dosyayı kapatmak, enerji kesintisinde veri kaybını en aza indirir.
  • Gerçek tarih ve saat için DS3231 gibi bir RTC modülü ya da RTC'li veri kaydedici shield kullanılır.

Bu yazıdaki ürünler

Diğer yazılar