B4R Tutorial Connecting an actual building\house alarm PIR sensor

Discussion in 'B4R Tutorials' started by Peter Simpson, May 20, 2017.

  1. Peter Simpson

    Peter Simpson Well-Known Member Licensed User

    This is a tutorial on how to connect an actual building\house alarm PIR sensor to an Arduino and how to interpret 5 alert states (the resistance results). The advantages of using the PIR sensor in the following way is that you only need 2 output terminal wires to monitor all the PIR sensor states, you don't have to buy a new PIR sensor as basically almost any old building\house PIR sensor can be used, doing it this way also cuts down on the amount of source code that you have to write.

    By adding just 3 resistors to a standard PIR sensor (this is called the triple end of line resistance system), you can convert a standard PIR sensor to work with an Arduino. Because of the 3 resistors that have been installed, each PIR sensor state will create a different resistance, thus allowing you to manipulate the resistance readings. If you place a forth resister across the 5V and ground pins on the Arduino (or in the PIR sensor between Tamper and NC of Alarm) then connect the output terminals (2 wires from the PIR sensor (Tamper and NC of Alarm)) to the Arduino 5V and ground pins, you create a voltage divider that the Arduino analog pins can now read from. The source code reads the various incoming voltages, with only 2 wires you can easily tell which of the following 5 states the PIR sensor is in.
    • Normal State
    • Tamper Triggered
    • PIR Triggered
    • Tamper and PIR Triggered
    • PIR Wire Broken/Not Connected
    The way it works is surprisingly simple. Depending on what state the PIR sensor is in, the output terminals of the PIR sensor will return different values in kilo ohm (kΩ). Using the PIR sensor as a variable resistor and the second resistor across the output pins (Arduino 5V and ground pins) creates a voltage divider. Reading the incoming voltages on pin A0 and matching them to the PIR sensor state then becomes an easy task.
    AppStart
    1023 = Normal state
    1023 = Normal state
    1023 = Normal state
    1023 = Normal state
    1023 = Normal state
    1023 = Normal state
    1023 = Normal state
    409 = PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    613 = Tamper Triggered
    613 = Tamper Triggered
    613 = Tamper Triggered
    1023 = Normal state
    1023 = Normal state
    1023 = Normal state
    1023 = Normal state
    1023 = Normal state
    409 = PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    204 = Tamper and PIR Triggered
    204 = Tamper and PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    204 = Tamper and PIR Triggered
    204 = Tamper and PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    204 = Tamper and PIR Triggered
    204 = Tamper and PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    613 = Tamper Triggered
    613 = Tamper Triggered
    613 = Tamper Triggered
    613 = Tamper Triggered
    613 = Tamper Triggered
    613 = Tamper Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    409 = PIR Triggered
    0 = PIR Wire Broken/Not Connected
    0 = PIR Wire Broken/Not Connected
    0 = PIR Wire Broken/Not Connected
    0 = PIR Wire Broken/Not Connected
    0 = PIR Wire Broken/Not Connected
    0 = PIR Wire Broken/Not Connected
    0 = PIR Wire Broken/Not Connected
    0 = PIR Wire Broken/Not Connected
    Code:
    #Region Project Attributes
        
    #AutoFlushLogs: True
        
    #CheckArrayBounds: True
        
    #StackBufferSize: 300
    #End Region

    'The PIR state values read directly from the PIR sensor. I personally multiply the results by 100 for MapRange, I found that it makes for a more stable reading.
    '0.0587 = Normal State
    '0.0342 = Tamper Triggered
    '0.0244 = PIR Triggered
    '0.0195 = Tamper and PIR Triggered
    '0.0098 = PIR Wire Broken/Cut or Not Connected

    Sub Process_Globals
        
    'These global variables will be declared once when the application starts.
        'Public variables can be accessed from all modules.
        Public Serial1 As Serial

        
    Private PIRIn As Pin
        
    Private TmrPIR As Timer
    End Sub

    Private Sub AppStart
        Serial1.Initialize(
    115200)
        
    Log("AppStart")

        PIRIn.Initialize(PIRIn.A0, PIRIn.AnalogRead)

        TmrPIR.Initialize(
    "PIR_Tick"1000)
        TmrPIR.Enabled = 
    True
    End Sub

    Sub PIR_Tick
        
    Dim PIRState As Int = MapRange(PIRIn.AnalogRead * (5.0 / 1023) * 10005.801023'3.3 for 3.3V or 5.0 for 5.0V - 5.8 is the maximum value received from the PIR sensor once multiplied by 100
        Dim Tolerance As Int =  PIRState / 100 * 2 'Calculate 2% for tolerance

        
    If PIRState >= (1023 - Tolerance) And 1023 <= (PIRState + Tolerance) Then
            
    Log(PIRState, " = Normal state")
        
    Else If PIRState >= (613 - Tolerance) And 613 <= (PIRState + Tolerance) Then
            
    Log(PIRState, " = Tamper Triggered")
        
    Else If PIRState >= (409 - Tolerance) And 409 <= (PIRState + Tolerance) Then
            
    Log(PIRState, " = PIR Triggered")
        
    Else if PIRState >= (204 - Tolerance) And 204 <= (PIRState + Tolerance) Then
            
    Log(PIRState, " = Tamper and PIR Triggered")
        
    Else if PIRState >= (0 - Tolerance) And 0 <= (PIRState + Tolerance) Then
            
    Log(PIRState, " = PIR Wire Broken/Not Connected")
        
    End If
    End Sub
    I've modified the image below to help with understanding the resistors and their placement.
    You need to place a 2.2kΩ resistor in between the tamper connections, you need to place a 2.2kΩ resistor in between the inner tamper pin and the inner alarm pin, you need to place a 4.7kΩ resistor in between the tamper connections. You also need to place a 4.7kΩ resistor in between the two output terminal wires from the PIR sensor into the Arduino (or between Arduino 5V and ground pins). Adding the resistors allows you to read the PIR sensor resistance readings as voltages on pin A0.
    FSL_1_PIR_without_resistors_2.png

    The 3 resistors placed inside the PIR sensor.
    In my active sensors, I've soldered the resistors underneath the circuit board for neatness, I also used standard 4 core cable.
    IMG_20170520_132214.jpg

    What it looks like when connected together.
    IMG_20170520_023728.jpg

    Using my homemade variable desktop power supply to supply 12V to the PIR sensor.
    IMG_20170520_044952-2.jpg

    Enjoy...
     
    Last edited: May 23, 2017
    alwaysbusy, ta1dr, Erel and 4 others like this.
  2. Cableguy

    Cableguy Expert Licensed User

    I have 3 from an (very) old alarme system... time to get some resistores...
    Édit.. no go! They're wireless
     
    Last edited: May 20, 2017
    Peter Simpson likes this.
Loading...