Данное устройство позволяет осуществлять наведение закрепленного на поворотном штативе прибора (камера, антенна, фонарь и т.д.) на портативный радиомаяк.
Штатив состоит из двух компонент - поворотный механизм и радиомаяк.
Радиомаяк определяет угловое положение относительно штатива при помощи ГНСС-приемника. Вычисленное значение при помощи беспроводного канала связи передаётся в поворотный механизм.
Поворотный механизм осуществляет поворот платформы с закрепленным прибором на требуемый угол.
В данном репозитории представлен исходный код различных вариантов реализации роботизированного штатива.
Варианты поворотного механизма:
- С приводом платформы от сервопривода с PWM интерфейсом (Например SG90);
- С приводом от биполярного шагового двигателя NEMA с драйвером, поддерживающим интерфейс STEP/DIR (использовался двигатель NEMA17 и драйвер TMC2130);
- С приводом от униполярного шагового двигателя 28byj-48 и буфером ULN2003.
- С релейным трехпозиционным регулятором;
- С ПИД регулятором.
Варианты радиомаяка:
- С использованием библиотеки NeoGPS и аппаратного UART;
- С использованием библиотеки TinyGPS и программного UART для подключения к ГНСС-приёмнику;
- С использованием UART трансиверов HC-12 и программным контролем целостности пакетов;
- С использованием SPI трансиверов sx1278 на базе технологии LoRa и программным контролем целостности пакетов;
- С использованием UART трансиверов Ebyte E32-868T20S на базе технологии LoRa и аппаратным контролем целостности пакетов;
- Без внешних радиомодулей, с использованием AdHoc WiFi, UDP-датаграм и программным контролем целостности пакетов;
- Без внешних радиомодулей, с использованием протокола ESP-Now и программным контролем целостности пакетов;
- С обратной связью с поворотным механизмом;
- Без обратной связи с поворотным механизмом.
Поворотный механизм (в зависимости от выбранного варианта реализации):
- WeMos D1 mini (ESP8266/ESP8266Ex);
- HC-12/SX1278/E32-868T20S
- Sg90/28byj-48/NEMA17
- ULN2003/TMC2130;
- Микропереключатель;
- Li-ION АКБ типоразмера 18650 (2 шт.);
- Понижающий DCDC преобразователь 8.2 ... 7.4 -> 5в;
- Внешняя штырьевая антенна на выбранный диапазон частот;
- Коаксиальный кабель с волновым сопротивлением 50 Ом и коннекторы для подключения кабеля к антенне и выбранному трансиверу.
Радиомаяк (В зависимости от выбранного варианта реализации):
- WeMos D1 mini (ESP8266/ESP8266Ex);
- HC-12/SX1278/E32-868T20S
- ГНСС-приемник NEO-6M с UART интерфейсом;
- Миниатюрный вибромотор;
- Li-ION АКБ типоразмера 18650 (1 шт.);
- Повышающий DCDC-преобразователь 4.2 ... 2.7 -> 5в. (Опционально);
- Микрокнопка без фиксации;
- Спиральная антенна на выбранный диапазон частот.
Электронные компоненты располагаются на макетных платах. Платы и остальные элементы размещаются в печатных корпусах. Файлы для печати находятся в каталоге 3d.
Исходный код написан в среде Arduino IDE с расширением Arduino core for ESP8266. В зависимости от выбранного варианта реализации необходимо установить следующие библиотеки:
После включения питания поворотного механизма, производится автоматическое тестирование привода платформы. При этом она поворачивается на угол 90 градусов относительно первоначального положения по часовой и против часовой стрелки, после чего платформа должна вернутся в исходную позицию.
Радиомаяк после включения подаёт короткие сигналы при помощи вибромотора. Описание сигналов:
- Один короткий сигнал - отсутствует сигнал ГНСС, либо количество принимаемых спутников недостаточно для точного определения координат.
- Два коротких сигнала - отсутствует связь с поворотным механизмом (в случае использования варианта поворотного механизма с обратной связью);
Работа штатива возможна только после того, как включенный радиомаяк перестанет формировать короткие вибросигналы.
После того, как радиомаяк будет готов к работе, происходит фиксация в оперативной памяти радиомаяка координат поворотного механизма. Для этого, необходимо вплотную приблизится к поворотному механизму, и зажать кнопку радиомаяка до появления продолжительного вибросигнала (~1с.). После этого, необходимо указать радиомаяку вторую точку, для определения первоначального азимута поворотного механизма. Для этого необходимо отойти на расстояние около 10 метров от поворотного механизма и встать по центру кадра закрепленной на нем камеры (встать в фокус луча фонаря, антенны и т.п.) и зажать кнопку радиомаяка до появления продолжительного вибросигнала. После совершения данного действия, поворотный механизм будет автоматически удерживать радиомаяк в центре кадра установленной на нем камеры.
Определение координат радиомаяком осуществляется с частотой 5 Гц. Для перевода ГНСС-приемника в данный режим работы, при включении радиомаяка в приёмник передаётся предопределенная телеграма бинарного протокола UBX. Помимо этого, остальные телеграмы отключают неиспользуемые радиомаяком NMEA параметры (NMEA sentences): VTG, RMC, GSV. Данный шаг необходим, так как попытки перевести UART-порт ГНСС приемника на бодовую скорость, отличную от 9600 Бод/с. не увенчались успехом и использование "полновесного" NMEA протокола с частотой 5 Гц было бы невозможно.
После того, как определен первоначальный азимут поворотного механизма, радиомаяк 5 раз в секунду передаёт текущий горизонтальный угол относительно первоначального азимута. Для этого используется простейший ASCII-протокол, пакет которого имеет следующий вид: @ANGLE@CRC@\n
, где ANGLE - текущий угол относительно первоначального азимута (целое число), CRC - контрольная сумма CRC8 от значения ANGLE (целое число). В некоторых вариантах реализации угол может быть вещественным числом, с точностью до одного знака после запятой, в этом случае параметр ANGLE - представляет собой значение угла, умноженное на 10.
Поворотный механизм, приняв пакет проверяет его целостность, если пакет принят корректно - определяется текущее значение ошибки как разность между фактическим углом поворота платформы относительно первоначального азимута и полученным углом от радиомаяка. Для определения фактического угла поворота платформы используется подсчет шагов шагового двигателя (количество шагов на один градус для двигателя указывается в переменной STEPS_PER_DEGREE
). Алгоритм устранения ошибки зависит от выбранного варианта реализации. В простейшем случае происходит плавный поворот платформы в точку, где последний раз находился радиомаяк. Плавность разгона обеспечивается библиотекой AccelStepper. Во втором случае, управление шаговым двигателем выполняется с испльзованием PID-алгоритма, при этом, для исключения рывков, вызванных дискретностью получения координат от радиомаяка, используется сглаживание ошибки при помощи ramp-функции. Выходным значением PID-регулятора является интервал между шагами шагового двигателя. Полученный интервал используется в качестве уставки аппаратного таймера микроконтроллера, по прерыванию от которого совершается один шаг в нужном направлении.