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
MISO 12
SCK 13
MOSI 11
CS 10
GND GND
5V 5V
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.
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:
Arduino Uno için:
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:
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.
This comment has been removed by the author.
ReplyDeleteKütüphanesine bir bakmak gerek, farklı bir formata ihtiyacım olmadığı için denemedim. Bir bilgim yok .
DeleteDatalogger 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