OpenPIR Hookup Guide
Software
The firmware example below uses Arduino to demonstrate how both the digital output and analog output can be used. Here is the example circuit used in the example code:
Then upload the example code below so you can begin to get a feel for the OpenPIR's output pins:
////////////////////////// // Hardware Definitions // ////////////////////////// unsigned long lastPrint = 0; // Keep track of last serial out void setup() { Serial.begin(115200); // Serial is used to view Analog out // Analog and digital pins should both be set as inputs: pinMode(PIR_AOUT, INPUT); pinMode(PIR_DOUT, INPUT); // Configure the motion indicator LED pin as an output pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW); // Turn the LED off } void loop() { // Read OUT pin, and set onboard LED to mirror output readDigitalValue(); // Read A pin, print that value to serial port: printAnalogValue(); } void readDigitalValue() { // The OpenPIR's digital output is active high int motionStatus = digitalRead(PIR_DOUT); // If motion is detected, turn the onboard LED on: if (motionStatus == HIGH) digitalWrite(LED_PIN, HIGH); else // Otherwise turn the LED off: digitalWrite(LED_PIN, LOW); } void printAnalogValue() { if ( (lastPrint + PRINT_TIME) < millis() ) { lastPrint = millis(); // Read in analog value: unsigned int analogPIR = analogRead(PIR_AOUT); // Convert 10-bit analog value to a voltage // (Assume high voltage is 5.0V.) float voltage = (float) analogPIR / 1024.0 * 5.0; // Print the reading from the digital pin. // Mutliply by 5 to maintain scale with AOUT. Serial.print(5 * digitalRead(PIR_DOUT)); Serial.print(','); // Print a comma Serial.print(2.5); // Print the upper limit Serial.print(','); // Print a comma Serial.print(1.7); // Print the lower limit Serial.print(','); // Print a comma Serial.print(voltage); // Print voltage Serial.println(); } }
This code uses the Arduino's onboard LED --- on pin 13 --- to reflect the OpenPIR's digital motion output. When motion is detected, the Arduino's LED should illuminate.
Four values are printed to the serial terminal --- the reading from the digital pin (multiplied by 5...for a reason), the upper and lower comparator voltage thresholds and the reading from the analog pin. Open up your serial monitor --- setting the baud rate to 115200 --- to see them stream by:
Since it may be difficult to visualize the sensor's analog output using the serial terminal, try opening up the serial plotter (found under the "Tools" > "Serial Plotter" menu).
You should see two separate line graphs: the light blue indicating the analog value and the dark blue representing the digital output. The orange and red straight lines represent the upper and lower thresholds, which the analog value must exceed to trigger motion.
Wave at the sensor to get a better feel for the analog output's behavior. And make sure you try both single and dual modes to see how the switch alters the sensor's functionality.