geektimes

«Raspberry Eye» — вебкамера на сервоприводе

  • суббота, 29 ноября 2014 г. в 02:11:28
http://habrahabr.ru/company/airbnb/blog/244427/



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

Выводим Pi в сеть


Raspberry Pi представляет собой прекрасную базовую платформу для проектирования подключенных к интернету устройств. Также для подобных задач очень удобен фреймворк Flask. Он позволяет использовать имеющиеся Python-приложения (предпочитаемый язык для разработки под Raspberry Pi) и добавлять в них HTML-шаблоны для создания вебинтерфейса для конечного пользователя. В этом проекте используется чистый шаблон, так что вы легко сможете в нем разобраться и видоизменить по своему усмотрению.

Стриминг видео с Pi


Для начала нужно найти способ трансляции видеопотока через Pi в интернет. При использовании такой маломощной системы каждый бит на счету, и поэтому компрессия и стриминг в реальном времени могут быть слишком сильной нагрузкой на систему. В результате был выбран MJPG-Streamer, поскольку он продемонстрировал очень высокое быстродействие.

Управление сервомоторами


Также нужен был способ управлять сервомоторами для поворота/наклона камеры. Стандартная библиотека в Raspberry Pi для доступа к контактам ввода-вывода называется GPIO. Хотя с ней легче совершать простые действия, для управления сервомоторами она обеспечивает слишком низкую точность. После множества проб и ошибок была выбрана альтернативная библиотека под названием RPIO. С ее помощью я получил доступ и к полуаппаратно управляемому ШИМ-сигналу. Это был последний элемент мозаики для сборки полнофункционального проекта и отличная точка старта для подключения к интернету!

Весь код для этого проекта можно скачать с Github, а 3D модели — с Thingiverse.

ПРИМЕЧАНИЕ: На eLinux есть список совместимых с Pi USB-вебкамер. В этом проекте использована вебкамера C260, которую уже, возможно, не достать. C525, по отзывам, «хорошо работает без доп. Питания», но не протестирована с нашей конструкцией. C270 «хорошо работает с доп. Питанием» в виде активного USB-хаба. 3D-модели конструкции заточены под C260/270, но вы можете модифицировать их под свою камеру.

Шаг №1: Записываем образ на SD-карту




• В качестве ОС для этого проекта выбрана Raspbian, адаптированный для Raspberry Pi дистрибутив Linux. Большинство стандартных настроек все еще на своем месте, включая пароль (raspberry). После завершения установки вам нужно будет войти в систему, запустить raspi-config, изменить пароль и другие настройки по вашему вкусу.
• В образ Raspbian нужно внести очень много изменений, чтобы заставить этот проект работать. Вы можете скачать готовый образ PiCam с cdn.makezine.com/make/WeekendProjects/HomeSentrySecurityCamera/PiCam.img и записать его на вашу SD-карту.
• Рассказ о запись образа сам по себе тянет на отдельную статью. В данном случае можно следовать руководству от Raspberry Pi Foundation на http://elinux.org/RPi_Easy_SD_Card_Setup.

Шаг №2: Напечатайте, сделайте или купите корпус




• Чтобы было куда поместить Pi и создать базу для механизма поворота/наклона, я разработал модель корпуса для 3D-принтера. Это переработанный вариант от пользователя Thingiverse Джоша Кэмпбелла. Скачать и можно отсюда http://www.thingiverse.com/thing:274468.
• Если у вас нет доступа к 3D принтеру, вы можете купить корпус в Shapeways или любом другом интернет-магазине. Либо склеить самостоятельно из обрезков пластика.

Шаг №3: Подготовьте кабель питания для сервомоторов


• Отрежьте маленький штепсель Micro-B с одного из двух ваших USB кабелей.



• Снимите примерно 2,5 сантиметра внешней изоляции, внутри вы найдете четыре провода (черный, красный, белый, зеленый).
• Снимите примерно 6 мм изоляции с черного и красного проводов. Используя мультиметр, убедитесь, что это действительно «+» и «земля».
• Удалите экранирование кабеля и обрежьте белый и зеленый провода.



Шаг №4: Пайка кабеля


• Отрежьте три куска термоусадочной трубки: один 13 мм и два по 9 мм.
• Обрежьте наконечники с двух двойных джамперов.



• Оденьте на провод термоусадку 13 мм и протолкните на пару-тройку сантиметров, чтобы не задеть при пайке.



• Аккуратно разделите и обмотайте конец красного провода вокруг обоих коротких выводов одного из джамперов.
• Припаяйте провод к джамперу и убедитесь, что он надежно соединен с обоими выводами.
• Сделайте то же самое с черным проводом.
• Оденьте оставшиеся термоусадочные трубки на каждый набор джамперов и немного протяните их, закрыв место спайки. Приподнимите длинную трубку таким образом, чтобы она закрывала белый и зеленый провода, которые вы обрезали ранее.
• Нагрейте термоусадку.



Шаг №5: Установка мотора поворота


• Пропустите провод одного из ваших сервомоторов через большое прямоугольное отверстие и вставьте в него мотор. Если он застревает, воспользуйтесь небольшим надфилем или наждачной бумагой.
• Когда сервомотор уставлен на свое место, вкрутите 2 длинных винта для фиксации мотора.







Шаг №6: Добавляем мотор наклона


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



Шаг №7: Подключение моторов


• Пропустите конец провода с джампером через круглое отверстие в боковой грани корпуса.



• Подсоедините выводы черного провода к отверстиям в коннекторах сервомоторов, соответствующим коричневым проводам.
• Подсоедините выводы красного провода к отверстиям в коннекторах сервомоторов, соответствующим оранжевым проводам.



• Возьмите два фиолетовых провода с джамперами и вставьте каждый в отверстия, соответствующие желтым проводам.



Шаг №8: Установка мотора наклона


• Вставьте сервомотор наклона в такой же формы отверстие на большем из двух распечатанных держателей.



• Прикрутите мотор двумя длинными винтами.



Шаг №9: Соединение сервомоторов с Pi



• Два фиолетовых провода должны быть подключены к Raspberry Pi. Это провода управления, через которые будет отправляться сигнал изменения позиции моторов.
• Сигнальный провод с мотора поворота нужно подключить к выводу 23. Это восьмой вывод во внешнем ряду.
• Сигнальный провод с мотора наклона нужно подключить к выводу 22. Это восьмой вывод во внутреннем ряду.



Шаг №10: Первое включение


• Вставьте вашу отформатированную SD-карту в Pi и подключите Ethernet-кабель. Если это первый запуск ОС, то может понадобиться USB-клавиатура, мышь и HDMI-монитор.
• Включите оба (один от Raspberry, второй от моторов) USB-кабеля в двойное USB-зарядное устройство и подключите USB-кабель к Raspberry Pi рядом с SD-картой. Теперь Pi должен включиться.



Шаг №11: Обнуление сервомоторов


• Для удаленного подключения к Pi используйте утилиту SSH, встроенную в Mac и Linux. (Если вы пользователь Windows, можете использовать Putty в качестве SSH-клиента. Эй, Microsoft, дайте нам нативный SSH!)
• В окне терминала введите: ssh pi@picam и нажмите Enter. Если у вас не получилось подключиться, попробуйте выполнить команду ping picam. Если вы получаете сообщение об ошибке ping: cannot resolve picam: Unknown host, подключите монитор и клавиатуру, чтобы узнать свой IP-адрес (используя утилиту ifconfig), а затем подключитесь, используя свой IP-адрес, например так: ssh pi@192.168.1.10.
• После подключения, перейдите в директорию picam: cd picam
• Запустите скрипт picam.py от имени root: sudo python picam.py. Вы должны увидеть вывод скрипта:
Using hardware: PWM PW increments: 10us Initializing channel 0... add_channel_pulse: channel=0, gpio=23, start=0, width=154 init_gpio 23 add_channel_pulse: channel=0, gpio=22, start=0, width=154 init_gpio 22 * Running on http://0.0.0.0:80/
• После запуска скрипта вы должны услышать, как оба сервомотора возвращаются в свою стартовую позицию.
• Нажмите Ctrl+C, чтобы завершить программу. После этого введите sudo shutdown -h now для выключения Pi. После завершения выключения (обычно занимает около 30 секунд), отключите провода питания от Raspberry.

Шаг №12: Установка рамок


• Теперь, когда сервомоторы выведены в нулевые позиции, вы можете прикрепить к ним рамки. Начните с большей, с рамки поворотного мотора. Разместите ее таким образом, чтобы длинная сторона была параллельна корпусу, а сервомотор находился с той же стороны, что и порты USB и Ethernet на Pi. Закрепите рамку небольшим винтом.



• Пропустите стяжку через нижние отверстия рамки наклона. Концы должны быть направлены вверх, пока не соединяйте их.



• Оденьте присоедините рамку наклона к сервомотору на рамке поворота. Прикрутите с помощью маленького винта.



Шаг №13: Монтирование камеры


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





• Подключите камеру к одному из USB-портов и вставьте SD карту, кабель питания и Ethernet-кабель.



Шаг №14: Запуск камеры


• После загрузки Pi, снова подключитесь по SSH.
• Сначала перейдите в папку, содержащую программу, с помощью которой вы будете стримить видео. В терминале наберите: cd ./mjpg-streamer/mjpg-streamer
• Теперь запустите mjpg-streamer командой: ./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www" &



Вы увидите некоторые ошибки, но они относятся к неиспользуемым модулям. Светодиод на вебкамере должен загореться и в конце вывода программы вы должны увидеть:
o: www-folder-path...: ./www/ o: HTTP TCP port.....: 8080 o: username:password.: disabled o: commands..........: enabled
• Теперь нажмите Ctrl+C, чтобы вернуться обратно в терминал. Ввведите cd и нажмите Enter, чтобы вернуться в корневую директорию.

Шаг №15: Внешний вид


• Теперь, когда все собрано и работает, время придать этому какой-то вид.
• В терминале вернитесь в директорию picam: cd picam
и запустить приложение PiCam: sudo python picam.py
• Когда приложение запустилось, перейдите в браузере по адресу http://picam/. Вы должны увидеть видео с вашей камеры и кнопки управления. Каждое нажатие поворачивает камеру на 10º.



• Для получения доступа к камере из интернета, нужно настроить проброс порта на роутере. Один порт должен быть переброшен на порт 80 (для вебстраницы), и один — на порт 8080 (для трансляции видео). Подробности про пробрасывание портов и запуске сервера на Pi можно почитать на http://raspberrywebserver.com/serveradmin/get-your-raspberry-pi-web-site-on-line.html. Однако не забывайте, что в данном случае камера никак не защищена от злоумышленников, и вам нужно будет как-то решить проблему безопасности.

Напоследок


В этот проект удаленной вебкамеры можно, при желании, добавить Wi-Fi, использовать погодоустойчивый корпус для использования на улице, или даже спрятать камеру в обычной вещи вроде книги.

Экспериментируйте!