Arduino,sdcard kullanımı, sd card ses dosyası kullanımı. Arduino otopark kapı projesi.

Bu konumuzu SD CARD lara ayırdım. Facebook gruplarında zaman zaman sorulan sorulara cevap verebilmek için deneme yapmam gerekiyordu. Bu deneme için öncelikle sd card çalışmasını görmeliydim. SDcard ların FAT system denilen dosya sistemini kullandığını biliyordum. FAT sistemlerini inceleyip kendim denemek istediğimde, bir çok fonksiyonu kendim yazmam gerekiyordu. Sadece deneme için bu kadar fonksiyonu yazmak yerine, Arduino ile sdcard kütüphanesini kullanmaya karar verdim.

Bu kütüphane zaten Arduino ide üzerinde kendi örnek dosyalarıyla kullanılabiliyordu. Tabii ki bu şekilde görmek beni tatmin etmedi. Başlangıçta okuyup yazabildiğimi gördüm. Fakat içeriğini alıp istediğim gibi şekillendirmek ve gerekli bilgileri alabilmek önemliydi.
Bu konuda çalışmalara devam ettikçe, sdcard içeriğini okuyan ve içerisindeki ses dosyalarını oynatan, kütüphaneler olduğunu gördüm. Zaten bu tip sorularda gruplarda geliyordu.

Sorularda aynı programı kullanmamıza rağmen neden okumadığı konusuna cevap vermek için formatı uyumsuzdur ya da kapasite sorunu vardır diyordum. Aşağıda ise bunların cevaplarını bulacaksınız. 
Ayrıca ARDUINO+SDCARD+WAV SES DOSYASI+iBUTTON+IR sensör+EASYLCD kullanılarak gerçekleştirilen OTOPARK KAPISI projesini göreceksiniz.

Öncelikle sdcard ları tanıyalım. SDCARD, çeşitli fiziksel görünüme, çeşitli kapasiteye, çeşitli hızlara sahip olabilir. Kütüphanemiz ne kadarını destekliyor? Ayrıca hangi dosya sistemlerini destekliyor?

Yukarıda gördüğünüz üzere sd olan 2gb lık bir kartı fat32 yaparsanız görmeyebilir. Ya da görse bile sorun yaşayabilirsiniz. Ben çalışmalarımda 2GB MicroSD kart kullandım.  Kartı SDformatter denilen program ile formatladım. Orjinal halinin FAT16 olduğunu gördüm.  SDFORMATTER programını buradan indirebilirsiniz. 
Yukarıda gördüğünüz gibi FAT yazıyor FAT16 değil.  İkiside aynı formatı işaret ediyor. Bu şekilde formatlarsanız, SD kütüphaneniz sorun yaratmayacaktır. Hem de kapasitesini tam hesaplayacaktır.
Aynı sdcard’ı FAT32 ile formatladım. Sonuçlar aşağıdadır. Arduino ile gerçek sdcard’ın içeriği seri monitörde gösteriliyor.
Burada biraz ikili sistem hakkında bilgi vermem gerektiğine inanıyorum. İkili sistemlerde byte, Kbyte, Mbyte, Gbyte ilişkileri dirençlerde olduğu gibi 1000 kat artmaz. İkilik sistemin gereği 1024Byte=1Kbyte eder, 1024Kbyte=1Mbyte eder. bundan dolayı program içerisinde boyut hesaplamasında 1024 çarpanı kullanılmıştır. 

FAT16 format : CARD TYPE ve VOLUME TYPE kısımlarına dikkat edin.
FAT32 Format : CARD TYPE ve VOLUME TYPE kısımlarına dikkat edin.

FAT32 SDHC card : CARD TYPE ve VOLUME TYPE kısımlarına dikkat edin.

Ayrıca yukarıdaki resimde SDHC yi görmesine rağmen boyutu 8gb görmesi gerekirken 3.4gb gibi hatalı görüyor.
CARD TYPE kısımlarıda kapasiteye göre belirleniyor. Proteus üzerinde gördüğünüz Card type: SD yazısı 64mb olan sdcard lara aittir. 

Bilgisayar üzerinde sdcard görünümü bu şekildedir.

 

 

 

Arduino SD kütüphanesi tümünü görüyor, fakat SDHC kartlarda kapasite yanlış hesaplanıyor. Burada yazma denemesi yapmadım çünkü telefonuma ait bir sdhc kart olduğundan kapasite yanlışlığından, yanlış yere yazma ve formatın bozulmasına sebep olabilirdi. Sadece okuma denemesi yapıldı. 

Denemelerde MicroSD kart kullandım bunu arduinoya bağlarken sıkıntı çekmedim. Çünkü modülüm microsd uyumluydu. Şayet yanlışlıkla SD kart büyüklüğünde bir modül aldıysanız sorun etmeyin, micro SD kart adaptörünü kullanabilirsiniz. 

Bir de adaptör kullanacaksanız adaptörün kenarındaki write protect denilen kilidi, yazılabilir konuma almalısınız. Yoksa formatlayamazsınız veya üzerine bilgi yazamazsınız. sadece okuma yapacaksanız bunu LOCK konumuna getirin. Yanlışlıkla bilgi yazmayı önler.

Micro kartları satın almak istediğinizde, aşağıdaki bilgiler aklınızda bulunsun. Arduino projenizde mümkün olduğu kadar düşük kapasiteli kullanmayı düşünün. SD kütüphanesi sorun çıkarmayacaktır. Ayrıca araştırmalarımda başka bir kütüphane daha olduğu yazıyordu. SDFAT bu kütüphanenin daha yüksek kapasitelilere uyumlu olabileceğini düşünüyorum. Fakat denemedim. İsterseniz buradan indirip deneyebilirsiniz. İnternette bu kütüphane ile de sorunlar yaşandığını da okuyabilirsiniz.

Tabii ki bir de sahte sdcard ların piyasada dolaştığını unutmayın. Bu yazıdaki bilgilere göz atmanızda fayda var.

Buraya kadar sdcard hazırlama kısmını anlatmaya çalıştım. Çünkü burada yapılacak bir hata ileride size çok zaman kaybettirecektir. Formatladığınız kartı önce deneme programlarıyla denemenizi öneririm.

NOT : Dosya ve dizin isimlerini kullanırken bazı kurallara uymanız gerekir.
a-) Dosya isimlerinde 8+3 kuralı vardır. 8 karakter isim 3 karakter uzantıdır. (name1234.ext) gibi.
b-) Dosya isimlerinde ASCII 127 den sonraki karakterler kullanılamaz. Fakat şu karakterlere yer verebilirsiniz. $ % ‘ – _ @ ~ ` ! ( ) { } ^ # &      Yine de sizler çok gerekmedikçe bu tip karakterleri kullanmayın.
c-) İsim karakterleri arasında boşluk kullanılamaz. Bunun yerine ( _ ) alt tire işareti kullanabilirsiniz.
d-) SDCARD içerisinde uzun dosya isimleri olabilir. Bu dosya isimlerini listelediğinizde 8+3 karakter şeklinde göreceksiniz. Mesela denemeler.txt yazdığınızda deneme~1.txt gibi göreceksiniz.
Dosyayı açmak istediğinizde denemeler.txt derseniz açmaz. deneme~1.txt şeklinde belirtmeniz gerekir.

Tüm programlarıma bu linkten ulaşabilirsiniz.

Fakat şunu söylemem gerekir. Programlar aynı olsa bile proteus ile gerçek devre arasında 1 fark vardır. Bu da CS (chip select) dediğimiz ya da SS(slave select) dediğimiz sdcard piminin, arduino üzerinde bağlantılı olduğu pim numarasıdır.
Gerçek devrede bu satır 4 numaralı pim’e bağlanacak. ( const int chipSelect = 4;)
Proteus devrelerinde ise 4 nolu pim doğru çalışmadığından UNO ya da NANO üzerindeki SS işaretli 10 numaralı pim kullanılmaktadır. (const int chipSelect = 10;) Bunun sebebi belki de spi için ayrılmış olan bir pim olmasından kaynaklanıyordur. Gerçek devrede ise bu pimi 4 nolu pim olarak değiştirebiliyoruz. Bundan dolayı aynı programları, hem proteus dizininde hem de normal çalışma dizininde göreceksiniz. Buna dikkat ediniz.

Program listeleri :
Yukarıdaki programların açıklamaları:
Ardu_ses:  SDcard üzerinden wav dosyalarını devamlı okur. Basit yapısı vardır örnek olsun diye konuldu.
Arduino_sdcard_serino: Bu program sdcard içeriğini okur, ayrıca belirteceğiniz isimdeki dosyanın içeriğini okur.
Datalog : Bu program sdcard üzerinde bir dosyaya bilgi yazmanızı sağlar. Şayet dosya ismi yeni ise önce dosyayı oluşturur sonrasında ise bilgileri içine yazar.
Filenames : SDCARD içerisindeki dosya ve dizinleri listeler. Fakat kütüphane tarafından değil sizin tarafınızdan yazdırmanızı sağlar, Diğer program listelerken gelen verileri değişkene aktaramazsınız, bunu kütüphane kendisi yapar. Bundan dolayı dosya ve dizin isimlerini değişkene aktarıp kullanamazdınız. Bu programla dosya ve dizin isimlerini değişkene aktarıp kullanabilirsiniz.
Otopark1 : Arduino+sdcard+wavdosyaları+servo motor+ibutton+IR sensör ile yapılmış örnek projenin dosyasıdır. Servo motor kütüphanesiz kullanılmıştır.
servo motor ayrıntılı bilgi,     İbutton ayrıntılı bilgi 
Proteus : Bu dizinde ise yine aynı programlar proteus üzerinde çalışacak şekilde hazırlanmıştır. Tek fark CS ucunun bağlı olduğu pimdir.

Not: SDCARD içinde dosya açtıysanız mutlaka işi bitince kapatın. yoksa açık olan dosya yüzünden, sdcard bozuk görünebilir, okuma hatası yapabilir, yeniden format atma gereği duyabilirsiniz.

SDCARD Modülü :
Yukarıdaki modül benim kullandığım modüldür. Şayet farklı modül kullanıyorsanız Seviye dönüştürücü kullanmanız gerekir. Çünkü SD card lar 3.3V ile çalışır. Arduino gibi devreler 5V ile çalıştıklarından arada seviye dönüştürücü kullanılmalı.
Peki devrede neden 3.3V seviye dönüştürücü kullanmadım. LVC125A entegresi seviye çevirici entegredir. Şu şekilde çalışmaktadır. Tüm çıkışlar entegrenin Vcc gerilimine göre çıkış verir. Giriş voltajı 5V bile olsa bu entegreyi, 3.3V ile besliyorsak, çıkışlar daima 3.3V olacaktır. Buradaki AMS1117 3.3V entegresi tüm sistem için 3.3V sağlar. Bu konu çok önemlidir. direkt bağladığınızda 5V ile besleyip sdcard’a zarar verirsiniz. 

Öncelikle Arduses programımıza göz atalım. Bu programı aldığım yer bu linktedir. 
SES dosyalarını dönüştürme için bu sayfaya gidip, wav dosyanızı yükleyip, aşağıdaki parametreleri ayarlayıp, start butonuna basmanız yeterli olacaktır.
WAV dosyası, kayıt için programınız yoksa online olarak bu siteden faydalanabilirsiniz.

Yukarıdaki programda SD card erişim için sd.h kütüphanesi kullanılıyor. Ses için ise TMRpcm.h kütüphanesi kullanılıyor. TMRpcm kütüphanesinin Github sitesi buradadır. 
Arduinonun SD kütüphanesi doğru çalışıyor. Fakat sizin kütüphaneniz bir şekilde değişmişse programlar çalışmaz olduysa tüm dosyaların bulunduğu yerde SD kütüphane dosyaları olacak oradan kütüphaneyi kendi bilgisayarınıza indirip deneyin. 
Ayrıca TMRpcm.h kütüphanesi de dosyaların arasında bulunacak. Oradan alıp kendi kütüphanenize ekleyebilirsiniz. 
11. satırda bulunan speaker piminin uno ve megaya göre değiştiğini unutmayın. Bunun yanı sıra ses dosyaları loop kısmında olduğundan devamlı çalıyor gibi görünse de maalesef başka alt programa da koysanız devamlı çalmaya devam edecektir. Bu da kütüphaneden kaynaklı bir durum. loop parametresi devamlı çalmaya ayarlı olduğundan bir kere başladı mı devamlı çalıyor. Bunu durdurmak için ne yapmamız lazım. O da otopark programında olduğu gibi ses dosyasını çalma işlevi bittiğinde durdurmak için disable ve stopplayback komutları kullanılır.

Bunun yanı sıra şu iki satır birlikte çalma işlevini yerine getirir. tmrpcm.play(“den/ses_call.wav”); ve delay süresi. Ses dosyasının ne kadar süre çalacağı delay komutuyla belirtilir. Bu süreyi nereden bulabiliriz derseniz, aşağıdaki gibi dosya özelliklerinden ulaşablirsiniz. Burada yaklaşık 50sn çalması gerektiği ortaya çıkıyor.
Ayrıca dosya isimleri konusunda da bazı sorular geliyordu. Mesela bazı sorularda dosya ismi yerine numara mı koymalıyız. Ya da sadece ana dizindeki dosyalara mı ulaşabiliriz.
Aşağıdaki satırlardaki müzik dosyaları, aynı dosyadır. Birinde 7.wav olarak numaralandırılmış diğerinde ise Hem alt dizin içerisinde hem de numara değil gerçek ismi yazılmış. Her iki dosya da çalışmaktadır. Bu konuda bir kısıtınız yok. Fakat dosya ismi için 8+3 sistemine uymak zorundasınız. Ayrıca bir de DOS sistemine alışık olanlar dizin işaretini ( \ ) bu şekilde yaparlardı. Burada bu alışkanlıkları değişecek. Çünkü artık dizin işareti olarak ( / ) bu işaret kullanılacak. 
__________________________________
tmrpcm.play(“den/ses_call.wav”);
delay(11000); // oynatma süresi.
tmrpcm.play(“7.wav”);
delay(11000);
____________________________________

İbuttonların romkodları farklı olduğundan proteusta, anahtarla ayrıldı. Bu anahtarlar gerçek devrede olmayacak. Devreyi bu şekilde kurduğunuzda tüm sdcard programlarını da kullanabileceksiniz.
Not: Proteus da CS ucunun bağlı olduğu D10 pimidir. Gerçek devrede ise D4 pimine bağlı olacaktır. Programlar proteus ve gerçek devre diye bu yüzden ayrıldı.

 

Yukarıdaki programda alt programları açıklayalım. (LCD için EASYLCD kullanılmıştır.)
void hatakayit() : Burası hatalı bir ibutton okunduğunda bulduğu kodu sdcard üzerindeki hata.log dosyasına yazar. (Tarih ve Zaman Damgasıyla birlikte). Yetkisiz kişilerin ibuttonları kullandığını görüp önlem alınabilir diye.
void degispos() : Bu kısım kütüphanesiz servo motor kullanımı içindir. Kapıyı açar ve kapatır. Burada ne kadar hareket edeceği TEMP1 değişkeni ile belirtilir.
void kapat() : Bu kısım ise kapatma işlemi geldiğinde IR engel sensörünü kontrol eder. Şayet engel sensörünün önünde engel varsa, kapıyı kapatmaz. Ses ile kullanıcıyı uyarır. EASYLCD ile de uyarı mesajı gösterir. Engel kalkınca kapatma işlemine devam eder.
void rombul() : Bu bölüm ise İbuttonları okuma işlemini yapar. okuduğu rom code geçerli ise kapıyı açmaya gider. Hatalı ise kapıyı açmaz ve hatakayıta giderek sdcard üzerine hatalı rom kodu yazar.
Bütün bu işlemler olurken her bölümde bulunan ses değişkenine göre ses devresi çalışır .Uygun yerlerde EASYLCD ile kullanıcı bilgilendirilir.
Burada ayrıca şunu da söylemekte fayda var. Servo motor için Kütüphane kullanılmadı, İbutton için kütüphane kullanılmadı, fakat ibutton haberleşmesi, one wire denilen haberleşme şekli olduğundan, onewire.h kütüphanesi kullanıldı.  

Proteus için SD CARD hazırlanması ve içinin görüntülenmesi. 
Proteus, gerçek sdcard üzerinden bilgi okuyamaz. Proteus için, sdcard image dosyası yaratılması gerekiyor. Bunu hazırlamak winimage programıyla çok kolaydır. Aşağıdaki ekran görüntüsü size tanıdık gelecektir. Bu şekilde dizinleri ve dosyaları burada oluşturursunuz ve xxxxxxxx.ima olarak dosyayı kayıt edip, dosyayı proteus ta kullanabilirsiniz.
Tabii ki bunun boyutu ne olmalı. Proteus 7.10 versiyonu için maksimum 128mb olabilir daha büyüğü olamaz. Tabii ki FAT16 formatında olmalı.
Winimage programının menülerini karıştırdığınızda orada new ile yeni bir image dosyası hazırlayabilirsiniz. Fakat format için bazı bilgiler girmeniz gerekir. Bunun yerine benim verdiğim *.ima dosyalarından birini açıp içini boşaltıp sonra da sürükle bırak ile kendi dosyalarınızı buraya yerleştirmeniz daha kolay olacaktır.
Winimage ve dosyaların içeriğini gösteren WINHEX programları tüm programlarla birlikte erişebileceğiniz yerde bulunacaktır. Aşağıdaki resimde SİZE bölümü 128MB ta kadar ayarlanabilmektedir. Benim İMA dosyalarım 64MB. dır.

WINHEX programı ise dosyalarınızın içeriğini size gösterecektir. Aşağıdaki ekran görüntüsünde HEX olarak içeriğini ve ASCII olarak içeriğini görüyorsunuz.

Bu bir mp3 dosyasının içeriğidir. Bu programla mp3 dosyalarınızı incelerseniz, içerisindeki sanatci ve diğer bilgilerin olduğu yerleri görebilirsiniz. Bunlara ID3 tag denir. (Videoda Bir yerde yanlış bir ifade kullanıldı, ID3 ve ID4 denildi yanlış oldu.) ID3 V1.0 ile başlar.  …  ID3 V2.4.0 e kadar gider. Bunlar hakkında bilgileri internette bulabilirsiniz.
Bazı linkler burada mevcut. Link1, Link2(Türkçe)

Şayet MP3 dosyalarınızdan bu bilgileri alıp LCD ye yazdırmaya karar verirseniz, bunu yapabilirsiniz. Hatta bu konuda Arduino örnekleri ve PC üzerinde yapılan örnekleri bulabilirsiniz. En basit haliyle ID3 tag V1.0 dosyanın sonunda yer alır. Fakat dosyanın sonuna gidip bunu bulmak uzun zaman alacaktır. Bunun yerine dosyanın en başında bulunan ID3 v2.x bilgilerine, ID3 yazan yerden başlayan kısmı okuyarak daha hızlı ulaşabilirsiniz.

Proteus üzerinde Arduino Programlarını denemek : 
Proteus üzerinde arduino programını nasıl çalıştıracağız derseniz, aşağıdaki resimdeki gibi menüden derlenmiş binary çıkar kısmını seçeceksiniz. Bu şekilde 2 dosya İNO dosyasının bulunduğu yere kayıt edilecek. Bu dosyalardan bootloader olmayan dosyayı seçeceksiniz. Proteustaki HEX program kısmına gelecek. Bu şekilde kullanabilirsiniz. UNO modelini ise aşağıdaki siteden bulabilirsiniz.

Proteus için Arduino modeli. 

Proteus üzerinde arduino uno edit properties( ayarları)

Tüm programlarıma bu linkten ulaşabilirsiniz.

OTOPARK projesi gerçek devre video :

Arduino SDcard kullanımı , Gerçek devre üzerinde.

Proteus+Arduino+ SDcard kullanımı ve Proteus için IMAGE dosyası hazırlama. Otopark projesi Proteus versiyon. 

Dikkat : (Videoda Bir yerde yanlış bir ifade kullanıldı, ID3 ve ID4 denildi yanlış oldu.) Doğrusu, MP3 TAG, ID3 V1.0 ile başlar.  …  ID3 V2.4.0 e kadar gider.

Tüm programlarıma bu linkten ulaşabilirsiniz.

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir