Arduinoでロボット制御やIoTプロジェクトに慣れてくると、次のステップとしてカメラを使ったプロジェクトに挑戦したくなります。しかし「どのカメラモジュールを選べばいい?」「Arduinoに直接つなげるの?」と疑問を抱える方も多いはずです。
この記事では、Arduinoとカメラモジュールをつなぐためのパターンやおすすめモジュールを、初心者にもわかりやすく解説します。用途に合った最適な構成を選ぶための入り口として、ぜひご活用ください。
この記事は、Udemyで販売中の「【Arduinoではじめる】ロボットプログラミング完全マスターコース」受講生からのご質問をもとに、一般向けに再構成したものです。具体的な配線・プログラミングの詳細はコース内で解説しています。
Arduinoでカメラをつなぐときのパターンは3つ
Arduinoとカメラモジュールをつなぐアプローチは、大きく以下の3パターンに分類できます。目的・予算・スキルレベルに合わせて選びましょう。
- ① Arduinoボードに直接カメラモジュールをつなぐ
- ② カメラ機能を内蔵したマイコンボード(ESP32-CAMなど)を使う
- ③ Raspberry Piと組み合わせて使う
① Arduinoに直接カメラモジュールをつなぐ方法
最もシンプルな構成です。ただし、一般的な趣味向けArduinoボード(UNO・Mega2560など)は処理性能が高くないため、低解像度のカメラモジュールを使うことが前提になります。
おすすめカメラモジュール:Arducam OV2640
Arduino UNO・Mega2560に対応したカメラモジュールの中で、安定して動作するとして多くのメイカーから支持されているのがArducam OV2640です。2メガピクセルのCMOSセンサーを搭載し、SPIインターフェースでArduinoと通信します。
【Arducam OV2640 製品リンクをここに挿入】
Arducam OV2640 の基本的な接続方法
Arducam OV2640 は SPI + I2C の2系統で Arduino と通信します。以下に Arduino UNO との代表的な接続ピンをまとめます。
| Arducam ピン | Arduino UNO ピン | 役割 |
|---|---|---|
| VCC | 3.3V | 電源(※5Vは不可) |
| GND | GND | グランド |
| CS | D10 | SPI チップセレクト |
| MOSI | D11 | SPI データ送信 |
| MISO | D12 | SPI データ受信 |
| SCK | D13 | SPI クロック |
| SDA | A4 | I2C データ |
| SCL | A5 | I2C クロック |
⚠️ 注意:Arducam は 3.3V 動作です。Arduino UNO の 5V ピンを直接接続するとモジュールが破損する可能性があります。レベルシフターを使用するか、3.3V 出力ピンを使いましょう。
Arducam OV2640 の基本サンプルコード
以下は Arducam 公式ライブラリを使ったJPEG画像キャプチャの基本スケッチです。事前に Arduino IDE のライブラリマネージャーから「ArduCAM」ライブラリをインストールしてください。
#include <Wire.h>
#include <ArduCAM.h>
#include <SPI.h>
#include "memorysaver.h"
// チップセレクトピンの設定
const int CS = 10;
// ArducamオブジェクトをOV2640で初期化
ArduCAM myCAM(OV2640, CS);
void setup() {
Serial.begin(115200);
Wire.begin();
SPI.begin();
// CSピンを出力に設定
pinMode(CS, OUTPUT);
digitalWrite(CS, HIGH);
// カメラ初期化
myCAM.write_reg(0x07, 0x80); // リセット
delay(100);
myCAM.write_reg(0x07, 0x00);
delay(100);
// JPEG形式、320x240解像度で設定
myCAM.set_format(JPEG);
myCAM.InitCAM();
myCAM.OV2640_set_JPEG_size(OV2640_320x240);
Serial.println("カメラ初期化完了");
}
void loop() {
// 1枚キャプチャ
myCAM.flush_fifo();
myCAM.clear_fifo_flag();
myCAM.start_capture();
// キャプチャ完了を待機
while (!myCAM.get_bit(ARDUCHIP_TRIG, CAP_DONE_MASK));
Serial.println("キャプチャ完了");
// FIFOからデータ読み出し(Serialへ出力)
uint32_t length = myCAM.read_fifo_length();
Serial.print("画像サイズ(バイト): ");
Serial.println(length);
delay(3000); // 3秒ごとにキャプチャ
}
このサンプルでは JPEG 形式で画像をキャプチャし、データサイズをシリアルモニタに出力します。実際の画像データをSDカードやWi-Fi経由で送信するには、追加のライブラリと処理が必要です。
② ESP32-CAM を使う方法(最もコスパが高い)
Arduino互換で動作するESP32-CAMは、カメラモジュール・Wi-Fi・Bluetooth・MicroSDスロットを1枚の基板に集約した非常にコストパフォーマンスの高いボードです。価格は1,000〜1,500円前後と手頃で、多くの入門者におすすめできます。
ESP32-CAM の主な特徴
- 📷 OV2640(2MP)カメラを標準搭載
- 📶 Wi-Fi(2.4GHz)内蔵でストリーミングが可能
- 💾 MicroSDカードスロット搭載
- ⚡ デュアルコア240MHzで画像処理に十分な性能
- 🔧 Arduino IDE から開発可能(ESP32ボードパッケージ必要)
ESP32-CAM でWebカメラ(ライブストリーミング)を実装するサンプル
ESP32 の Arduino ライブラリには「CameraWebServer」のサンプルスケッチが付属しています。Arduino IDE のメニューから ファイル → スケッチ例 → ESP32 → Camera → CameraWebServer を開き、以下の部分を自分の環境に合わせて編集するだけでWi-Fi経由のライブ映像配信が実現できます。
// CameraWebServer.ino(抜粋・重要設定箇所)
// 使用するカメラモデルを選択(ESP32-CAMの場合はこちら)
#define CAMERA_MODEL_AI_THINKER
// Wi-Fi接続情報を設定
const char* ssid = "YOUR_WIFI_SSID"; // ← ご自身のSSIDに変更
const char* password = "YOUR_WIFI_PASSWORD"; // ← ご自身のパスワードに変更
// ※上記を設定してボードを「AI Thinker ESP32-CAM」に
// 選択してスケッチを書き込むとブラウザからカメラ映像を確認できます
書き込み後、シリアルモニタに表示される IP アドレスにブラウザでアクセスすると、ライブ映像の確認や各種設定が行えます。
③ Raspberry Pi と Arduino を組み合わせる方法
より高度な画像処理(顔認識・物体検出・機械学習など)を行いたい場合は、Raspberry Pi をメインの処理系として使い、Arduino をセンサー・モーター制御のサブシステムとして組み合わせる構成が効果的です。
この構成のメリット
- Raspberry Pi Camera Module(高解像度・高フレームレート)を使用できる
- OpenCV・TensorFlow Lite などの画像処理ライブラリを活用できる
- Arduino 側でリアルタイムなモーター・センサー制御を担当し、処理を分担できる
- Python で直感的に開発できる
Raspberry Pi と Arduino の役割分担イメージ
| ボード | 主な役割 | 担当処理の例 |
|---|---|---|
| Raspberry Pi | 高度な処理・判断 | カメラ映像取得、顔検出、Wi-Fi通信 |
| Arduino | リアルタイム制御 | モーター駆動、センサー読み取り、LED制御 |
両者はUSBシリアル通信(または I2C)で連携させます。Raspberry Pi が判断した結果(「前進」「停止」など)をシリアルで Arduino に送り、Arduino がモーターを動かす、というパターンが典型的です。
3パターンの比較まとめ
| 方法 | 難易度 | コスト | 画像処理性能 | 主な用途 |
|---|---|---|---|---|
| ① Arduino + カメラモジュール | 中 | 低〜中 | 低(低解像度のみ) | 簡易撮影・バーコード読み取りなど |
| ② ESP32-CAM | 低〜中 | 低 | 中(ストリーミング可) | 監視カメラ・Webカメラ・IoTなど |
| ③ Raspberry Pi + Arduino | 高 | 高 | 高(顔認識・ML可) | ロボット・高度な画像認識など |
カメラプロジェクトで使える主なライブラリ
Arduinoとカメラを使ったプロジェクトをスムーズに進めるために、以下のライブラリをあわせて確認しておきましょう。
- ArduCAM:Arducam 製カメラモジュール向けの公式ライブラリ(Arduino IDE のライブラリマネージャーからインストール可)
- esp_camera(ESP-IDF 組み込み):ESP32 向けカメラドライバ。Arduino IDE の ESP32 ボードパッケージに含まれる
- OpenCV(Raspberry Pi 向け):Python ベースの画像処理ライブラリ。顔認識・物体検出に対応
よくある質問(FAQ)
Q. Arduino UNO でリアルタイム動画は撮れますか?
A. 現実的には困難です。Arduino UNO の処理速度ではリアルタイム動画の転送・処理が間に合いません。動画配信を行いたい場合は ESP32-CAM または Raspberry Pi を使いましょう。
Q. Arduinoのカメラで顔認識はできますか?
A. Arduino 単体では処理性能が不足します。顔認識を行いたい場合は、ESP32 + Edge Impulse(TinyML)の組み合わせで簡易的な実装は可能ですが、精度の高い顔認識には Raspberry Pi + OpenCV の構成を推奨します。
Q. カメラ映像をスマートフォンで確認したい場合はどうすればよいですか?
A. ESP32-CAM の CameraWebServer スケッチを使うと、同一Wi-Fiネットワーク内のスマートフォンのブラウザからカメラ映像をリアルタイムで確認できます。追加ハードウェア不要で最も手軽な方法です。
まとめ:目的に合ったカメラ構成を選ぼう
Arduinoでカメラを使うプロジェクトには、大きく3つのアプローチがあります。
- シンプルに静止画を撮りたいなら → Arduino + Arducam OV2640
- Wi-Fi経由でカメラ映像を飛ばしたいなら → ESP32-CAM(コスパ最強)
- 顔認識や機械学習まで行いたいなら → Raspberry Pi + Arduino
まずはESP32-CAMから始めてみるのが、コストと難易度のバランスが良くおすすめです。Webカメラとして動作させるだけなら、Arduino IDEのサンプルスケッチを使って数十分で完成します。
Arduinoのプログラミング基礎から学びたい方は、以下の関連記事もあわせてご覧ください。
👉 Arduino入門:開発環境のセットアップと最初のLチカまで(関連記事リンクをここに挿入)
👉 ESP32入門:Arduino IDEでのセットアップ手順(関連記事リンクをここに挿入)
ロボットプログラミングをより体系的に学びたい方は、Udemyの「【Arduinoではじめる】ロボットプログラミング完全マスターコース」もご検討ください。電子工作の基礎からコーディングまで、ハンズオン形式で学べます。
最後まで読んでいただきありがとうございました!疑問点があればコメント欄でお気軽にどうぞ。
📚 関連記事
- ArduinoとPython連携で作るIoT入門|センサーデータをリアルタイム可視化しよう— ArduinoとデータI/Oの実践例
- Arduino入門|電子工作初心者が最初に作るべきLEDプロジェクト5選— Arduino初心者向けの基礎プロジェクト
- Raspberry Pi+PythonでLINE通知付きセキュリティカメラを自作する方法【1万円以下】— カメラモジュール活用の実践例
- Arduinoロボットプログラミング入門|初心者向け完全ロードマップ【2024年版】— Arduinoプロジェクトの学習体系






