Сильмаллирион
Случилось так, что примерно в одно и то же время у одних знакомых появился фотоаппарат Nikon, у другой знакомой — Canon, а в интернете я наткнулся на замечательную статью про пульт ДУ к ним.
Паять я люблю, а ещё больше я люблю делать подарки людям, а что может быть лучше действительно полезного подарка?
Но, поскольку с PIC-ами я не дружу, то пульт я переделал под маленькую tiny2313, благо их везде навалом, и они весьма недорогие. Плюс, хотелось поставить рекорд скорости по сборке устройства.
Братство Кольца
Немного теории, найденной на просторах интернета:
для фотоаппаратов марки Canon собирается пульт RC-1 (RC-5 это такой же пульт, только без «моментального спуска»)
-Несущая частота 33 кГц:
-команда «Спуск»: посылка 480 мкс, пауза 7324 мкс, посылка 480 мкс
-команда «Спуск с 2 сек. задержкой»: посылка 480 мкс, пауза 5371 мкс, посылка 480 мксВажно!
Не у всех фотоаппаратов Canon есть ИК приёмник (обычно расположен на ручке, под спусковой кнопкой). Смотрите инструкцию к своему фотоаппарату!
Nikon выбрал себе алгоритм похитрее, но всё равно мы и его скопируем:
-Несущая частота 40 кГц:
-команда «Спуск»: посылка 2250 мкс, пауза 27600 мкс, посылка 650 мкс, пауза 1375 мкс, посылка 575 мкс, пауза 3350 мкс, посылка 650 мкс. Потом пауза в 63 мс (милли- не микро-!!!) и повтор всей последовательности еще один раз
Интернет-народ утверждает, что лучше всего выбирать светодиоды с длиной волны 940 нм, я поверил им на слово.
Самые дешевые светодиоды оказались SFH415-U, на 1.3-1.5 вольта и 100 мА, поэтому была выбрана таблеточная трёхвольтовая батарейка и последовательное соединение светодиодов.
Для тактирования тини2313 я, естественно, использовал внутренний RC осциллятор на 1 Мгц.
Для экономии батарейки питание на микроконтроллер подается только при нажатии на кнопку спуска, после чего пульт отрабатывает посылку и отправляется в sleep (на случай если в сумке что-нибудь надавит на кнопку, батарейка не сдохла до съемки).
Две твердыни
Ну что же, время составить схемку и написать программку.
Схемка для Никона:
![]() |
не отличается чем-либо особым. Конденсатор С2 выбран танталовым потому, что у него оооочень маленький ток утечки, поэтому батарейке ничего не должно грозить (кстати, этот пульт используется уже в течении года).
Схемка для Кэнона:
![]() |
Тут уже повеселее. Я решил выбрать переключатель на три позиции, тем самым у меня появилось три «режима»:
- Выключен, чтобы при случайном нажатии на кнопку не садить батарейку.
- Спуск с 2сек задержкой — чтобы при фотографировании себя успеть убрать пульт из кадра.
- Немедленный спуск — отлично использовать для фотоохоты. Или фотографирования ночных пейзажей. Или для режима Bulb.
Естественно, при желании можно выкинуть переключатель, и использовать просто две кнопки, например так:
![]() |
Или вообще оставить одну только функцию, и взять схемку как для Никона, контроллер ведь один, поэтому прошивка там заливается любая.
Варьируя количество и ток светодиодов можно регулировать и дальнобойность устройства. В данном исполнении фотоаппарат уверенно принимал на расстоянии 5-6 метров, а также хорошо ловил отраженный сигнал. Правда, при увеличении количества светодиодов надо не забыть увеличить емкость танталового конденсатора.
Программа написана на С (для ускорения времени разработки и простоты вычисления задержек)
Код для Никона:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #include <avr/io.h> #include <avr/sleep.h> #include <util/delay.h> #define led_port PORTD #define led_ddr DDRD #define led_pin (1<<6); #define nop() asm("nop") //Посылка двух импульсов, количество нопов выверено в симуляторе #define two_pulses {led_port |= led_pin; nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); led_port &= ~led_pin; nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); led_port |= led_pin; nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); led_port &= ~led_pin; nop(); nop(); nop(); nop(); nop(); nop(); } //50 us //Весь алгоритм передачи команды, ничего сверхъестественного void program (void) { unsigned char i; for (i = 0; i < (2250/50); i++) two_pulses; _delay_ms(27.6); for (i = 0; i < (650/50); i++) two_pulses; _delay_ms(1.35); for (i = 0; i < (600/50); i++) two_pulses; _delay_ms(3.35); for (i = 0; i < (650/50); i++) two_pulses; _delay_ms(63); for (i = 0; i < (2250/50); i++) two_pulses; _delay_ms(27.6); for (i = 0; i < (650/50); i++) two_pulses; _delay_ms(1.35); for (i = 0; i < (600/50); i++) two_pulses; _delay_ms(3.35); for (i = 0; i < (650/50); i++) two_pulses; } int main (void) { MCUCR |= (1<<SM0); //PowerDown ACSR |= (1<<ACD); //AnaComp Disable led_ddr |= led_pin; _delay_ms(8); program(); sleep_enable(); sleep_cpu(); //Усыпляем до следующего включения питания } |
А это для Кэнона:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | #include <avr/io.h> #include <avr/sleep.h> #include <util/delay.h> //Leds port: #define led_port PORTD #define led_ddr DDRD #define led_pin 6 #define led_one (1<<led_pin) #define led_all (1<<led_pin) //Delay 2 sec #define pin_delay (1<<0) //PortB pin0 //for delay #define all_button_pins pin_delay #define nop() asm("nop") //Функция, которая отправляет одну посылку void Post (char bits_to_set) { unsigned char i; for (i = 0; i < 16; i++) { led_port |= bits_to_set; nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); led_port &= ~bits_to_set; nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); //Количество нопов высчитано в симуляторе } } //Немедленный спуск void Shutter (char led) { Post(led); _delay_ms(7.324); Post(led); } //Спуск с двух секундной задержкой void Shutter2 (char led) { Post(led); _delay_ms(5.371); Post(led); } int main (void) { PORTB |= all_button_pins; //PullUp led_ddr |= led_all; // DDR out MCUCR |= (1<<SM0); //PowerDown ACSR |= (1<<ACD); //AnaComp Disable for(;;) { _delay_ms(8); //Debounce if (PINB&pin_delay)//Проверяем состоние пина { Shutter2(led_one); } else { Shutter(led_one); } sleep_enable(); sleep_cpu(); //Усыпляем до следующего включения питания } } |
Всё очень просто, никаких оптимизаций, просто следование алгоритму.
Памяти занимает немного, можно без проблем перенести на какую-нибудь более мелкую Тини.
Возращение государя
Конечно же, самое интересное — это корпус.
Для Никона, с его единственной кнопкой, подошел вот такой:
![]() |
К сожалению, его внутренностей не могу показать, далеко он от меня…
А вот для Кэнона корпус я делал недавно, поэтому парочка фоток есть :)
Рассыпуха деталек для будущего пульта:
![]() |
С платой замарачиваться не стал, тем более корпус всего-то 50х30х20 мм, поэтому микрушку и всякие транзюки понапаял на макетку, дрелью да напильником сделал необходимые отверстия, переключатель посадил на клей, распаял паутинку проводов:
![]() |
Корпус оказался ооочень маленький, так что влезло всё впритык. Прижав коленкой закрутил винтики, и вот что получилось:
![]() |
Результатом доволен и я, и те кому достался пультик. А на написание этой статьи ушло примерно столько же времени, сколько на изготовление одного пультика :)
Если у вас какой-либо другой фотоаппарат, то то в статье от sappa есть алгоритмы и для них. Дерзайте, творческих (в пайке и в фотографии) успехов вам!
Bonus:
Ну и вот вам, бонусом, идея для корпуса кухонных часов. Со стратегическим запасом гречки на черный день.
![]() |













Браво.
Но думаю, почему нельзя было унифицировать прошивку — чтобы она брала систему команд из EEPROM’a? Так ведь интереснее :)
Конечно интереснее. Но совершенно избыточно для такого узкоспециализированного устройства, лично я сомневаюсь, что имея Кэнон я себе куплю ещё и Никон…
Я считаю, что на такое простое устройство должно уходить как можно меньше времени при разработке, тем более, такой линейный код проще адаптировать под алгоритм своего фотоаппарата.
Часы отменные!!! [img]http://files.myopera.com/Creat0R/Opera_AC/Icons/buba.gif[/img]
гг, моя первая статья ))
http://bsvi.pp.ua/infrakrasnyj-pult-dlya-canon-eos-400d/
Красиво сделали! Молодец!
Клас! И зачем нам буржуйские пульты, когда у нас руки золотые!
Я вот давно хочу сделать такой пульт для MusikBox-ов, что в кафешках стоят, а то задолбали меншать отдыхать, только алгоритма нет, и пульта родного чтобы алгоритм просканировать пока не достал(
Оригинальный пультик RC-1 для Canon стоит аж 60 евро!
А в кафэшках нельзя так шалить. Лучше просто попросить хозяев.
Я на tiny13V сделал, использовал один мощный TSAL5100 через транзистор BC517. схему чуть позже выложу, она сразу на печатке реализовывалась.
А зачем диоды там где две кнопки?
Чтобы знать, какая из двух кнопок была нажата. Если их оттуда убрать, то при нажатии на любую кнопку сразу на двух выводах PIN_х будет по логическому нулю. А с диодами — только на одном :)
Убери диоды и включи подтяжку порта, диоды там вообще не в тему
Простите, но это Вы немножко не в тему.
Данная схема с диодами позволяет не только узнать, какая кнопка нажата, но и также подавать напряжение на всю остальную схему.
Кнопка ненажата — полнейшая экономия батарейки. Нажали, есть напруга, да ещё и можем определить, какая кнопка нажата.
Конечно, можно и без диодов, но микрушки и в sleep режиме будет потреблять ток. А я этого хочу избежать. А схема мною не выдумана, она используется во многих многокнопочных пультах.
обещанная схема в протеусе и прошивка в Codevision, http://slil.ru/29300778
Не могли бы продублировать,а то за сроком давности удалили файл???
[offtop]а компилятор на отсутствие #define F_CPU 1000000UL не ругался?[/offtop]
Если в студии прописан, то не будет ругаться.
Спасибо, просто я студию ни разу не использовал. Юзал и юзаю avr-gcc.
Именно так, всё указано в свойствах, не ругается.
А есть у кого инфа по кодам для SONY? Для остальных фотикав море кодов, а Соню как прокляли. Слышал я что раньше SONY была тождественна КоникаМинолта, но я брал китайские универсальные шутеры для камер, из трёх три не подошло. Среди фотографов почти нет радиолюбителей, хорошо, что среди радиолюбителей есть фографы.
а hex’а готового для Canon нету? что то AVR Studio отказывается работать, через PonyProg2000 хочу попробовать прошить.
Лежит откомпилированный в архиве с проектом (приложен к статье)
Пойду выткну глаз. не увидел
Не торопитесь!
Вот архив:
http://easyelectronics.ru/img/readydev/fotoIRpult/studio%20files.zip (приложен к статье)
В нем папка CanonPult, в ней папка default а в ней и hex.
Хм, или Вы уже нашли? Но всё равно с глазами не балуйтесь, иначе программки писать сложно будет ;)
у китайцев за 4$ купить выйдет дешевле.
http://www.dealextreme.com/details.dx/sku.13090
Эта модель — урезанный вариант, он только с двухсекундной задержкой.
+ я уложился примерно в ту же сумму + в своем пульте можно поставить ТААКИЕ светодиоды, чтобы фотографировать из-за угла можно было :)
В любом случае, выбор всегда за Вами!
дык вот же ещё вариант:
http://www.digit-el.com/files/articles/dslr_rem/dslr_rem.html
и схема попрощще и разжёванно всё.
делал то же самое год назад, собственно это была первая конструкция после освоения нового ядра, протокол (Сanon) нарыл на каком-то англоязычном сайте. писал на ассме, ибо С/С++ не владею.
- — -
IMHO в такие девайсы приятнее запихивать микросхемы в корпусе -20S — места занимает меньше + немного дешевле контроллер.
есть вопрос из практики — где нарыть светодиоды SFH415-U ? то, что продается на рынке мягко говоря мало пригодно.
Конечно приятнее запихивать то что поменьше, но я запихивал то что было под рукой.
С проблемами достать такие светодиоды (кстати, и в Литве и в Австрии (магазин конрад) это оказались самые дешевые из 950нм светодиодов) я не сталкивался. Можете спросить на форуме + там уже есть списки хороших мест по городам, думаю, найдете!
А с никоном д60 — работает?
Maksoff, никак не пойму — зачем 2 светодиода?
Для увеличения «яркости», типа чтобы и от стен отражалось?
Именно так. Тем более их напряжение и напряжение батарейки позволяет.
Блин, ведь тем не менее, телевизионные пульты работают на 1 светодиоде и прекрасно отражается сигнал от стен! Впрочем, у них батареи другие… Может пальчиковые батареи способны отдавать ток лучше, чем литиевые таблетки?
Всё зависит от светодиода. В любом случае, у меня была возможность поставить два, тем самым увеличив в два раза яркость, и я решил этим воспользоваться.
А, гречка нынче удел богатых.
Сделал данное устройство, работает, но только на расстоянии от фотоаппарата около 1 см, дальше уже не работает.
Схема для Canon. Только применён другой светодиод, маркировки его не знаю, размером с совковые ал307, но продавец сказал что он на 2,0-2,2 В и 940 нм.Последовательно со светодиодом включил резистор на 10 Ом.
ВОт его фото.
http://s45.radikal.ru/i107/1012/0d/a3669b502736.jpg
Поищу другие сведодиоды, может нормально заработает.
Да, питал всё от литьевого элемента maxel CR2025 на 3В
Сделал вариант для Nikon. Работает, в т.ч. БЕЗ повтора посылки через 63мс. Камера Nikon D5000.
Как дела обстоят с работоспособностью девайся для Canon(схема с переключателем)???
Не могли бы,люди добрые,скинуть моделирование в Протеусе???