HOME | Raspberry Pi | ビジネス書籍紹介 | 2026-01-04 (Sun) Today's Access : 175 Total : 1260873. Since 10 Sep. 2019

画像処理 第2回カメラモジュール制御
2020.06.09

YouTubeでポイントを説明しています。画像をクリックすると再生できます。

今回はカメラモジュール ArduCam Mini 2MP と microSDカードスロットモジュールを制御して、自作デジカメのプロトタイプを作成します。

■開発環境

パソコンから、TeraTeamでラズパイにSSH接続、ラズパイでビルドしたコードを、Arduino に転送します。
ラズパイのディストリビューションは、Raspbian Stretch、開発環境に platformio を使用しています。
→ Ref.Arduino開発環境構築 PlatformIO
Arduino Nano には、SPI接続により、ArduCam と、microSDカードスロットモジュールを接続しています。
撮影日付を付加するための、リアルタイムクロックモジュールも必要ですが、注文したばかりで、手元にないので、別の機会に説明します。

■microSDカードスロット レベルシフタ付きブレークアウト基板キット
microSDカードスロットに、レベルシフター(74HC4050)とボルテージレギュレータ(3.3V)を付加して、Arduino等の5V系回路へ直結。
販売:秋月電子通商


Arduino とは、5V,GND,SCL,MISO,MOSI,SS(計6本)を接続し、 ジャンパJ1をショート(はんだを盛って接続)して使用します。
SDカードの電源On/Off制御を行う場合は、ジャンパJ1をショートせず、[2]ピンを空いているデジタルピン(出力)に接続し、 スケッチ上より制御します(HIGHで電源ON)。
SDカード検出スイッチを使用する場合は、[9]ピンを空いているデジタルピン(入力)に接続し、 スケッチ上で読み取ります(検出時にLOW)。


 Arduino Nano  -  micro SDカード
5V - [1]+5V電源入力(+4.0V~+6.5V)
[2]内部3.3Vレギュレータ On/Off
[3]内部3.3Vレギュレータ出力
GND - [4]GND
SCL:13 - [5]SDカード クロック(CLK)
MISO:12 - [6]SDカード データ(DAT)
MOSI:11 - [7]SDカード コマンド(CMD)
SS:9 - [8]SDカード チップセレクト(CS))
[9]SDカード カード検出スイッチ(SW 検出時GND)


$ mkdir ArduCam
$ cd ArduCam
$ platformio init -b nanoatmega328
Arduino Nano を使用しているので、ボードに nanoatmega328 を指定して、platformio を初期化しています。

■SDカードチェック用ソースコード
CardInfo.ino https://www.arduino.cc/en/Tutorial/CardInfo

チップセレクト(CS)ピンを変更します。
$ vi src/CardInfo.ino
const int chipSelect = 4;
 ↓
const int chipSelect = 9;

ソースコードをビルドします。
$ platformio run
/home/pi/ArduCam/src/microSD.ino:2:16: fatal error: SD.h: No such file or directory

************************************************************
* Looking for SD.h dependency? Check our library registry!
*
* CLI > platformio lib search "header:SD.h"
* Web > https://platformio.org/lib/search?query=header:SD.h
*
************************************************************
SDカードライブラリーのヘッダーファイルがないため、エラーとなります。

SDカードライブラリーを検索します。
$ platformio lib search "header:SD.h"
....
SD
==
#ID: 868
Enables reading and writing on SD cards.

Keywords: storage, data
Compatible frameworks: Arduino
Compatible platforms: Atmel AVR, Atmel SAM, Espressif 32, Espressif 8266, GigaDevice GD32V, Infineon XMC, Intel ARC32, Kendryte K210, Microchip PIC32, Nordic nRF51, Nordic nRF52, ST STM32, ST STM8, Teensy, TI MSP430
Authors: Arduino, SparkFun
....

SDカードライブラリーの概要を確認します。
$ platformio lib show 868
SD
==
#ID: 868
Enables reading and writing on SD cards.

Version: 1.2.4, released Fri Oct 11 14:15:01 2019
Manifest: https://raw.githubusercontent.com/arduino-libraries/SD/master/library.properties
Homepage: http://www.arduino.cc/en/Reference/SD
Repository: https://github.com/arduino-libraries/SD

Authors
-------
Arduino info@arduino.cc (maintainer)
SparkFun

Keywords
--------
storage
data

Compatible frameworks
---------------------
Arduino

Compatible platforms
--------------------
Atmel AVR
Atmel SAM
Espressif 32
Espressif 8266
GigaDevice GD32V
Infineon XMC
Intel ARC32
Kendryte K210
Microchip PIC32
Nordic nRF51
Nordic nRF52
ST STM32
ST STM8
Teensy
TI MSP430

Headers
-------
SdInfo.h
Sd2Card.h
FatStructs.h
Sd2PinMap.h
SdFatUtil.h
SD.h
SdFat.h
SdFatmainpage.h

Examples
--------
http://dl.platformio.org/libraries/examples/8/868/CardInfo.ino
http://dl.platformio.org/libraries/examples/8/868/Datalogger.ino
http://dl.platformio.org/libraries/examples/8/868/DumpFile.ino
http://dl.platformio.org/libraries/examples/8/868/Files.ino
http://dl.platformio.org/libraries/examples/8/868/listfiles.ino
http://dl.platformio.org/libraries/examples/8/868/ReadWrite.ino
http://dl.platformio.org/libraries/examples/8/868/NonBlockingWrite.ino

SDカードライブラリーをインストールします。
$ platformio lib install 868
Library Storage: /home/pi/ArduCam/.pio/libdeps/nanoatmega328
LibraryManager: Installing id=868
Downloading [####################################] 100%
SD @ 1.2.4 has been successfully installed!

再度、ビルドします。
$ platformio run


画像処理第1回で紹介したトイカメラ・BonzartLit で撮影に使ったSDカードを、SDカードスロットに挿してみました。 SDあるいはSDHC規格のSDカードであれば問題なく使えると思います。今回は、FAT32でフォーマットした4GB容量のカードを使っています。

ラズパイとUSBケーブルで接続している、Arduino Nano デバイスを確認しておきます。
$ platformio device list
/dev/ttyUSB0
------------
Hardware ID: USB VID:PID=1A86:7523 LOCATION=1-1
Description: USB2.0-Serial

/dev/ttyAMA0
------------
Hardware ID: 20201000.serial
Description: ttyAMA0

ビルドしたコードを、Arduino Nano に転送します。
$ platformio run -t upload

PlatformIOのデバイスモニターで、SDカード情報をラズパイのコンソールに表示します。
$ platformio device monitor -p /dev/ttyUSB0 -b 9600
Initializing SD card...Wiring is correct and a card is present.

Card type:         SDHC
Clusters:          956672
Blocks x Cluster:  8
Total Blocks:      7653376

Volume type is:    FAT32
Volume size (Kb):  3826688
Volume size (Mb):  3737
Volume size (Gb):  3.65

Files found on the card (name, date and size in bytes):
SYSTEM~1/     2019-08-30 08:39:38
  WPSETT~1.DAT  2019-08-30 08:39:38 12
  INDEXE~1      2019-08-30 08:39:42 76
DCIM/         2020-05-27 12:00:02
  100MEDIA/     2020-05-27 12:00:02
    SUNP0002.JPG  2020-05-27 12:44:02 537174
    SUNP0006.JPG  2020-05-27 12:55:08 615015
    SUNP0010.JPG  2020-05-27 13:08:24 525686
    SUNP0014.JPG  2020-05-27 13:20:54 436538
    SUNP0018.JPG  2020-05-27 13:23:44 691307
    SUNP0022.JPG  2020-05-28 12:00:28 746742
    SUNP0024.JPG  2020-05-28 12:04:26 611900
    SUNP0025.JPG  2020-05-28 12:05:16 608412

srcディレクトリーにある、SDカードモジュール確認用のソースコードを削除します。 必要なら、別の場所に保存しておいてください。
$ rm src/CardInfo.ino

■ArduCAM Mini 2MP カメラモジュール
ArduCam Mini 2MP は、オムニビジョン OV2640 2Mピクセルレンズを搭載したカメラモジュールです。 3Mb(384KB)のフレームバッファを搭載しています。レンズマウントはM12マウントで交換も可能です。
販売:秋月電子通商

【主な仕様】
電源電圧:DC5V
消費電流:ノーマル70mA、ローパワーモード20mA
フレームバッファ:384KB
出力解像度: 1600×1200、800×600、
640×480、320×240、
352×288、176×144
出力形式:RAW、YUV、RGB、JPEG
基板サイズ:34×24mm
サイズ:40×24×33mm(厚みはレンズに依存)

配線Arduino用チュートリアル

ArduCAM-M-2MP ピン定義
 Arduino Nano  -  ArduCam Mini 2MP
SS:10 CS:SPI slave chip select input
MOSI:11 - MOSI:SPI master output slave input
MISO:12 - MISO:SPI master input slave output
SCLK:13 - SCLK:SPI serial clock (Input)
GND - GND:Power ground
5V - +5V:3.3V-5V Power supply
I2C[SDA(A4)] - SDA:Two-Wire Serial Interface Data I/O
I2C[SCL(A5)] - SCL:Two-Wire Serial Interface Clock (Input)


シャッター用のプッシュボタンと、SDカードへの書き込み中を知らせるLEDも取り付けています。

ArduCam用ライブラリーをダウンロードします。
https://github.com/ArduCAM/Arduino
[Clone or download]ボタンを押す→Download Zip→Arduino-master.zip
Arduino-master
+<ArduCAM>
+<ArduCAM_Touch>
+<OV7670FIFO>
+<UTFT4ArduCAM_SPI>

Arduino-master/ArduCAMディレクトリ内のファイルを ~/ArduCam/src の下にコピーします。

私の購入したArduCam はカメラモジュール基板をみると、「Arducam-Mini-2MP」と刻印されていました。 memorysaver.h を開くと、デフォルトで OV2640_MINI_2MP_PLUS が定義されているので、コメントアウトして、OV2640_MINI_2MP を有効にします。
$ vi src/memorysaver.h
//Step 1: select the hardware platform, only one at a time
//#define OV2640_MINI_2MP
#define OV2640_MINI_2MP_PLUS
 ↓
#define OV2640_MINI_2MP
//#define OV2640_MINI_2MP_PLUS

キャプチャー用のサンプルコードをダウンロードして、srcディレクトリー内に配置します。
ArduCAM_Mini_Capture2SD.ino

$ vi src/ArduCAM_Mini_Capture2SD.ino

カメラボジュールのチップセレクトを7番→10番に変更します。
#define SD_CS 9
const int SPI_CS = 7;
 ↓
#define SD_CS 9
const int SPI_CS = 10;

プッシュボタンとLED制御用のピン番号を定義します。
#define BTN_PIN 7
#define LED_PIN 8
boolean writeStatus=false;

撮影した画像は1から連番でJPEGファイル名が付けられますが、Arduino を再起動すると初期化されてしまい、画像ファイルが上書きされてしまいます。
ここでは、ファイルの有無を確認して、上書きされないようにしています。
最終的には、リアルタイムクロックモジュールを実装して、撮影日付をファイル名にする予定です。
void myCAMSaveToSDFile(){
....
//Construct a file name
k = k + 1;
itoa(k, str, 10);
strcat(str, ".jpg");

while(1) {
k = k + 1;
itoa(k, str, 10);
strcat(str, ".jpg");
if(!SD.exists(str)) break;
}
setup() 関数では、撮影サイズの変更、特殊効果の付与、プッシュボタンとLEDのモードを設定しています。
OV2640_set_Special_effects()関数の引数BWは、Black&White 白黒撮影を指定しています。特殊効果は8種類あります。
void setup() {
....
#if defined (OV2640_MINI_2MP)
  myCAM.OV2640_set_JPEG_size(OV2640_320x240);
    ↓
  myCAM.OV2640_set_JPEG_size(OV2640_640x480);
....
  myCAM.OV2640_set_Special_effects(BW);

  pinMode(BTN_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);
}
※各種パラメタは下記を参考にしてください。
ArduCAM_Mini_2MP_OV2640_functions.ino

オリジナルのソースでは、約5秒間隔で自動的に撮影が行われてしまうので、 プッシュボタンを押したときに撮影されるように変更します。
void loop(){
  myCAMSaveToSDFile();
  delay(5000);
    ↓
  if ( digitalRead(BTN_PIN)==HIGH ) {
    if ( !writeStatus ) {
      writeStatus = true;
      digitalWrite(LED_PIN, HIGH);

      myCAMSaveToSDFile();
      delay(5000);

      writeStatus = false;
      digitalWrite(LED_PIN, LOW);
    }
  }
}

ArduCam Mini 2MPには、ピンホールカメラが付いているのですが、撮影してみると、画像がぼけてしまっています。 OV2640レンズはネジ式なので、ネジを回してピントを調整して撮影、SDカードを取り出して、画像ビューワーで確認という作業を繰り返して、お気に入りの焦点に調整します。



■参考文献
ArduCAM Mini Cameras Tutorial
ArduinoでSDメモリカードを読み書きする
第21回 Arduinoでパーツやセンサを使ってみよう~SDカード編(その1)
第22回 Arduinoでパーツやセンサを使ってみよう~SDカード編(その2)
Arduino 1.8.10 SdFileクラス
Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
2020.05.28 画像処理 第1回トイカメラ
2020.06.09 画像処理 第2回カメラモジュール制御
2020.06.28 画像処理 第3回リアルタイムクロック
2020.07.08 画像処理 第4回電源回路
2020.10.27 画像処理 第5回自作デジカメ初号機完成
2020.11.10 画像処理 第6回ドーナツデジカメ
2021.05.16 画像処理・基本変換
2021.07.10 M5Stackアプリの移植
2022.04.04 減色処理 雑談
2022.04.18 減色処理 均等量子化法とK平均法
2022.05.04 減色処理 グレースケール・二値化
2022.05.18 減色処理 二値化画像印刷
2022.08.12 京セラ feelH” Treva カメラ
2022.10.15 デジカメ弐号機 1.仕様変更
2022.10.21 デジカメ弐号機 2.SDカードとRTC
2022.11.04 デジカメ弐号機 3.SPI DISPLAY
2022.11.18 デジカメ弐号機 4.ストリーミング
2022.12.02 デジカメ弐号機 5.機能統合
2022.12.17 デジカメ弐号機 6.完成
2023.05.15 アナログ風ゲージ
2023.06.01 ADS1115デジタル電圧計
2023.10.01 立体視(ステレオグラム)
2023.10.16 漢字フォントの表示と拡張
2024.04.08 自作デジカメ参号機・雑談
2024.08.24 シリアルカメラ
2025.07.23 C3.jsによるグラフ描画
2025.09.09 東芝デジタルカメラユニット DMR-C1
2025.10.10 AQM1248A小型液晶ボード
2025.10.11 Monochrome OLED
2025.12.31 キャラクターディスプレイで遊ぶ

たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」 「一念発起して何かを始めても、いつも三日坊主で終わってしまう」 「色んなことを先延ばしにしたまま、時間だけが過ぎていく」 そこで本書では、そんな著者が独自に開発した、 まったく新しい目標達成メソッド「100日デザイン」について、 その知識と技術を、余すところなくご紹介します。

まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。 ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。

今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。

ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。 29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!

【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。 基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。

Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説! 500以上のサンプルを掲載。実行結果も確認。 全24章の包括的なチュートリアル。

ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS… 全WEB媒体で効果バツグン! カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術

小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。

Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード

電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)

Copyright © 2011-2027 Sarako Tsukiyono All rights reserved®.