HC-SR501
Jump to navigation
Jump to search
Judesio daviklis.
Sensitivity reguliatorių patartina atsukti beveik iki max, time delay į minimum. Perjungti jumperį į kitą padėtį nei parodyta pav.
RaspberryPI
Sujungimas
Visi pinai aprašyti čia. Sujungimas:
VVC = PIN 2 OUTPUT = PIN 7 GND = PIN 6
Golang kodas
package main
import (
. "github.com/cyoung/rpi"
"fmt"
"time"
)
func main() {
WiringPiSetup()
pin := 7
go func() {
last_time := time.Now().UnixNano() / 1000000
motion_detected := 0
for pinas := range WiringPiISR(BoardToPin(pin), INT_EDGE_FALLING) {
if pinas > -1 {
n := time.Now().UnixNano() / 1000000
delta := n - last_time
if delta > 800 { //software debouncing
fmt.Printf("Motion detected (Total detected %d times)\n",motion_detected)
last_time = n
motion_detected++
}
}
}
}()
for {
// empty cycle
}
}
Golang HomeKit integracija
/*
Copyright (c) 2020 e1z0
Licensed under BSD License
To make it work under OrangePI devices please use WiringOP branch of wiring pi
git clone https://github.com/zhaolei/WiringOP.git -b h3
./build
make install
*/
package main
import (
"github.com/brutella/hc"
"github.com/brutella/hc/accessory"
"github.com/brutella/hc/service"
"github.com/brutella/hc/log"
"fmt"
. "github.com/cyoung/rpi"
"time"
"os"
)
func main() {
WiringPiSetup()
log.Debug.Enable()
info := accessory.Info{Name: "Pir Sensor", FirmwareRevision: "v1.0", Manufacturer: "e1z0", Model: "HC-SR501", SerialNumber: "iddqd"}
PirSensor := NewMotionSensor(info)
t, err := hc.NewIPTransport(hc.Config{StoragePath: "data", Pin: "00102003"}, PirSensor.Accessory)
if err != nil {
fmt.Printf("eruoras: %s\n",err)
}
pin := 7
triggered := false
go func() {
last_time := time.Now().UnixNano() / 1000000
motion_detected := 0
for pinas := range WiringPiISR(BoardToPin(pin), INT_EDGE_FALLING) {
if pinas > -1 && triggered == false {
n := time.Now().UnixNano() / 1000000
delta := n - last_time
if delta > 800 { //software debouncing
fmt.Printf("Motion detected (Total detected %d times)\n",motion_detected)
PirSensor.MotionSensor.MotionDetected.SetValue(true)
last_time = n
motion_detected++
triggered = true
timer1 := time.NewTimer(time.Second*5)
go func() {
<-timer1.C
triggered = false
PirSensor.MotionSensor.MotionDetected.SetValue(false)
}()
}
}
}
}()
hc.OnTermination(func() {
t.Stop()
time.Sleep(time.Second*5)
os.Exit(0)
})
t.Start()
}
type MotionSensor struct {
*accessory.Accessory
MotionSensor *service.MotionSensor
}
func NewMotionSensor(info accessory.Info) *MotionSensor {
acc := MotionSensor{}
acc.Accessory = accessory.New(info, 10)
acc.MotionSensor = service.NewMotionSensor()
acc.AddService(acc.MotionSensor.Service)
return &acc
}
Python Kodas
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
PIR_PIN = 4
CNT = 0
GPIO.setup(PIR_PIN, GPIO.IN)
def MOTION(PIR_PIN):
print "Motion Detected"
print "PIR Module Test (CTRL+C to exit)"
time.sleep(2)
print "Ready"
try:
GPIO.add_event_detect(PIR_PIN, GPIO.RISING, callback=MOTION)
while 1:
time.sleep(100)
except KeyboardInterrupt:
print "Quit"
GPIO.cleanup();
OrangePI
Sujungimas
Visi pinai aprašyti čia. Sujungimas:
VVC = PIN 2 OUTPUT = PIN 11 GND = PIN 6
Kodas
Sujudėjus bandytams, bus įjungta šviesa ir pranešta į telegramą.
#!/usr/bin/python
from pyA20.gpio import gpio
from pyA20.gpio import port
import requests
from time import gmtime, strftime
import time
import os
# initialize GPIO
TG_BOTHSH = ""
TG_CHATID = ""
SENSOR_LOCATION = "Main room"
sensor = port.PA6
gpio.init()
gpio.setcfg(sensor, gpio.INPUT)
print "Sensor initializing..."
time.sleep(2)
print "Active"
print "Press Ctrl+C to abort the program"
previous_state = False
current_state = False
LOW = 1
HIGH = 0
LIGHT_PORT = 20
URL = "https://api.telegram.org/{}/".format(TG_BOTHSH)
def switch_lights(state):
url = "http://192.168.13.102:1415/turn/{}/{}".format(LIGHT_PORT,state)
print "Turning lights: ",state
requests.get(url)
def send_message(text):
url = URL + "sendMessage?text={}&chat_id={}".format(text, TG_CHATID)
requests.get(url)
if os.getenv("TZ"):
os.unsetenv("TZ")
while True:
previous_state = current_state
current_state = gpio.input(sensor)
if current_state != previous_state:
new_state = "LOW" if current_state else "HIGH"
print("GPIO pin %s is %s" % (sensor, new_state))
if current_state == HIGH:
d1 = strftime("%Y-%m-%d %H:%M:%S", gmtime())
print d1,"-> Motion detected"
#turn lights on for 10 seconds
switch_lights("on")
time.sleep(10)
#turn the lights off again
switch_lights("off")
send_message("Motion detected on {}".format(SENSOR_LOCATION))