На официальном сайте производителя камеры доступна для загрузки утилита «uCAM-III Demo»,
позволяющая при подключении камеры напрямую к ПК через USB-UART конвертер протестировать
ее работу в разных режимах. Эту утилиту, в том числе, удобно использовать для настройки
фокуса камеры, т. к. она позволяет быстрее всего получить фотографию, а также включить
«видео режим», предполагающий непрерывную съемку фотографий, что удобно как раз при
подстройке фокуса.
Подключаем соединительными проводами камеру к USB-UART конвертеру в соответствии
с распиновкой
uCAM-III
USB-UART
5V
5V
TX
RX
RX
TX
GND
GND
Разархивируем утилиту и запускаем её. Устанавливаем параметры в соответствии со
скриншотом ниже (разрешение и формат фотографии могут быть другими).
Нажимаем кнопки интерфейса соответствии с подписанным на них порядком
(1. Open comms, 2. Sync, 3. Init и т. д.)
На объективе модуля камеры ослабляем стопорное кольцо. Прокручивая объектив и
оценивая четкость полученной фотографии через интерфейс утилиты, получаем необходимое
фокусное расстояние
Как сделать фотку?
Скачиваем библиотеку для камеры
https://github.com/AlekseiProkhorov/uCAMIII (code -> download ZIP). Данная библиотека
упрощает работу с камерой, она содержит в себе класс uCAMIII и методы, позволяющие
передавать фотографию через UART интерфейсы и/или сохранять её на карту памяти.
Разбор кода для вывода фотографии через UART интерфейс
В данном коде для вывода фотографии на компьютер мы будем использовать UART0 интерфейс
нашего микроконтроллера (выводы TX1 и RX1 на материнской плате, куда обычно подключается
Bluetooth). Обмен данными по этому интерфейсу вы уже осуществляли, обращаясь к нему через
объект Serial.
Чтобы работать с камерой, в первую очередь нужно подключить библиотеку:
#include <uCamIII.h>
Настроим обмен данными с камерой. Создаем объект класса HardwareSerial. В качестве
атрибута передаем идентификатор, соответствующий выбранному свободному UART. Если вы
используете пины TX2 и RX2, это идентификатор «USART2», если TX3 и RX3 - «USART3».
Например:
HardwareSerial camera_interface(USART3);
Создаем объект класса UCAMIII, чтобы передавать камере команды по выбранному интерфейсу.
В качестве атрибутов необходимо указать адреса объектов, отвечающих за взаимодействие по
UART интерфейсу с камерой (&camera_interface) и вывод данных (&Serial).
Данный метод инициализирует обмен данными по выделенному для камеры UART интерфейсу.
camera.begin();
Данный метод инициализирует обмен данными по выделенному вывода данных UART интерфейсу.
Скорость должна соответствовать той, на которую настроены ваши Bluetooth-модули и
загрузка программы.
Serial.begin(115200, SERIAL_8E1);
}
void loop() {
В цикле loop() вызывается метод print_picture(), внутри которого содержиться код,
выполняющий отправку команд камере для сохранения новой фотографии в её буфере. Затем
происходит считывание сохраненной фотографии и ее отправка через указанный для вывода
UART интерфейс (в данном примере UART0).
camera.print_picture();
}
После загрузки кода, в случае если UART0 МК спутника подключен к ПК через USB-UART
конвертер или пару Bluetooth модулей, можно открыть в Arduino IDE монитор порта и
убедиться, что нам выводятся байты фотографии в сжатом формате JPEG
Самый простой способ получить из этих байтов фотографию - воспользоваться одним из
онлайн сервисов. Вот один из них (
https://codepen.io/abdhass/full/jdRNdj/). Достаточно скопировать все байты фотографии
из монитора порта и вставить в соответствующее окно на сайте и нажать «Convert».
Достаточно создать новый файл, затем вставить в главном окне скопированную из монитора
порта фотографию в шестнадцатеричном формате.
Подтвердить операцию
Далее сохраняем фотографию с расширением «.jpeg».
Если вы очень хотите автоматизировать данный процесс сохранения фотографии, то проще
всего это сделать написав простой скрипт на Python’е, который будет считывать данные
из COM порта и сохранять каждую фотографию в новый файл
Как сделать фотку и сохранить на карту памяти?
При помощи указанной выше библиотеки можно аналогичным образом реализовать сохранение
фотографии на карту памяти, подключенную по интерфейсу SPI. Если вы воспользуетесь
картой памяти формата microSD и вставите её в слот, распаянный на материнской плате
конструктора, то подключите её к первому SPI интерфейсу МК.
Разбор кода для сохранения фотографии на карту памяти через SPI интерфейс
Подключаем библиотеки для работы с SPI и картой памяти.
#include <SPI.h>
#include <SD.h>
#include <uCamIII.h>
Создаем переменные
File picture_file; //переменная класса File, для работы с файлами на карте
int picture_number = 0; //переменная - номер фотографии
String picture_file_name; //переменная - имя файла фотографии
HardwareSerial camera_interface(USART3);
В данном примере, при создании объекта класса UCAMIII, в качестве атрибута указывается
только адрес объекта, отвечающего за взаимодействие по UART интерфейсу с камерой
(&camera_interface), т.к. вывод (сохранение) фотографии происходит на карту памяти.
UCAMIII camera(&camera_interface);
Создаем переменную, хранящую пин к которому подключен Chip Select карты памяти.
В условиях распаянного на материнской плате слота - это всегда PA4, для первого SPI.
Производим инициализацию карты памяти и, при помощи условного оператора, выводим
сообщение о успешной инициализации или ошибке. Ошибка может возникать из-за поврежденной
карты памяти или слота на материнской плате.
if (!SD.begin(spi_CS_pin)) {
Serial.println("SD card initialization failed!");
while (1);
}
Serial.println("SD card initialization done.");
}
void loop() {
Присваиваем переменной - имени файла строку со структурой “picture{номер фотографии}.jpg”. Обратите внимание на разрешение файла.
Вызываем у объекта класса UCAMIII метод sate_to_sd(), внутри которого содержиться код, выполняющий отправку команд камере для сохранения новой фотографии в её буфере. Затем происходит считывание сохраненной фотографии из буфера и запись на карту памяти через SPI интерфейс. В качестве атрибута передается адрес объекта класса File.
camera.save_to_sd(&picture_file);
Закрываем файл, в который была произведена запись.
picture_file.close();
Выводим сообщение об успешной записи фотографии на карту памяти.
После загрузки кода, открыв монитор порта, вы должны увидеть сообщение об успешной
инициализации карты памяти. Затем должны пойти сообщения о успешных сохранениях
фотографий на карту памяти.
После выключения МК, можно извлечь карту памяти. Подключив карту к ПК (скорее всего
вам придется использовать кардридер), вы сможете просмотреть сохраненные фотографии.