Как-то недавно мне понадобилось дистанционно управлять затвором зеркалки. Проводной вариант был отброшен, неудобно. Поискав по магазинам, нашел пульт ML-L3. Но отдавать за него тысячу рублей не хотелось, тем более что выполняемая функция на первый взгляд элементарная. Решил сделать сам. А тут, кстати, подоспели выходные и работа закипела…


Теория или как это работает


Вначале была надежда, что в сети можно найти все коды и описание того, как ИК пульт работает. Но в итоге удалось отыскать лишь описание последовательности, которую нужно сгенерировать для срабатывания затвора. Вот рисунок такой посылки для фотоаппаратов Nikon:



Как видно, ничего сложного. Частота заполнения 38,4 кГц.

Для фотоаппаратов Canon последовательность еще проще:



У них частота заполнения – 33 кГц.

Схема, печатная плата и детали


Хотелось не просто повторить пульт, но и снабдить его дополнительным функционалом. В итоге решил добавить таймер для съемки Timelapse видео и возможность управления фотоаппаратами Nikon и Canon. Исходя из имеющихся в запасе деталей, была создана следующая схема:



DD1 – PIC12F629
HL1 – ARL2-5013IRAB-940NM
R1 – 150 Ом
SB1 – Кнопка тактовая FSM4JH
A0 – DIP переключатель DS1040-03RN
C1 – Конденсатор танталовый, 47 мкФ х 10 В, тип B
+ Батарейный отсек BH-624 (1xAAA)

Итоговая стоимость всех деталей – 240 рублей (по ценам на апрель 2015, в не самом дешевом магазине города).



Выбранный микроконтроллер имеет порты ввода-вывода повышенной мощности, что позволяет коммутировать инфракрасный светодиод без дополнительного ключа. Кнопка SB1 генерирует выбранную последовательность. Выключателя питания нет, т.к. микроконтроллер постоянно находится в спящем режиме и потребляет 70 наноампер, «просыпаясь» лишь на время генерации сигнала. Джампер X1 переключает тип фотоаппарата: установлен – Canon, снят – Nikon. Переключатели А0…А2 задают период срабатывания таймера для съемки Timelapse видео:

А2 А1 А0 Период
0 0 0 нет
0 0 1 2 секунды
0 1 0 4 секунды
0 1 1 8 секунд
1 0 0 15 секунд
1 0 1 30 секунд
1 1 0 1 минута
1 1 1 2 минуты


Спроектированная печатная плата, также как и схема, очень проста:



Изготовленная печатная плата стандартным методом ЛУТ и собранная:



Исходный код микроконтроллера
errorlevel 0,-207,-205,-302,-203

#include <P12F629.INC>

__CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT

LED equ 5; ИК-светодиод
CFG equ 4; Nikon (1) / Canon (0)

;===============================================================================
; Переменные
;===============================================================================

CBLOCK 0x020
DEL
DEL_MS
IMP
COUNT
ENDC

;===============================================================================
; Сброс
;===============================================================================

ORG 0
GOTO START

;===============================================================================
; Прерывания
;===============================================================================

ORG 4
RETFIE

;===============================================================================
; Подпрограммы
;===============================================================================

; Подпрограмма задержки (в микросекундах, 770 мкс max)
;(Перед вызовом поместить величину задержки в W)
DEL_MK MOVWF DEL
M1 DECFSZ DEL, F
GOTO M1
RETLW 0

; Подпрограмма задержки (в миллисекундах, 256 мс max)
;(Перед вызовом поместить величину задержки в W)
DEL_M MOVWF DEL_MS
MOVLW 0xA5
M2 CALL DEL_MK
CALL DEL_MK
DECFSZ DEL_MS, F
GOTO M2
RETLW 0

; Подпрограмма вывода импульса для Nikon (заполнение 38,4 кГц)
;(Перед вызовом поместить длительность импульса в W)
NIK MOVWF IMP
M3 BCF GPIO, LED
MOVLW 0x02
CALL DEL_MK
NOP
BSF GPIO, LED
MOVLW 0x01
CALL DEL_MK
NOP
DECFSZ IMP, F
GOTO M3
RETLW 0

; Подпрограмма вывода сигнала для Nikon
NIKON MOVLW 0x4D
CALL NIK; импульс 2 мс
MOVLW 0x12
CALL DEL_M; пауза 27,8 мс
MOVLW 0x47
CALL DEL_MK
MOVLW 0x0F
CALL NIK; импульс 0,4 мс
MOVLW 0x01
CALL DEL_M; пауза 1,6 мс
MOVLW 0x69
CALL DEL_MK
MOVLW 0x0F
CALL NIK; импульс 0,4 мс
MOVLW 0x02
CALL DEL_M; пауза 3,6 мс
MOVLW 0xFF
CALL DEL_MK
MOVLW 0x0F
CALL NIK; импульс 0,4 мс
RETLW 0

; Подпрограмма вывода импульса для Canon (заполнение 33 кГц)
;(Перед вызовом поместить длительность импульса в W)
CAN MOVWF IMP
M4 BCF GPIO, LED
MOVLW 0x02
CALL DEL_MK
NOP
NOP
NOP
BSF GPIO, LED
MOVLW 0x01
CALL DEL_MK
NOP
NOP
NOP
DECFSZ IMP, F
GOTO M3
RETLW 0

; Подпрограмма вывода сигнала для Canon
CANON MOVLW 0x13
CALL CAN; импульс 0,5 мс
MOVLW 0x05
CALL DEL_M; пауза 7,3 мс
MOVLW 0x13
CALL CAN; импульс 0,5 мс
RETLW 0

; Подпрограмма задержки на 1 секунду 0xA1
DEL_1S MOVLW 0xFF
CALL DEL_M
MOVLW 0xFF
CALL DEL_M
MOVLW 0x88
CALL DEL_M
RETLW 0

;===============================================================================
; Основная программа
;===============================================================================

START BCF STATUS, RP0; Выбран банк 0
MOVLW B'00000000'
MOVWF INTCON
MOVLW B'00000111'
MOVWF CMCON; Отключаем встроенные компараторы

BSF STATUS, RP0; Выбран банк 1
MOVLW B'00000111'
MOVWF OPTION_REG
CALL 3FFh; Загрузить константу калибровки генератора
MOVWF OSCCAL
MOVLW B'00011111'; Порты (направление)
MOVWF TRISIO
MOVLW B'00010111'; Подтягивающие резисторы
MOVWF WPU

BCF STATUS, RP0; Выбран банк 0

MOVLW B'00100000'; Порты
MOVWF GPIO

;--------------------------

MOVLW 0x12
CALL DEL_M

LP1 BTFSS GPIO, CFG
CALL CANON
BTFSS GPIO, CFG
GOTO LP2
CALL NIKON

LP2 MOVF GPIO, W; Считать состояние перемычек
ANDLW B'00000111'
ADDLW B'11111000'
MOVWF COUNT
COMF COUNT, F

BTFSC STATUS, Z; Выключение, если нет
SLEEP

MOVF COUNT, W
XORLW 0x01; Включен 1 тайминг
BTFSC STATUS, Z
GOTO SET2

MOVF COUNT, W
XORLW 0x02; Включен 2 тайминг
BTFSC STATUS, Z
GOTO SET4

MOVF COUNT, W
XORLW 0x03; Включен 3 тайминг
BTFSC STATUS, Z
GOTO SET8

MOVF COUNT, W
XORLW 0x04; Включен 4 тайминг
BTFSC STATUS, Z
GOTO SET15

MOVF COUNT, W
XORLW 0x05; Включен 5 тайминг
BTFSC STATUS, Z
GOTO SET30

MOVF COUNT, W
XORLW 0x06; Включен 6 тайминг
BTFSC STATUS, Z
GOTO SET1M

GOTO SET2M; Включен 7 тайминг

SET2 MOVLW 0x02
GOTO TIME

SET4 MOVLW 0x04
GOTO TIME

SET8 MOVLW 0x08
GOTO TIME

SET15 MOVLW 0x0F
GOTO TIME

SET30 MOVLW 0x1E
GOTO TIME

SET1M MOVLW 0x3C
GOTO TIME

SET2M MOVLW 0x78
GOTO TIME

TIME MOVWF COUNT
LP3 CALL DEL_1S

DECFSZ COUNT, F
GOTO LP3

GOTO LP1

END



Проектирование корпуса


Современные технологии 3D печати решили давнюю проблему самоделок – на смену корявым и нелицеприятным корпусам пришли качественно выглядящие конструкции, ничем не уступающие промышленным образцам.

Корпус этого пульта разработан в SolidWorks, с расчетом последующей печати на 3D принтере. Выполнен он в лучших традициях китайского проектирования – ни одного винта, все на защелках.

Получившиеся габариты в большей степени обусловлены выбором источника питания. После непродолжительных раздумий было решено не использовать традиционный в подобных случаях литиевый элемент. Ибо режим Timelapse с постоянной генерацией посылки способен разрядить слабенький элемент довольно быстро. Поэтому используются 2 батарейки типа ААА.



Распечатанный на 3D принтере корпус:



Схему, печатную плату, исходный код и файлы для печати корпуса можно скачать отсюда.

Сборка


Перед началом сборки необходимо аккуратно отрезать ножом от держателей батареек плоские части с контактами:



Получившиеся контакты приклеить к корпусу, соблюдая полярность:



Затем поместить кнопку и вставить плату до упора, проследив, чтобы она зафиксировалась защелками. Осталось подпаять провода от батареек к плате и устройство готово:



Вот так выглядит собранный ИК пульт ДУ:



Настройка фотоаппарата


Перед использованием пульта нужно выполнить несложную настройку фотоаппарата для управления им через ИК пульт. Для каждой модели он разный, привожу алгоритм для своего Nikon D7000: 1) повернуть левое кольцо на иконку пульта, как на фото слева 2) настроить в меню «режим пульта дистанционного управления» необходимое срабатывание.

Комментарии (20)


  1. Alexeyslav
    14.04.2015 10:27
    +3

    Там ведь две кнопки должно быть, фокусировка и спуск.
    И почему бы не использовать классическую батарейку CR2025?
    На светодиод я все же поставил бы транзистор, это сильно бы увеличило дистанцию срабатывания(в том числе и отраженным сигналом). От 40мА это будет от силы метр-другой.


    1. Alexeyslav
      14.04.2015 11:11
      +1

      А, про батарейку понял.


    1. AndreyDmitriev
      14.04.2015 11:37

      Не, у ML-L3 одна кнопка и, протокол (насколько я знаю) не подразумевает управление фокусом.
      Вот тут написано, как это дело работает:
      Using the ML-L3 remote control
      Я раньше Palm Tungsten c D70 использовал (кажется OmniRemote программа называлась).
      Ну а сейчас есть неоригинальные аналоги этого пульта, которые стоят совсем смешных денег (но не дают радости DIY).


      1. Alexeyslav
        14.04.2015 12:52
        -3

        Кнопка одна, но она с двойным ходом и двумя контактами.


        1. AndreyDmitriev
          14.04.2015 14:00

          Но если кнопка двойная, то и посылки должны быть разные для фокусировки и спуска.
          Впрочем я оригинальный ML-L3 в руках не держал. Я в конце месяца буду забирать фотик из ремонта — попрошу показать этот пульт.


          1. Alexeyslav
            14.04.2015 14:07

            Естественно. Вот меня и интересует та вторая команда. Вероятно, она может быть найдена в том же источнике как и первая?


            1. AndreyDmitriev
              14.04.2015 14:09

              Тогда странно, что её никто до сих пор не отреверсил.
              Всего-то нужен ИК приёмник да осциллограф.


              1. Alexeyslav
                14.04.2015 14:23

                Может, никому из тех у кого есть оригинальный пульт и осциллограф с фотодиодом до сих пор она не нужна была. А если и отреверсили, то лежит где-то на задворках в забытом бложике и известна только в узких кругах…


        1. lim
          15.04.2015 06:55

          У меня есть ML-L3, кнопка там без двойного хода, самая обычная. И команду она посылает одну — смотрел осциллографом.


          1. Alexeyslav
            15.04.2015 08:29

            Хм. печаль. Думал что такой пульт с двойной кнопкой.


    1. encyclopedist
      14.04.2015 16:22
      +1

      У Никона в родном пульте только одна команда.


  1. Tonna
    14.04.2015 11:55
    +6

    Все что сделано своими руками вызывает только уважение, но у братьев китайцев пульт для D7000 стоит $2
    Причем кнопка судя по описанию двухпозиционные. Release mode: Focus, Shoot


    1. KestL
      14.04.2015 12:34

      А еще есть приложения для телефона, я использовал, все работает. Естественно, одно ограничение — далеко не во всех телефонах есть IR-передатчик


    1. Alexeyslav
      14.04.2015 12:53
      -1

      Ох уж эти ихние пульты за 2$… поработает неделю и перестанет. Как повезёт.


  1. hexus7
    14.04.2015 12:41

    Тоже хотел собрать… но подсчитав расходы — купил клон ML-L3 за 50р. на ебее с доставкой (батарейка в комплекте) :D


  1. Gordon01
    14.04.2015 12:51

    Эх, хорошо мне — в Nikon Df есть встроенная возможность съемки с интервалом, жаль только запал снимать таймлапсы куда-то пропал (


  1. imwode
    14.04.2015 13:03

    Вот намного интереснее конструкция — для всех фотиков…
    sappa.livejournal.com/12318.html


  1. kashey
    14.04.2015 13:03
    -2

    Я конечно сейчас все испорчу, но…
    www.fotololo.ru/product/pult-distantsionnogo-upravleniya-canon-rc-6 — 400р за ИК пульт. Работает 100%


  1. r_p
    14.04.2015 13:20
    +1

    У меня на телефоне есть ик-порт. Поставил программу из google play. В ней есть киллер фича, которая позволяет снимать по хлопку =)


  1. istui
    14.04.2015 14:26

    Неплохо :) Удобно ли переключать биты на микропереключателе? На фото кажется, что он несколько утоплен…

    В ближайшее время, возможно, мне тоже придется делать корпус. Вы раньше работали с SolidWorks или освоили сейчас?
    Какой принтер и какая технология печати использовалась? Как материал на ощупь — гладкий, насколько он устойчив к царапинам?