Як за допомогою Raspberry Pi виявити, хто був у твоїй кімнаті
Оценка пользователей: / 8
ПлохоОтлично 
There are no translations available.

PIR-GPIO-Raspberry-PiRaspberry Pi настільки малий, що його можна легко приховати, а це робить його ідеальним інструментом для різного роду подібних проектів.
Основна ідея полягає у використанні функції виявлення руху для запуску запису відео через модуль камери Raspberry Pi. Ви можете залишити Pi прихованим у своїй кімнаті і подивитися, хто спіймався на камеру, коли Ви були відсутні.
Що необхідно
Крім Raspberry Pi і всіх його стандартних периферійних пристроїв, Вам ще потрібно:
  • Модуль камери Raspberry Pi
  • Модуль датчика руху PIR
  • Перемички «гніздо-гніздо» (хоча б 3)
Що таке модуль PIR?
PIR означає Passive Infra Red (пасивний інфрачервоний). Можливо, Ви вже їх бачили раніше, оскільки вони дуже часто сьогодні використовуються. Найчастіше їх можна знайти в кутах кімнати, де встановлені системи охоронної сигналізації. Всі об'єкти, температура яких вище абсолютного нуля, випромінюють в інфрачервоному діапазоні. Інфрачервоні довжини хвиль не видимі людським оком, але вони можуть бути виявлені за допомогою електроніки всередині одного з цих модулів.
Датчик розглядається як пасивний, так як він не передає ніякого сигналу для виявлення руху. Він пристосовується до структури інфрачервоного випромінювання у кімнаті, в якій знаходиться, а потім фіксує будь-які її зміни. Будь-який об'єкт, що рухається в кімнаті, буде змінювати структуру інфрачервоного випромінювання і викликані зміни будуть помічені модулем PIR.
PIR-GPIO-Raspberry-Pi-1
Нам не потрібно турбуватися про його внутрішню конструкцію. Нас цікавлять лише три штирі на ньому, які можемо приєднати  до контактів GPIO Raspberry Pi. Один контакт для 5 вольт, один контакт для землі, а інший є контактом датчика (середній штирь на нашому Pi – зелений колір перемички). Цей вивід датчика прийматиме напругу, коли модуль PIR виявить рух. Ми можемо побачити, що це відбувається, на Raspberry Pi і вжити відповідних заходів.
Крок 1: Підключіть датчик руху PIR
Перед завантаженням Вашого Raspberry Pi, підключіть модуль PIR до Raspberry Pi:
PIR-GPIO-Raspberry-Pi-2
Зверніться до діаграми вище для нумерації виводів. Якщо Ви уважно подивитеся на виводи на своєму модулі PIR, то побачите трохи білого тексту на друкарській платі біля основи кожного з них. VCC - для підведення 5 вольт. Візьміть одну з перемичок «гніздо-гніздо» і підключіть вивід VCC до контакту 2 на Pi (червоний колір на діаграмі); це дозволить Pi подати 5 вольт живлення на модуль PIR. Використайте другу перемичку для підключення GND на модулі з виводом 6 на Pi (зафарбований чорним на схемі); цим замикаємо коло і дозволяємо протікання струму в модулі. Тепер те ж саме для вивода датчика OUT; Ви можете використовувати будь-який з зелених контактів на Pi для цього. Автор збирається використовувати вивід 7, так як це перший вивід загального призначення.
Примітка: Якщо у Вас інший модуль PIR, ніж зображений, то розташування контактів може бути іншим; саме тому автор використав позначення VCC, GND і OUT.
Тепер завантажте Pi і увійдіть.
Крок 2: Перевірте датчик руху PIR
Ми збираємося використовувати мову програмування Python, щоб написати код, який виявлятиме рух і виводитиме на друк деякий текст; ми можемо розширити програму, щоб пізніше залучити плату камери. При виявленні руху датчик руху PIR генерує напругу на його виході OUT, який ми підключили до виводу 7 GPIO на Pi. Таким чином, в нашому коді ми просто повинні постійно перевіряти вивід 7, щоб побачити, чи є на ньому напруга, чи ні.
Якщо на виводі є напруга, то ми називаємо це HIGH, а якщо немає, то називаємо його LOW.
Програма досить проста. Ми спочатку налаштуємо контакти Raspberry Pi GPIO, щоб дозволити нам використовувати вивід 7 як вхід; він може потім визначити, коли модуль PIR генерує напругу. Ми повинні постійно перевіряти вивід для будь-яких змін, тому для цього використаємо цикл while True. Це нескінченний цикл, тому програма буде працювати постійно, поки ми не зупинимо її вручну за допомогою Ctrl+C.
Потім ми використовуємо дві логічні змінні (True або False - істина чи неправда) для попередніх і поточних станів вивода, попередній стан, що є, а поточний стан буде попереднім через час циклу. Всередині циклу ми порівнюємо попередній стан з поточним станом, щоб визначити, коли вони відрізняються. Ми не хочемо отримувати відображення повідомлення, якщо не відбулося жодних змін.
По-перше, створіть порожній файл Python за допомогою наступної команди:
nano pirtest.py
Введіть або скопіюйте і вставте код, наведений нижче:
import RPi.GPIO as GPIO
import time

sensorPin = 7

GPIO.setmode(GPIO.BOARD)
GPIO.setup(sensorPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

prevState = False
currState = False

while True:
    time.sleep(0.1)
    prevState = currState
    currState = GPIO.input(sensorPin)
    if currState != prevState:
        newState = "HIGH" if currState else "LOW"
        print "GPIO pin %s is %s" % (sensorPin, newState)
Натисніть Ctrl+O, щоб зберегти і Ctrl+X для виходу.
Наступним зробіть файл Python виконуваним файлом і потім зможете його запустити:
chmod +x pirtest.py
sudo ./pirtest.py
Якщо Ви отримуєте повідомлення про помилку, RuntimeError: No access to /dev/mem, то це означає, що Ви забули використати sudo. Ви повинні запускати програми, які звертаються до GPIO як root і команда sudo робить це для Вас.
Якщо Ви починаєте рухатися або розмахувати, то вивід датчика стає HIGH. Продовжуйте розмахувати, і він буде залишатися високим, і повернеться до LOW тільки, якщо Ви зупинитесь. Якщо Ви бачите, що датчик поводиться подібним чином, то все працює правильно. Якщо ні, то щось не так, і Ви повинні повернутися та усунути проблеми.
GPIO pin 7 is HIGH
GPIO pin 7 is LOW
GPIO pin 7 is HIGH
Натисніть Ctrl+C, якщо хочете вийти.
PIR-GPIO-Raspberry-Pi-3
На модулі PIR Ви повинні побачити дві помаранчеві компоненти з гніздами, які відповідають хрестовій викрутці (див. вище). Вони називаються потенціометрами і дозволяють регулювати чутливість датчика і час виявлення. Автор хотів би запропонувати налаштувати чутливість на максимум і час на хвилину, але вибір за Вами.
Крок 3: Налаштування модуля камери
Дотримуйтесь цих інструкцій, щоб налаштувати і протестувати плату камери Raspberry Pi. Зупиніться, як тільки успішно виконаєте деякі з прикладів команд.
PIR-GPIO-Raspberry-Pi-4
Якщо Ви ще не зробили цього, то перевірте роботу камери за допомогою наступної команди:
raspivid -t 0
Натисніть Ctrl+C, щоб вийти.
Крок 4: Встановіть модуль picamera Python
Для управління платою камери за допомогою Python нам потрібно встановити модуль під назвою picamera. Використайте наступні команди, щоб зробити це в командному рядку Linux:
sudo apt-get update
sudo apt-get install python-picamera
Це займе хвилину чи дві, щоб завершити.
Крок 5: Програмуємо камеру для перегляду при русі
Тепер ми готові розширити нашу попередню програму, щоб дати їй можливість контролювати плату камери. Для початку, давайте просто зробимо нашу програму для відображення, що камера може бачити при виявленні руху; ми можемо встановити запис у файл пізніше.
Зробіть копію попередньої програми і ми використаємо її для цього кроку:
cp pirtest.py pirCamera.py
Тепер виконайте наступну команду для редагування файлу:
nano pirCamera.py
Спочатку ми повинні додати команду import picamera вгорі; це дозволяє Вашій програмі доступ до попередньо зробленого коду, який може контролювати плату камери. Потім ми оголошуємо камеру об'єктом cam, який забезпечує всі функції керування камерою, які ми повинні використовувати. Тоді всередині циклу while, в якому ми друкували повідомлення HIGH або LOW, можемо перевірити, чи є currState HIGH / True (що означає виявлення руху); ми можемо запустити або, відповідно, зупинити попередній перегляд камери.
Змініть вручну або скопіюйте і вставте код нижче:
import RPi.GPIO as GPIO
import time
import picamera  # new

sensorPin = 7

GPIO.setmode(GPIO.BOARD)
GPIO.setup(sensorPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

prevState = False
currState = False

cam = picamera.PiCamera()  # new

while True:
    time.sleep(0.1)
    prevState = currState
    currState = GPIO.input(sensorPin)
    if currState != prevState:
        newState = "HIGH" if currState else "LOW"
        print "GPIO pin %s is %s" % (sensorPin, newState)
        if currState:  # new
            cam.start_preview()
        else:
            cam.stop_preview()
Натисніть Ctrl+O, щоб зберегти і Ctrl+X для виходу. Для запуску програми використайте наступну команду:
sudo ./pirCamera.py
Натисніть Ctrl+C, коли захочете вийти.
Крок 6: Запис у файл і відтворення
Тепер ми можемо додати трохи більше коду, щоб дозволити запис у файл для відтворення на більш пізньому етапі. В ідеалі, якщо є багато відвідувачів у Вашій кімнаті, то Ви хочете захопити їх всіх, а не лише одного самого останнього. Таким чином, щоб зробити це нам потрібен спосіб для автоматичного створення нового імені файлу щоразу, коли виявляється рух. Найпростіший і безпечний спосіб зробити це - створити файл з ім'ям з дати і часу.
Наприклад, якщо час був 23 травня 2014 о 10:24 ранку і 18 секунд, то ім'я файлу буде виглядати приблизно так: 2014-05-23_10.24.18.h264. При цьому використовується формат YEAR-MONTH-DAY_HOUR.MINUTE.SECOND.h264; частина h264 є форматом відео, яке буде записуватися. Це той же формат, який використовує YouTube.
Щоб зробити це, ми повинні імпортувати модуль Python datetime і написати функцію для створення імені файлу. Дивіться нижче getFileName; це використовує *рядок з функції часу для вставки значення з поточного часу в зазначеному форматі рядка. Тоді Ви просто використовуєте команди для запуску і зупинки запису з використанням згенерованого імені файла. Це має відбутися в той же час, коли і відповідні команди попереднього перегляду.
nano pirCamera.py
Змініть вручну або скопіюйте і вставте код нижче:
import RPi.GPIO as GPIO
import time
import picamera
import datetime  # new

def getFileName():  # new
    return datetime.datetime.now().strftime("%Y-%m-%d_%H.%M.%S.h264")

sensorPin = 7

GPIO.setmode(GPIO.BOARD)
GPIO.setup(sensorPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

prevState = False
currState = False

cam = picamera.PiCamera()

while True:
    time.sleep(0.1)
    prevState = currState
    currState = GPIO.input(sensorPin)
    if currState != prevState:
        newState = "HIGH" if currState else "LOW"
        print "GPIO pin %s is %s" % (sensorPin, newState)
        if currState:
            fileName = getFileName()  # new
            cam.start_preview()
            cam.start_recording(fileName)  # new
        else:
            cam.stop_preview()
            cam.stop_recording()  # new
Натисніть Ctrl+O, щоб зберегти і Ctrl+X для виходу. Для запуску програми використайте наступну команду:
sudo ./pirCamera.py
Натисніть Ctrl+C, якщо захочете вийти.
Відтворення
Якщо Ви зараз використаєте команду ls, то побачите, що були отримані кілька файлів. Ви можете використати наступну команду, щоб відтворити файл, тільки замініть <file> ім'ям файлу, який хочете подивитися.
omxplayer <file> -o hdmi
Наприклад: omxplayer 2014-02-11_10.24.18.h264 -o hdmi
Крок 7: Режим невидимості
Ви, напевно, помітили, що червоний світлодіод на платі камери спалахує при запуску програми на Python. Це буде досить помітно для будь-якого потенційного порушника, так що буде чудовою ідеєю відключити його. Це може бути зроблено шляхом редагування конфігураційного файлу Raspberry Pi, як ми раніше це робили. Введіть таку команду:
sudo nano /boot/config.txt
Додайте наступний рядок в кінець файлу:
disable_camera_led=1
Натисніть Ctrl+O, щоб зберегти і Ctrl+X для виходу. Зміни вступлять в силу тільки після перезавантаження, тому введіть наступну команду для перезавантаження:
sudo reboot
Якщо Ви хочете залишити монітор підключений і включати в той час, коли працює програма, то це чудова ідея, щоб змінити рядки коду Python для відключення камери *preview. Використайте знак # на початку рядка, щоб відключити його.
Ще одна хитрість, яку Ви можете зробити, це запустити програму Python під іншим логіном. Для цього натисніть ALT-F2, перш ніж увійти; Вам буде показана нова підказка входу, тому увійдіть і запустіть програму на Python. Тепер, якщо натиснете ALT-F1, щоб повернутися до звичайного запрошення, то воно з'явиться, як ніби Raspberry Pi невинно чекає чийогось входу.
Тепер все, що Вам потрібно зробити, це встановити пристрій і чекати. Удачі!
(Джерело EN: raspberrypi.org)
 
>
КнигаНовости Практика поискаПартнерыО нас
Підтримка та дизайн: Могильний С.С. Шаблон: Joomla Templates by BuyHTTP Joomla Hosting