Быстрый старт: камера MT9D111 с Arducam Shield V2 на Arduino UNO
Arduino Uno — плата с открытой архитектурой на микроконтроллере Microchip ATmega328P, её разрабатывает Arduino.cc.
У модуля камеры MT9D111 параллельный интерфейс, поэтому напрямую к Arduino UNO его не подключить. SRAM у Arduino UNO (2 КБ у ATmega328P) слишком мала, чтобы вместить даже один кадр, а тактовая частота MT9D111 намного выше, чем способен обработать микроконтроллер ATmega328P. Шилд Arducam преобразует параллельный интерфейс в SPI, и через него камеру с параллельным интерфейсом можно использовать с Arduino UNO. Есть и SPI-камеры Arducam, которые подключаются к Arduino и другим платформам, например ESP8266 и ESP32, напрямую. Подробнее — на страницах Arducam Shield Mini 2MP Plus и Arducam Shield Mini 5MP Plus.
Итак, чтобы работать с модулем камеры MT9D111 на Arduino UNO, нужен шилд. Что это за плата, описано в документации.


Ниже показано, как с помощью камеры Arducam MT9D111 и шилда снимать изображения в форматах JPEG и BMP на Arduino UNO.
1. Оборудование



2. Программное обеспечение
2.1. Скачайте пакет с исходным кодом
Подробнее — в документации.


Распакуйте архив с исходным кодом и скопируйте четыре пакета библиотек в папку libraries среды Arduino.

2.2. Быстрый старт
Можно действовать по документации.
Шаг 1.
Откройте файл memorysaver.h из папки Arduino\libraries\ArduCAM.
Шаг 2.
Раскомментируйте строку #define ARDUCAM_SHIELD_V2, а также строку #define MT9D111B_CAM или #define MT9D111A_CAM.
//Step 1: select the hardware platform, only one at a time
//#define OV2640_MINI_2MP
//#define OV3640_MINI_3MP
//#define OV5642_MINI_5MP
//#define OV5642_MINI_5MP_BIT_ROTATION_FIXED
#define OV2640_MINI_2MP_PLUS
//#define OV5642_MINI_5MP_PLUS
//#define OV5640_MINI_5MP_PLUS
//#define ARDUCAM_SHIELD_REVC
#define ARDUCAM_SHIELD_V2
//Step 2: Select one of the camera module, only one at a time
#if (defined(ARDUCAM_SHIELD_REVC) || defined(ARDUCAM_SHIELD_V2))
//#define OV7660_CAM
//#define OV7725_CAM
//#define OV7670_CAM
//#define OV7675_CAM
//#define OV2640_CAM
//#define OV3640_CAM
//#define OV5642_CAM
//#define OV5640_CAM
//#define MT9D111A_CAM
#define MT9D111B_CAM
//#define MT9M112_CAM
//#define MT9V111_CAM
//#define MT9M001_CAM
//#define MT9V034_CAM
//#define MT9M034_CAM
//#define MT9T112_CAM
//#define MT9D112_CAM
- MT9D111A — 0xbe;
- MT9D111B — 0 × 90.
2.3. Примеры скетчей
2.3.1. ArduCAM_Shield_V2_Camera_Playback
Откройте пример ArduCAM_Shield_V2_Camera_Playback, как показано на рисунке.

- Скомпилируйте скетч и загрузите его в Arduino.
- Проверьте, что карта SD вставлена.
- Нажмите кнопку button1 на шилде, чтобы сделать снимок.
- Снимки сохраняются на карту SD.
- Почему ЖК-экран показывает изображение в реальном времени? Файл BMP — это, по сути, данные RGB565, сохранённые с заголовком BMP, поэтому ЖК-экран выводит поток в реальном времени напрямую.
- Почему изображение BMP на карте SD повёрнуто на 180°? Это связано со способом записи данных у главного управляющего чипа.

2.3.2. ArduCAM _shield_V2_MT9D111_Camera_JPEG
Откройте пример ArduCAM _shield_V2_MT9D111_Camera_JPEG, как показано на рисунке.

- Скомпилируйте скетч и загрузите его в Arduino.
- Проверьте, что карта SD вставлена.
- Нажмите кнопку button1 на шилде, чтобы сделать снимок.
- Снимки сохраняются на карту SD.

