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


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



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

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

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
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-карту.

