一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」ーSDカードドライバの検討ー [SPRESENSE]
前回、SPRESENSEのメインボードのSPIに接続するSDカード・アドオンボードを作りました。今回は、Arduino IDEでカメラ画像をSDカードに保存するためのSDカードドライバを検討しました。
■ Arduino のSDカードライブラリが使えない!?
Arduino の標準のSDカードライブラリがそのまま使えればラッキーだなと思ったのですが、SPIのインスタンスを渡すAPIがない。CSピンを指定するようになっています。
実装を見ると、ハードウェアはArduino UNO前提で、その他はソフトウェアSPIを使う様になっています。SPRESENSEのハードウェアSPIましてはSPI5はまず使えそうにありません。
で、オリジナルのSDライブラリを作り変えようと思ったらリードオンリ。それではとコピーして作り直そうとしたら名前がバッティングして使えない。
う~ん、困りました。
■ SPRESENSE用のSDカードライブラリを自作
いろいろ試行錯誤をしましたが、無理して使うより既存のArduinoの実装を参考にして作り直したほうが早いんじゃね?と思い、作り直すことにしました。Arduino の Library にしましたので、もしよかったら使ってやってください。恐らく拡張ボードのSPIも使えると思います。
(実は試してない( ^ω^)・・・)
■ 画像をSDカードに記録してみた!
カメラで撮影した画像をSDカードに記録するためのスケッチを作ってみました。このスケッチはサンプルにすでに入れているのですが、こちらでも紹介します。
このSDカードライブラリはクラス名が異なるのと、初期化時にSPIのインスンタンスを与えられるところ以外は従来のSDカードライブラリとまったく同じです。
このスケッチは、ボタンを押すことで画像を記録するようになっています。かなりシンプルに使えるものになりました。実際に撮影してみた画像がこちら。
なかなかいい感じで取れています。最終的にはタイムラプスにするので、ボタンではなく一定間隔でスリープから起動して記録していくようにしていきます。ここまで出来たので、残りの仕事は大したものではないでしょう。
しかし、記録にかなり時間がかかっています。何か実装がまずいのかも知れません…。とりあえず記録できているので、今の所はヨシとしましょう。
最後の難関は筐体の設計。いろいろと想定と変わってしまったので、最終的な形はスティックにはならなさそうです。簡単にはいかないですねぇ。Fusion360は久しぶりすぎて使えるか不安。
(´・ω・`)
関連リンク
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」
https://makers-with-myson.blog.ss-blog.jp/2021-01-04
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」ー充電回路の検討ー
https://makers-with-myson.blog.ss-blog.jp/2021-01-10
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」ーSDカードの検討ー
https://makers-with-myson.blog.ss-blog.jp/2021-01-17
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」ーついに完成!ー
https://makers-with-myson.blog.ss-blog.jp/2021-01-31
■ Arduino のSDカードライブラリが使えない!?
Arduino の標準のSDカードライブラリがそのまま使えればラッキーだなと思ったのですが、SPIのインスタンスを渡すAPIがない。CSピンを指定するようになっています。
class SDClass { ... snip ... public: boolean begin(uint8_t csPin = SD_CHIP_SELECT_PIN); boolean begin(uint32_t clock, uint8_t csPin); }; ... snip ...
実装を見ると、ハードウェアはArduino UNO前提で、その他はソフトウェアSPIを使う様になっています。SPRESENSEのハードウェアSPIましてはSPI5はまず使えそうにありません。
で、オリジナルのSDライブラリを作り変えようと思ったらリードオンリ。それではとコピーして作り直そうとしたら名前がバッティングして使えない。
う~ん、困りました。
■ SPRESENSE用のSDカードライブラリを自作
いろいろ試行錯誤をしましたが、無理して使うより既存のArduinoの実装を参考にして作り直したほうが早いんじゃね?と思い、作り直すことにしました。Arduino の Library にしましたので、もしよかったら使ってやってください。恐らく拡張ボードのSPIも使えると思います。
(実は試してない( ^ω^)・・・)
YoshinoTaro/SPISD Contribute to YoshinoTaro/SPISD development by creating an account on GitHub. github.com |
■ 画像をSDカードに記録してみた!
カメラで撮影した画像をSDカードに記録するためのスケッチを作ってみました。このスケッチはサンプルにすでに入れているのですが、こちらでも紹介します。
このSDカードライブラリはクラス名が異なるのと、初期化時にSPIのインスンタンスを与えられるところ以外は従来のSDカードライブラリとまったく同じです。
#include <SPI.h> #include <SPISD.h> #include <Camera.h> SpiSDClass SD(SPI5); const int intPin = 0; static bool bButtonPressed = false; static int gCounter = 0; void changeState () { bButtonPressed = true; } void setup() { Serial.begin(115200); if (!SD.begin(SPI_FULL_SPEED)) { Serial.println("SD.begin() failed"); return; } theCamera.begin(); theCamera.setStillPictureImageFormat( CAM_IMGSIZE_QUADVGA_H ,CAM_IMGSIZE_QUADVGA_V ,CAM_IMAGE_PIX_FMT_JPG); attachInterrupt(digitalPinToInterrupt(intPin) ,changeState ,FALLING); } void loop() { if (!bButtonPressed) return; Serial.println("button pressed"); digitalWrite(LED0, HIGH); CamImage img = theCamera.takePicture(); if (img.isAvailable()) { char filename[16] = {0}; sprintf(filename, "PICT%03d.JPG", gCounter); SpiFile myFile = SD.open(filename,FILE_WRITE); myFile.write(img.getImgBuff(), img.getImgSize()); myFile.close(); ++gCounter; } bButtonPressed = false; digitalWrite(LED0, LOW); }
このスケッチは、ボタンを押すことで画像を記録するようになっています。かなりシンプルに使えるものになりました。実際に撮影してみた画像がこちら。
なかなかいい感じで取れています。最終的にはタイムラプスにするので、ボタンではなく一定間隔でスリープから起動して記録していくようにしていきます。ここまで出来たので、残りの仕事は大したものではないでしょう。
しかし、記録にかなり時間がかかっています。何か実装がまずいのかも知れません…。とりあえず記録できているので、今の所はヨシとしましょう。
最後の難関は筐体の設計。いろいろと想定と変わってしまったので、最終的な形はスティックにはならなさそうです。簡単にはいかないですねぇ。Fusion360は久しぶりすぎて使えるか不安。
(´・ω・`)
関連リンク
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」
https://makers-with-myson.blog.ss-blog.jp/2021-01-04
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」ー充電回路の検討ー
https://makers-with-myson.blog.ss-blog.jp/2021-01-10
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」ーSDカードの検討ー
https://makers-with-myson.blog.ss-blog.jp/2021-01-17
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」ーついに完成!ー
https://makers-with-myson.blog.ss-blog.jp/2021-01-31
SONY SPRESENSE メインボード CXD5602PWBMAIN1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
SONY SPRESENSE カメラモジュール CXD5602PWBCAM1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
Arduino SPI SDIO対応 マイクロ SD カード モジュール メモリ シールド スロット リーダー
- 出版社/メーカー: SONONIA
- メディア:
コメント 0