Показаны сообщения с ярлыком Raspberry PI. Показать все сообщения
Показаны сообщения с ярлыком Raspberry PI. Показать все сообщения

суббота, 10 апреля 2021 г.

Node js Raspberry pi фотоснимок с usb камеры

 Для работы с видеокамерой в репозитории npm есть много разных библиотек, однако большинство из них работают с камерой не напрямую а посредством утилит на подобии fswebcam или ffmpeg. Если на raspberry pi уже установлена одна из этих утилит и node.js то сделать простейшее взаимодействие с камерой не составит труда и без дополнительных библиотек. Для этого можно использовать уже имеющиеся модули child_process (для взаимодействия с утилитой fswebcam (которая взаимодействует с камерой)) и fs (для работы с файлами (в данном случае для загрузки фотографии)). Т.о. можно организовать например получение фотоснимка с камеры подключенной к raspberry pi по нажатию кнопки в web интерфейсе браузера и вывод этого снимка в этот интерфейс в виде картинки. Для этого можно использовать простой скрипт приведенный ниже:

Данный скрипт создает сервер используя модуль http. В функцию createServer передается анонимная функция в которой происходит обращение с утилите fswebcam чтобы сделать снимок и сохранить его в виде файла с расширением jpg. Для этого используется функция exec модуля child_process. В эту функцию передается ещё одна анонимная функция (так делается по тому что в javascript есть асинхронные функции которые если просто поставить друг за другом не будут выполняться по очереди (как это происходит в обычных языках вроде C++ или java) и чтобы обеспечить последовательность выполнения функций в javascript есть несколько способов напр. колбэки (как в данном случае) а также промисы). После того как снимок сделан и сохранен в виде файла. Происходит чтение этого файла (это не самый быстрый способ получить фотографию но его не трудно было реализовать). Далее, в зависимости от запроса на сервер, формируется web страница либо выдается картинка либо выводиться сообщение об ошибке. В веб странице есть кнопка по нажатию на которую на сервер приходит запрос о получении картинки. При этом запрос каждый раз немного отличается от предыдущего (благодаря дополнительному рандомному числу) т.к. если он будет каждый раз одинаковым то картинка будет браться не из сервера а из кэша браузера (так работают браузеры для минимизации обращения на сервер что ускоряет вывод пользователю информации и экономит интернет трафик, однако в нашем случае приходиться бороться с этим эффектом т.к. он не дает возможности поменять картинку). Чтобы сервер выдал картинку по немного новому адресу можно использовать регулярные выражения которые уже имеются в javascript по умолчанию поэтому не требуют установки дополнительных библиотек. Регулярные выражения значительно упрощают процесс написания кода т.к. если бы их не было и использовался бы например язык C++ (в котором их нет) то пришлось бы организовывать посимвольное сравнение массивов для чего пришлось бы написать некоторое количество строк кода явно большее чем одна (как в данном случае). И при этом удалось обойтись без подключения дополнительных библиотек.


node.js можно использовать с raspberry pi 2 (данный одноплатный п.к. на имеет встроенного wifi но есть ethernet разъем, также можно подключить usb-wifi или usb модем), raspberry pi 3, raspberry pi 4 и с д.р. аналогичными одноплатными компьютерами. Подобрать и заказать подходящий raspberry pi можно, например, после перехода по ссылке -> http://alii.pub/6cpwso

воскресенье, 14 марта 2021 г.

Управление светодиодом через raspberry pi и node js

Node js дополняет язык javascript специальными функциями которые могут передать на выполнение какую либо команду интерпретатору языка bash по средствам которого происходит взаимодействие пользователя Raspberry pi с операционной системой этого компьютера. Это значит что используя node js можно (также как и ранее в предыдущих статьях данного блога про Raspberry pi) обратиться к утилите wiring pi для управления пинами raspberry pi. Но на этот раз, основную часть программы можно написать на простом и удобном javascript с динамической типизацией, "сборщиком мусора", строками, регулярками, объектами и прочими присущими данному языку вещами. К тому же, в случае когда управление Raspberry pi приходиться делать через web интерфейс то по любому придется писать код на javascript и если этот язык подходит и для серверной и для клиентской части то вполне можно ограничиться изучением только этого языка. О том как установить и использовать node js с raspberry pi есть статья: https://electe.blogspot.com/2021/01/hello-world-node-js-raspberry-pi.html поэтому перейдем сразу к рассмотрению кода:
В переменную path передается html код страницы с двумя кнопками для включения и выключения светодиода. При нажатии на одну из кнопок происходит передача get запроса запущенному серверу. В зависимости от того какая кнопка была нажата и какой запрос пришел будет выполнена либо установка пина под номером 1 на выход и уровень логического нуля либо на вход и уровень логической единицы для того чтобы светодиод погас т.к. в соответствии со схемой:

катод светодиода подключен с пину а анод к плюсу питания. В качестве аргумента в функцию fetch передается get запрос в котором указывается ip адрес raspberry pi, номер порта и дополнительный параметр для включения или выключения светодиода. Если данной код заработал то не обязательно ограничиваться управлением только одним светодиодом или одним цветом RGB светодиода (как на схеме выше). Можно сделать управление всеми тремя цветами и их смесью. Для этого можно использовать например такой код:
Также можно например подключить какую нибудь библиотеку и сделать более красивый web интерфейс. Для этого node js отлично подходит.


суббота, 30 января 2021 г.

Hello world на node js и raspberry pi

 Одноплатный компьютер raspberry pi является весьма популярным (на момент написания данной статьи) устройством на основе которого изготавливаются всевозможные приборы вроде роботов, игровых приставок, плееров, серверов и т.д. Однако чтобы создавать данные прибору необходимо уметь программировать этот компьютер. К счастью для разработчика, выбор программных инструментов для программирования компьютера гораздо шире чем для программирования микроконтроллеров или платформ вроде Arduino. Написать программу для Raspberry pi можно на множестве разных языков. Одним из самых популярных, простых в изучении и знакомых многим языков является javascript. К тому же программы написанные на этом языке могут обладать неплохой производительностью даже несмотря на то что изначально данный язык был полностью интерпретируемым и в этом (к моменту написания данной статьи) он (до конца) не изменился. Поэтому данный язык можно рассматривать как вариант для создания проектов на Raspberry pi. Чтобы использовать этот язык с Raspberry pi на этот одноплатный компьютер надо сначала установить node js. Если он ещё не установлен. Проверить установлен ли он можно командой:

nodejs -v    или    node -v

если в консоли выведется номер версии nodejs (например v0.10.29 (довольно старая версия)) то это значит что он уже установлен и его можно использовать если нет то значит нельзя. Но здесь нужно быть внимательным т.к. если на Raspberry pi установлена какая либо другая программа с таким же именем то выведется версия этой программы а не node js. Если node js не установлен то установить его можно командой:

sudo apt-get install nodejs

удалить его можно командой:

sudo apt remove nodejs

После установки его сразу же можно начать использовать, можно создать файл и открыть его редактором nano вписав команду например:

nano server.js

И вписать всего лишь одну простую (ну может не очень простую но) строку кода:

requre('http').createServer(function(req,res){res.writeHead(200, {'Content-Type': 'text/html'});res.end('Hello world!');}).listen(3000);

(в новых версиях можно использовать ()=>{} вместо function(){}), после чего сохранить файл нажатием ctrl+o и Enter и выйти нажатием ctrl+x. А далее запустить сервер командой:

 node server.js

Если ошибок в строке кода нет то никаких сообщений в консоли не выведется. Далее можно открыть браузер на своем компьютере через который произведен вход на Raspberry pi или с самого Raspberry pi, вписать ip адрес Raspberry pi (его можно найти если покопаться в веб интерфейсе роутера (например в роутере с прошивкой Олега раздел в котором можно найти этот ip называется "DHCP Leases")) после которого, через двоеточие, адрес порта указанный в строке кода. Напр. 3000. После того как адрес вписан и нажата клавиша Enter браузер должен вывести сообщение "Hello world!" выглядеть это может примерно так:


Т.о. получилось сделать простейший серверный Hello world! всего лишь одной строкой кода и без сложных операций вроде развертывания проекта или настройки конфигурационных файлов или изучения и использования дополнительного языка средства сборки проектов и т.д. javascript - это довольно простоя язык в изучении и использовании. Для того чтобы остановить сервер можно просто нажать ctrl+c. Возможности node js не ограничиваются одни только Hello world! и используя его можно создавать гораздо боле сложные проекты. К данной статье прилагается видео которое можно посмотреть:

 

КАРТА БЛОГА (содержание)

среда, 6 мая 2020 г.

Датчик цвета из usb камеры и Raspberry pi

Цифровая видеокамера может быть источником информации о внешнем мире для какого либо робота или электронного прибора подобно глазу для человека. Помимо камеры существуют и другие приборы для сбора информации о внешнем мире (например ЛИДАР) но именно камера является одним из самых дешёвых и при том информативных. Возможно это связано с тем что для человека наиболее важна информация получаемая от изображений и поэтому технологии изготовления видеокамер получили большое развитие. Если у нас например имеется ондноплатный компьютер Raspberry pi (или вообще какой либо другой компьютер) а также usb камера которую можно подключить к этому компьютеру то мы можем, на основе этих приборов, пытаться создавать какие либо устройства способные распознавать визуальные образы из внешнего мира. Задача распознавания образов компьютером является сложной и это препятствует автоматизации некоторых видов работ которые выполняют люди. Однако возможно что кто то сможет решить эту проблему в какой либо сложноавтоматизируемой области и возможно что это будет один из тех кто прочитает данную статью. Для начала мы попробуем сделать простейший датчик цвета на основе usb камеры и Raspberry pi. Сделав данный прибор мы освоим один из наиболее простых способов извлечения информации из цифровой цветной usb web камеры. Далее с извлеченной информацией можно будет эксперементировать по разному. Для удобной визуализации результата можно использовать например RGB светодиод с общими анодами и соединить его так как показано на рисунке:
Рисунок 1 - Схема подключения RGB светодиода к Raspberry pi 3

Если камера обнаружит преобладание красной составляющей то загорится красный свет, если зеленой то - зеленый, если синей то - синий. Теперь осталось разобраться с USB камерой и распознаванием цвета. Для Raspberry pi нужно будет написать какую то программу на каком то языке программирования. Т.к. Raspberry pi это просто компьютер с операционной системой то вариантов того какой язык программирования выбрать очень много. Если кто либо из читающих данную статью занимается web программированием то ему наверняка знакомы такие языки как PHP, javascript, python и т.д. Это хорошие языки, по ним есть много учебников они популярны и распространены, для них есть много библиотек и их можно использовать для программирования Raspberry pi. Однако эти языки интерпретируемые т.е. когда программы написанные на них выполняются то вместе с их выполнением происходит их трансляция на машинный код и это занимает некоторое время. Для обработки большого количества информации (а у нас именно такой случай т.к. современные камеры имеют высокое разрешение и могут снимать видео) лучше подходят компилируемые языки. Существуют также варианты работающие через виртуальную машину - это например java и C# когда сначала код программы преобразуется в байт код а потом этот байт код преобразуется в машинный. Но и в этом случае расходуется время на преобразование байт кода в машинный код. Языки C и C++ являются компилируемыми и они очень похожи на описанные выше языки своим синтаксисом (за исключением питона) поэтому эти языки очень хорошо подходят для наших целей т.к. многие их уже знают либо смогут освоить и программы написанные на них могут быть достаточно быстры для обработки изображений с камеры. К тому же вместе с операционной системой для Raspberri pi обычно прилагаются компиляторы для данных языков и их скорее всего не придется дополнительно устанавливать. Помимо компилятора C++ нам понадобятся некоторые другие утилиты поэтому включим Raspberry pi зайдем в терминал и впишем там команды (нажимая enter после каждой):
Теперь проверим есть ли на нашем Raspberry pi утилита fswebcam для того чтобы делать снимки с usb камеры. Впишем команду whereis webcam и нажмем enter
Если в консоли появятся какие то пути то данная утилита уже установлена, если нет то она не установлена и установить её можно командой sudo apt-get install fswebcam
Также нам понадобятся ещё 3 утилиты, это конвертер изображений imagemagic, компилятор языка C++ а также утилита wiringpi для управления пинами Raspberry pi (которая обычно также как и компилятор устанавливается также вместе с операционной системой). С этими тремя утилитами поступим ткже как и с первой. Сначала проверяем наличие утилиты потом устанавливаем её если её нет:
Теперь можно начинать писать программу. Для этого нужно открыть какой нибудь текстовый редактор. Можно например это сделать через графический интерфейс или в терминале открыть например vim или nano:
Подключим библиотеку ввода/вывода:
Далее надо будет подключить ещё пару библиотек:
Библиотека stdlib.h нужна для того чтобы можно было использовать функцию system а эта функция нужна для того чтобы можно было запускать какие либо внешние команды которые мы можем вписать в терминале или в bash скрипте. И ещё одна библиотека:
Эта библиотека нужна для чтения файла (в нашем случае фотографии с камеры). Также эту библиотеку можно использовать для вывода вместо iostream. Далее напишем функцию main:
Функция должна что то вернуть, вернем ноль:
Далее нужно объявить все необходимые структуры, массивы и переменные т.к. в языке С++ переменные можно использовать только после их объявления.
Первым объявляется указатель на переменную типа FILE. В языке C++ и C если при объявлении переменной ставиться звездочка то это указатель. Данный указатель нужен для того чтобы прочитать файл (в данном случае фотографию). Далее имеется массив символов для хранения строки (в языке C++ нет отдельного типа "строка" как в других языках напр. java, python, javascript и т.д. вместо строки тут используется массив символов). Размер его 12 по тому что для хранения одного пикселя (в формате который мы рассмотрим ниже) нужно 12 символов (не всегда их будет столько но здесь мы ставим максимальное количество чтобы они всегда помещались). Далее объявляется переменная x типа int для того чтобы считать количество строк. После чего переменная типа long для того чтобы хранить символ. Эта переменная не типа char по тому что в переменную типа char нельзя поместить символ конца файла. Далее есть три переменный для хранения трех составляющих цвета пикселя. И наконец ещё одна переменная - это ещё один вспомогательный счётчик. Теперь мы можем настроить пины Raspberry pi к которым подключен светодиод на выход:
После того как мы настроили пины мы делаем снимок с камеры, убираем баннер (который утилита fswebcam делает на фотографии по умолчанию) чтобы он не влиял на результат (он добавит красной составляющей если его не убрать) и сожмем всю фотографию до размеров одного пикселя:
Теперь мы имеем картинку в формате jpg размером 1х1 пиксель. Чтобы достать этот пиксель из картинки формата jpg придется изрядно потрудиться т.к. формат jpg очень сложный. Это не просто набор пикселей а сложный формат с длинной преамбулой и сжатием. Помимо jpg есть и другие форматы напр. gif или png но они тоже сложные и со сжатием. Формат bmp без сжатия и хранит изображение как набор из 3х (RGB) или 4х (RGBA (A-прозрачность)) составляющих для каждого пикселя. Однако этот формат тоже не прост и имеет большую и сложную преамбулу. Он занимает много места и он сложен и утилита fswebcam не выдает изображения в этом формате поэтому этот формат тоже не годиться. Но к счастью для нас существует ещё один замечательный простой формат изображений который идеально подойдет для наших целей. Это формат PPM !!! Утилита fswebcam не может выдать изображение в таком формате и поэтому ранее мы установили ещё одну утилиту ( imagemagic ) для конвертации изображений. Сконвертируем наше изображение в формат PPM
Видно что мы конвертируем в формат ppm и без сжатия. В данном случае это означает что мы получим картинку в виде набора символов а не байтов. И после данной команды мы даже сможем открыть эту картинку текстовым редактором и понять какого цвета наш пиксель! Также мы сможем понять с какой строки нужно начинать вынимать пиксели из данного файла. Мы получили сконвертированную картинку и теперь можем её открыть функцией fopen
После открытия данной картинки имеется цикл на каждой итерации которого из картинки вынимается один символ и если это символ конца строки то переменная x инкрементируется. Так происходит подсчет количества строк. Если мы уже глянули в файл который получается после конвертации изображения из формата JPG в формат PPM то мы увидели что на строке под номером 5 находиться наш пиксель и именно с этой строки мы можем записать в наш массив символов. Это не очень хороший способ получить нужную нам информацию т.к. по разным причинам (обновление утилиты и т.д.) номер строки может поменяться и тогда система сработает неправильно. К тому же в данном коде присутствует "магическое число", такие числа очень не любят программисты по тому что когда программист читает чужой код то он не понимает что означает это число и поэтому злиться. Мы могли бы придумать другой способ получения нужной нам информации или как минимум сделать удобочитаемую константу для номера нашей строки но в данном случае мы разбираем простую программу просто в целях образования. Чтобы было проще понять основную суть, код делается небольшим, без дополнительных удобных наворотов. В коде мы видим что перед помещением символа в массив символов происходит преобразование из типа long в тип char. Это сделать нужно обязательно т.к. в языке C++ нет автоматического преобразования. Если из файла прочитался символ конца файла то цикл завершается. После чего надо обязательно закрыть файл функцией fclose(). После того как мы получили строку с нашим пикселем мы можем вытащить из неё три составляющие и записать их в предназначенные для них переменные. Сделать это мы можем функцией sscanf
Их мы можем вывести на экран
Это на самом деле было не обязательно т.к. далее мы выведем результат на светодиод но это может быть полезно для наладки если что то будет работать не так как надо. И наконец мы можем выяснить какая составляющая преобладает и в соответствии с эти зажечь нужный свет светодиода. Для этого мы использует обычное всем известное ветвление if
Ну а дальше идет конец функции main и программы
Теперь наш код надо сохранить
и откомпилировать компилятором
Если компилятор не выдал ошибок то скорее всего всё получилось и программу можно запустить 
Программа выполнится один раз. Её можно зациклить сделав простой bash скрипт с циклом
Данные скрипты мы уже делали в предыдущих статьях данного блога. Это отдельная длинная тема но не очень сложная, не сложнее чем C++. На языке bash тоже можно писать сложные программы однако это интерпретируемый язык и по этой причине он не используется в нашем случае целиком. Конечно вставки в код на C++ кода на языке bash замедляют всю программу в целом но здесь мы рассмотрели самый простой вариант с которого можно начать, достаточно быстро получить результат и мотивацию (т.к. полученный без больших усилий результат обычно дает удовлетворение и мотивирует продолжать) чтобы не забросить данное занятие на начальном этапе. Посмотреть как работает данное устройство и увидеть данную статью в видеоформате можно на видео:
скопировать полный текст программы можно из данного текстового поля (оказывается текстовые поля отлично подходят для вставок кода в html страницу т.к. тексты в треугольных  скобочках в них не считаются тегами)
КАРТА БЛОГА (содержание)

четверг, 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


четверг, 21 февраля 2019 г.

Камера наблюдения на Raspberry pi

Очень часто в местах с "повышенным содержанием нехороших людей" бывает необходим присмотр за имуществом во время отсутствия его хозяина, например чтобы в случае необходимости можно было "нехорошего человека" найти и наказать за его "нехорошие"  действия примененные к имуществу. Во время отсутствия хозяина, оставить наблюдать за имуществом можно например: сторожа, собаку или камеру наблюдения. Первый вариант требует больших постоянных финансовых вложений + он не обязательно надёжный и вполне возможно что очень проблемный. Второй вариант требует меньших финансовых затрат но он также не очень надежен и проблемен т.к. все живые существа любят спать, не любят работать и более того отдых и питание им просто необходимы для существования на этом свете, это вполне естественно и в этом нет ничего плохого. Современные технологии, в некоторых случаях, позволяют заменить живых существ неживыми и надёжными устройствами которые могу выполнять некоторые полезные функции которые раньше могли выполнять только живые существа. Камера наблюдения может долго наблюдать за происходящим после чего показать в подробностях (насколько позволяет разрешение, частота кадров и фокусировка) что происходило с имуществом во время отсутствия его хозяина. Есть множество вариантов как можно организовать такую камеру. Одним из вариантов является использование usb камеры вместе с одноплатным компьютером Raspberry pi 3. usb камеры достаточно недороги а Raspberry pi тоже не дорогой и маленький + может долго работать без перегрева если его не перенагружать. Raspberry pi 3 в отличии от  Raspberry pi 2 и более ранних версий, имеет встроенный wifi модуль что значительно упрощает работу с ним поэтому лучше использовать третью версию (или более высокие если они появились и имеют встроенный wifi упрощающий жизнь и уменьшающий размер всей системы в целом). Для начала приобретаем (если его ещё нет) Raspberry pi 3 а также usb веб камеру, можно также приобрести источник питания для Raspberry pi 3 или использовать зарядное устройство для смартфона. Далее купить сд карту нормальную (не медленную) и настроить Raspberry pi. После всех необходимых действий по настройке подключаем USB камеру, подаем питание на Raspberry pi:
Камеру можно сразу направить на то место куда она будет смотреть. Далее на своём компьютере заходим в программу Putty (если её ещё нет то можно скачать с официального сайта https://www.putty.org/ хотя она д.б. если Raspberry pi уже настроен):

Далее вписываем ip адрес распберри пи 3 (который можно посмотреть в веб интерфейсе роутера):
Порт д.б. 22 а соединение по SSH как на картинке выше. Далее нажимаем кнопку "Open":
После чего откроется чёрное окно куда впишем сначала логин (по умолчанию "pi"):
Затем пароль (по умолчанию "raspberry" буквы будут не виды но их всё равно надо будет печатать так чтобы был вписан пароль иначе войти не получиться):
Далее надо будет установить программу "fswebcam" для фотографирования путем вписывания строки "sudo apt-get install fswebcam" в чёрное окно и нажатия (после этого) клавиши Enter на своем компьютере:
Далее аналогично установим архиватор zip командой

sudo apt-get install zip

Создадим директорию (папку) webcam:
mkdir webcam

Перейдём в эту директорию:
cd /home/pi/webcam
Создадим и откроем файл "webcam.sh":
nano webcam.sh
Для этого на Raspberry pi д.б. установлен редактор nano. Он обычно имеется вместе с операционной системе, если нет то его используя apt-get. Далее откроется редактор nano в который надо вписать такой сценарий (скачать сценарий можно по ссылке https://yadi.sk/d/V4K8cyVgcO7AoA):


В начале этого сценария находиться специальная строка которая должна быть всегда в файлах с такими сценариями:
далее мы удаляем все файлы в той папке в которую потом будут помещаться фотографии с камеры:
следующие две команды нужны для остановки программы motion. Если такой программы нет то эти команды можно не вписывать:
команда "sleep" останавливает работу на заданное количество секунд:
далее идет цикл который сделает выполнение блока команд 8 раз. Для практического использования нужно установить больше например 800 путем замены соответствующей цифры. Но надо учесть что память распбери пи не бесконечная:
в теле цикла происходит фотографирование и запись в соответствующую папку которую тоже можно поменять при желании:
в самом конце сценария происходит архивирование в архив по первому пути:
                                     
фотографий из второго пути:
далее нажимаем "ctrl + O" и "Enter" для сохранения:
потом "ctrl + X" для выхода:
делаем сценарий исполняемым:
открываем планировщик задач:
записываем туда выполнение данного сценария сразу после включения распберри пи:
сохраняем и выходим:
Камера наблюдения готова! Её можно например оставлять на ночь для присмотра за имуществом, к утру она будет делать архив с фотографиями который можно достать по пути который мы указали в сценарии.

Видео по данной теме:



КАРТА БЛОГА (содержание)