これは有名な話ですが Arduino とは市販のマイコンに入出力ポートやソフトウェア開発環境 Arduino IDE を組み合わせて、誰でも簡単に扱えるようにパッケージ化されたものです。
逆に言えば Arduino IDE を用いてプログラムを書き込まれたマイコンは Arduino というパッケージから切り離されても単体で動作するということでもあります。
もちろん Arduino IDE に備わっているシリアルモニタも使えない上に USB-TTL シリアル変換もありません。そこでマイコンの挙動を確認するための液晶ディスプレイ (LCD) と単体で記録を保持するための記録メディアへの書き込み、もしくは無線通信機能はほぼ必須になります。
今回の対象は LCD への文字表示と SDカードへの書き込みです。やることは 過去記事1 (液晶ディスプレイ表示) と 過去記事2 (SDカード書き込み) の組み合わせになります。
まず接続ピンのおさらいです。こちらは液晶ディスプレイモジュール AQM1602XA-RN-GBW
AQM1602XA-RN-GBW | ARDUINO | UNO Pin |
---|---|---|
V+ | VCC | 5V |
SCL | SCL | A5 |
SDA | SDA | A4 |
GND | GND | GND |
こちらがSDカードモジュール AE-M-SD-DIP です
AE-M-SD-DIP | ARDUINO | UNO Pin | ||
---|---|---|---|---|
#2 | CD/DAT3 | chip select | D4 | #10 |
#3 | CMD/DI | host command/data | MOSI | #11 |
#4 | VDD | supply voltage | 3V3 | 3.3V |
#5 | CLK | clock | SCL | #13 |
#6 | VSS | supply ground | GND | GND |
#7 | DAT0 | host data/status | MISO | #12 |
これらの配線を接続して動かすスケッチは以下のようになります。
前回は I2C の Wire ライブラリのみを用いて LCD に文字表示をしましたけれども、本題と無関係なところでソースコードが冗長になるので今回は ST7032_asukiaaa を使用します。
ライブラリマネージャから導入可能かつ最終更新日が新しいという基準で選定していますので、他のライブラリではいけないというわけではありません。
今回はブレッドボードに移植することを考えてシリアルモニタを使用していませんので、この LCD 表示が頼りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#include <SPI.h> #include <SD.h> #include <ST7032_asukiaaa.h> ST7032_asukiaaa lcd; const int chipSelect = 10; unsigned long myTime; void setup() { lcd.begin(16, 2); lcd.setContrast(30); lcd.print("Init Media"); // see if the card is present and can be initialized: if (!SD.begin(chipSelect)) { lcd.clear(); lcd.print("Media Failed"); // don't do anything more: while (1); } lcd.print("Init done"); lcd.clear(); } void loop() { delay(1000); lcd.clear(); myTime = millis(); // the number of milliseconds passed since started // open the file. note that only one file can be open at a time, // so you have to close this one before opening another. File myFile = SD.open("datalog.txt", FILE_WRITE); if (myFile) { // if the file opened okay, write to it: myFile.print(myTime / 1000); // write time myFile.println(); // new line myFile.close(); // close the file: lcd.print(myTime); // if the file isn't open, pop up an error: } else { lcd.print("ERROR OPENING"); } } |
2行目の SPI.h は SPI インターフェイスを持つデバイスとのデータの受け渡しを行うための Arduino IDE の標準ライブラリです。SD カードドライブは通信の際に SPI バスを使用するためライブラリが必要になります。
SD カードの読み書きに関連してもう一点、気をつけないといけないのは Arduino の対応フォーマットは FAT または FAT32 であることです。使用する SD カードは化石のような 2GB のほうが認識する可能性が高く、伝聞によると 16GB 以上の容量を持つ SDHC では使用できないこともあるらしいです。
私は一応 SanDisk Ultra PLUS microSDHC 16GB (SDSDQUPN-016G-J35A) と TOSHIBA microSDHC 16GB (MSDAR40N) の2種類を使用して動作確認をしています。
スケッチを書き込んで動くことを確認できましたら Arduino からマイコン ATMEGA328P-PU を引き抜いて移植するだけです。
ただマイコンをブレッドボードに載せれば良いわけではなく、デジタル回路のクロック源として水晶振動子、電圧を平滑化しマイコンを正しく動作させるためのキャパシタ、それから 5V と 3.3V のそれぞれの電源が必要になります。
現在ちょうど手元に部品が揃っていないので、ブレッドボード上でマイコンを動かすために必要な部品は次回にまとめるかもしれません。