Камера для Arduino: модуль камеры Arducam с интерфейсом SPI
Камера высокого разрешения на простом микроконтроллере и простом интерфейсе — по данным Arducam, такое решение есть только у Arducam.

- Arducam Mini 2MP Plus — модуль камеры OV2640 с SPI для Arduino UNO, Mega2560 и Raspberry Pi Pico

- Arducam 5MP Plus — мини-модуль камеры OV5642 с SPI (шилд) для Arduino UNO, Mega2560 и Raspberry Pi Pico
Что такое камера Arducam для Arduino
Проект Arduino появился в 2005 году в Италии как учебный инструмент для курсов по электронике: студентам нужна была простая платформа, в которой объединены аппаратная и программная части. Сейчас Arduino становится отраслевым стандартом среды разработки и компиляторов для микроконтроллеров.
На Arduino уже строят устройства IoT, носимую электронику, 3D-принтеры и роботов. Не хватало только камер.
По данным Arducam, в 2012 году компания создала первую в мире камеру высокого разрешения с SPI для Arduino. С тех пор камеры Arducam с SPI закрывают задачи, которые раньше нельзя было решить штатными средствами плат Arduino.
Эти камеры с SPI работают не только с Arduino: их можно подключить к любому устройству с интерфейсами SPI и I2C.
Почему Arduino плохо дружит с камерами
Чтобы объяснить, почему у Arduino никогда не было полноценной поддержки камер, сначала в общих чертах разберём, что нужно камере со стороны оборудования и со стороны ПО.
Оборудование: интерфейс камеры и ОЗУ
Самые распространённые платы Arduino — UNO, MEGA и Nano — построены на процессорах Atmel ATMega328p, 1280 и 2560. Более поздняя 32-разрядная Arduino Due работает на Atmel SAM3X8E.
Ни у одного из этих микроконтроллеров нет подходящего порта камеры для передачи быстрого видеосигнала, и ни у одного не хватает встроенной ОЗУ, чтобы уместить целый кадр.
ПО: драйвер камеры
Даже будь у Arduino отдельный порт камеры, для работы всё равно нужен подходящий драйвер камеры: разным сенсорам нужны разные драйверы, а написать такой драйвер непросто — особенно разработчикам, которые хотят просто пользоваться камерой. К тому же получить у производителя сенсора даташит и настройки регистров для драйвера тоже нелегко.
Как Arducam решает эту задачу
Подключение камеры через подходящий интерфейс
SPI и I2C — самые распространённые интерфейсы на всех этих микроконтроллерах (MCU). Поэтому Arducam использует SPI для получения данных изображения, а I2C — для настройки регистров сенсора.
SPI — самый быстрый из низкоскоростных периферийных интерфейсов микроконтроллера, быстрее 1-Wire, I2C, UART и I2S. Это шина: одно ведущее устройство и несколько ведомых, у каждого ведомого свой сигнал выбора микросхемы (chip select).
Скорость SPI камеры Arducam рассчитана на 4–8 Мбит/с. Так камера совместима и с 5-вольтовыми, и с 3,3-вольтовыми системами на разных микроконтроллерах Arduino и даже на других процессорах ARM: на высокой скорости задержки преобразователя уровней 5 В ↔ 3,3 В вызывают ошибки связи.
Поэтому рекомендуемая скорость — 4–8 Мбит/с. Более быстрый SPI возможен в заказном исполнении — напишите нам на quote@arducam-russia.ru.
Видеосигнал и буфер кадра
Arducam также разработала сопроцессор Arduchip — контроллер камеры на ПЛИС (FPGA). Он обрабатывает сложные и быстрые временные диаграммы видеосигнала камеры и передаёт кадры во внешний буфер кадра большого объёма.

Arduchip подключён напрямую к сенсору и ведёт весь процесс захвата, снимая эту нагрузку с микроконтроллера и перенося её на ПЛИС Arducam.
Микроконтроллеру остаётся только отправить команду захвата и считать кадр — медленно, побайтно, когда у него найдётся время. Кадр при этом не потеряется: он хранится в буфере, пока буфер явно не очистят.
Такая архитектура решает проблему отсутствия отдельного интерфейса камеры за счёт единой аппаратной и программной структуры.
Выбор подходящего сенсора
В камерах Arducam с SPI стоят сенсоры-SoC (например, OV2640) со встроенным кодером JPEG, который сжимает изображение. Кадр передаётся быстрее, а в буфер помещается больше кадров.
Например, кадр JPEG на 2 Мп (1600 × 1200) занимает около 150 КБ, а частота кадров сенсора — 15 к/с. Значит, в буфер кадра на 8 МБ помещается до 3,6 с видео или 54 снимка.
Если снизить разрешение до QVGA (320 × 240) — около 3 КБ на кадр при 30 к/с, — в буфер поместится до 91 с видео или 2730 снимков.
OV2640 или OV7670
Возможно, вы спросите, почему с Arduino используют и другие модули камер — например, камеры с последовательным интерфейсом (UART) и камеру OV7670 с FIFO. В Arducam считают, что для Arduino такие модули совсем не подходят.

Во-первых, порт UART.
Камера с последовательным интерфейсом работает через UART, а его максимальная скорость — 912,6 кбит/с, меньше четверти от 4 Мбит/с у SPI. Поэтому разрешение у таких камер всегда меньше 2 Мп. Кроме того, UART — не шинный интерфейс: несколько устройств на нём не работают.
Во-вторых, разрешение.
В камере OV7670 с FIFO стоит сенсор Omnivision формата VGA (640 × 480), а буфером кадра служит микросхема FIFO AL422B общим объёмом 3 Мбит (384 КБ). Но кадр 640 × 480 в RGB565 или YUV422 занимает 600 КБ, так что AL422B не вмещает кадр VGA. Камера поддерживает только QVGA — 320 × 240.
И наконец, выводы GPIO и драйвер камеры.
Выходной интерфейс FIFO AL422B занимает больше 10 выводов GPIO на Arduino — это расточительно. А в драйвере камеры каждый байт из FIFO приходится считывать программным управлением выводами (bit-banging), что медленно и неэффективно.
Где применять модули камер Arducam с SPI
Камеры Arducam для Arduino рассчитаны на обычные маломощные платы Arduino. Их основная задача — фотографии высокого разрешения или короткие видеоролики на несколько секунд.
Подходят для:
- устройств IoT с батарейным питанием, которые делают снимок и сохраняют его на SD-карту или передают по Wi-Fi в облако (например, в Twitter или на сервер AWS) для дальнейшей обработки;
- устройств с батарейным питанием вроде кубсатов (CubeSat): камеру Arducam можно полностью обесточить, отключив её вывод питания MOSFET-транзистором, — потребление падает до НУЛЯ;
- систем с несколькими камерами, например для панорамной съёмки: на одну шину можно подключить больше четырёх камер Arducam, снять кадры одновременно, а затем по очереди считать данные с каждой камеры;
- машинного обучения на микроконтроллерах (TinyML) с TensorFlow Lite — пример есть в официальном руководстве Arduino «Person Detection with TensorFlow and Arduino».
Не подходят для:
- потокового видео;
- видеонаблюдения;
- видеозаписи.
Пропускной способности SPI не хватает для видеопотока MJPEG.
Заказные проекты
Arducam также разрабатывает для коммерческих заказчиков модули камер с SPI на сенсорах, которые выбирает заказчик. Например, для съёмки при слабом освещении, в том числе для астрофотографии, подходят сенсоры IMX224/IMX225 (цветные) и AR0130 (монохромный). Это примеры заказных проектов, которые выполнила Arducam.
