Skip to main content

SD Karta Veri Kaydı Yapmak - Arduino

Arkadaşlar Merhaba,

Bu çalışmamızda çeşitli sensörlerden veyahut işlem sonucu elde ettiğimiz verileri SD karta nasıl kayıt yapacağımızı inceleyeceğiz.


Bu işlemi yapabilmek için gerekli olan malzemeler bir adet sd kart modülü, bir adet sd kart ve biraz da bağlantı kablosundan ibaret. Çeşitli firmaların ürettiği sd kart okuyucular ve bu aygıtlara ait pin bağlantı durumlarını ayarlamamız veri kaydını gerçekleştirmemiz için yeterli olacaktır.

Elimde bulunan kart okuyucunun verilerine göre hareket edecek olursam, toplamda 6 adet bağlantı yapmamız gerekiyor. SPI haberleşme sistemi üzerinden haberleşerek verileri sd karta yazmamızı sağlayacak arkadaşa ait bağlantı pinleri şekildeki gibi olacaktır:

Arduino Mega için:


  • MISO      50
  • SCK        52
  • MOSI      51
  • CS           53
  • GND       GND
  • 5V           5V


  • Arduino Uno için:


  • MISO      12
  • SCK        13
  • MOSI      11
  • CS          10
  • GND       GND
  • 5V           5V


  • Tabi kayıt yapmak için donanım yanında yazılıma da ihtiyacımız var, kaynak koduna için Arduino ide  örnekler bölümünden ulaşabilirsiniz.

    Buraya ben yine de ekleyeyim:
    
    
    
    #include <SD.h>
     
    // set up variables using the SD utility library functions:
    Sd2Card card;
    SdVolume volume;
    SdFile root;
    
    const int chipSelect = 53;  
    File myFile;
    
    void setup()
    {
      Serial.begin(57600);
      Serial.print("\nInitializing SD card...");
    
      pinMode(53, OUTPUT);     
     
      if (!card.init(SPI_QUARTER_SPEED, chipSelect)) {
        Serial.println("initialization failed. Things to check:");
        Serial.println("* is a card is inserted?");
        Serial.println("* Is your wiring correct?");
        Serial.println("* did you change the chipSelect pin to match your shield or module?");
        return;
      } else {
       Serial.println("Wiring is correct and a card is present.");
      }
     
      // print the type of card
      Serial.print("\nCard type: ");
      switch(card.type()) {
        case SD_CARD_TYPE_SD1:
          Serial.println("SD1");
          break;
        case SD_CARD_TYPE_SD2:
          Serial.println("SD2");
          break;
        case SD_CARD_TYPE_SDHC:
          Serial.println("SDHC");
          break;
        default:
          Serial.println("Unknown");
      }
     
      // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
      if (!volume.init(card)) {
        Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
        return;
      }
     
      // print the type and size of the first FAT-type volume
      long volumesize;
      Serial.print("\nVolume type is FAT");
      Serial.println(volume.fatType(), DEC);
      Serial.println();
     
      volumesize = volume.blocksPerCluster();    // clusters are collections of blocks
      volumesize *= volume.clusterCount();       // we'll have a lot of clusters
      volumesize *= 512;                            // SD card blocks are always 512 bytes
      Serial.print("Volume size (bytes): ");
      Serial.println(volumesize);
      Serial.print("Volume size (Kbytes): ");
      volumesize /= 1024;
      Serial.println(volumesize);
      Serial.print("Volume size (Mbytes): ");
      volumesize /= 1024;
      Serial.println(volumesize);
     
      Serial.println("\nFiles found on the card (name, date and size in bytes): ");
      root.openRoot(volume);
     
      // list all files in the card with date and size
      root.ls(LS_R | LS_DATE | LS_SIZE);
     
    
       if (!SD.begin(chipSelect)) {
        Serial.println("initialization failed!");
        return;
      } else {
        Serial.println("SD card initialized");
        myFile = SD.open("GPS.txt", FILE_WRITE);    // open file for writing
        if (myFile) {  // if file can be opened, write to it
          Serial.print("GPS.txt file opened for writing");
          myFile.close();
        } else {  // if not, show an error
          Serial.println("ERROR: not able to open GPS.txt");
        }
      }
    }
    void loop() {
    
                      myFile = SD.open("GPS.txt", FILE_WRITE);            
                      myFile.println("Yazdırılacak Veri");
                      myFile.close();
                      Serial.println("Yazdırılacak Veri"); //Yazılanları ekstra ekranda görmek için..
                   
    }
    
    

    Kodumuz Arduino Mega için çalışmaktadır, Arduino Uno'da çalıştırmak için chipSelect kısmında ve pinMode kısmında yazan 53 sayısını 10 yapmanız yeterli, Tabi baudrate'i ihtiyacınıza göre yine değiştirebilirsiniz.

    İyi çalışmalar.

    Comments

    1. This comment has been removed by the author.

      ReplyDelete
      Replies
      1. Kütüphanesine bir bakmak gerek, farklı bir formata ihtiyacım olmadığı için denemedim. Bir bilgim yok .

        Delete
    2. Datalogger projesi yapıyorum. Zamanla birlikte sıcaklık ve nem verilerini sd karta kaydedip istediğim zaman çıkarıp pc den okuma yapmak istiyorum.Ancak sd kartı çıkarıp taktığım zaman yazmaya devam etmiyor.Beslemesini çıkarıp takınca bu sorun ortadan kalkıyor ancak bu kez de zaman verisi ilk başta girdiğim bilgiyi referans alarak geriden geliyor. Bu sorunu nasıl çözebilirim?

      ReplyDelete

    Post a Comment

    Popular posts from this blog

    Artificial Horizon and Compass Using Arduino-Processing-MPU6050

    Hi everyone, Today we will realize our artificial horizon using Arduino, Processing and MPU 6050 IMU. In this application I use Arduino Uno, If you should use different card, you should examine i2c communication for your card. For Arduino Uno connections will be like that: MPU6050 Pins       Arduino Uno Pins Vcc                        3.3V Gnd                       Gnd SCL                       A5 SDA                      A4 INT                       2 (Digital Pin) This my MPU6050, if you want more information about it: http://www.invensense.com/mems/gyro/documents/PS-MPU-6000A-00v3.4.pdf After it we connecting the MPU6050 to Arduino. If our Arduino-MPU6050 sy...

    Onuncu Yıl Marşı - Arduino

    Bir önceki çalışmamızda sizlere Arduino'nun hazır melodilerinden dinletiler sunmuştuk. Bu gün ise sınırları biraz daha zorlayıp Nokia 3310 Besteleyici deneyimime güvendiğim için kodları kurcalayarak bestelediğim Onuncu Yıl Marşı'nı bayrak sallayarak dinletmek istiyorum. Eğer gerçekten Onuncu Yıl Marşı olarak dinlerseniz öyle oluyor, lütfen biraz ön yargı :) (3310'nun besteleyisinden kat be kat zor bir iş olduğunu itiraf etmeliyim) Servo ucuna bağladığım bayrağı sürekli olarak bir sağa bir sola sallama isteğim, Tone.h kütüphanesinin Servo.h kütüphanesini yanında barındırmak istememesi üzerine sekteye uğradı. Timer hatası sebebiyle bunu yapamadım, fakat yılmadım servo'yu direkt melodi sinyalinin geldiği bacağa bağladım. Bu ise her ne kadar dolu dolu bir bayrak sallayış olmasa da gönlümüzü etmeye yetiyor :) Gerekli malzemeler: Servo Hoparlör Bağlantı Kabloları Olmazsa olmazımız bayrağımız. Bağlantının nasıl yapılacağına gelecek olursak Hoparlörün si...

    Görüntü işleme için Uçuş Denemesi

    Merhabalar, Bu çalışmamızda havandan görüntü almak isteyen veyahut bu görüntüleri işlemek isteyen arkadaşlara referans olsun diye iki adet video paylaşacağım. Videoları kişisel bilgisayarınıza indirip görüntü işleme açısından çalışmalar yapabilirsiniz. Diğer taraftan yerde belirlediğimiz bir nesnenin boyutunun irtifa değerlerine göre ekranda kapladığı piksel değişimini inceleyebilirsiniz. Ya da en azından belirli irtifa değerlerinden nesneler ve insanların nasıl göründüğü hakkında genel kültür olur :) İlk videoda 70cm x 70cm beyaz bir levha kullanıldı, diğer taraftan oturan, ayakta ve yürüyen insan figürleri de videoda mevcut. Bunların çeşitli irtifa değerlerine göre dikey şekilde konumlandırılmış, yere doğru bakan kameradan nasıl göründüğü konusunda fikir sahibi olmanıza sebep olacağını düşünmekteyim. İkinci videoda 30-100 metre arasında dolaşan (genelinde 45 metre civarında) bir insansız hava aracından alınan görüntüler mevcut. Aşağı konumlandırılmış hedefler 70 cm x ...