четверг, 23 января 2020 г.

Подключение инфракрасного датчика движения к raspberry pi и съемка при обнаружении движения

Камера наблюдения это такое устройство которое может "присматривать" за вашим имуществом во время вашего отсутствия большим плюсом которого является то что информация с камеры является большим доказательством чем слова из чьих то уст в честных судах. И организовать постоянную съемку можно используя недорогую usb камеру и одноплатный компьютер Raspberry pi (или вообще любой другой компьютер с достаточным для этого функционалом), однако постоянная непрерывная съемка имеет такой недостаток как заполнение памяти компьютера большим количеством бесполезных и ненужных снимков которые делаются всегда и даже тогда когда в этом точно нет никакой необходимости. Данную ситуацию можно исправить дополнив систему инфракрасным датчиком движения так чтобы датчик запускал съемку только при наличии движения. Преимуществом Raspberry pi является то что к данному компьютеру можно без больших проблем подключить обычный недорогой модуль инфракрасного датчика движения т.к. на данном компьютере есть разъем с пинами ввода/вывода которые можно настраивать и использовать на собственное усмотрение. Также, на данном компьютере, имеются пины с которых можно запитать датчик то очень удобно. Подключить датчик можно например так как показано на схеме:
Рисунок 1 - Подключение модуля инфракрасного датчика движения к Raspberry pi 3

Питание, в данной схеме, подведено в обход встроенного в модуль стабилизатора (нет смысла использовать два если один уже работает). Выбран пин 5. Узнать номер любого пина можно из таблицы которую можно увидеть если ввести в командной строке Raspberry pi команду:

gpio readall

Данная команда сработает если на Raspberry pi уже установлена библиотека wiring pi которая обычно всегда устанавливается вместе с операционной системой raspbian. Если, по каким то причинам, её нет то её (библиотеку) можно установить. Таблица может выглядеть например так:
Если повернуть Raspberry pi так как на рисунке 1 то расположение пинов будет соответствовать расположению ячеек данной таблицы. В этой таблице также показано какой пин какую функцию выполняет а также его название и текущее состояние. Данные из этой таблицы пригодятся для управления пинами. Допустим мы выбрали пин под номером 5. Теперь мы можем настроить его на вход командой:

gpio mode 5 in

Запустив таблицу ещё раз и убедившись в том что всё сработало наверняка, мы можем уже подключать датчик по схеме на рисунке 1 т.к. если например сделать это когда пин находиться в состоянии выхода то можно сжечь Raspberry pi, поэтому надо быть очень внимательным и осторожным. Хотя, на самом деле, если глянуть таблицу то можно убедиться в том что все пины ввода/вывода общего назначения обычно всегда по умолчанию настроены на вход. Если с подключением датчика всё стало понятно то можно приступить к подключению USB камеры, для этого есть отдельная статья http://electe.blogspot.com/2016/06/raspberry-pi.html также понадобиться установить утилиту fswebcam (если она ещё не установлена) статья об этом также имеется http://electe.blogspot.com/2019/02/raspberry-pi.html. Теперь если всё готово для написания bash скрипта то можно приступить к его написанию. Откроем редактор nano командой:

nano названиескрипта.sh

где вместо "названиескрипта" надо написать свое название скрипта. Откроется редактор nano в который можно вписать скрипт:

#!/bin/bash

for((a=1;a<240 a="" p="">do
sleep 1
p5=$(gpio read 5)
if [ $p5 -eq 1 ]
then
sudo fswebcam -r 640x480 -s 30 /var/www/html/webcam/$a.jpg
fi
done

В начале данного скрипта есть обязательная строка:
Далее идет цикл for:
Тело данного цикла помещается между словами "do" и "done":
в теле цикла есть задержка в одну секунду:
после которой идет опрос пина 5 (к которому подключен датчик) и помещение его состояния в переменую p5 (которую, при желании, можно назвать по другому):
далее имеется ветвление if условие которого записывается в прямоугольных скобках а тело между словами then и fi. В данном случае if[ $p5 -eq 1 ] означает "если p5 равно 1":
В теле ветвления находиться команда "сделать снимок и отправить его по указанному, в данной команде, адресу":
После того как скрипт написан его можно сохранить командой ctrl+o:
выйти из редактора командой ctrl+x:
теперь скрипт надо сделать исполняемым командой:
запустить скрипт можно командой:
остановить выполнение скрипта можно нажатием ctrl+c. Для того чтобы скрипт запускался сам можно прописать его в планировщике заданий. Для этого сначала нужно открыть планировщик заданий командой:
и прописать запуск скрипта командой:
Увеличить время работы скрипта можно увеличив количество его итераций например написав не 240 а например 5000 или любое другое число но важно понимать что память Raspberry pi ограничена. Данную статью можно посмотреть в видеоформате на ютубе:

видео про подключение камеры: https://youtu.be/moEYb1VbOD0
видео с рассказом про установку утилиты fswebcam: https://youtu.be/6__BbIsGRf0

купить Raspberry pi 3: http://got.by/34vrtq
usb веб камеру: http://got.by/34vs48
инфракрасный датчик движения HC-SR505: http://ali.pub/w97xr