Detecting motion is the basis of a lot of automation, so in this article and video, I'm going through the basics of using a Mini PIR sensor with Arduino-based projects, as well as using the sensor with ESPHome in Home Assistant.
The Mini PIR sensor is really useful because of its small size and it can be easily integrated into any project. It is powered by 5V so in the examples below where I'm using an ESP32 board to control the sensor, I'm using the 5V pin coming in directly from the USB lead.
The sensor needs to be connected to GND and its middle pin is the output signal pin that goes high to 3.3V, whenever a movement is detected. I have this pin connected to pin 25 on the ESP32 board and I'm setting up that pin for a digital input.
To interface the sensor with Arduino, you need to check the state of the input pin inside the loop function and if that pin is high, you can know that a movement was detected and do the actions required by the project. The full code I used in my example is available below.
void setup() {
Serial.begin(9600);
pinMode(25,INPUT);
pinMode(32,OUTPUT);
digitalWrite(25,LOW);
digitalWrite(32,LOW);
}
void loop() {
if(digitalRead(25)==HIGH) {
Serial.println("Somebody is here.");
digitalWrite(32,HIGH);
}
else {
Serial.println("Nobody.");
digitalWrite(32,LOW);
}
delay(1000);
}
I used an LED on pin 32 to act as an indicator when the sensor is active so whenever I detect a movement in the code, I turn that pin high to turn on the LED.
With ESPHome, the wiring is the same as before, but now, the checking and configuration of the pins is done through the YAML configuration file of the device in ESPHome.
The PIR sensor is defined as a binary sensor on pin 25, with a device class set to motion, so that the UI knows how to properly display it with the right icon and statuses.
The status LED is defined as an output on pin 32 and it is being controlled by the on_press and on_release automations of the binary sensor.
The full code is available below.
binary_sensor:
- platform: gpio
pin: 25
name: "PIR Sensor"
device_class: motion
on_press:
then:
- output.turn_on: status_led
on_release:
then:
- output.turn_off: status_led
output:
- platform: gpio
id: status_led
pin: 32
The device is currently not set to control anything when a movement is detected but this can be connected to whatever else you have in your smart home setup. If you have an interesting example of how you use movement detection in your setup, then please let me know in the comments below.
Tools and materials used in the video:
- Mini PIR Sensor - https://s.click.aliexpress.com/e/_DDyKDU9
- ESP32 Development Board - https://s.click.aliexpress.com/e/_oBvQBi8
- Mini Breadboards - https://s.click.aliexpress.com/e/_mNhW5go
- Jumper Cables - https://s.click.aliexpress.com/e/_mqDNJCo
- LEDs Kit - https://s.click.aliexpress.com/e/_EJWj67T
- Assorted Resistors - https://s.click.aliexpress.com/e/_EyOblBn
- Rework Station - https://s.click.aliexpress.com/e/_oBKJvvq
- Multimeter - https://s.click.aliexpress.com/e/_mM2oryg