Делаем timelapse слайдер для камеры
Всем привет!
7 лет назад, будучи молодым юнцом, которому всё казалось по плечу, я пообещал своему другу сделать таймлапс слайдер. Для тех, кто не знает, что такое таймлапс и слайдер, велкам по ссылкам. Если кратко — это девайс, на который можно поставить камеру, и она будет делать серию снимков (или видео снимать) в движении по прямой.
Казалось, что реализовать этот проект — как 2 пальца об асфальт. Нужно просто сделать каретку, поставить ее на направляющие, привязать веревку к каретке и поставить движок, который будет мотать эту веревку. Делов-то!
Я расслабился и, держа в голове эту архитектуру, периодически продумывал детали. Однако друг сказал, что слайдер должен быть метра 3 в длину. Это немного усложняло задачу.
- Во-первых — где найти / из чего сделать 3х метровые направляющие?
- Во-вторых — как передвигаться с такой махиной (обычно таймлапс снимают за городом, если это астрофото, ну или как минимум не дома), т.е. ее хорошо бы сделать складной.
Сейчас расскажу и покажу процесс разработки, и что из этого вышло.
Первый макет
Я решил, что для реализации 3-х метрового слайдера нужно делать его на деревянном брусе, используя пластиковый кабель-канал в качестве направляющей. Каретку можно сделать из металлических уголков, крепежа и подшипников. Нужно 3 бруса и 2 петли, чтобы эта конструкция была складная.
После того, как я собрал всё это, понял, что брус не особо ровный. Выровнять его рубанком не удалось (нужно всё же оборудование получше, которое позволит сделать его идеально ровным). Да и каретка не может ровно переезжать с одной части на другую, постоянно застревает. Кстати, каретка еще вышла очень тяжелая. В общем, конструкция мне не очень понравилась. И я решил этот проект отложить и подумать.
Вот кстати видос 7-летней давности с промежуточными результатами.
И вот пару лет назад у меня появился 3д принтер. С ним проектировать и воплощать в жизнь свои хотелки стало проще.
К тому же, наглядевшись на разные вариации слайдера, я понял, что 3х метровые слайдеры никто не делает. Максимум метровые.
Переработанная конструкция
Итак, нам уже нужны не 3х метровые направляющие, а метровые. Глядя на проекты в интернете, подметил, что многие в качестве направляющих используют гладкие валы и линейные подшипники, либо направляющие для роликов. Я решил попробовать сделать проект бюджетным и реализовать его на обычном круглом алюминиевом профиле.
2х метровый профиль стоит 80 рублей. Отлично, подходит!
Линейные подшипники я заменил на пластиковые, напечатанные на 3д принтере.
Осталось продумать стойки и каретку. Прикинув размеры, я сделал 2 стойки, в которые вставляются направляющие и затягиваются болтом М3х35.
Вся электроника будет находиться на одной стойке, чтобы не тянуть провода ко второй. Таким образом, у нас будет только 1 концевик, и нам придётся продумать подсчёт шагов, чтобы после того, как каретка достигнет стойки без концевика, она начала обратное движение.
Каретка же просто состоит из плоскости, на которую крепится камера, и пластиковых подшипников. Я сначала решил соединять подшипники на болты с основной частью каретки (если печатать всё в сборе, придётся много тратить пластика на поддержки при печати), но потом решил просто посадить на клей (дихлорэтан), в итоге получилось отлично.
После печати и сборки стало понятно, что каретка оооочень плохо ходит по направляющим. Поэтому я решил просто увеличить диаметр подшипников. Это довольно хорошо сработало, особых люфтов потом не замечал.
Теперь возник вопрос — как можно тянуть каретку. Конечно, можно взять зубчатый ремень, и всё будет довольно классно. Но я подумал, что должен быть способ дешевле. Я испробовал несколько вариантов верёвок, прорезинивал валы на движке, но всё равно в какой-то момент они проскальзывали.
Потом я вспомнил свой настенный плоттер, который использует веревку для жалюзи с нанизанными по всей длине шариками для передачи движения. Стоимость веревки 100 рублей за 5м. Гуд!
За пару печатей смог сделать "зубчатый" вал для неё, чтобы точно подходил по частоте шариков. Пришлось повозиться с моделькой и постараться сделать так, чтобы было как можно меньше поддержек, а то их сложно отделять от модели.
Электроника
В общем, с механикой разобрались. Теперь дело за электроникой.
Я, конечно, хотел уйти от Arduino, потому что было ощущение, что проект можно реализовать на обычном таймере NE555. Но нам, увы, нужно будет считать шаги для двигателя, чтобы знать расстояние, которое прошла каретка, чтобы вернуть ее в нужный момент, и она не уткнулась бы в стойку без концевика. Поэтому я скрепя сердце решил пилить на Arduino Nano.
Продумываем электронику, исходя из того, как бы нам хотелось, чтобы работало устройство.
Логика примерно такая.
Выставляем каретку в крайнее положение (где нет концевика). Включаем устройство. Каретка двигается в другую сторону. Хотелось бы регулировать скорость передвижения каретки (значит, будет потенциометр). Как только каретка дошла до конца, должен сработать концевик, и каретка должна поехать обратно. Как только каретка вернётся в первоначальное положение, она опять должна начать ехать в другую сторону (для этого нам придётся считать шаги для шаговика).
Чтобы тянуть каретку с камерой, а еще возможно и под углом, нам нужен хороший шаговик. У меня есть Nema17, которая кушает 12В и около 1 - 1.5А.
Плюс еще хотелось бы питать устройство от обычного powerbank на 5В.
Исходя из этого, набор железа у нас такой:
- Arduino Nano
- Nema17
- драйвер для шаговика A4988
- MT3608 Step Up 5V -> 12V
- Концевик
- Потенциометр на 50 кОм
Схема выглядит таким образом:
Выглядит вроде просто, и работать должна просто.
Я собрал её на макетке, запаяв Arduino и драйвер (напрасно).
С самого начала что-то не задалось. У меня постоянно горел драйвер, а за ним и ардуино. Короткое замыкание! Где, почему? Наверно, из-за соплей на макетке. Я перепаял некоторые части, сделав контакты для смены ардуины и драйвера.
Тестирую - всё равно что-то горит. Немного работает, ты радуешься, и потом всё горит.
Я проверил пайку, заизолировал что мог. Всё по-прежнему — работает, потом горит. И я подумал: наверное, степ-ап не подходит по мощности, и он как-то коротит, либо из-за недостатка питания какой-то элемент ведёт себя не очень. Какой именно — не ясно. Я решил — окей, давай без степ-апа. Нашел бюджетный 12В портативныый акум, довольно мощный и с зарядником за 800р.
Убираем степ-ап из схемы. Питаем все от 12В, ардуина своим стабилизатором выдает 5В, и всё в шоколаде.
Всё работает...какое-то время, и потом горит.
Честно говоря, я периодически впадал в депрессию и чувствовал себя недоинженером каким-то.
Поставил предохранитель на 2А на питание, чтобы избежать КЗ. Всё равно — горят Arduino и драйвер, предохранитель не горит. Посмотрел переходные процессы при питании от акума - всплесков нет.
Долго шерстил форумы, и в каком-то труде нагугли, что нужно обязательно ставить конденсатор на 47uF(минимум) на питание 12В для драйвера, потому что там могут быть всплески напряжения до 35В при работе (хотя питание 12), которые и убивают стабилизатор ардуины, который потом коротит!
Поставил. Сплю спокойно:) Реально сработало!
За всё время я спалил около десятка драйверов и ардуин, грусть-печаль)
Режимы работы
Ещё была идея сделать 2 режима — медленный и турбо. Для этого поставил тумблер, который переключал микрошаги для драйвера. Отключаешь микрошаги — крутится быстро. Включаешь микрошаги (замыканием 5В на 3 пина M1, M2, M3 драйвера, что означает деление шага на 16) — крутится медленно. Идея классная, но вибрации от движка при полном шаге просто угнетающие - снимать невозможно, всё трясётся. В общем, от такой идеи пришлось отказаться.
Прошивка Arduino
Управление движком идёт без каких-либо библиотек, потому что в основном в библиотеках нужно задать скорость вращения, и ты при этом никак не узнаешь, сколько шагов сделал движок. Мне же было нужно это знать, чтобы вовремя вернуть каретку (считать время при определенной скорости движка не канает - скорость может меняться, а ардуино считает время не особо точно).
Поэтому я считываю положение потенциометра, и в зависимости от этого выставляю паузы между сигналами для шаговика. Изначально делал паузы в микросекундах, но в каком-то положении потенциометра движок начинал неистово вертеться в разные стороны. Оказалось, в Ардуино функция delayMicroseconds() может принимать максимальное значение 16383, выше которого она уже за себя не отвечает. Поэтому максимальная скорость вращения теперь ограничивается функцией delay(1)
void simpleMove(int steps,int interval) {
for (int i = 0; i < steps; i++) {
digitalWrite(STEP, HIGH);
digitalWrite(STEP, LOW);
delay(interval);
}
}
Единственной проблемой всё же остаются вибрации от движка из-за драйвера A4988 и неровностей профиля (и, возможно, непараллельности). На малых скоростях их не видно, на средних и высоких иногда бывают. Как вариант — проложить демпфер, либо поменять драйвер на тихий и подшкурить пластиковые подшипники.
Результат
Печатаем корпус для электроники и собираем всё!
Вот как работает эта штука:
А вот видео с камеры:
И тест на айфоне:
Ссылки
Github repo
Модели на thingiverse
Спасибо за внимание! Like/share приветствуются)