Pull to refresh

Remote Follow Focus на Arduino

Reading time3 min
Views18K
Однажды я решил сделать Remote Follow Focus для своей камеры. Это система которая позволяет фокусировать объектив с некоторого расстояния. Таким образом камера может находится на кране, стедикаме или на плече у оператора и при этом оператор фокуса (focus puller) имеет возможность крутить фокусировочное кольцо на объективе удаленно. Идея родилась сама собой когда я смотрел что можно сделать при помощи Arduino.



Когда все компоненты приехали я приступил к сборке прототипа. Для этого проекта я использовал:
  1. Arduino Duemilanove и Arduino Uno (разные только потому что покупались с интервалом в несколько лет)
  2. 2 приемо-передатчика nRF24L01+
  3. Сервомашинка
  4. Шестеренка (0.8 pitch)
  5. MaxSonar EZ0
  6. 7-Segment Serial Display
  7. Переменный резистор 10k
  8. 2 регулятора напряжения 3.3В
  9. Несколько конденсаторов и резисторов для стабилизации питания согласно спецификациям на регулятор напряжения и сонар
  10. Макетные платы, шлейфы, разъемы, термоусадка, провода, разное
При последующей сборке в корпус я планирую использовать Arduino Nano. Эта версия существенно меньше чем Duemilanove и Uno. Единственный минус этой платы заключается в том что она не выдает наружу 3.3В если ее питать не через USB. Именно поэтому я и добавил регулятор напряжения на свою макетную плату.



Передатчик (блок управления)


Приемник (исполняющий блок)


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

Мне повезло и nRF24L01+ умеют общаться в двухстороннем режиме. Так что я на «приемнике» также установил ультразвуковой дальномер MaxSonar EZ0. Он измеряет расстояние до объекта перед камерой и эту цифру «приемник» отправляет «передатчику» — на блок управления. Там эта цифра отображается на 7-сегментном дисплее. Она по идее должна помогать человеку управлять фокусом. Например, можно нанести шкалу вокруг ручки что бы можно было фокусироваться по цифрам.

Макетная плата и модуль с nRF24L01+


MaxSonar EZ0


Обратная сторона одной из макетных плат


В процессе работы над этим проектом я столкнулся со множеством различных проблем. Но почти все из них удалось героически побороть.

Вот некоторые из них:
  1. Плавающие значение аналогового входа. Почему-то на входе с резистора я получаю очень большой разброс значений в тот момент когда ручка не крутится. Решил проблему программно — усредняю значения и делаю еще несколько трюков. В целом проблема почти решена. Еще попробую другой резистор. Текущий, похоже, старше меня.
  2. Малая точность позиционирования сервомашинки. Документация по умолчанию предлагает позиционировать сервомашинку с точностью до 1 градуса. Для меня этого было мало. Улучшил ситуацию функцией writeMicroseconds. Она позволяет более точно поворачивать шестеренку.
  3. Приемо-передатчики не заработали сразу. Проблема оказалась в распиновке на странице с документацией. В сети нашел другую страницу с рабочей распиновкой и радио заработало.
  4. Сервомашинка работает рывками при использовании последовательного порта в программе. Видимо, прерывания мешают ее таймингу. А удобнее всего данные из MaxSonarа было вынимать именно по последовательному порту. Пришлось полностью переписать программу на прерывания и использовать ШИМ выход. С аналогового выхода считать расстояние получалось плохо.
  5. ШИМ выход у MaxSonar работает не стабильно. Есть разброс значений. Но пока что мне это не критично. Планирую в дальнейшем все-таки решить эту проблему более радикально. Еще не знаю как.
  6. 7-сегментный дисплей умудрился сам перепрошиться на другой baud rate. Я два дня думал что он просто сгорел. Но потом додумался перепроверить на всех baud rate и увидел что он все-таки рабочий. В целом он работает не очень стабильно. Возможно, из-за того что я использую SoftwareSerial. Или же из-за того что генераторы частоты у него и у Arduino разные.
Дальше я планирую перейти на Arduino Nano для экономии пространства, поместить схемы в корпус, решить вопрос с питанием (будет LiPo аккумулятор и зарядка от Mini USB), заменить сервомашинку, сделать крепление для сервомашинки из алюминиевого уголка а не из полиморфного пластика. И, конечно же, провести полевые испытания. Надеюсь что из этого что-то все-таки получится. Не переключайтесь.
Tags:
Hubs:
Total votes 50: ↑46 and ↓4+42
Comments25

Articles