Arduino ile Micro SD Kart Modülü
- 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:
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.
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.
Yukarıda belirtilenden farklı bir Arduino kartı kullanıyorsanız, devam etmeden önce Arduino resmi belgelerini kontrol etmeniz önerilir .
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.
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!
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:
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:
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,
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 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.
Bir kod yüklenir, her şey yolunda giderse, seri monitörde aşağıdakiler görünecektir.
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.
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 .
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 .
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.
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.
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 .
Ş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.
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.
Dikkat edilmesi gereken bazı şeyler
- Dizeler, değişkenler vb. Yazmak için
print()
veprintln()
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 zamanSD.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ğinseek(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()
.
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.