Статья юзера Gol

Если нет денег на AXIS, или управляемая вебкамера своими, в меру кривыми, руками.

DIY вебкамера камера webcam

Когда я впервые увидел трансляцию видео с управляемой вебкамеры на 13-м этаже МГУ, меня это очень впечатлило. Настолько, что захотелось устроить нечто аналогичное. На камеры типа AXIS 214PTZ лишних денег у меня нет, так что пришлось на некоторое время эту идею оставить. До тех пор, пока я не узнал про Arduino и про то, что к ней можно приделать "сетевую карту" и моторчики. Необходимые комплектующие быстренько были приобретены и у меня в наличии оказалось всё для сооружения полноценной вебкамеры, управляемой по сети.

Изучение интернетов показало что идея приделать камеру к сервам приходит первой ко всем счастливым обладателей ардуины и сервомашинок. Однако, ни одна из уже реализованных схем управления (кнопками, мышкой PS/2, с управляемого роутера, с компа, с вебстранички на встроенном в ардуину сервере) меня не впечатлило, ибо неудобно, имхо. Хотелось чего-то универсального, чтобы можно было выложить веб-интерфейс на сайт и с него управлять.

В итоге появилась вот такая штукенция:

Полный размер

Продолжение...


Обычная вебкамера Logitech Pro 9000 (выигранная давным-давно в "Компьютерре") прикреплена к качалке сервы №1 (ось Y). Серва №1, в свою очередь, прикреплена к качалке сервы №2 (ось X). А серва №2 довольно крепко прикручена к основанию - тяжёлому деревянному бруску. Сервы - самые простенькие и дешёвые SRM-102 (примерно 400 руб. за штуку).

Вот и вся конструкция, всё элементарно. Для соединений использованы планки от детского конструктора (помните, такие старые советские металлические конструкторы? Они ещё есть в продаже).

Контролер всего этого безобразия состоит из связки Arduino (точнее, Freeduino 2009) и Ethernet Shield v2. Тоже ничего сложного.

Придумалась примерная схема управления. Скрипт в веб-интерфейсе получает команды (нажатия кнопок, движения мыши и т.д.) и в определённом формате пишет их в базу. Ардуина циклически делает GET-запрос скрипту на сервере и скрипт выдаёт все команды из БД, после чего база очищается. Может, можно и покрасивее сделать, но меня в таком виде пока всё устраивает.

На серваке у меня MySQL крутится, база HEAP (чтоб пошустрее было). Структура вот такая:

CREATE TABLE `servo` (
`id` smallint(6) NOT NULL AUTO_INCREMENT,
`cam_id` tinyint(4) NOT NULL,
`action` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `cam_id` (`cam_id`)
) ENGINE=MEMORY DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;


Далее идут скрипты. Первый, самый главный, скетч для собссно Ардуины. Скетч не особо вылизан, так что его стопудово можно улучшить. Но, так как он стабильно работает, меня пока устраивает. Как заливать скетч не объясняю, ибо если вы знакомы с Ардуино, вы это уже знаете. Я использую IDE Arduino 18, так что и скетч под неё. В новой версии IDE скорее всего не заведётся!

Файл servowebclient.pde

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

index.php - собссно, страница с веб-интерфейсом управления камерой.
set.php - асинхронно вызываеся из index.php и пишет в БД нужные команды на перемещение камеры
get.php - скрипт вызывается удалённо Ардуиной, читает команды из БД и выдаёт их plain text'ом

Эти файлы, и вообще всю структуру каталога вебморды можно взять вот тут в архиве. serva.rar

Используемые библиотеки для Ардуины вот тут - libs.rar

В принципе, всё. Надеюсь, теперь все те, кто называл меня мегамозгом расслабятся и скажут "да это каждый дурак может" :-)

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

Логика управления прекрасно программируется на Javascript в основном файле index.php Так как за размещение команд отвечает функция MakeAction, с ней можно творить что угодно. Например, на вебморде есть ссылки типа "Фиксированные точки - Балкон". Это обычный вызов этой самой MakeAction(11,координата_x, координата_y), т.е. куда камеру надо направить. И таким образом можно программировать любые перемещения. Но надо не забывать о том что таким образом можно засрать очередь команд по самое нехочу. Например, у меня была функция Javascript "влево_вправо". Которая в цикле изменяла координату X, в итоге камера циклично гоняла туда-сюда. И если у кого-то в браузере была включена эта функция, никак нельзя было её остановить, пока её не выключал тот кто её включил. Временное решение было ставить таймер на подгрузку через jQuery ещё одного файлика, который принудительно убивал тот таймер. Это некрасиво, но работало.

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

Теперь немного о процессе тестирования, ибо о нём я просто должен рассказать.

Впервые эту камеру я включил пару дней назад. Запустил трансляцию, разместил ссылку на веб-интерфейс у себя в блоге. Десяток человек погоняли её немного и свалили. На следующий день я приволок камеру на работе, поставил в кабинете где наши девочки сидят. Камера крутилась практически постоянно. Девчонка проходит по кабинету, а за ней синхронно движется камера, народ проходу не давал :-) К тому же у нас в офисе живёт попугай Питрович, который сначала камеру дико невзлюбил и постоянно её атаковал. Кстати, эта зараза погрызла силовой кабель от ноута и провода к сервам. Огромное спасибо девчонкам - они мужественно вытерпели весь рабочий день под неустанным оком камеры. И постояно привлекали новых тестеров :-)

Полный размер


Я всё пытался разместить описание камеры здесь на Хабре, но из-за маленькой, но очень положительной кармы никак не мог это сделать. Ну ни как, хоть ты тресни. Отчаявшись, я разместил вопрос в Q&A. В результате мне карму залили по-полной, намного больше чем требовалось для размещения топика. За что, в очередной раз, спасибо ребятам. Народу с Хабра очень понравилась (судя по комментам) моя реализация управления, так что камера на данный момент, почти непрерывно крутится уже девять часов (взято из статистики трансляции на смотри.ком). Сервы холодные, не греются нифига. Ардуина слегка тёпленькая. За всё это время был только один глюк - ардуина сетку потеряла. Как оказалось, "у меня был обрыв" (с)Антон Уральский

Были ещё глюки, связанные с включенным очень долгим воспроизведением обученных перемещений (кто-то врубил обучение, долго водил мышой а потом нажал Play), так что этот режим я ограничил сотней команд. Само собой, это ограничение легко обходится :-)

Завтра у меня рабочий день, на ночь я камеру отключу, но утром включу снова, на работе. Там ещё веселее будет.

UPD> Первая конструкция (на деревянном бруске) оказалось не очень устойчивой - удалось несколько раз её опрокинуть, резко мотнув камеру из стороны в сторону. Так что появилась новая модификация - серва №2 прикручена к маленькому деревянному брусочку. В брусочке просверлена дырочка, как раз под диаметр винта на стандартном крепеже от штатива. Ну и брусочек приклеплён к штативу от обычного фотоаппарата. Конструкция получилась меганадёжная - народ упорно вот уже 7 часов пытается её опрокинуть, а не получается.

Вдобавок, рядом с основной камерой была поставлена вторая (точно такая же Logitech, но стационарная), через которую можно было наблюдать, как колбасится первая. Очень увлекательное зрелище, если честно.

Полный размер


На удивление быстрой получилась реакция камеры - задержка по отношению к управлению в веб-морде составляет (у меня, во всяком случае) доли секунды. Хотя я дома сижу, а сервер на работе и между нами обычный корбино/билайновский интернет. Притормаживает видеотрансляция на smotri.com, но это не всегда.

Ну и дальше немного фотографий камеры и несколько видеороликов, для наглядности конструкции.

Полный размер

Полный размер

Полный размер

Полный размер

Полный размер


Несколько демонстрационных видеороликов:







Кстати, доча обожает эту игрушку. Правда, ей неважно, камера там или ещё что-то. Главное что двигается



А вот и, собсственно, котроллер. Бутерброд из Freeduino и Ethernet Shield

Полный размер


Ну и наконец,

Полный размер


Боже, дай сил моему серваку выдержать Хабраэффект, когда топик будет опубликован. И не дай загнуться камере в самом рассвете сил.

P.S. Проверял работу в Опере 10.63 и в свежем Хроме. Остальные браузеры теоретически тоже должны справляться.

P.P.S. Пользуясь случаем, хочу передать привет хабраюзеру SysCat, который однажды подарил мне мою первую Ардуину с е-шылдом и тем самым сподвиг на кучу интересных изысканий.

UPD> Забыл самое главое - рабочий веб-интерфейс вот тут http://www.g0l.ru/test/serva/
Просьба отнестись с пониманием - камера и сервы не резиновые, так что не дёргайте, если она уже двигается. Оставлю включенной до утра, потом заберу с собой на работу и там включу.

UPD> Сделано управление через вебинтерфейс, но с геймпада. Нужна софтинка типа Joy2Key, для маппинга кнопок геймпада на клавиатурные кнопки. Если назначить кнопки вверх-влево-вниз-вправо на клавиатурные W A S D то можно управлять с геймпада. Обчные клавиатурные кнопки тоже работают.

P.S. Статья была написана специально для публикации на Хабрахабре, где она находится и до сих пор. Однако, хотелось бы её и у себя иметь, так что вот, копипастю.
Gol      Суббота, 13 Ноября, 2010 19:32       11
Добавить комментарий
 

Гость Понедельник, 14 Февраля, 2011 00:54 цитировать ссылка на коммент

Перезалейте плиз serva.rar и libs.rar

 

 

Gol Понедельник, 14 Февраля, 2011 02:24 цитировать ссылка на коммент

заливается

 

 

Mad Fun Воскресенье, 24 Июля, 2011 22:39 цитировать ссылка на коммент

Интересная вещица получилась, надо попробовать сделать что-то подобное..

 

 

Гость Понедельник, 25 Июля, 2011 00:09 цитировать ссылка на коммент

Ну, наипростейший вариант. Сейчас поприличнее делаю, флешовую управлялку.

 

 

Gol Понедельник, 25 Июля, 2011 00:10 цитировать ссылка на коммент

Эх я написал. Привык что всегда авторизован, в итоге за другими компами забываю войти под логином.

 

 

Гость Четверг, 3 Ноября, 2011 03:16 цитировать ссылка на коммент

Оличная штука этот фридуино, думаю на днях прикупить свой первый для управления домом ,что-то на подобии "умный дом"..
У меня 3 варианта
1. Купить комп за грн 200-300 х 4 = 800-1200 рублей,достать всё из корпуса и вложить в мини корпус для компактности. + никакой юзю интерфейса и кучи неразберихи с МК( просто сигналы на реле с голого лтп порта.
2. Собрать свой юсб интерфейс для взаимодействия с платой (подачи сигналов на реле) где-то те же 1000 рублей
3.Взять аурдино,сваять программу красивую для андроида и для ноута и пользоваться всё как надо. в принципе те же деньги.

Из трёх вариантов более склонен к 3,т.к. больше простоты и надёжности,компактность,разумность.

А как Вы считаете ? Если не сложно - проконсультируйте по поводу фридуины - стоит ли брать, если ли возможность написания своего интерфейса? на тот же андроид? я думаю полюбому прийдётся сервер ставить для своей задумки, как и у Вас.

 

 

Gol Пятница, 4 Ноября, 2011 03:10 цитировать ссылка на коммент

Цитата: по поводу фридуины - стоит ли брать, если ли возможность написания своего интерфейса? на тот же андроид?

Не совсем понял этот кусок.

 

 

Гость Пятница, 19 Октября, 2012 14:48 цитировать ссылка на коммент

Перезалейте плиз serva.rar и libs.rar

 

 

Gol Пятница, 19 Октября, 2012 16:00 цитировать ссылка на коммент

2 Гость:
Залил

 

 

Гость Вторник, 10 Мая, 2016 21:33 цитировать ссылка на коммент

А можете скинуть схему подключения камеры к Ардуино?

 

 

Gol Среда, 11 Мая, 2016 00:43 цитировать ссылка на коммент

2 Гость:
А камера к ардуине и не подключена

 

Сколько букв в слове Гол?

Вы вошли как Гость      

Сейчас на сайте: 1 и 21 гостей









Страница сгенерирована за 0.056602001190186 мкс