HC-SR501: Skirtumas tarp puslapio versijų
Jump to navigation
Jump to search
(Naujas puslapis: '''Judesio daviklis.''' 600px == Sujungimas == Visi pinai aprašyti čia. Sujungimas: VVC = PIN 2 OUTPUT = PIN 7...) |
|||
| (nerodoma 7 tarpinės versijos, sukurtos to paties naudotojo) | |||
| 2 eilutė: | 2 eilutė: | ||
[[Vaizdas:Introduction-to-HC-SR501.jpg|600px]] | [[Vaizdas:Introduction-to-HC-SR501.jpg|600px]] | ||
| + | |||
| + | Sensitivity reguliatorių patartina atsukti beveik iki max, time delay į minimum. Perjungti jumperį į kitą padėtį nei parodyta pav. | ||
| + | |||
| + | = RaspberryPI = | ||
| + | |||
| + | == Sujungimas == | ||
| + | |||
| + | Visi pinai aprašyti [[RaspberryPI|čia]]. Sujungimas: | ||
| + | |||
| + | VVC = PIN 2 | ||
| + | OUTPUT = PIN 7 | ||
| + | GND = PIN 6 | ||
| + | |||
| + | == Golang kodas == | ||
| + | |||
| + | <syntaxhighlight lang="go"> | ||
| + | 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 | ||
| + | } | ||
| + | |||
| + | } | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | == Golang HomeKit integracija == | ||
| + | [[Vaizdas:Pirdeactivated pav01.png|400px]] | ||
| + | [[Vaizdas:Piractivated pav02.png|400px]] | ||
| + | |||
| + | <syntaxhighlight lang="go"> | ||
| + | /* | ||
| + | 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 | ||
| + | } | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | == Python Kodas == | ||
| + | |||
| + | <syntaxhighlight lang="python"> | ||
| + | #!/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(); | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | |||
| + | = OrangePI = | ||
== Sujungimas == | == Sujungimas == | ||
| 8 eilutė: | 186 eilutė: | ||
VVC = PIN 2 | VVC = PIN 2 | ||
| − | OUTPUT = PIN | + | OUTPUT = PIN 11 |
GND = PIN 6 | GND = PIN 6 | ||
== Kodas == | == Kodas == | ||
| + | |||
| + | Sujudėjus bandytams, bus įjungta šviesa ir pranešta į telegramą. | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
| − | + | #!/usr/bin/python | |
| + | |||
from pyA20.gpio import gpio | from pyA20.gpio import gpio | ||
from pyA20.gpio import port | 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.init() | ||
| − | gpio.setcfg( | + | gpio.setcfg(sensor, gpio.INPUT) |
| − | + | print "Sensor initializing..." | |
| − | while True: | + | 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)) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Category:RaspberryPI]] | [[Category:RaspberryPI]] | ||
| + | [[Category:OrangePI]] | ||
Dabartinė 13:15, 15 rugsėjo 2020 versija
Judesio daviklis.
Sensitivity reguliatorių patartina atsukti beveik iki max, time delay į minimum. Perjungti jumperį į kitą padėtį nei parodyta pav.
RaspberryPI[keisti]
Sujungimas[keisti]
Visi pinai aprašyti čia. Sujungimas:
VVC = PIN 2 OUTPUT = PIN 7 GND = PIN 6
Golang kodas[keisti]
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[keisti]
/*
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[keisti]
#!/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[keisti]
Sujungimas[keisti]
Visi pinai aprašyti čia. Sujungimas:
VVC = PIN 2 OUTPUT = PIN 11 GND = PIN 6
Kodas[keisti]
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))