UNO и фотоаппарат Canon

iceekb
Offline
Зарегистрирован: 13.11.2017

Добрый день.

Продолжаю осваивать Arduino, появился очередной затык по аппаратной части. На аппаратах Canon есть разъем N3, для подключения пульта дистанционного спуска. Этот разъем содержит три пина. Один из них земля, два других - это фокус и спуск затвора. Соответственно можно замыкать их на землю последовательно (фокус -> спуск), и просто отдельно "спуск". 

Вот так это выглядит:

Как видно из картинки, напряжение там 3.3V.

Внимание вопрос: 

Каким образом будет правильнее и логичнее организовать замыкание этих контактов при помощи Arduino? 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, способов-то 100500, как всегда. Например: пин 3 соединить с GND аруино, а пины 1 и 2 нормально держать в z-state, а когда надо, переключать в LOW. Или пин 3 соединить с GND аруин, , а пины 1 и 2 соедниять с GND при помощи реле.

iceekb
Offline
Зарегистрирован: 13.11.2017

ЕвгенийП пишет:

Ну, способов-то 100500, как всегда. Например: пин 3 соединить с GND аруино, а пины 1 и 2 нормально держать в z-state, а когда надо, переключать в LOW. Или пин 3 соединить с GND аруин, , а пины 1 и 2 соедниять с GND при помощи реле.

Я понимаю, что вариантов наверное море, но вот как раз опыта и не хватает выбрать оптимальный :)

Одно могу сказать точно, это не реле, время срабатывания большое относительно. А т.к. это фотоаппарат, то срость отклика должна быть максимально быстрой. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, тогда делайте по первому варианту.

iceekb
Offline
Зарегистрирован: 13.11.2017

ЕвгенийП пишет:

Ну, тогда делайте по первому варианту.

Если честно, то не понял как будет выглядеть схема... с одной стороны 3.3V(у фотика), с другой 5V(когда в HIGH), GND стала общей.... Недопонимаю как это будет фукционировать.... Но может конечно это надо мне пойти учебник полистать )

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Никакого HIGH там быть не должно никогда. На случай ошибки, когда случайно таки выскочит HIGН, поставьте между пином ардуино и пином фотоаппарата резистор на 100К - он ограничит ток приемлемым (менее 30 микроампер) значением в том случае если HIGH таки по ошибке выскочит.

Т.е. соединяете земли фотоаппарата и ардуины вместе, а остальные пины фотоаппарата с двумя пинами ардуино через 100К резисторы.

В нормальном состоянии пины ардуино в z-состяоянии (в режиме IMPUT). Когда надо замкнуть на землю, переключаете в режим OUTPUT (можете туда ещё явно LOW записать, если хотите).

--------

Если по каким-то причина таки хотите переключать HIGH/LOW, то делайте HIGH через преобразователь 5-3,3, но я не понимаю зачем это.

--------

В принципе, можно поставить транзистор, чтобы вообще прямой связи не было, но это если только фотоаппарат понимает падение на переходе (0,6В для кремниевовго или 0,2В для германиевого транзистора) как LOW.

iceekb
Offline
Зарегистрирован: 13.11.2017

ЕвгенийП пишет:

Никакого HIGH там быть не должно никогда. На случай ошибки, когда случайно таки выскочит HIGН, поставьте между пином ардуино и пином фотоаппарата резистор на 100К - он ограничит ток приемлемым (менее 30 микроампер) значением в том случае если HIGH таки по ошибке выскочит.

Т.е. соединяете земли фотоаппарата и ардуины вместе, а остальные пины фотоаппарата с двумя пинами ардуино через 100К резисторы.

В нормальном состоянии пины ардуино в z-состяоянии (в режиме IMPUT). Когда надо замкнуть на землю, переключаете в режим OUTPUT (можете туда ещё явно LOW записать, если хотите).

--------

Если по каким-то причина таки хотите переключать HIGH/LOW, то делайте HIGH через преобразователь 5-3,3, но я не понимаю зачем это.

--------

Вот теперь всё стало предельно понятно. Огромное Вам спасибо! :)

ЕвгенийП пишет:

В принципе, можно поставить транзистор, чтобы вообще прямой связи не было, но это если только фотоаппарат понимает падение на переходе (0,6В для кремниевовго или 0,2В для германиевого транзистора) как LOW.

К сожалению я не знаю ответа на этот вопрос. Фотоаппарат Canon EOS 5D mark II. 

b707
Offline
Зарегистрирован: 26.05.2017

iceekb - банальный вопрос - к чему тут ардуино вообще? Тут нужна кнопка с двумя положениями и все

iceekb
Offline
Зарегистрирован: 13.11.2017

b707 пишет:

iceekb - банальный вопрос - к чему тут ардуино вообще? Тут нужна кнопка с двумя положениями и все

Хочу реализовать съемку тайм лапса, (интервальная съемка), через определенные промежутки времени, допустим раз в 60, 90, 120 секунд, будет срабатывать затвор. Либо по расписанию. Мнпе как раз и надо эмулировать нажатие сначала одной, а потом второй кнопки, либо сразу второй. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Соберите две такие штуки и фотографируйте сколь угодно долго с помощью ардуины: http://arduino.ru/forum/obshchii/reset-kompa#comment-317635

А вообще - и одной хватит. Для таймлапса стоит отключить автофокус и выставить его ручками. Иначе не таймлапс будет, а черте-знает что.

iceekb
Offline
Зарегистрирован: 13.11.2017

sadman41 пишет:

Соберите две такие штуки и фотографируйте сколь угодно долго с помощью ардуины: http://arduino.ru/forum/obshchii/reset-kompa#comment-317635

О! Вроде выглядит совсем не сложно, даже для меня :)

sadman41 пишет:

А вообще - и одной хватит. Для таймлапса стоит отключить автофокус и выставить его ручками. Иначе не таймлапс будет, а черте-знает что.

Пускай уж будет, всё по честному. А использовать его или нет, уже вопрос второй.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:

Соберите две такие штуки и фотографируйте сколь угодно долго с помощью ардуины: http://arduino.ru/forum/obshchii/reset-kompa#comment-317635

Вот здесь есть как раз та засада про которую я писал (и которую ТС лучше просто попробовать, чтобы знать) - там на пине фотоаппарата будет не чистая земля, а 0,6В (или какое там падение напряжения на транзисторе оптопары). Если это фотоаппаратом воспримется как LOW, то это более грамотный подход, чем "через резисторы к пинам". Но вот, воспримется ли? ТС надо просто попробовать. Сломать он этим точно ничего не сломает.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

iceekb пишет:

Хочу реализовать съемку тайм лапса, (интервальная съемка), через определенные промежутки времени, допустим раз в 60, 90, 120 секунд, будет срабатывать затвор. Либо по расписанию. Мнпе как раз и надо эмулировать нажатие сначала одной, а потом второй кнопки, либо сразу второй. 

Ну, если через определённые (без расписания), то ардуина не нужна, достаточно любого мультивибратора (NE555, например).

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

Вот здесь есть как раз та засада про которую я писал (и которую ТС лучше просто попробовать, чтобы знать) - там на пине фотоаппарата будет не чистая земля, а 0,6В (или какое там падение напряжения на транзисторе оптопары). Если это фотоаппаратом воспримется как LOW, то это более грамотный подход, чем "через резисторы к пинам". Но вот, воспримется ли? ТС надо просто попробовать. Сломать он этим точно ничего не сломает.

Несомненно, что такое может произойти и эксперимент - наше всё. Но я за безопасные эксперименты с дорогой техникой. С другой стороны - можно же просто сымитировать инфракрасный пульт ДУ и мыргать светодиодом - вообще никаких вмешательств в фотоаппарат не будет.  Правда, нужно будет поискать как там посылки кодируются.

В принципе я как-то натыкался на даташит твердотелок в DIP-корпусе, в них два мосфета засунуты - это, наверняка, решит проблему с биполярником оптопары. Впрочем, я тут не советник - есть пограмотнее меня люди.

И, к слову, раз уж о грамотных речь зашла, подтвердите или опровергните, если знаете: в один и тот же указатель, могу я поместить адрес как переменной, так и функции? Сейчас мне приходится двумя разными оперировать для привязки данных к менюшке, которую делаю на LCD, но, быть может, я что-то упустил...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Можете, только как Вы будете отличать что там в данный момент сидит. 

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

Можете, только как Вы будете отличать что там в данный момент сидит. 

Ну, в структуре-то айтема у меня есть поле "тип". Однако никак не удавалось мне в size_t* ptrData засунуть void (*ptr_function_t)(void) - компилятор всё ругался, как сапожник. Так что завел два указателя, пока не найду способ укротить энтого зверя. Да и в интернете пишут, что области хранения данных и программы в гарвардовской архитектуре разные, поэтому универсального указателя нет. А я ведь верю прессе.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Тогда я не понял что Вам нужно. Вы хотите, чтобы указатель указывал на одну и ту же точку, а Вы могли передавать туда управление (вызывать функцию) или читать отуда данные (из того же места?).

Приведите пример необльшой, чего Вы хотите добиться.

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

Тогда я не понял что Вам нужно. Вы хотите, чтобы указатель указывал на одну и ту же точку, а Вы могли передавать туда управление (вызывать функцию) или читать отуда данные (из того же места?).

Нет, всё проще: есть структура "Пункт меню", включающая в себя, кроме прочих, тип ("метрика" или "функция") и некий указатель на адрес. При выборе этого пункта в ходе манипуляций с меню, и исходя из "типа", должен быть осуществлен вызов функции по указателю (коллбэк) или же указатель, приведенный к типу "метрика" передается в процедуру редактирования метрики. Сейчас у меня два указателя в структуре, один на коллбэчную функцию и один на метрику, они заполняются в зависимости от типа пункта меню. Для красоты хотел иметь один универсальный. ...кодом было бы проще проиллюстрировать, конечно, но нужно его выкрамсывать из класса.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

void *  может указывать вапще на все

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:

Ну, в структуре-то айтема у меня есть поле "тип". Однако никак не удавалось мне в size_t* ptrData засунуть void (*ptr_function_t)(void) - компилятор всё ругался, как сапожник.

не могу представить, почему нужно использовать тип size_t* - какой в этом смысл? Что такое "указатель на size_t" по смыслу?

По сути вопроса - я делал такой трюк в меню, как указатели на процедуры и на данные. Использовал тип void* - компилятор не ругался.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Если хотите сохранить контроль типов, то заключите два Ваших указателя в union и "положите друг на друга". Они будет занимать память как один и т.п.

Но это жуткий, грязный костыль. Такие вещи делатся через иерархию классов. Тогда не нужно даже признака иметь на что он там указывает.

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

Такие вещи делатся через иерархию классов. Тогда не нужно даже признака иметь на что он там указывает.

извиняюсь, но без признака типа у меня не получилось, так как в ардуино dynamic_cast не поддерживается. А без динамического приведения как это сделать - я не знаю...

sadman41
Offline
Зарегистрирован: 19.10.2016

Вижу, да - не ту прессу в туалет с собой брал. И указатель на size_t - действительно бредово выглядит, с чего я решил, что это универсальная штука... С void всё компилируется, по крайней мере.

За иерархию классов мне браться еще рано - проклятые скриптовые языки атрофировали мозги до того, что даже работу с указателями позабывал. Там-то всё просто - одна переменная для всего, кастование всё скрыто.

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

iceekb пишет:

Добрый день.

Продолжаю осваивать Arduino, появился очередной затык по аппаратной части. На аппаратах Canon есть разъем N3, для подключения пульта дистанционного спуска. Этот разъем содержит три пина. Один из них земля, два других - это фокус и спуск затвора. Соответственно можно замыкать их на землю последовательно (фокус -> спуск), и просто отдельно "спуск". 

Внимание вопрос: 

Каким образом будет правильнее и логичнее организовать замыкание этих контактов при помощи Arduino? 

Купите себе вот это https://www.ebay.com/itm/Camera-Timer-Remote-Shutter-Release-for-CANON-1D-II-5D-Mark-II-6D-7D-50D-40D-30D/261962075623?hash=item3cfe280de7:g:NmUAAOSwFe5X0oZ8 и будет вам счастье, наснимаете тайм-лапсов сколько угодно и не мучьте ардуино, не забудьте указать, что разъем N3