Arduino 秋月で買ったSD-dip化キットを使ってみた

・目的

 秋月電子sd-dip化キットを使用してSDカードにテキストファイルを書き込む。

 

・使用したもの

 

    秋月sd-dip化キット

    ユニバーサル基盤

    1.8kΩ×3個

    3.3kΩ×3個

    分割ロングピンソケット(細ピン)

    SDカード8MB

 micro SD 8GB

 

・方法

(1)回路作成

   1.8kと3.3kの抵抗を使い分圧する。回路図を図1に示した。

           抵抗なしで繋いでも絶対に認識されない。またブレッドボードに

   図1の回路を作った。(図2、3)

   またSDソケット側のピンとArduino側のピンの接続を

   以下の表1に示した。

    

f:id:shangtian:20170518072947p:plain

     

図1:秋月SD-dip化キットの回路図

f:id:shangtian:20170518072954j:plain

図2:ユニバーサル基板にはんだ付けその1

 

f:id:shangtian:20170518072957j:plain

図3:ユニバーサル基板にはんだ付けその2

 

表1:SDソケット側のピントArduino側のピンの接続

Akiduki dip-sd

Arduino uno pin No

5.0V

接続しない

3.3V

3.3V

CLK

D13

SDI

D11

SDO

D12

CS

D10

CD

接続しない

 

Arduino unoのピン配置図を図4に示した。図4を見るSCKがD13

MISOがD12、MOSIはD11、SSはD10であるため表1の配線になる。

f:id:shangtian:20170518075228p:plain

図4Arduino uno pin 

source: http://www.pighixxx.com/test/pinoutspg/boards/page/3/#prettyPhoto

 

 

(2)SDカードの状態の確認

   Arduinoのスケッチの例­>SD>Cardinfo から選択し、Cardinfo を書き込む。

   図5を参照のこと。

   このサンプルコードはSDカードの状態を表示する。もしここでうまくいかず

   initialization failed. Things to check:

   と表示された場合は、SDカードのフォーマットがされていないとか、配線が

   違っているなどの問題があるはず。成功すると図6のようになる。

 

f:id:shangtian:20170518072959p:plain

 図5:CardInfo サンプルファイル

 

f:id:shangtian:20170518073001p:plain

図6:CardInfo 実行結果

 

(3)SDカードにテキストファイルを書き込む

          SDカードとSPI通信にて通信する。SPI通信については

     「SPI」の解説 - しなぷすのハード製作記

         に詳しく書いてあり参考にした。SPI(Serial Peripheral Interface)

    SPIはSCLK(or SCK),MISO(orSDO,do).MOSI(or,SDI,DI),SS(orCS)の4種類

    の信号線からなる。 ※カッコ内は別名

    SSピンLOWだとスレーブとなりマスタと通信する。Arduino unoをマスタにし、

    SDカードをスレーブにしたいのでCSピンをHIGHに設定する必要がある。

    プログラムコードを図7にしめした。

 

#include <SD.h>
#include <SPI.h>
const int cs = 10; //チップセレクトピンをD10に設定 void setup() { File myFile ; Serial.begin(9600) ;
//以下の2行でarduino unoがマスターとなる pinMode(cs, OUTPUT) ;
   digitalWrite(cs,HIGH); if (!SD.begin(cs)) { Serial.println("Card failed, or not present") ; return ; } Serial.println("card initialized.") ; myFile = SD.open("test.txt",FILE_WRITE) ; if (myFile) { myFile.write("1234567890\r\n") ; Serial.write("1234567890\r\n") ; myFile.write("abcdefg\r\n") ; Serial.write("abcdefg\r\n") ; myFile.close() ; } else { Serial.println("error opening") ; } } void loop() { }

図7:全体のプログラムコード

 

・実験結果

 結果を図8、図9にしめした。図8はシリアル通信画面、図9は書き込んだ

 テクストファイル。

 

f:id:shangtian:20170518073002p:plain

図8:結果シリアル通信

 

f:id:shangtian:20170518073004p:plain

図9:結果テクストファイル

 

<考察>

 最初CardInfoは実行できても図7のコードが実行できなかった。8MBの古い

 SDカードを利用していたが、8GBのSDカードで試したところうまくいった。

 SDカードにはいくつかのバージョンがあり、初期のSDカードをにはArduino

 ライブラリが対応してないのかもしれない。詳しく調べていないがCardInfoが

 実行できても書き込みができないといった症状なら最近のSDカードに替えて

 やってみるとうまくいくかもしてない。