HC-SR501: Skirtumas tarp puslapio versijų

Iš Žinynas.
Jump to navigation Jump to search
(golang homekit integracija)
51 eilutė: 51 eilutė:
 
   }
 
   }
  
 +
}
 +
</syntaxhighlight>
 +
 +
== Golang HomeKit integracija ==
 +
[[Vaizdas:Pirdeactivated pav01.png|400px]]
 +
[[Vaizdas:Piractivated pav02.png|400px]]
 +
 +
<syntaxhighlight lang="go">
 +
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>
 
</syntaxhighlight>

20:30, 14 rugsėjo 2020 versija

Judesio daviklis.

Introduction-to-HC-SR501.jpg

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

Pirdeactivated pav01.png Piractivated pav02.png

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))