In this Arduino tutorial we’re going to learn how to use a motion sensor to sound a piezo buzzer. This is great for an intrusion detection circuit or burglar alarm circuit! Any time the motion sensor senses movement the piezo buzzer will make an audible sound. In this tutorial we will use an active piezo buzzer that does not need a PWM signal to operate.
RELATED: Piezo Buzzers: Active vs Passive
Parts List for this Project
Here’s a handy parts list for this project. Some of these links may be affiliate links. If you use them, they cost you nothing, but we may get a small commission that helps us keep building awesome content like this.
QTY | PART/LINK | ||
---|---|---|---|
1X | Arduino Uno | ||
1X | USB Type B Cable | ||
1X | Solderless Breadboard | ||
1X | Jumper Wire Kit | ||
1X | Motion Sensor | ||
1X | Piezo Buzzer |
Wiring Diagram: Use a Motion Sensor to Sound a Piezo Buzzer
This wiring diagram will teach you how to wire your breadboard for using a motion sensor to sound a piezo buzzer! Since there are no resistors or capacitors needed, this is one of those projects where you could completely skip the breadboard and wire it direct to the Arduino should you choose. However, the breadboard definitely makes it easier to visualize. The choice is yours!
Arduino Code for Motion Sensor
This Arduino sketch will control your piezo buzzer based on the motion sensor’s status. Any time the motion sensor detects movement or a change in the environment, this will trigger the piezo buzzer to sound.
This code could be adapted to perform many other functions and is a great basis for a burglar alarm circuit! You could expand this with other sensors such as door/window sensors and have a complete Arduino alarm system!
const int MOTION_SENSOR_PIN = 7; // Arduino pin connected to the OUTPUT pin of motion sensor
const int BUZZER_PIN = 3; // Arduino pin connected to Buzzer's pin
int motionStateCurrent = LOW; // current state of motion sensor's pin
int motionStatePrevious = LOW; // previous state of motion sensor's pin
void setup() {
Serial.begin(9600); // initialize serial
pinMode(MOTION_SENSOR_PIN, INPUT); // set arduino pin to input mode
pinMode(BUZZER_PIN, OUTPUT); // set arduino pin to output mode
}
void loop() {
motionStatePrevious = motionStateCurrent; // store old state
motionStateCurrent = digitalRead(MOTION_SENSOR_PIN); // read new state
if (motionStatePrevious == LOW && motionStateCurrent == HIGH) { // pin state change: LOW -> HIGH
Serial.println("Motion detected!");
digitalWrite(BUZZER_PIN, HIGH); // turn on
}
else
if (motionStatePrevious == HIGH && motionStateCurrent == LOW) { // pin state change: HIGH -> LOW
Serial.println("Motion stopped!");
digitalWrite(BUZZER_PIN, LOW); // turn off
}
}
Next Steps
Now you can move on to the next tutorial or return to the Arduino Tutorial Index.