К содержимому
  1. Главная
  2. Блог
  3. Камера для Arduino: модуль камеры Arducam с интерфейсом SPI

Камера для Arduino: модуль камеры Arducam с интерфейсом SPI

25 декабря 2020 · По материалам Arducam

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

Модуль камеры Arducam Mini 2MP Plus (OV2640)
  • Arducam Mini 2MP Plus — модуль камеры OV2640 с SPI для Arduino UNO, Mega2560 и Raspberry Pi Pico
Модуль камеры Arducam 5MP Plus (OV5642) с SPI
  • 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
Arduchip

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 такие модули совсем не подходят.

Модуль камеры OV7670 для Arduino
Модуль камеры OV7670

Во-первых, порт 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.

Ещё по теме

Запросить цену

Укажите количество — пришлём коммерческое предложение.