Robotik Kodlama

Robotik Kodlama
Ana Sayfa

İLGİNİZİ ÇEKEBİLECEK LİNKLER :

kart okuyucu etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
kart okuyucu etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

3 Mayıs 2021 Pazartesi

Arduino ile Micro SD Kart Modülü

 

Arduino ile Micro SD Kart Modülü


Arduino projeniz için büyük miktarda günlük verisi ve diğer bilgileri depolamanın bir yolunu bulmanız gereken bir fikirle karşılaşırsınız, örneğin bir GPS kaydedici.


Çözüm, her dijital kamera ve mp3 oynatıcıda bulunanları kullanmaktır: Flash Kartlar ! genellikle SD veya mikro SD kartlar olarak adlandırılır. GigaByte'lık verileri bir madeni paradan daha küçük bir alana sığdırma yetenekleri, onları hayatımızın vazgeçilmez bir parçası haline getirdi.









Donanıma Genel Bakış

Mikro SD kart modülü, bir sonraki Arduino projenize veri kaydı eklemeyi şüphesiz kolaylaştıran iki ana bileşen içerir:
Micro SD TF Kart Modülü modülü, seviye değiştirici ve regülatör içerir
  • Herhangi bir standart mikro SD Kartın çalışma voltajı 3,3 V'tur. Bu nedenle, 5V mantık kullanan devrelere doğrudan bağlayamayız. Aslında, 3,6V'u aşan voltajlar mikro SD karta kalıcı olarak zarar verecektir. Bu yüzden; modül, voltajları 3,3V - 6V'den ~ 3,3V'a çeviren yerleşik bir ultra düşük bırakma regülatörüne sahiptir.
  • Modülde ayrıca arabirim mantığını 3.3V- 5V'den 3.3V'ye dönüştüren bir 74LVC125A yongası vardır Buna mantık seviyesi kaydırma denir. Bu, bu kartı Arduino gibi hem 3.3V hem de 5V mikrodenetleyicilerle etkileşim kurmak için kullanabileceğiniz anlamına gelir.

Aslında mikro SD kartlarla arayüz oluşturmanın iki yolu vardır - SPI modu ve SDIO modu. SDIO modu çok daha hızlıdır ve cep telefonlarında, dijital kameralarda vb. Kullanılır. Ancak daha karmaşıktır ve ifşa edilmeyen belgelerin imzalanmasını gerektirir. Bu nedenle, bizim gibi hobiler büyük olasılıkla SDIO modu arayüz koduyla asla karşılaşmayacaklar. Bunun yerine, her SD kart modülü, herhangi bir mikro denetleyicinin kullanması kolay olan 'düşük hız ve daha az ek yük' SPI moduna dayanmaktadır.

Mikro SD Kart Modülü Pin Çıkışı

Mikro SD kart modülünün bağlanması oldukça basittir. Altı pimi vardır:

Micro SD TF Kart Modülü Pinout SPI

VCC pin modül için güç sağlar ve Arduino'daki 5V pinine bağlanmalıdır.

GND Arduino'nun zeminine bağlanmalıdır.

MISO (Köle Çıkışında Master) Micro SD Kart Modülünden SPI çıkışıdır.

MOSI (Ana Çıkış Köle Girişi) Micro SD Kart Modülüne SPI girişidir.

SCK (Seri Saat) pin, Arduino tarafından üretilen veri iletimini senkronize eden saat darbelerini kabul eder.

SS (Bağımlı Seçimi) pin, Arduino (Master) tarafından SPI veriyolundaki belirli cihazları etkinleştirmek ve devre dışı bırakmak için kullanılır.

Mikro SD kartın hazırlanması

Mikro SD kartı modüle takmadan ve Arduino'ya bağlamadan önce kartı uygun şekilde formatlamalısınız. Arduino kitaplığı için tartışacağız ve neredeyse diğer tüm SD kitaplıkları, kart FAT16 veya FAT32 olarak biçimlendirilmelidir.

Yeni bir SD kartınız varsa, muhtemelen bir FAT dosya sistemi ile önceden biçimlendirilmiştir. Bununla birlikte, fabrikanın kartı nasıl biçimlendirdiği veya eski bir kartsa yeniden biçimlendirilmesi gerektiği konusunda sorun yaşayabilirsiniz. Her iki durumda da, yeni olsa bile kullanmadan önce kartı biçimlendirmek her zaman iyi bir fikirdir!

Resmi SD kart formatlayıcı yardımcı programını kullanmanızı şiddetle tavsiye ederiz SD derneği tarafından yazılan bu program , kötü biçimlendirmeyle gelen birçok sorunu çözer! Biçimlendiriciyi indirin ve bilgisayarınızda çalıştırın, sadece doğru sürücüyü seçin ve BİÇİMLENDİR'e tıklayın.

SD Formatter Ekran Görüntüsü

Kablolama - Micro SD Kart Modülünü Arduino ya Bağlama

Artık kartınız kullanıma hazır olduğuna göre, mikro SD ara kartını bağlayabiliriz!

Başlamak için mikro SD kart modülünü devre tahtasına yerleştirin. Modül üzerindeki VCC pinini Arduino'daki 5V'a ve GND pinini toprağa bağlayın. Artık SPI iletişimi için kullanılan pinlerde kaldık.

Mikro SD kartlar çok fazla veri aktarımı gerektirdiğinden, bir mikro denetleyicideki donanım SPI pinlerine bağlandığında en iyi performansı vereceklerdir. Donanım SPI pinleri, başka bir pin seti kullanarak arayüz kodunu 'bit-vurmaktan' çok daha hızlıdır.

Her Arduino Board'un uygun şekilde bağlanması gereken farklı SPI pinlerine sahip olduğunu unutmayın. UNO / Nano gibi Arduino kartları için bu pinler dijital 13 (SCK), 12 (MISO) ve 11 (MOSI) 'dir. Ayrıca 'çip / bağımlı seçim' (SS) hattı için dördüncü bir pime ihtiyacınız olacak. Genellikle bu pin 10'dur, ancak aslında istediğiniz herhangi bir pimi kullanabilirsiniz.

Bir Mega'nız varsa, iğneler farklıdır! Dijital 50 (MISO), 51 (MOSI), 52 (SCK) ve 53 (SS) kullanmak isteyeceksiniz. Hızlı anlamak için aşağıdaki tabloya bakın.

MOSIMİSOSCKCS
Arduino Uno11121310
Arduino Nano11121310
Arduino Mega51505253

Yukarıda belirtilenden farklı bir Arduino kartı kullanıyorsanız, devam etmeden önce Arduino resmi belgelerini kontrol etmeniz önerilir .

Micro SD TF Kart Modülü ile Arduino Kablolama Fritzing Bağlantıları
Micro SD Kart Modülünü Arduino UNO'ya Kablolama

Arduino Kodu - CardInfo ile SD kart modülünü test etme

Bir SD kart ile iletişim kurmak bir sürü iştir, ancak neyse ki bizim için Arduino IDE , SD kartlardan okumayı ve SD kartlara yazmayı kolaylaştıran SD adlı çok güzel bir kitaplık içeriyor Örnekler alt menüsünde görebilirsiniz.

Ardından, CardInfo örnek taslağını seçin.

Arduino IDE'de SD Kütüphane CardInfo Sketch

Bu taslak karta herhangi bir veri yazmayacaktır. Sadece size kartı tanıyıp tanımadığını söyler ve kartla ilgili bazı bilgiler görüntüler. Bu, bir SD kartın desteklenip desteklenmediğini anlamaya çalışırken çok yararlı olabilir. Herhangi bir yeni kartı denemeden önce, bu çizimi bir kez çalıştırmanızı tavsiye ederiz!

Taslağın başına gidin ve chipSelect çizgisinin doğru şekilde başlatıldığından emin olun, bizim durumumuzda dijital pin # 10 kullanıyoruz, bu yüzden onu 10 olarak değiştirin!

Arduino IDE'de ChipSelect CardInfo Sketch'in başlatılması

Tamam, şimdi SD kartı modüle takın ve çizimi yükleyin.

Seri Monitörü açar açmaz, muhtemelen aşağıdaki gibi bir şey alacaksınız:

Arduino IDE'de CardInfo Sketch Çıkışı - Çalışıyor

Anlamsız gelebilir, ancak kart türünün SDHC (SD Yüksek Kapasite), Hacim türü FAT32 ve kartın boyutunun yaklaşık 4 GB vb. Olduğunu görmek yararlıdır.

Bozuk bir kartınız varsa, bu daha çok klon sürümlerinde ortaya çıkıyorsa, şunu görebilirsiniz:

Arduino IDE'de CardInfo Sketch Çıkışı - Bozuk Bozuk Kart

Kart çoğunlukla yanıt verdi, ancak veriler tamamen kötü. Üretici Kimliği / OEM Kimliği olmadığını ve Ürün Kimliğinin 'Yok' olduğunu görün. Bu, kartın bazı SD hataları döndürdüğünü gösterir. Temelde kötü bir sahne. Böyle bir şey alırsanız, onu yeniden biçimlendirmeyi deneyebilirsiniz ya da hala dağıldıysa, kartı fırlatmalısınız.

Son olarak, SD kartı çıkarmayı ve çizimi tekrar çalıştırmayı deneyin, aşağıdakileri alacaksınız,

Arduino IDE'de CardInfo Sketch Çıkışı - Başlatma Başarısız

Gördün mü, SD kartı bile başlatamadı. Bu, bir kablolama hatası varsa veya kart kalıcı olarak hasar görmüşse de olabilir.

Kablolama doğruysa ancak SD kart uygun şekilde biçimlendirilmemişse, şuna benzer bir şey elde edersiniz:

Arduino IDE'de CardInfo Sketch Çıkışı - Uygun Format Yok

Arduino Kodu - Veri Okuma ve Yazma

SD kartı başarıyla başlattığınızı düşünürsek, bir sonraki deneyimize geçeceğiz. Aşağıdaki taslak, bir dosyadan veri yazma ve okumanın temel bir gösterimini yapacaktır. Ayrıntılı incelemeye başlamadan önce taslağı deneyin.

#include <SPI.h>
#include <SD.h>

File myFile;

// change this to match your SD shield or module;
const int chipSelect = 10;

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  Serial.print("Initializing SD card...");

  if (!SD.begin()) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  myFile = SD.open("test.txt", FILE_WRITE);

  // if the file opened okay, write to it:
  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("testing 1, 2, 3.");
    // close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }

  // re-open the file for reading:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");

    // read from the file until there's nothing else in it:
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
}

void loop()
{
  // nothing happens after setup
}

Bir kod yüklenir, her şey yolunda giderse, seri monitörde aşağıdakiler görünecektir.

Seri Monitörde Mikro SD Kart SD kitaplık Çıkışı

Arduino'nuzu sıfırlarsanız ve eskizin tekrar çalışmasına izin verirseniz; yazılan yeni veriler, önceki verilerin üzerine yazılmadan dosyaya eklenir.

Mikro SD Kart SD kitaplığı Seri Monitörde İkinci Çıkış
Kod Açıklaması:

Taslak, yerleşik SD kitaplığını ve SPI arabirimi üzerinden SD kart ile kolayca iletişim kurmamızı sağlayan SPI kitaplığını dahil ederek başlar .

#include <SPI.h>
#include <SD.h>

Kitaplıklar dahil edildikten sonra, yapacağımız bir sonraki şey chipSelect (CS), SD kart modülünün pininin bağlı olduğu Arduino pinini ilan etmektir CS pini, Arduino dijital pini gibi gerçekten sabit olmayan tek pimdir. Donanım SPI arayüzünü kullandığımız ve bu pinler zaten SPI kütüphanesinde bildirildiği için diğer SPI pinlerini bildirmemize gerek yok. Pimi tanımladıktan sonra, daha sonra SD kartta veri depolamak için kullanılacak bir myFile nesnesi oluşturuyoruz .

const int chipSelect = 10;
File myFile;

Ardından, setup()bölümde: Sonuçları seri monitörde göstermek için seri iletişimi başlatıyoruz. Şimdi, SD.begin()işlevi kullanarak SD kartı başlatacağız ve başlatma başarılı olursa " if " ifadesi gerçek olur ve String " başlatma yapılır. "" Seri monitörde yazdırılır, aksi takdirde " başlatma başarısız oldu! ”Yazdırılır ve program sona erer.

Serial.begin(9600);
  Serial.print("Initializing SD card...");
  if (!SD.begin()) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

Ardından, SD.open()işlev " test.txt " adlı dosyayı açacaktır Bizim durumumuzda böyle bir dosya olmadığı için oluşturulacaktır. Diğer parametre FILE_WRITE , dosyayı okuma-yazma modunda açar.

myFile = SD.open("test.txt", FILE_WRITE);

Dosya açıldığında, seri monitörde " Test.txt'ye yazılıyor ... " mesajını yazdıracağız ve ardından myFile.println()işlevi kullanarak "test 1, 2, 3" metnini yazacağız. dosyaya. Bundan sonra close(), dosyaya yazılan verilerin kaydedilmesini sağlamak için fonksiyonu kullanmamız gerekir .

  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("testing 1, 2, 3.");
    myFile.close();
    Serial.println("done.");
  } else {
    Serial.println("error opening test.txt");
  }

Şimdi yazma işleminin başarılı olup olmadığını kontrol etmek için aynı dosyayı okuyalım.Bunu yapmak için aynı işlevi kullanacağız SD.open(), ancak bu sefer " test.txt " dosyası zaten oluşturulmuş olduğundan, işlev sadece dosyayı açacaktır. . Ardından myFile.read()işlevi kullanarak dosyadan okuyacağız ve seri monitörde yazdıracağız. read()Fonksiyon aslında bu nedenle biz “ise” döngü ve işlevi kullanmak gerekir, bir seferde sadece bir karakter okur myFile.available()dosyada tüm karakterleri okumak için. Sonunda dosyayı kapatmamız gerekiyor.

myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");
    while (myFile.available()) {
      Serial.write(myFile.read());
    }
    myFile.close();
  } else {
    Serial.println("error opening test.txt");
  }

Bu sadece dosyaların nasıl okunacağını ve yazılacağını gösteren bir demo taslağı olduğundan, kodu birden çok kez çalıştırmanın bir anlamı yoktur, bu nedenle kodun tamamı, üzerinde çalışan setup()bir loop()işleve koymak yerine yalnızca bir kez çalışan işleve yerleştirilir. ve tekrar.

void loop() 
{
}

Dikkat edilmesi gereken bazı şeyler

  • Dizeler, değişkenler vb. Yazmak için print() ve println() tıpkı Seri nesneler gibi işlevler kullanabilirsiniz.
  • Read()bir seferde yalnızca bir karakter döndürür. Tam bir satır veya bir sayı okumuyor!
  • Sen gerekir close() bu veriler kalıcı yazılır emin tüm yapmak için dosya (lar) bitince! Bu, kullanılan RAM miktarını azaltır.
  • Dosyaları bir dizinde açabilirsiniz. Örneğin, dizindeki bir dosyayı açmak istiyorsanız arayabilirsiniz SD.open("/myfiles/example.txt")Dosya yolunun göreceli olduğuna dikkat edin.
  • SD kart kitaplığı 'uzun dosya adlarını' desteklemiyor. Bunun yerine, dosya adları için 3 formatını kullanır , bu nedenle dosya adlarını kısa tutun! Örneğin, datalog.txt iyidir, ancak “Algılayıcım günlük dosyası.text” iyi değildir!
  • Ayrıca, dosya adlarının 'büyük / küçük harf' duyarlılığına sahip olmadığını unutmayın, bu nedenle datalog.txt, DataLog ile aynı dosyadır.Txt, DATALOG.TXT ile aynı dosyadır.

SD Kitaplığındaki diğer kullanışlı işlevler

SD nesnesiyle kullanılan işlevler

SD nesnesiyle kullanabileceğiniz birkaç yararlı işlev vardır Bunlardan birkaçı aşağıda listelenmiştir:

  • Sadece bir dosyanın var olup olmadığını kontrol etmek istiyorsanız, exists("filename.txt") true veya false döndürecek olanı kullanın .
  • remove("unwanted.txt") Dikkatli olun diyerek bir dosyayı silebilirsiniz Bu onu gerçekten silecek ve onu çıkaracak bir 'Geri Dönüşüm Kutusu' yok.
  • mkdir("/mynewdir") Dosyaları bir konumda doldurmak istediğinizde kullanışlı arayarak bir alt dizin oluşturabilirsiniz Zaten varsa hiçbir şey olmaz, ancak her zaman SD.exists() önce yukarıyı arayabilirsiniz .

File nesnesiyle kullanılan işlevler

Ayrıca, Dosya nesneleriyle kullanabileceğiniz birkaç işlev vardır :

  • seek()Bir dosya üzerinde yapabilirsiniz Bu, okuma / yazma imlecini yeni bir konuma hareket ettirecektir. Örneğin seek(0) , sizi dosyanın başlangıcına götürecek, bu çok kullanışlı olabilir!
  • Aynı şekilde position(), dosyanın neresinde olduğunuzu söyleyecek olanı arayabilirsiniz .
  • Bir dosyanın boyutunu öğrenmek istiyorsanız size() , dosyadaki bayt sayısını öğrenmek için arayın .
  • Dizinler / klasörler özel dosyalardır, bir dosyanın dizin olup olmadığını arayarak belirleyebilirsiniz. isDirectory()
  • Bir dizine sahip olduğunuzda, dizindeki tüm dosyaları arayarak başlayabilirsiniz. openNextFile()
  • openNextFile()Bir dizini aradıysanız, bir dosyanın adını bilmeniz gerekebilir Bu durumda, name()isterseniz doğrudan yapabileceğiniz 8.3-formatlı karakter dizisine bir işaretçi döndürecek çağrı Serial.print() .

ANA SAYFAYA DÖN

Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook    robotic.code
instagram    @roboticcode


Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.