умный дом система
Как научиться определять присутствие чего-то живого? Один из самых простых и эффективных способов — использовать инфракрасный датчик движения.
Сегодня у нас небольшая подготовительная статья для дальнейших проектов.
После тестов кучи объемников выбор остановился на вот этом образце:
Данный выбор вас ни к чему не обязывает, просто с этим датчиком жить чуть проще и он не такой тугой как многие 🙂
Общий принцип у всех датчиков будет идентичен. В отсутствие движения датчик будет выдавать один логический сигнал (например, «0»), когда движение произойдет и датчик это зафиксирует — другой (например, «1»).
Схема подключения выглядит следующим образом:
На датчике присутствует потенциометр для регулирования чувствительности и перемычка для повторения или не повторения срабатывания, при условии что датчик обнаружил движение:
- H: Repeatable trigger
- L: Unrepeatable trigger
Датчик движения и python GPIO
А теперь напишем небольшой сценарий, который бы возвращал нам однократный ответ при срабатывании датчика. Воспользуемся прерыванием пинов из библиотеки gpio. Штука удобна тем, что будет ждать, пока пин не изменит свое состояние. Что выбрать — с 0 на 1, или с 1 на 0, или оба варианта — решать вам. В коде выберу один, остальные закомментирую.
Ставим библиотеку, если не установлена, и создаем скрипт:
1
2
3
|
$ sudo apt-get install python-dev python-rpi.gpio
$ sudo -i
# vim /home/pi/bot.py
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#project: paradox-sec.ru
#подключаем сигнальный провод на 16 pin BCM
import RPi.GPIO as GPIO
def RCtime (RCpin):
GPIO.setmode(GPIO.BCM)
GPIO.setup(RCpin, GPIO.IN)
# GPIO.wait_for_edge(RCpin,GPIO.FALLING) #можно расскомментить один из 3-х вариантов
GPIO.wait_for_edge(RCpin,GPIO.RISING)
# GPIO.wait_for_edge(RCpin,GPIO.BOTH)
signal = GPIO.input(RCpin)
print «обнаружено движение»
RCtime(16)
|
Или если вам потребуется вращать данную проверку бесконечно, можно все запихнуть в цикл:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#project: paradox-sec.ru
#подключаем сигнальный провод на 16 pin BCM
import time
import RPi.GPIO as GPIO
def RCtime (RCpin):
GPIO.setmode(GPIO.BCM)
GPIO.setup(RCpin, GPIO.IN)
# GPIO.wait_for_edge(RCpin,GPIO.FALLING) #можно расскомментить один из 3-х вариантов
GPIO.wait_for_edge(RCpin,GPIO.RISING)
# GPIO.wait_for_edge(RCpin,GPIO.BOTH)
signal = GPIO.input(RCpin)
print «обнаружено движение»
while True:
RCtime(16)
time.sleep(5)
|
Вот и все подключение. Подписывайтесь на блог, созидайте, экспериментируйте 🙂
алиса умный дом