HOME | Raspberry Pi | ビジネス書籍紹介 | 2021-09-19 (Sun) Today's Access : 116 Total : 354110. 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.06.26 Unexpected Maker TinyS2
2021.07.10 M5Stackアプリの移植
2021.09.18 FeatherS2 ESP32-S2


ニーア オートマタ PLAY ARTS改 <ヨルハ 二号 B型 DX版> PVC製 塗装済み可動フィギュア
「NieR:Automata」より、ヨルハ二号B型こと2BがPLAY ARTS改に新たに登場! 高級感の感じられるコスチュームや髪の質感、洗練されたボディバランス、細かなデティールに至るまでこだわり抜かれた逸品。 DX版には通常版のラインナップに加え2Bの随行支援ユニット ポッド042などをはじめ“純白の美しい太刀"白の約定やエフェクトパーツ、自爆モードを再現できる換装用ボディパーツ、シーンに合わせて変えられる顔パーツ2種も付属する豪華な仕様に。 作中のあらゆるシーンを再現することが可能なファン必見の一品となっている。

DIPスイッチで動作電圧を3.3Vと5Vに切り替えられるUNO互換ボード
KEYESTUDIO Plus Board for Arduino UNO R3 with Type-C USB Cable, 3.3V 5V 1.5A Output Current, More Powerful Controller Board USB-シリアルチップ:CP2102 / 動作電圧:5Vまたは3.3V(DIPスイッチ制御)/ 外部電源:DC 6-15V(9V推奨)/ デジタルI / Oピン:14(D0〜D13)/ PWMチャネル:6(D3 D5 D6 D9 D10 D11)/ アナログ入力チャネル(ADC):8(A0-A7)/ DC出力機能の各I / Oポート:20 mA / 3.3Vポートの出力能力:50 mA / フラッシュメモリ:32 KB(うち0.5 KBはブートローダーによって使用されます)/ SRAM:2 KB(ATMEGA328P-AU)/ EEPROM:1 KB(ATMEGA328P-AU)/ クロック速度:16MHz / オンボードLEDピン:D13

エレクトロクッキー Leonardo R3 ATmega32u4 ボード DIY Arduino工作用 - ピンクエディション


Newtonライト2.0 ベイズ統計
ベイズ統計は,結果から原因を推定する統計学です。AIや医療などの幅広い分野で応用されています。その基礎となるのは18世紀に考えだされた「ベイズの定理」です。 この本では,ベイズ統計学のきほんをやさしく紹介していきます。

Interface 2021年10月号
☆特集:~ 格好良さアップ! 機能&信頼性アップ ! ~「 3Dプリンタ & メカ設計入門 」
☆特集2:Pico達人への道…「 C/C++でMicroPython拡張 」


トランジスタ技術 2021年9月号
☆特集:~ 直流・交流・非接触・センサ微小電流の測定ノウハウ ~「電流を正しく測る技術」

トランジスタ技術スペシャル 2021年7月号 宇宙ロケット開発入門
これから開発・活用が進むと期待されている宇宙空間への交通・物流インフラとして、小型・低価格ロケットが注目を集めています。本書では、基本構造から制御メカニズムまで、小型宇宙ロケット開発の基礎知識を実例を交えて解説します。

日経Linux 2021年9月号
【特集1】おうち時間をLinuxデスクトップで楽しむ! Linux環境を作るワザ
【特集2】徹底図解で丸わかり! 「WSL2」入門   Windows 11の新機能を速報!
【特集3】IT自動化ツール AnsibleでWeb導入を自動化
【特集4】ラズパイで楽しむLinuxライフ 「今、会議中」と家族に伝えるプレートをPythonで作ろう


ラズパイマガジン2021年秋号
特集1 サクッと動くパーツ&ライブラリ総覧
特集2 ArduinoライブラリでラズパイPicoを動かす
特集3 古いラズパイをフル活用! Node-REDで 楽しい電子工作
特集4 空気の汚れをラズパイで検知しよう
特集5 ラズパイで楽しむLinuxライフ
特集6 NVIDIAのAIボードが6000円台に!
特集7 M5StickCで始める電子工作 iPhoneからサーボモーターを制御しよう


トランジスタ技術スペシャル 2021年 4月号 No.154「達人への道 電子回路のツボ」
初学者が実用的な電子回路を設計できるようになるためのポイントをまとめました。学校の教科書だけではつかめない基本電子回路やOPアンプ/トランジスタの使い方の実際を、いろいろな視点から解説しています。


Raspberry Pi 3 Model B V1.2 (日本製) 国内正規代理店品
【仕様概要】CPU:ARM 1.2GHz 4コア、GPU:2コア 3D・動画支援、RAM:1GB、ネットワーク:LAN/Wi-Fi/Bluetooth、インターフェース:USB/HDMI/オーディオ/GPIO(UART/I2C/I2S/SPI...)。

ELEGOO Arduino用 Nanoボード V3.0 CH340/ATmega328P、Nano V3.0互換 (3)


ESPr Developer 32
スイッチサイエンス(Switch Science)

協和ハーモネット UL1007 AWG24 耐熱ビニル絶縁電線 リール巻 100m 黒


白光(HAKKO) ダイヤル式温度制御はんだ吸取器 ハンディタイプ FR301-81


サンハヤト TTW-203 テストワイヤ
ブレッドボードとスルーホール間の接続に便利なワイヤですブレッドボード用のオスピンと基板のスルーホール用のバネ性のある端子を組み合わせたテストワイヤです

無水エタノールP 500mlx2個パック(掃除)


ケイバ(KEIBA) マイクロニッパー MN-A04


熱収縮チューブφ1.5
印字無しで綺麗☆ シュリンクチューブ 絶縁チューブ 防水 高難燃性 収縮チューブ (2m, ブラック(黒))


サンハヤト SAD-101 ニューブレッドボード


白光(HAKKO) HEXSOL 巻はんだ 精密プリント基板用 150g FS402-02


【Amazon.co.jp限定】エーモン 電工ペンチ 全長約255mm (1452)


[Amazon限定ブランド]【指定第2類医薬品】PHARMA CHOICE 解熱鎮痛薬 解熱鎮痛錠IP 100錠


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