Сделай сам Pan и Tilt Сетевая камера безопасности с Raspberry Pi

Узнайте, как сделать дистанционно видимую камеру слежения с панорамированием и наклоном с помощью Raspberry Pi. Этот проект может быть завершен утром только из самых простых частей. Вот конечный результат:

Что вам нужно

  • Raspberry Pi 2 или 3 с картой Micro SD
  • Arduino UNO или аналогичный
  • 2 х микро или мини хобби серво
  • USB вебкамера
  • Мужские провода
  • Мужские и женские соединительные провода
  • Ассорти молнии

Построение камеры безопасности

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

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

Серво-Оборудование

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

Pi-Pan-Tilt-камера

Слово о веб-камерах

Не все USB-камеры созданы одинаково. Подключите веб-камеру к USB-порту вашего Pi и выполните следующую команду:

lsusb

Эта команда отображает информацию обо всех USB-устройствах, подключенных к Pi. Если вашей веб-камеры нет в списке, вы можете попробовать подключенный USB-концентратор и повторить команду. Если веб-камера по-прежнему не распознается, возможно, вам придется купить совместимую веб-камеру.

Настройка сервопривода

Хотя сервоприводы могут показаться страшными и сложными, их действительно довольно просто подключить. Сервоприводы работают с широтно-импульсной модуляцией (ШИМ), которая позволяет цифровым системам имитировать аналоговые сигналы. Сигналы ШИМ, по сути, представляют собой сигнал быстрого включения-выключения. Сигнал ON или HIGH описывается с использованием коэффициента заполнения. Рабочий цикл выражается в процентах и ​​описывает, как долго сигнал включен. Сигнал ШИМ с рабочим циклом 25% будет включен в течение 25% времени и выключен в течение оставшихся 75%. Сигнал не включается в начале, а затем выключается вечно, он пульсирует регулярно в течение очень короткого периода времени.

Сервоприводы слушают эти импульсы и действуют соответственно. Использование коэффициента заполнения 100% будет таким же, как «обычный» 5 В, а 0% будет таким же, как заземление. Не беспокойтесь, если вы не до конца понимаете, как работает ШИМ, вы все равно можете управлять сервоприводами (Extreme Electronics — хорошее место, чтобы узнать больше).

Существует два основных способа использования ШИМ — аппаратный или программный. Аппаратная широтно-импульсная модуляция часто обеспечивает более низкую задержку (как долго между сервоприводом, получающим команду и перемещается), чем программная широтно-импульсная модуляция, однако Pi имеет только один вывод с аппаратной широтно-импульсной модуляцией. Внешние схемы доступны для обеспечения нескольких каналов аппаратного ШИМ, однако простой Arduino также может справиться с этой задачей, так как они имеют несколько аппаратных выводов ШИМ.

Вот схема:

Pi-Servo-соединение

Дважды проверьте распиновку вашего Pi, они немного различаются в зависимости от модели. Вы должны выяснить, как ваши сервоприводы подключены. Серво требуются три провода для управления ими, однако цвета немного различаются:

  • Красный положительный, подключите это к Pi + 5v
  • Коричневый или черный отрицательный, подключите это к GND на Pi
  • Оранжевый или белый сигнал, подключите его к контактам 9 и 10 Arduino

Настройка Arduino

Новичок в Arduino? Начните здесь

,

После подключения сервоприводов откройте на своем компьютере Arduino IDE и загрузите этот тестовый код. Не забудьте выбрать правильную плату и порт из Инструменты> Доска а также Инструменты> Порт меню

#include  // Import the library
Servo servoPan, servoTilt; // Create servo objects
int servoMin = 20, servoMax = 160; // Define limits of servos
void setup() {
// Setup servos on PWM capable pins
servoPan.attach(9);
servoTilt.attach(10);
}
void loop() {
for(int i = servoMin; i  servoMin; --i) {
// Move servos from maximum to minimum
servoPan.write(i);
servoTilt.write(i);
delay(100); // Wait 100ms
}
}

Все хорошо, вы должны видеть, как оба сервопривода медленно движутся вперед и назад. Обратите внимание, что «servoMin» и servoMax »определяются как 20 и 160 градусов (вместо 0 и 180). Это отчасти потому, что эти дешевые сервоприводы не могут точно перемещаться на все 180 градусов, а также из-за физического размера веб-камеры препятствует использованию полного диапазона. Возможно, вам придется настроить их для вашей настройки.

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

Сервоприводы почти слишком мощные, чтобы Arduino мог работать, поэтому они будут питаться от Pi. Рельсы 5 В на Pi ограничены 750 мА, подаваемыми на весь Pi, и Pi потребляет приблизительно 500 мА, оставляя 250 мА для сервоприводов. Эти микро сервоприводы потребляют около 80 мА, что означает, что Pi должен быть в состоянии справиться с двумя из них. Если вы хотите использовать больше сервоприводов или более мощные модели, вам может потребоваться внешний источник питания.

Теперь загрузите следующий код в Arduino. Это будет прослушивать входящие последовательные данные (последовательные, как в универсальной последовательной шине или USB). Пи отправит эти данные через USB на Arduino, сообщив, куда перемещать сервоприводы.

#include  // Import the library
Servo servoPan, servoTilt; // Create servo object
String data = ""; // Store incoming commands (buffer)
void setup() {
// Setup servos on PWM capable pins
servoPan.attach(9);
servoTilt.attach(10);
Serial.begin(9600); // Start serial at 9600 bps (speed)
}
void loop() {
while (Serial.available() > 0)
{
// If there is data
char singleChar = Serial.read(); // Read each character
if (singleChar == 'P') {
// Move pan servo
servoPan.write(data.toInt());
data = ""; // Clear buffer
}
else if (singleChar == 'T') {
// Move tilt servo
servoTilt.write(data.toInt());
data = ""; // Clear buffer
}
else {
data += singleChar; // Append new data
}
}
}

Вы можете проверить этот код, открыв серийный монитор (верхний правый> последовательный монитор) и отправив некоторые тестовые данные:

  • 90P
  • 0P
  • 20T
  • 100T

Обратите внимание на формат команд — значение, а затем буква. Значение — это положение сервопривода, а буква (заглавными буквами) указывает сервопривод панорамирования или наклона. Поскольку эти данные передаются от Pi последовательно, каждый персонаж проходит по одному за раз. Arduino должен «хранить» их, пока не будет передана вся команда. Последняя буква не только указывает на сервопривод, но и позволяет Arduino знать, что в этой команде больше нет данных.

Наконец, отсоедините Arduino от компьютера и подключите его к Raspberry Pi через обычное USB-соединение.

Настройка Pi

Теперь пришло время настроить Pi. Сначала установите операционную систему

, Подключите веб-камеру и Arduino к Pi USB.

Обновите Pi:

sudo apt-get update
sudo apt-get upgrade

Установить движение:

sudo apt-get install motion

Motion — это программа, предназначенная для потоковой передачи через веб-камеру. Он справляется со всеми тяжелыми работами и даже может выполнять запись и обнаружение движения (попробуйте создать систему безопасности захвата движения

). Откройте файл конфигурации Motion:

sudo nano /etc/motion/motion.conf

Этот файл предоставляет множество опций для настройки движения. Настройте следующим образом:

  • демон включен — запустить программу
  • частота кадров: 100 — сколько кадров или изображений в секунду для потоковой передачи
  • stream_localhost off — разрешить доступ через сеть
  • ширина 640 — ширина видео, настроить для вашей веб-камеры
  • высота 320 — высота видео, настроить для вашей веб-камеры
  • stream_port 8081 — порт для вывода видео на
  • output_picture off — не сохранять изображения

Это довольно большой файл, поэтому вы можете использовать CTRL + W искать строки. Когда закончите, нажмите CTRL + X и затем подтвердите, чтобы сохранить и выйти.

Теперь отредактируйте еще один файл:

sudo nano /etc/default/motion

Установите «start_motion_daemon = yes». Это необходимо для обеспечения работы Motion.

Теперь узнайте свой IP-адрес:

ifconfig

Эта команда покажет детали сетевого подключения для Pi. Посмотрите на вторую строку, интернет адрес. Вы можете установить статический IP-адрес (что такое статический IP-адрес?

), но пока запишите этот номер.

Теперь запустите Motion:

sudo service motion start

Вы можете остановить или перезапустить Motion, изменив «start» на «stop» или «restart».

Переключитесь на свой компьютер и перейдите к Pi из веб-браузера:

http://xxx.xxx.x.xx:8081

Где xxx.xxx.x.xx — IP-адрес Pi. Двоеточие, за которым следует число, — это порт, который был настроен ранее. Все хорошо, вы должны видеть поток с вашей веб-камеры! Попробуйте передвигаться и посмотреть, как все выглядит. Возможно, вам придется настроить яркость и контрастность в файле конфигурации. Возможно, вам придется сфокусировать веб-камеру — у некоторых моделей есть небольшое кольцо фокусировки вокруг объектива. Поворачивайте это, пока изображение не станет самым резким.

Вернитесь на Pi, создайте папку и перейдите в нее:

mkdir security-cam
cd security-cam/

Теперь установите Twisted:

sudo apt-get install python-twisted

Twisted — это веб-сервер, написанный на Python, который будет прослушивать команды и затем действовать соответствующим образом.

После установки создайте скрипт Python для выполнения команд (переместите сервоприводы).

sudo nano servos.rpy

Обратите внимание, что расширение файла «.rpy» вместо «py». Вот код:

# Import necessary files
import serial
from twisted.web.resource import Resource
# Setup Arduino at correct speed
try:
arduino = serial.Serial('/dev/ttyUSB0', 9600)
except:
arduino = serial.Serial('/dev/ttyUSB1', 9600)
class MoveServo(Resource):
isLeaf = True
def render_GET(self,request):
try:
# Send value over serial to the Arduino
arduino.write(request.args['value'][0])
return 'Success'
except:
return 'Failure'
resource = MoveServo()

Теперь запустите веб-сервер:

sudo twistd -n web -p 80 --path /home/pi/security-cam/

Давайте разберемся — «-p 80» указывает порт (80). Это порт по умолчанию для веб-страниц. «–Path / home / pi / security-cam /» указывает Twisted запустить сервер в указанном каталоге. Если вы внесете какие-либо изменения в сценарии внутри папки «security-cam», вам потребуется перезагрузить сервер (CTRL + X чтобы закрыть, затем снова запустите команду).

Теперь создайте веб-страницу:

sudo nano index.html

Вот код веб-страницы:


Make Use Of DIY Security Camera
#container {
/* center the content */
margin: 0 auto;
text-align: center;
}


Left Right Up Down var servos; $( document ).ready(function() { servos = moveServos(); }); function moveServos() { // Store some settings, adjust to suit var panPos = 70, tiltPos = 90, tiltMax = 170, tiltMin = 45, panMax = 170, panMin = 20; return { move:function(servo, adjustment) { var value; if(servo == 'P') { if(!((panPos >= panMax && adjustment > 0) || (panPos <= panMin && adjustment = tiltMax && adjustment > 0) || (tiltPos <= tiltMin && adjustment < 0))) { // Still within allowed range, "schedule" the movement tiltPos += adjustment; } value = tiltPos + 'T'; } // Use AJAX to actually move the servos $.get('http://PI_IP_ADDRESS/servos.rpy?value=' + value); }, } }

Измените «PI_IP_ADDRESS» (используется дважды) на реальный IP-адрес вашего Pi (raspberrypi.local также должно работать, если вы используете последнюю версию Raspian). Перезапустите веб-сервер и затем перейдите к Pi с вашего компьютера, не нужно указывать порт. Вы должны иметь возможность перемещаться влево и вправо и видеть видеопоток:

Pi-Pan-Tilt-камера-Web-View

Там у вас есть это. Ваша собственная сетевая камера Pan and Tilt. Если вы хотите выставить свою веб-камеру в интернете, не забывайте об опасностях

- затем посмотрите на переадресацию портов

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

и адаптер Wi-Fi для действительно портативной установки.

Вы сделали что-нибудь классное с веб-камерой и пи? Дайте мне знать в комментариях, я хотел бы видеть!

Ссылка на основную публикацию
Adblock
detector