一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」ーついに完成!ー [SPRESENSE]
大きさは本体が58mm x 29mm x 26mm、カメラ部が31mm x 31mm 。重量は驚異の37g!300mAhのバッテリー内蔵で、タイムラプス画像はAVIで記録できます!
横置きももちろん可能です。
ソーラーパネルで充電しながらを想定し、お尻もあげられるようにしました。ペンギンみたいでかわいい。
さっそく、今宵の月を1分単位で1時間半ほど撮影してみました!
早速、今宵の月を”SPRESENSEタイムラプス”で撮ってみました。1分毎に1時間半ほどの映像です。このあと充電したらあっという間に満充電になりました。ほとんど電力使ってなさそう。 pic.twitter.com/mqOwn1Hghb
— よしのたろう @国産ボード”SPRESENSE”応援団長(仮) (@Taro_Yoshino) January 31, 2021
では制作過程のご紹介です。
■ 筐体デザインの構想
当初、スティック型を目指しましたが、プログラム用USBの位置がカメラの方向とかぶるので背後に置くのは無理。バッテリはソーラー充電も考えると尻尾につけたい。
いろいろ悩んだ末に、カメラと本体を分離することにしました。録画開始ボタンも電源ON/OFFで代用し、無くすことにしました。
そのときのスケッチの様子です。(本体だけですが、、、カメラ部は次ページにスケッチしていますが、見せるほどのものではないので省略しました)
■ Fusion360 で筐体デザイン
Fusion360を使って筐体デザインをしていきます。電源スイッチはボンドで固めてしまったので、位置の調整に苦労しました。
カメラ部は基板むき出しも考えたのですが、ちょうど黒いM2ネジがあったので、レンズの黒とネジの黒でデザイン的に映えるかなと思い、表面を覆うことにしました。
余談ですが、Fusion360のマウス操作とCuraのマウス操作を一緒にできないものですかね。とっても煩わしい。
■ 我が家のオンボロ3Dプリンタで出力
我が家のオンボロ3Dプリンタをフル稼働。このプリンタ、筐体本体がABS樹脂で3Dプリンタで出力したもの。もう5年目で筐体が経年劣化で伸縮し、ホットベッドの支柱が微妙にねじれてしまいノズルとホットベッドの間隔が均一でなくなっています。なのでプリント品質がイマイチ…
出力したパーツをニッパで切り出しました。遠目で見るときれいに見えても近くでみると”あ~”って感じ。3Dプリンタも激安になってきたから、そろそろ買い直そうかな。
■ 本体の組み上げ
結構、攻めた設計をしたので、本体はギチギチ。プリンタの出力誤差もあって、SPRESENSEメインボードの場所は微妙に狭く、無理やりねじ込みました。これで壊れないのはさすがソニー製。(ラズパイカメラは無理やりねじ込んで、あっけなく壊れた悲しい思い出が…)
一方、バッテリは膨れるので部屋の大きさは余裕目に用意しました。
カメラはカバーと腕を接着剤で固めて、ネジ止めするだけ。楽ちん。
最後に足をつけて完成です!充電用のUSBコネクタが曲がっているのはご愛嬌。
■ タイムラプスのソフトウェアを作る
JPG画像をSDカードに記録していくだけにしようかなとも思ったのですが、せっかくなら映像で記録し、すぐにPCで見れるようにしたい。ということでAVIで記録するようにしました。昔作ったコードを流用してます。
#include <SPI.h> #include <SPISD.h> #include <Camera.h> #include <LowPower.h> #include <RTC.h> SpiSDClass SD(SPI5); SpiFile infFile; SpiFile aviFile; static const String aviFilename = "movie.avi"; static const String infFilename = "info.txt"; static const int img_width = 1280; static const int img_height = 960; static const uint8_t WIDTH_1 = (img_width & 0x00ff); static const uint8_t WIDTH_2 = (img_width & 0xff00) >> 8; static const uint8_t HEIGHT_1 = (img_height & 0x00ff); static const uint8_t HEIGHT_2 = (img_height & 0xff00) >> 8; static uint16_t rec_frame_addr = 0x00; static uint16_t movi_size_addr = 0x08; static uint16_t total_size_addr = 0x10; static uint32_t rec_frame = 0; static uint32_t movi_size = 0; static uint16_t exposure_time = 1000; // 100 msec static uint16_t interval_time = 60; // 60 sec #define TOTAL_FRAMES 300 #define AVIOFFSET 240 const char avi_header[AVIOFFSET+1] = { 0x52, 0x49, 0x46, 0x46, 0xD8, 0x01, 0x0E, 0x00, 0x41, 0x56, 0x49, 0x20, 0x4C, 0x49, 0x53, 0x54, 0xD0, 0x00, 0x00, 0x00, 0x68, 0x64, 0x72, 0x6C, 0x61, 0x76, 0x69, 0x68, 0x38, 0x00, 0x00, 0x00, 0xA0, 0x86, 0x01, 0x00, 0x80, 0x66, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, WIDTH_1, WIDTH_2, 0x00, 0x00, HEIGHT_1, HEIGHT_2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x49, 0x53, 0x54, 0x84, 0x00, 0x00, 0x00, 0x73, 0x74, 0x72, 0x6C, 0x73, 0x74, 0x72, 0x68, 0x30, 0x00, 0x00, 0x00, 0x76, 0x69, 0x64, 0x73, 0x4D, 0x4A, 0x50, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x74, 0x72, 0x66, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, WIDTH_1, WIDTH_2, 0x00, 0x00, HEIGHT_1, HEIGHT_2, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x4D, 0x4A, 0x50, 0x47, 0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x49, 0x53, 0x54, 0x10, 0x00, 0x00, 0x00, 0x6F, 0x64, 0x6D, 0x6C, 0x64, 0x6D, 0x6C, 0x68, 0x04, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x4C, 0x49, 0x53, 0x54, 0x00, 0x01, 0x0E, 0x00, 0x6D, 0x6F, 0x76, 0x69, 0x00 }; static void inline uint32_write_to_aviFile(uint32_t v) { char value = v % 0x100; aviFile.write(value); v = v >> 8; value = v % 0x100; aviFile.write(value); v = v >> 8; value = v % 0x100; aviFile.write(value); v = v >> 8; value = v; aviFile.write(value); } void setup() { Serial.begin(115200); while (!SD.begin()) { Serial.println("Insert SD Card"); } LowPower.begin(); RTC.begin(); bootcause_e bc = LowPower.bootCause(); digitalWrite(LED3, HIGH); digitalWrite(LED2, HIGH); if (SD.exists(infFilename)) { infFile = SD.open(infFilename, FILE_READ); if (!infFile) { Serial.println("Information File Open Error for reading"); while(1); } rec_frame = infFile.readStringUntil('\n').toInt(); movi_size = infFile.readStringUntil('\n').toInt(); exposure_time = infFile.readStringUntil('\n').toFloat(); interval_time = infFile.readStringUntil('\n').toInt(); Serial.println("Read Rec Frame: " + String(rec_frame)); Serial.println("Read Movie Size: " + String(movi_size)); Serial.println("Read Exposure Time: " + String(exposure_time)); Serial.println("Read Interval Time: " + String(interval_time)); infFile.close(); } else { // default // rec_frame = 0; // movi_size = 0; // exposure_time = 1000; /* 100msec */ // interval_time = 60; /* sec */ } // check for recording for the first time. if (bc != DEEP_RTC) { Serial.println("Power on reset"); if (SD.exists(aviFilename)) { SD.remove(aviFilename); rec_frame = 0; movi_size = 0; Serial.println("removed " + aviFilename); } } aviFile = SD.open(aviFilename ,FILE_WRITE); if (!aviFile) { Serial.println("Movie File Open Error!"); while(1); } if (rec_frame == 0) { Serial.println("First time: write header"); aviFile.write(avi_header, AVIOFFSET); sleep(3); // wait for 3sec } Serial.println("Recording..."); theCamera.begin(); theCamera.setAbsoluteExposure(exposure_time); // 0.1 sec theCamera.setStillPictureImageFormat( img_width ,img_height ,CAM_IMAGE_PIX_FMT_JPG); } void loop() { CamImage img = theCamera.takePicture(); if (!img.isAvailable()) { Serial.println("faile to take a picture"); return; } if (rec_frame != 0) { aviFile.seek(aviFile.size()); } aviFile.write("00dc", 4); uint32_t jpeg_size = img.getImgSize(); uint32_write_to_aviFile(jpeg_size); aviFile.write(img.getImgBuff() ,jpeg_size); movi_size += jpeg_size; ++rec_frame; theCamera.end(); // to save power consumption /* Spresense's jpg file is assumed to be 16bits aligned * So, there's no padding operation */ float duration_sec = 0.1; // fix 10fps for Timelapse float fps_in_float = 10.0f; // fix 10fps for Timelapse float us_per_frame_in_float = 1000000.0f / fps_in_float; uint32_t fps = round(fps_in_float); uint32_t us_per_frame = round(us_per_frame_in_float); /* overwrite riff file size */ aviFile.seek(0x04); uint32_t total_size = movi_size + 12*rec_frame + 4; uint32_write_to_aviFile(total_size); /* overwrite hdrl */ /* hdrl.avih.us_per_frame */ aviFile.seek(0x20); uint32_write_to_aviFile(us_per_frame); uint32_t max_bytes_per_sec = movi_size * fps / rec_frame; aviFile.seek(0x24); uint32_write_to_aviFile(max_bytes_per_sec); /* hdrl.avih.tot_frames */ aviFile.seek(0x30); uint32_write_to_aviFile(rec_frame); aviFile.seek(0x84); uint32_write_to_aviFile(fps); /* hdrl.strl.list_odml.frames */ aviFile.seek(0xe0); uint32_write_to_aviFile(rec_frame); aviFile.seek(0xe8); uint32_write_to_aviFile(movi_size); aviFile.close(); if (SD.exists(infFilename)) SD.remove(infFilename); infFile = SD.open(infFilename, FILE_WRITE); if (!infFile) { Serial.println("Information File Open Error for writing"); while(1); } infFile.println(String(rec_frame)); infFile.println(String(movi_size)); infFile.println(String(exposure_time)); infFile.println(String(interval_time)); infFile.close(); Serial.println("Information File Update: "); Serial.println("Write Rec Frame: " + String(rec_frame)); Serial.println("Write Movie Size: " + String(movi_size)); Serial.println("Movie saved"); Serial.println(" File size (kB): " + String(total_size)); Serial.println(" Captured Frame: " + String(rec_frame)); Serial.println(" Duration (sec): " + String(duration_sec)); Serial.println(" Frame per sec : " + String(fps)); Serial.println(" Max data rate : " + String(max_bytes_per_sec)); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); LowPower.deepSleep(interval_time); // Go to deep sleep for 60 seconds }
最初はパラメータの保存にSpresense用のEEPROMを使おうと思ったのですが、なぜだかEEPROMを使うと自作のSPISDライブラリのファイルオープンでエラーが返って来てしまいます。何かが競合しているみたいです。もし、SPISDライブラリを使おうと考えている人がいたら注意してください。
■ 作り終えた感想
電源オンで勝手にタイプラプス画像を作ってくれる小さくて軽量なカメラは、想像以上に楽しいものに仕上がりました。何より電池の持ちがいいのが良い!これからどれくらい持つかは試してみたいと思いますが、ひょっとしたら一日くらい余裕かも。ソーラーパネルによって充電フリーにできないか試したいと思います。
露光なども自分で設定できるので、シチュエーションにあわせて調整できるのもいいですね。(露光時間などパラメータをSDカードの情報ファイルで設定できるようにしよう、そうしよう)
高感度カメラがつながると暗い場所の撮影にも使えるのでさらに用途が広がりそうです。どこか出してくれないかな。
( ̄ー ̄).。oO
関連リンク
一月の電子工作「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でタイムラプスカメラを作ろう」ーSDカードドライバの検討ー
SONY SPRESENSE メインボード CXD5602PWBMAIN1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
SONY SPRESENSE カメラモジュール CXD5602PWBCAM1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
KKHMF SDカードスロットソケットリーダーモジュールArduino用 [並行輸入品]
- 出版社/メーカー: Apple Trees E-commerce co., LT
- メディア:
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」ーSDカードドライバの検討ー [SPRESENSE]
■ 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
- メディア:
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」ーSDカードの検討ー [SPRESENSE]
検討にあたり、@hikoalphaさんのArduinoでmicroSDカードを使うを参考にさせていただきました。
■ 使用した部材
(1)マイクロSDカードスロットDIP化キット
秋月電子で購入
https://akizukidenshi.com/catalog/g/gK-05488/
(2)8ビット双方向ロジックレベル変換モジュール
秋月電子で購入
https://akizukidenshi.com/catalog/g/gM-04522/
(3)0.3mm厚 極薄両面ガラス・ユニバーサル基板
秋月電子で購入
https://akizukidenshi.com/catalog/g/gP-09608/
(4)SPRESENSE用ピンヘッダ 13P
スイッチサイエンスで購入
https://www.switch-science.com/catalog/3940/
■ SPRESENSEメイン基板用の基板の準備
SDカード基板を乗せるためのベースとなる基板をつくります。SPRESENSEメイン基板に載せるための基板です。メイン基板に出ているSPIとSDカードを接続します。
メイン基板の幅にあわせて、極薄ユニバーサル基板を切り取ります。この基板はハサミで切れるのでとっても便利。
ピンをつけて完成です。
■ SDカードとレベルシフタとベース基板をハンダで接続
SPRESENSEメインボードのIOは1.8V。SDカードのIOは3.3Vなのでレベルシフトしなければなりません。SDカードとレベルシフタとベース基板は次のように接続します。
念の為、ピンの対応を示します。
SPRESENSE | SDカード |
SPI_CS | CD/DAT3 |
SPI_MOSI | CMD |
3.3V | VDD |
SPI_SCK | CLK |
GND | VSS |
SPI_MISO | DAT0 |
小さく仕上げるためにSDカードとレベルシフタ、ベース基板は細いエナメル線(ポリウレタン銅線)で直接つなぎます。
エナメル線は表面のポリウレタンがきちんと溶けていないと接触不良を起こすので、ハンダで物理的につながったと思っても電気的にはつながっていないケースが多いです。テスターで接続を確認しましょう。
ハンダが下手くそなので、かなり苦労をしましたが、ようやく完成しました!
■ グルーガンでSDカードボードを固める
これら3つの部品をコンパクトにまとめるためにレベルシフタをSDカードモジュールの裏に折り返して貼り付けて、さらにベース基板とグルーガンで固めてしまいました。
ついでにバッテリーと充電器もグルーガンでまとめてしまいました。
SPRESENSEは低消費電力なので熱でグルーが溶けることはないでしょう。(きっと)
■ すべての電気パーツが完成!
すべての電気パーツがこれで完成しました。残るはメカとソフト。ソフトはなんとかなると思いますが、問題はメカだなぁ。思ったよりも厚みが出てしまった。縦3cmには収まらないかな。
今月中に終わるかなー???
(。-`ω´-)
関連リンク
一月の電子工作「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-24
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」ーついに完成!ー
https://makers-with-myson.blog.ss-blog.jp/2021-01-31
Aideepen 5個セットマイクロSDストレージ拡張ボードマイクロSDカードメモリシールドモジュールArduino ARM AVR用ピン付き
- 出版社/メーカー: Aideepen
- メディア: その他
SONY SPRESENSE メインボード CXD5602PWBMAIN1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」ー充電回路の検討ー [SPRESENSE]
※リチウムポリマー電池は損傷すると激しく発火する非常に危険な電気部品です。工作する場合は自己責任で行ってください。
■ 使用した部材
(1) 300mAh 3.7V リチウムポリマーバッテリー(SX-3.7V-300MAH)
aitendoで購入
https://www.aitendo.com/product/9669
(2) LiPoバッテリー充電ボード(TP4056充電モジュール充電器)
Amazonで購入
10個 TP4056充電モジュール充電器 5V Micro USB 1A保護充電モジュール付き18650リチウムバッテリ充電ボード (TP4056充電保護モジュール)
- 出版社/メーカー: Pinbotronix
- メディア: エレクトロニクス
(3) SPRESENSE用バッテリー用コネクタ(S2B-PH-K-S)
Amazonで購入
JST Sales America Inc. S2B-PH-K-S(LF)(SN)(5個セット)
- 出版社/メーカー: 日本圧着端子製造(JST)
- メディア: Tools & Hardware
(4) バッテリコネクタ&コネクタ用ターミナル(PHR-2&BPH-002T-P0.5S)
Amazonで購入
270ピース/90セットph 2.0ミリメートル2 3 4ピンプラグコネクタ男性女性圧着dipにボックス#0604
- 出版社/メーカー: MiZOELEC
- メディア: その他
(6) スイッチ(SS12D00)
aitendoで購入
https://www.aitendo.com/product/4200
■ コネクタの準備
コネクタはJSTのものを使います。押すのコネクタはSpresenseにつけて、メス側をバッテリにつけます。
最初にSpresenseにコネクタをつけます。SpresenseのGNDが強くてハンダのノリが悪いので根気強くハンダづけをしてください。
次にバッテリ用のコネクタを作ります。圧着ペンチを使ってケーブルを作ります。コネクタにケーブルをつけるときはプラスとマイナスに注意してください。
■ 充電回路とバッテリ、コネクタを接続する
充電回路とリチウムポリマー電池、コネクタ、(スイッチ)を準備します。(スイッチを撮影に入れるの忘れてました)
接続は次のように行います。バッテリのハンダづけはショートしないように注意深く行ってください。
動作確認をしてみました。問題なく動作するようです。
とりあえず、充電回路は解決しました。次はSDカードの検討ですね。
関連リンク
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」
https://makers-with-myson.blog.ss-blog.jp/2021-01-04
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」ーSDカードの検討ー
https://makers-with-myson.blog.ss-blog.jp/2021-01-17
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」ーSDカードドライバの検討ー
https://makers-with-myson.blog.ss-blog.jp/2021-01-24
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」ーついに完成!ー
https://makers-with-myson.blog.ss-blog.jp/2021-01-31
SONY SPRESENSE メインボード CXD5602PWBMAIN1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」 [SPRESENSE]
一月のお題は「SPRESENSEでタイムラプスカメラを作ろう」です。妄想しているのは次のようなカメラです。
バッテリーはLiPoバッテリを想定。充電回路もつけて充電可能なようにします。SDはSPI接続を想定。あまり速度ではでないので数秒間隔でのタイムラプスカメラとなると思います。
今の所見えている課題は、次の4点です。これから一つひとつクリアしていきたいと思います。
(1)充電回路の検討
(2)SDカード回路の検討
(3)SDカードアクセスライブラリの検討
(4)ケースの設計
(1)~(3)はなんとかなりそうですが、問題は(4)かなぁ。メカはド素人なので。
どんなものが出来るかはお楽しみに!
(^^)/~
関連リンク
一月の電子工作「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でタイムラプスカメラを作ろう」ーSDカードドライバの検討ー
https://makers-with-myson.blog.ss-blog.jp/2021-01-24
一月の電子工作「SPRESENSEでタイムラプスカメラを作ろう」ーついに完成!ー
https://makers-with-myson.blog.ss-blog.jp/2021-01-31
SONY SPRESENSE メインボード CXD5602PWBMAIN1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
SONY SPRESENSE カメラモジュール CXD5602PWBCAM1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
新年あけましておめでとうございます! [徒然日記]
本年もどうぞ宜しくお願い致します。
新年ですので、今年の抱負をここにしたためたいと思います。
2021年の抱負
(1)在宅勤務中は一ヶ月100km走破!
(2)BMI:22.3以下(70kg/1.76m^2)を維持。目標は22!
(3)一ヶ月にひとつ小さなことでもモノ作り
(1)、(2)は言わずもがなですが、そろそろ体の衰えが気になるお年頃ですので、今まで以上に自己管理を徹底していきたいと思います。少し前まで74kg あった体重も今は70kg。あと2kg落とすのが目標です。
(3)は、体調を崩すとモノ作りに対する気力も失せてくることに今回はじめて気づきました。一ヶ月にひとつでも小さなことを成し遂げる心構えをもつことで、心の調子にも気が配れる人になりたいと思っています。
2021年は心身ともに健康となることを目指して日々を過ごしていきたいと思います!
コロナにより厳しい状況が続きますが、今年が去年の自分より成長したと言える年となるよう頑張っていきたいと思います!