Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #95, НОЯБРЬ 2006 г.

Eye of the xakep

Fagot (salieff@mail.ru)

Хакер, номер #095, стр. 095-124-1


Программируем самоходную веб-камеру под линукс

Было дело, попала мне в руки дешевая logitech'овская веб-камера и я скорее побежал прикручивать ее к своему красноглазому линуксу. Поднялась камера на удивление быстро и безо всяких бубнов. Наблюдать картинку, которую она исправно выдавала через xawtv, мне быстро надоело, и в голове стали зреть мысли, чего бы такого интересного еще с ней замутить...

На что это похоже?

Когда я смотрел в окно xawtv, демонстрирующем коридор с дверью ванной комнаты, у меня постоянно возникало желание подвигать мышкой, чтобы повертеть головой, как в шутере. Собственно говоря, а почему бы и нет? Можно попробовать это организовать. Не ошибается только тот, кто ничего не делает. Мысль созрела следующая – посадить камеру на сервоприводы, которые бы подчинялись движениям мыши, вращая наш электронный глаз в заданном направлении и создавая таким образом полное кибер-единение юзера с периферийным устройством.

Реализовать данную задумку было решено с помощью двух шаговых моторов, так я получал приличную точность при вращении приводов и жесткую фиксацию положения камеры (чего бы не получилось при использовании «аналоговых» моторов). Управлять моторами проще всего через LPT-порт. При таком подходе сам аппаратный контроллер будет очень прост, а большинство контрольной логики можно реализовать на стороне софта. Конечно, есть материнки, на которых не реализован LPT-порт, но интерфейс этого порта настолько прост, что я не смог удержаться.

Что нам понадобится

Итак, из найденного по антресолям мы имеем на руках следующие компоненты:

1. Собственно камера-яйцо Logitech QuickCam ExpressII, или любая другая, какая есть под рукой.

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

3. Две микросхемы ULN2003 в подходящем формфакторе (я брал с суффиксом AN) и какая-нибудь монтажная плата (можно самостоятельного изготовления) для их размещения, покупается в Чип-и-дипе, это ядро аппаратного контроллера. На практике каждая такая микросхема представляет собой пачку транзисторных ключей с защитой и, при желании, легко реализуется вручную, но мы сложных путей не ищем.

4. Молекс для подключения питания в 12 вольт и хвост от старого принтера для подключения к LPT-порту.

5. Пара пятипиновых колодок для комфортного подключения моторов и 8 светодиодов для отладки (необязательно, но удобно). Если есть желание теститься на светодиодах, то еще 8 резисторов по 380 Ом, чтобы не попалить светодиоды напряжением в 12 вольт.

6. Советский конструктор «Школьник», из которого будем собирать шасси. Я добыл такой в магазине «Детский мир» по пути с работы.

Шаговые моторы, лирика

Чтобы было понятно, что делать дальше, немного углубимся в принцип работы униполярных шаговых моторов. На самом деле, тут все очень просто – есть набор обмоток, расположенных по кругу (в нашем случае 4 штуки), и вращающийся якорь, который, как стрелка компаса, поворачивается в сторону той обмотки, на которую подано напряжение. Таким образом, последовательно подавая напряжение на обмотки по кругу, мы можем вращать якорь мотора шагами по 90 градусов. Такой огромный угол шага вряд ли нас устроит. Поэтому в моторе устанавливаем механический редуктор, и шаг поворота выходящей оси в итоге составляет 1-3 градуса. Также есть возможность фиксации положения - удерживая напряжение на одной из обмоток, мы удерживаем якорь и ось мотора в текущем положении.

Содержание  Вперед на стр. 095-124-2