Raspberry Pi: детектор движения с захватом фото
Этот проект показывает, как делать фотографии с помощью Raspberry Pi при обнаружении движения. Его можно использовать в качестве детектора вторжений, для съёмки диких животных или в других приложениях. Мы будем использовать камеру Raspberry Pi V2, а код будет написан на языке программирования Python.
Примечание
Этот проект является отрывком из книги «20 Easy Raspberry Pi Projects». Если вы хотите создавать электронные проекты с Raspberry Pi на Python, мы рекомендуем прочитать нашу книгу о проектах для Raspberry Pi. Она доступна в цифровой и бумажной версии.
Предварительные требования
Вы должны быть знакомы с платой Raspberry Pi — прочитайте :doc:`Начало работы с Raspberry Pi </raspberry/rnt/getting-started-with-raspberry-pi/index>`_
Установите операционную систему Raspbian или NOOBS на вашу Raspberry Pi
Для ознакомления с модулем камеры Raspberry Pi Camera V2 прочитайте: Руководство по модулю камеры Raspberry Pi Camera V2
Вам также может понравиться: :doc:`Какая камера для Raspberry Pi лучше всего подходит для вашего проекта? </raspberry/rnt/best-raspberry-pi-camera-for-your-project/index>`_
Необходимые компоненты
Обзор проекта
Схема для этого проекта состоит из PIR-датчика движения, кнопки и модуля камеры, которые вы подключите к вашей Pi. Кнопка — это дополнительный компонент, который позволяет остановить Python-скрипт.
Для программирования Raspberry Pi мы будем использовать Python-скрипт и встроенную библиотеку picamera, которая значительно упрощает управление камерой. Для управления GPIO мы будем использовать библиотеку gpiozero, которая содержит классы для большинства популярных компонентов, таких как кнопки, светодиоды, датчики движения и т.д.
Включение камеры
Вам необходимо включить программное обеспечение камеры на Raspberry Pi, прежде чем вы сможете использовать модуль камеры. В среде рабочего стола перейдите в главное меню и выберите Preferences > Raspberry Pi Configuration. Выберите вкладку Interfaces, и должно открыться окно, как показано ниже.
В качестве альтернативы, в окне терминала введите следующую команду:
pi@raspberry:~ $ sudo raspi-config
Вы должны увидеть средство настройки программного обеспечения Raspberry Pi. Выберите Interfacing Options:
Включите камеру и перезагрузите Pi:
Подключение камеры
После включения программного обеспечения камеры выключите Pi, а затем подключите камеру к порту CSI. Убедитесь, что камера подключена синими буквами вверх и ориентирована так, как показано на следующем рисунке. Затем снова включите Pi.
Сборка схемы
После подключения камеры следуйте приведённой ниже принципиальной схеме для подключения остальной части цепи.
Кнопка: GPIO 2
PIR-датчик движения: GPIO 4
Примечание
PIR-датчик движения, который мы используем в этом проекте, должен питаться от вывода 5V. Другие датчики для работы требуют 3.3V. Прочитайте спецификацию вашего датчика перед сборкой схемы.
Написание скрипта
Для управления камерой вы будете использовать встроенную библиотеку picamera. Вот обзор того, что должен делать код:
Инициализировать камеру.
Сделать фотографию, когда PIR-датчик движения обнаружит движение.
Сохранить фотографии в папку Desktop.
Называть фотографии последовательно, чтобы вы знали, в каком порядке они были сделаны — например, image_1.jpg, image_2.jpg и так далее.
Остановить камеру при нажатии кнопки. Если вы не добавите эту функцию, вы не сможете выйти из предварительного просмотра камеры, который появляется на экране.
Ввод скрипта
Создайте новый файл, используя Python 3 (IDLE), и скопируйте следующий код. Затем сохраните код в папке Desktop с именем: burglar_detector.py.
# Project 13 - Burglar Detector With Photo Capture
# latest code updates available at: https://github.com/RuiSantosdotme/RaspberryPiProject
# project updates at: https://nostarch.com/RaspberryPiProject
# import the necessary packages
from gpiozero import Button, MotionSensor
from picamera import PiCamera
from time import sleep
from signal import pause
# create objects that refer to a button,
# a motion sensor and the PiCamera
button = Button(2)
pir = MotionSensor(4)
camera = PiCamera()
# start the camera
camera.rotation = 180
camera.start_preview()
# image image names
i = 0
# stop the camera when the pushbutton is pressed
def stop_camera():
camera.stop_preview()
# exit the program
exit()
# take photo when motion is detected
def take_photo():
global i
i = i + 1
camera.capture('/home/pi/Desktop/image_%s.jpg' % i)
print('A photo has been taken')
sleep(10)
# assign a function that runs when the button is pressed
button.when_pressed = stop_camera
# assign a function that runs when motion is detected
pir.when_motion = take_photo
pause()
Как работает код
Сначала вы импортируете необходимые библиотеки; как мы уже говорили, программа использует библиотеку picamera для управления камерой. Библиотека gpiozero содержит классы для управления кнопкой и датчиком движения: Button и MotionSensor. Метод sleep позволяет работать с задержками, а метод pause используется для обработки прерываний.
from gpiozero import Button, MotionSensor
from picamera import PiCamera
from time import sleep
from signal import pause
Затем вы создаёте объекты для обращения к кнопке, PIR-датчику движения и камере. Кнопка подключена к GPIO 2, а датчик движения — к GPIO 4.
button = Button(2)
pir = MotionSensor(4)
camera = PiCamera()
Затем инициализируйте камеру с помощью camera.start_preview().
camera.start_preview()
В зависимости от ориентации камеры вам также может потребоваться повернуть её на 180 градусов, чтобы фотографии не получались перевёрнутыми.
camera.rotation = 180
Далее вы инициализируете переменную i, которая начинается с 0.
i = 0
Затем мы создаём функции stop_camera() и take_photo(), которые будут вызываться далее в коде.
Функция take_photo() будет использовать переменную i для подсчёта и нумерации изображений, увеличивая номер в имени файла на единицу с каждым сделанным снимком.
def take_photo():
global i
i = i + 1
camera.capture('/home/pi/Desktop/image_%s.jpg' % i)
print('A photo has been taken')
sleep(10)
Чтобы сделать и сохранить фотографию, вы используете метод camera.capture(), указывая в скобках каталог, в который хотите сохранить изображение. В данном случае мы сохраняем изображения в папку Desktop и называем их image_%s.jpg, где %s заменяется числом, которое мы увеличивали ранее в i.
Если вы хотите сохранять файлы в другую папку, замените этот каталог на путь к выбранной вами папке. Затем мы устанавливаем 10-секундную задержку, что означает, что камера делает снимки с 10-секундным интервалом, пока PIR-датчик обнаруживает движение. Не стесняйтесь увеличивать или уменьшать время задержки, но будьте осторожны, чтобы не перегрузить Pi большим количеством изображений, сделав время задержки слишком малым.
Функция stop_camera() останавливает камеру с помощью метода camera.stop_preview().
def stop_camera():
camera.stop_preview()
# exit the program
exit()
Эта функция останавливает предварительный просмотр камеры и завершает программу. Функция exit() вызывает всплывающее окно с вопросом, хотите ли вы закрыть программу; чтобы закрыть её, просто нажмите OK.
Наконец, вы определяете, что при нажатии кнопки камера останавливается.
button.when_pressed = stop_camera
Наконец, вы указываете камере сделать фотографию, вызывая функцию take_photo() при обнаружении движения.
pir.when_motion = take_photo
Команда pause() в конце кода поддерживает вашу программу в рабочем состоянии, чтобы прерывания могли быть обнаружены.
Демонстрация
Если вы используете Python IDLE для написания кода, нажмите F5 или перейдите в Run > Run Module для запуска скрипта. Пока скрипт работает, вы должны видеть на экране предварительный просмотр того, что видит камера. Чтобы остановить предварительный просмотр камеры, нажмите кнопку и щёлкните OK в появившемся окне.
В качестве альтернативы, в окне терминала вы можете ввести:
pi@raspberrypi:~ $ python3 burglar_detector.py
Поздравляем, ваш проект готов обнаруживать движение и делать фотографии. Вы можете разместить этот проект в стратегическом месте и вернуться позже, чтобы проверить сохранённые фотографии. На следующем рисунке показана фотография, сделанная этим проектом.
Заключение
Использование камер с Raspberry Pi — это простая задача, которая может быть применена к самым разным проектам. Библиотеки picamera и gpiozero предоставляют вам простой способ управления камерой и GPIO с помощью Raspberry Pi.
У нас есть другие проекты с камерами и Raspberry Pi, которые могут вам понравиться:
Этот проект является отрывком из нашей книги «20 Easy Raspberry Pi Projects». Для обзора нашей книги вы можете посмотреть видео ниже.
» `Получить копию (бумажная версия) нашей книги о Raspberry Pi » <https://randomnerdtutorials.com/20-easy-raspberry-pi-projects-book/>`__
Надеемся, этот проект оказался для вас полезным.
Спасибо за чтение!