Arduino詳解その26です。前回の記事はこちらです。
SDカードを使う
センサーのモジュールなどを繋げたときに、一定間隔でデータを記録しておきたい事があります。PCと通信して記録してもらえればいいのですが、大掛かりになってしまう。そんな時、SDカードに記録するという手段があります。SDカードならば簡単に大容量のデータを記録できますし、電源を切っても記録が保持できます。今回から数回にわたって、ArduinoUNOでSDカードを使う方法に取り組みたいと思います。
まずはハードウェア
SDカードを扱うには、まずSDカードを挿入できるコネクターを持った(そして、ArduinoUNOと接続できる)ハードウェアが必要となります。GROVEシステムにもSDカードを使用できるシールドがあります。
www.switch-science.com
GROVEコネクタもついているので簡単なシステムを構築するのに便利ですね。
また、他にも色々なところから出ています。今回僕が使用するのは以下のシールドです。
www.switch-science.com
これは元々他の部品(XBee)を使うためのシールドなのですが、microSDカード用のコネクターも実装されていてSDカードシールドと同じように使えます。(僕の手元にはこれしかありませんでした。)
動かしてみる
それではいきなり動かしてみましょう。ArduinoUNOにSDカードシールドを取り付けて下さい。SDカードシールドのコネクターにはSDカードを挿入します。次に、ArduinoIDEのファイルメニューからスケッチ例⇒SD⇒Cardinfoとしてスケッチを読み込んでください。なお、スケッチの中に const int chipSelect = 4; という行があります。これはSDカードを選択するために使用するArduinoUNOの信号ピンです。SDシールドカードの種類によってはこの値を変更しなければいけない場合があります。上記に掲げたシールドでは4のままで問題ありません。
書き込んで、シリアルモニターを立ち上げてみると・・・・何やらワーッと表示されました。
このスケッチは、実装しているSDカードの情報を取得、表示するものです。
スケッチを抜粋
さて、スケッチの解説・・・と、行きたいところですが、このスケッチ長いうえに色々やっています。そこで、一部分だけ抜粋してみました。
#include <SD.h> #include <SPI.h> Sd2Card card; const int chipSelect = 4; void setup() { Serial.begin(9600); card.init(SPI_HALF_SPEED, chipSelect); while (!Serial) { } Serial.print("Card 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"); } }
上記を書き込んで実行すると・・・僕の場合には、
Card type: SDHC
と、出てきました。実装されているSDカードの種類を返しています。もっとも、ほとんどの人がSDHCと返してくると思います。
スケッチの先頭にある#include <SD.h>は、SDカード用ライブラリを使うためのものです。その次の#include <SPI.h>なのですが、これはSPI通信という通信手法を使用するためのライブラリです。SDカード用ライブラリはSPI通信を使ってSDカードにアクセスするので、このライブラリが必要になってきます。どちらも標準でArduinoIDEに同梱されています。
何やら複雑になってきました。SDカード用ライブラリ、SPI通信、そもそもSDカードって解っているようであまり解っていない(そこから!!)
そもそもSDカードとは
とりあえず、ArduinoUNOでSDカードが扱えるということは分りました。でも、自在に使えるようになるには道のりは長い(泣)少しずつ理解していこうと思います。まず次回は、そもそもSDカードが何なのかを確認していこうと思います。お楽しみに!!
hirocom777.hatenadiary.org