Оглавление:

Raspberry PI Camera и Light Control «Звезда смерти»: 5 шагов (с изображениями)
Raspberry PI Camera и Light Control «Звезда смерти»: 5 шагов (с изображениями)

Видео: Raspberry PI Camera и Light Control «Звезда смерти»: 5 шагов (с изображениями)

Видео: Raspberry PI Camera и Light Control «Звезда смерти»: 5 шагов (с изображениями)
Видео: Приказ комиссара. Warhammer 40k 2024, Июль
Anonim
Камера Raspberry PI и звезда смерти с контролем света
Камера Raspberry PI и звезда смерти с контролем света
Камера Raspberry PI и звезда смерти с контролем света
Камера Raspberry PI и звезда смерти с контролем света
Камера Raspberry PI и звезда смерти с контролем света
Камера Raspberry PI и звезда смерти с контролем света

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

Вот еще один замечательный проект, первоначально названный Shadow 0f Phoenix, щит Raspberry PI в сочетании с обнаружением движения и элементами управления освещением на базе Arduino.

Шаг 1. Состояние коммерческих IP-камер

Состояние коммерческих IP-камер
Состояние коммерческих IP-камер
Состояние коммерческих IP-камер
Состояние коммерческих IP-камер
Состояние коммерческих IP-камер
Состояние коммерческих IP-камер

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

Я буду сравнивать ее с серией беспроводных IP-камер NEO COOLCAM Full HD 1080P, поскольку у меня было много этих различных моделей камер neo coolcams (ONVIF). Они бывают разных форм и размеров, на улице и в помещении, большинство из них имеют встроенную поддержку Wi-Fi, но давайте посмотрим на их предостережения:

  • Китайские производители, которые продают эти камеры, почти всегда лгут о разрешении встроенного датчика изображения, когда вы покупаете камеру 5MP / 8MP на Ebay, вы можете получить дешевую камеру 2MP с плохой картинкой (она работает, но качество - мусор). Когда вы покупаете 8-мегапиксельную камеру Raspberry PI v2 у первоначального продавца, вы получите то, за что заплатили, и фактический 8-мегапиксельный датчик с разрешением 3280 × 2464 пикселей =>
  • С точки зрения безопасности эти камеры (даже более дорогие Dlink и другие модели) ужасны, они используют пароли по умолчанию, такие как 123456, или встроенные пользователи, такие как admin / admin operator / operator, которые вы, возможно, даже не сможете изменить, или изменения пропали после перезагрузки. Завершите это тем, что многие из этих камер звонят домой (подключаются к их серверам в Китае, некоторые даже транслируют видео / изображения, не прося вас просто упростить задачу, если вы решите однажды установить их приложение для Android / Iphone, чтобы проверить свои дом). Даже если вы поместите эти устройства за маршрутизатор, этого недостаточно, лучше всего, если вы не установите в них шлюз по умолчанию, не защитите их или не поместите в VLAN, чтобы они не могли выйти на Интернет или даже лучше: не используйте их вообще.
  • Они надежнее? нет, многие из них, даже более дорогие DLINK, имеют возможность перезагружать камеру ежедневно / еженедельно и т. д. Эта опция существует по какой-то причине, потому что через X дней они часто теряют подключение к Wi-Fi или плохо себя ведут. Подумайте о них как о старых добрых коробках Win95, которые нужно чаще перезагружать:) Я не говорю, что оборудование на основе Raspi настолько прочно, что вы можете встроить их в управляющие атомные электростанции, но с надлежащим оборудованием / программным обеспечением. Благодаря конфигурации, радиаторам, автоматическим охлаждающим вентиляторам и минимальному количеству операций RW на SDCARD они могут легко обеспечить бесперебойную работу более 100 дней без проблем. На момент написания мой DeathStar работает с 34 дней, прошло более 100, но иногда я взламывал канал в источнике питания, который питает некоторые другие мои схемы, поэтому мне пришлось отключить его:(
  • Целевое оборудование: они сделаны для одной конкретной цели, часто поставляются с небольшой областью NVRAM и busybox, но некоторые модели также делают невозможным доступ к этой оболочке, поэтому все, что вы можете использовать, это то, для чего они предназначены, пока вы можете используйте камеру на основе Raspi для любых других задач: файловый сервер, tftp / dhcp сервер, веб-сервер, сервер Quake… варианты безграничны.
  • Место для хранения: у них либо их нет, либо они используют карты памяти microsd с файловой системой FAT32 VS на raspberry pis, вы даже можете подключить жесткий диск на 2 ТБ, если хотите.
  • Управление освещением: у некоторых есть выход ALARM, где вы можете подключить небольшое реле, чтобы включить свет. Как я покажу вам в этом уроке, использование инфракрасных камер - это пустая трата времени, так как вы не сможете идентифицировать кого-либо на инфракрасных снимках из-за плохого качества. Если вам нужно записать видео в темноте, лучший способ сделать это - сначала включить свет, а затем записать видео.

Вы можете спросить, есть ли плюсы в использовании стандартной камеры? Да для предприятий, где часы работы по его настройке были бы дороже, чем возиться с Raspberry pis (во всяком случае, не для меня:)), и да, есть лучшие камеры (500 $ + с лучшим разрешением, чем у пи-камеры курс). В качестве еще одного преимущества я могу сказать, что камеры, соответствующие стандарту ONVIF, упростили централизованное обеспечение. Это обеспечивает стандартный интерфейс, который можно использовать для отправки команд камере, чтобы установить ее IP / маску сети / шлюз и другие вещи. Для этого вы можете загрузить диспетчер устройств Onvif с Sourceforge. Многие из этих устройств поставляются с дрянными сломанными веб-интерфейсами, где, например, он не позволяет вам правильно установить ip или сетевую маску, потому что javascript, который проверяет эти поля, неисправен, и ваш единственный способ правильно установить эти параметры - через ONVIF.

Шаг 2: Планы Звезды Смерти

Планы Звезды Смерти
Планы Звезды Смерти
Планы Звезды Смерти
Планы Звезды Смерти
Планы Звезды Смерти
Планы Звезды Смерти

Вы можете собрать это устройство с любым из Raspberry PI, начиная с 1 до 3B +. Даже у нуля есть порты для камеры, но, поскольку на рынке так много разных подержанных распи, вы можете задаться вопросом, какой из них наиболее идеален для этой сборки.

Ответ зависит от того, где вы хотите обрабатывать видеопоток.

Есть два варианта:

1. Обработка видео локально с движением и пересылка видеопотока при обнаружении движения (примечание: движение пересылает медленный постоянный поток на сервер, несмотря ни на что, это может зависеть от разрешения и частоты кадров, которые вы используете, начиная с нескольких от сотен мегабайт до нескольких гигабайт в день, просто напоминание, если вы хотите выполнить настройку на лимитном соединении). Здесь важен ЦП, и, к сожалению, движение (на момент написания) не использует преимущества нескольких ядер, однако ОС попытается немного сбалансировать нагрузку. У вас всегда будет одно из ядер при 100% использовании.

2. Обработка видео на центральном сервере: здесь вы просто перенаправляете необработанный видеопоток с камеры на внешний потоковый сервер (например, iSpy, работающий на компьютере x86, или MotionEyeOS, работающий на другом выделенном мини-компьютере). Поскольку локальной обработки нет, используемая вами модель PI не имеет значения, PI1 будет отправлять тот же поток, что и PI3B +.

В этом уроке я выберу первый вариант.

Эмпирическое правило здесь заключается в том, что чем более быстрый процессор вы задействуете, тем лучшие результаты вы получите. Например, моя камера на базе Raspi 2, смотрящая в коридор, иногда не улавливала ее, когда кто-то быстро проходил мимо, а во время записи запись была медленной, пропуская много кадров по сравнению с моделью 3. Модель 3 также имеет 802.11 abgn wifi, который удобен для потоковой передачи видео более высокого качества, он работает из коробки и довольно надежен. На момент написания статьи о том, что модель 3B + отсутствует, я просто рекомендовал бы вам приобрести ее с четырехъядерным процессором с тактовой частотой 1,4 ГГц.

Список материалов

  • 30 см пластик DeathStar:)
  • Малина Pi 3 B +
  • PiCam v2 (8 МП)
  • Arduino Pro Micro 5,5 В
  • 2x реле геркона SIP-1A05
  • 1x PCS HC-SR501 IR пироэлектрический инфракрасный инфракрасный модуль детектора движения PIR датчик движения
  • 1x резистор 10 кОм для LDR
  • 1x LDR
  • Адаптер постоянного тока 1x12V 4A
  • 1xWarm White LED 5050 SMD Гибкая световая лента 12 В постоянного тока
  • 1xBuck регулятор напряжения

Как вы можете видеть на схемах, этот проект изначально был разработан для управления одним единственным источником света с помощью одного реле, потому что я не планировал добавлять внутреннее освещение (что довольно круто), поэтому я просто подключил второе реле к Arduino. Самое замечательное в SIP-1A05 заключается в том, что он имеет внутренний обратный диод, а потребление в мА намного ниже ограничения мощности Arduino на каждый вывод.

Причина, по которой PIR находится на щите на фотографиях, потому что вначале S0P планировалось поместить в простую пластиковую коробку IP вместо DeathStar. Как вы могли догадаться, камера находится прямо в лазерном пистолете, PIR и LDR потребовали еще просверленных отверстий, и они заделаны клеем, так как я не планирую их удалять.

В нижней части DeathStar было просверлено отверстие, куда я приклеил большой болт с помощью прочного двухкомпонентного клея. Ее можно прикрутить к оригинальной стойке Neo Coolcams (ведь она для чего-то годилась:)). В качестве дополнительной опоры я использовал жесткие медные провода, чтобы удерживать верхнюю часть звезды.

Важное примечание об источнике питания: поскольку один и тот же источник питания будет питать как PI, Arduino, так и светодиодную ленту, он должен быть достаточно мощным, чтобы иметь возможность обрабатывать их все, поэтому он будет основан на светодиодной ленте, которую вы выберете для проекта. Коммерческая светодиодная лента 5050 12 В 3 метра потребляет около 2 А, это много. Для PI и Arduino вы должны рассчитать + 2A (хотя это завышение размера, это не повредит). Использование светодиодной ленты над стандартными галогеновыми лампами, неоновыми лампами или другим мощным освещением означает, что вы можете подключить всю эту схему к хорошей свинцово-кислотной батарее 12 В @ 10 Ач в качестве резервного, так что она будет работать даже в случае отключения электроэнергии.

Понижающий понижающий уровень понижает напряжение с 12 до 5 В для питания Arduino и PI, в то время как прямое питание 12 В подключается к реле для включения светодиодной ленты.

Шаг 3: программное обеспечение Arduino

Программное обеспечение Arduino
Программное обеспечение Arduino

Ниже вы можете найти полный исходный код, который хорошо прокомментирован, но вот краткое объяснение того, как это работает: в начале каждого цикла вызывается обычная функция xcomm (), чтобы узнать, поступила ли команда от Raspberry PI, которая может быть LIGHT_ON / OFF, чтобы включить свет в коридоре или DS_ON / OFF, чтобы включить / выключить подсветку DeathStar, я реализовал это просто ради совершенства, поскольку, если кто-то проходит мимо PIR, должен поднять его и включить огни, но, может быть, вы хотите по какой-то причине посмотреть на это место, даже когда там никого нет.

После этого считывается значение фотоэлемента, и движущийся штифт проверяется на предмет движения. Если есть движение, код проверяет, достаточно ли темно, а затем проверяет, не находимся ли мы. Если все это проходит, он просто включает свет в коридоре и отправляет PHOENIX_MOTION_DETECTED обратно на Raspberry PI, если он недостаточно темный, он все равно отправляет сигнал обратно на компьютер, но не включает свет. При обнаружении движения запускается 5-минутный таймер.

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

У нас есть еще один таймер задержки для внутреннего освещения DeathStar, который полностью зависит от photocellReading <dark_limit.

Хотя 2 процедуры не знают друг о друге, они будут отлично работать вместе, поскольку, когда загорается свет в коридоре, он дает столько света, что LDR подумает, что снова наступило дневное время, и выключит внутреннее освещение. Однако были некоторые предостережения относительно этого процесса, который объясняется в коде, если вам интересно, если нет, то возьмите ответ Nvidia, что «он просто работает!».

Шаг 4: Программное обеспечение Raspberry PI

Программное обеспечение Raspberry PI
Программное обеспечение Raspberry PI
Программное обеспечение Raspberry PI
Программное обеспечение Raspberry PI
Программное обеспечение Raspberry PI
Программное обеспечение Raspberry PI

У меня работает последняя версия Raspbian:

Распбиан GNU / Linux 9.4 (растянуть)

Linux Phoenix 4.9.35-v7 + # 1014 SMP Пт, 30 июня, 14:47:43 BST 2017 armv7l GNU / Linux ii motion 4.0-1 Программа захвата armhf V4L с поддержкой обнаружения движения

Хотя вы можете использовать другие дистрибутивы, если у вас возникнут какие-либо проблемы с камерой, вы получите поддержку от команды, только если вы используете их официальную ОС. Также настоятельно рекомендуется удалить нежелательное вредоносное ПО, такое как systemd.

Движение также можно легко построить из исходного кода:

apt-get -y install autoconf automake pkgconf libtool libjpeg8-dev build-essential libzip-dev apt-get install libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavdevice-dev

apt-get -y установить libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavdevice-dev apt-get -y install git git clone https://github.com/Motion-Project/motion cd motion / autoreconf -fiv. / configure --prefix = / usr / motion make && make install / usr / motion / bin / motion -v

Я рекомендую iSpy в качестве сервера для записи / сбора видео. К сожалению, на момент написания статьи для Linux не существовало хороших альтернатив. Камеру можно добавить с URL-адресом MJPEG https:// CAMERA_IP: 8081 порт по умолчанию.

Обработка движения может быть полезна, например, вам не нужно постоянно смотреть на свой сервер iSpy весь день, вы можете получить электронное письмо в случае движения. Хотя iSpy имеет эту функцию для оповещения по электронной почте в случае движения, он время от времени включает запись для разных событий, таких как отражение света в область. С детектором движения PIR у меня никогда не было ни одной ложной тревоги. Оповещения можно обрабатывать локально:

На датчике обнаружено событие движения Pir> Предупреждение Arduino> Raspberry pi получает на консоль> Программа обработки C> Внешнее почтовое приложение

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

void logger (char * text) {

ФАЙЛ * f = fopen ("phoenix.log", "a"); if (f == NULL) {printf ("Ошибка при открытии файла журнала! / n"); возвращение; } fprintf (f, "% s =>% s / n", cur_time (0), текст); fclose (f); #ifdef SYSLOG char loggy [500]; sprintf (loggy, "% s =>% s / n", cur_time (0), текст); setlogmask (LOG_UPTO (LOG_NOTICE)); openlog ("DeathStar", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_USER); // системный журнал (LOG_NOTICE, «Программа запущена пользователем% d», getuid ()); системный журнал (LOG_NOTICE, журнал); closelog (); #endif return; }

На принимающей стороне syslog-ng может демультиплексировать эти события из основного потока журнала:

filter f_phx {

матч ("Звезда Смерти"); }; место назначения d_phx {файл ("/ var / log / phoenix / deathstar.log"); }; журнал {источник (s_net); фильтр (f_phx); пункт назначения (d_phx); };

и его можно передать другому инструменту (см. приложение motion.php) для анализа и предупреждения.

В этом скрипте вы можете просто установить обычное время в течение недели, когда вас нет дома:

$ opt ['alert_after'] = '09:00:00'; // Утро $ opt ['alert_before'] = '17:00:00'; // Вечерами

Программа php использует отличную утилиту logtail для анализа журналов.

$ cmd = "logtail -o". $ offsetfile. ' '. $ logfile.'> '. $ logfile2;

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

Motion.php можно запустить из crontab с небольшой уловкой на выходных, когда он будет просматривать журналы, но не обрабатывать дальше.

* / 5 * * * 1-5 / usr / local / bin / php ~ / motion.php &> / dev / null * / 5 * * * 6-7 / usr / local / bin / php ~ / motion.php выходные &> / dev / null

Шаг 5: проблемы и список дел

Проблемы и список дел
Проблемы и список дел
Проблемы и список дел
Проблемы и список дел

Если вы используете Raspberry pi 3 или новее, вы можете пропустить этот раздел, вы, скорее всего, больше не столкнетесь с этими проблемами.

В течение многих лет у меня были некоторые проблемы с платами на базе Raspberry pi 2, которые могли работать с одним и тем же программным стеком, но были куплены в разное время из разных мест. После определенного периода времени, который может составлять 2 или 20 дней, когда SSH входит на устройство, SSH просто зависает, поэтому и демон движения, и локальный код C, который разговаривал с Arduino, были загружены в оперативную память, поэтому устройство работало но в этом состоянии с ним уже нельзя было ничего делать.

После долгих поисков неисправностей я нашел решение:

homesync.sh

#! / bin / sh -e

### BEGIN INIT INFO # Предоставляет: homesync # Required-Start: mountkernfs $ local_fs # Required-Stop: camera phoenix # Default-Start: S # Default-Stop: 0 6 # Краткое описание: домашний синхронизатор # Описание: домашний синхронизатор by NLD ### END INIT INFO NAME = home DESC = "Ramdisk Home Synchronizer" RAM = "/ home /" DISK = "/ realhome /" set -e case "$ 1" в начале | далее) echo -n "Запуск $ DESC: "rsync -az --numeric-ids --delete $ DISK $ RAM &> / dev / null echo" $ NAME. ";; stop | back) echo -n "Остановка $ DESC:" rsync -az --numeric-ids --delete $ RAM $ DISK &> / dev / null echo "$ NAME.";; *) echo "Usage: $ 0 {start | stop}" exit 1;; esac выход 0

Скрипт идет вместе с модификацией fstab:

tmpfs / home tmpfs rw, размер = 80%, nosuid, nodev 0 0

Домашний раздел монтируется как ramdisk, что дает около 600 МБ свободного места на Raspberry pi 2, чего более чем достаточно для хранения некоторых двоичных файлов и небольших файлов журналов:

tmpfs 690M 8,6M 682M 2% / дом

Оказалось, что зависание PI было связано с операциями записи на SD-карту, хотя я пробовал разные карты (Samsung EVO, Sandisk), которые несколько раз сканировались на наличие ошибок до и после, и у них не было проблем с другими ноутбуками, это было просто приближается. У меня не было такой же проблемы (пока) с Raspberry PI 3s и более мощным оборудованием, поэтому я также рекомендую их в этом руководстве.

Хотя текущее движение на Raspberry PI 3 мне как раз подходит, вот некоторые идеи, которые стоит изучить:

  1. Не используйте движение, но используйте быстрый поток по сети и позвольте мощному серверу выполнять обнаружение движения и кодирование видео (например, iSpy). -> Проблема: постоянная перегрузка пропускной способности сети.
  2. Используйте движение и позвольте ffmpeg кодировать видео. -> Проблема: ЦП не может обрабатывать более высокие разрешения
  3. Используйте движение, записывайте необработанное видео и позвольте мощному серверу выполнять кодирование. -> Использование ЦП на RPi низкое, а пропускная способность сети ограничена при реальном движении. Для этого сценария мы могли бы записать на SD-карту / RAM-диск для максимальной пропускной способности, а затем скопировать видео на другой сервер.

Также отмечу, что сборку этого проекта можно построить без Arduino. Все компоненты (реле, LDR, PIR) можно каким-то образом подключить к raspberry pi, но я предпочитаю микроконтроллеры реального времени для взаимодействия с датчиками и устройствами вывода. В тех случаях, когда мой Raspberry Pi, например, зависал или зависал, управление освещением, управляемое Arduino, работало нормально.

Если вам понравился этот инструктаж, следите за обновлениями, так как я продолжу серию с моей наружной камерой Raspberry Pi с нулевым куполом на 360 градусов в следующем году.

Рекомендуемые: