Amateur Radio Station R9AL Эиком - электронные компоненты и радиодетали


      На официальном сайте производителя камеры доступна для загрузки утилита «uCAM-III Demo», позволяющая при подключении камеры напрямую к ПК через USB-UART конвертер протестировать ее работу в разных режимах. Эту утилиту, в том числе, удобно использовать для настройки фокуса камеры, т. к. она позволяет быстрее всего получить фотографию, а также включить «видео режим», предполагающий непрерывную съемку фотографий, что удобно как раз при подстройке фокуса.

Процесс подстройки фокуса пошагово:

  1. Скачиваем утилиту «uCAM-III Demo» с официального сайта https://4dsystems.com.au/ucam-iii (вкладка «Downloads»).




  2. Подключаем соединительными проводами камеру к USB-UART конвертеру в соответствии с распиновкой

    uCAM-III USB-UART
    5V 5V
    TX RX
    RX TX
    GND GND


  3. Разархивируем утилиту и запускаем её. Устанавливаем параметры в соответствии со скриншотом ниже (разрешение и формат фотографии могут быть другими).




  4. Нажимаем кнопки интерфейса соответствии с подписанным на них порядком (1. Open comms, 2. Sync, 3. Init и т. д.)




  5. На объективе модуля камеры ослабляем стопорное кольцо. Прокручивая объектив и оценивая четкость полученной фотографии через интерфейс утилиты, получаем необходимое фокусное расстояние




    Как сделать фотку?

    Скачиваем библиотеку для камеры 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).

    UCAMIII camera(&camera_interface, &Serial);
    void setup() {
    


    Данный метод инициализирует обмен данными по выделенному для камеры 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».




    Рассмотрим еще несколько вариантов. Можно воспользоваться шестнадцатеричным редактором. Один из них HxD. Скачать можно здесь ( «https://mh-nexus.de/en/downloads.php?product=HxD20/»).

    Достаточно создать новый файл, затем вставить в главном окне скопированную из монитора порта фотографию в шестнадцатеричном формате.




    Подтвердить операцию





    Далее сохраняем фотографию с расширением «.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.

    const int spi_CS_pin = PA4;
    
    void setup() {
      camera.begin();
      Serial.begin(115200, SERIAL_8E1);
    


    Производим инициализацию карты памяти и, при помощи условного оператора, выводим сообщение о успешной инициализации или ошибке. Ошибка может возникать из-за поврежденной карты памяти или слота на материнской плате.

    
      if (!SD.begin(spi_CS_pin)) {
        Serial.println("SD card initialization failed!");
        while (1);
      }
      Serial.println("SD card initialization done.");
    }
    
    void loop() {
    


    Присваиваем переменной - имени файла строку со структурой “picture{номер фотографии}.jpg”. Обратите внимание на разрешение файла.

      picture_file_name = "picture" + String(picture_number) + ".jpg";
    


    Открываем (создаем) файл на карте памяти в режиме записи (FILE_WRITE) с названием picture_file_name.

      picture_file = SD.open(picture_file_name, FILE_WRITE);
    


    Проверяем успешно ли открылся (создался) файл.

      if (picture_file) {
    


    Вызываем у объекта класса UCAMIII метод sate_to_sd(), внутри которого содержиться код, выполняющий отправку команд камере для сохранения новой фотографии в её буфере. Затем происходит считывание сохраненной фотографии из буфера и запись на карту памяти через SPI интерфейс. В качестве атрибута передается адрес объекта класса File.

        camera.save_to_sd(&picture_file);
    


    Закрываем файл, в который была произведена запись.

        picture_file.close();
    


    Выводим сообщение об успешной записи фотографии на карту памяти.

        Serial.println("Picture: " + picture_file_name + " saved.");
    


    Увеличиваем счетчик номера фотографии на единицу.

        picture_number += 1;
      }
    }
    


    После загрузки кода, открыв монитор порта, вы должны увидеть сообщение об успешной инициализации карты памяти. Затем должны пойти сообщения о успешных сохранениях фотографий на карту памяти.




    После выключения МК, можно извлечь карту памяти. Подключив карту к ПК (скорее всего вам придется использовать кардридер), вы сможете просмотреть сохраненные фотографии.








    Вопросы, обсуждения, дополнения (Телеграмм, MAX)





    Copyright © R9AL 2025 Все права защищены
    Рейтинг@Mail.ru