How to Use Passive and Active Buzzer with Arduino
Passive and Active Buzzer Introduction:
In the previous article, we let Arduino control the DC motor. let’s play with sound! The easiest way to make Arduino make sounds is to use a passive and active buzzer.
Buzzers are basically divided into two categories: active buzzers and passive buzzers. The active buzzer has a built-in set of fixed frequencies and will emit a fixed tone as long as it is powered on. Passive buzzer is different. We have to tell it the frequency through the program so that we can get the required tone, but we can use it to play simple melody!
The appearance of active buzzers and passive buzzers are very similar. Generally, active buzzers will have a white sticker on them. In addition, there will also be a glue seal on the bottom of active buzzers. Passive buzzers will have a similar appearance. The circuit board can be seen directly from the bottom.
Amazon links:
Arduino Nano USB-C Type (Recommended)
*Please Note: These are affiliate links. I may make a commission if you buy the components through these links. I would appreciate your support in this way!
Passive buzzer Arduino circuit connection
as you can see the circuit diagram is simple, i connected passive buzzer directly to pin 9 of the Arduino with using a current-limiting resistor regardless of the positive and negative poles.The other pin is connected to GND, as shown in the picture above.
Passive buzzer program:
1 2 3 4 5 6 7 8 9 10 11 12 |
int pinBuzzer = 9; // Pin D9 is connected to the signal pin of the buzzer module. void setup() { pinMode(pinBuzzer, OUTPUT); // Set the pinBuzzer pin to output state } void loop() { long frequency = 300; // Frequency, unit Hz. // Emit a waveform with a frequency of 'frequency' using the tone() function tone(pinBuzzer, frequency); delay(1000); // Wait for 1000 milliseconds noTone(pinBuzzer); // Stop the sound delay(2000); // Wait for 2000 milliseconds } |
Active Buzzer Driver Circuit Connection
Active buzzers differ from passive buzzers as they typically require a driver circuit for proper operation. A typical driver circuit is as follows:
In the circuit above, an NPN-type transistor serves as the control switch. In LS1, the collector of the buzzer transistor is connected to GND, the emitter is linked to the negative terminal of the buzzer, and a 10K resistor connects the base of the transistor to the GPIO pin of the microcontroller. The positive terminal of the buzzer connects to VCC.
The transistor in this configuration acts as a switch, operating as follows:
When the GPIO outputs a high level, there’s no voltage difference between the base and the emitter of the transistor, thus no current flows between the emitter and the collector. Consequently, no current passes through the buzzer (LS1), and it remains silent.
Conversely, when the GPIO outputs a low level, a voltage difference arises between the base and the emitter, causing the transistor to conduct. This allows current to flow through the buzzer (LS1). If it’s an active buzzer, it emits an immediate beep.
The transistor model used in this circuit is 2N2222, with pin configuration as follows:
Pin 1 = E (emitter, the pin on the left side of the triode in the circuit diagram)
Pin 2 = B (base, the pin in the middle of the triode in the circuit diagram)
Pin 3 = C (collector, the pin on the right side in the circuit diagram)
Active Buzzer with Arduino circuit connection:
The positive pin of the active buzzer connects to 5V, while the negative terminal connected to the emitter (E) of the transistor. The base (B) of the transistor connects to a 10K ohm resistor, which then connects to Arduino pin D5. Finally, the collector (C) of the transistor connects to the ground.
Active buzzer program:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
int pinBuzzer = 5; // Pin D5 is connected to the base of the buzzer component void setup() { pinMode(pinBuzzer, OUTPUT); // Set pinBuzzer pin to output state } void loop() { digitalWrite(pinBuzzer, HIGH); // Output HIGH level, stop sounding delay(3000); // Wait for 3000 milliseconds digitalWrite(pinBuzzer, LOW); // Output LOW level, sound delay(1000); // Wait for 1000 milliseconds } |
Code explanation:
This code is a simple Arduino sketch designed to control a buzzer component connected to pin D5 (digital pin 5) of the Arduino board. Let’s break it down step by step:
1 |
int pinBuzzer = 5; // Pin D5 is connected to the base of the buzzer component |
This line declares an integer variable named pinBuzzer and initializes it with the value 5. This variable is used to specify which pin of the Arduino board is connected to the buzzer.
1 2 3 4 5 |
void setup() { Â pinMode(pinBuzzer, OUTPUT); // Set pinBuzzer pin to output state } |
The setup() function is a standard Arduino function that runs once when the Arduino board is powered on or reset. In this function, pinMode(pinBuzzer, OUTPUT); sets the pin specified by pinBuzzer (which is pin D5) to be an output pin. This means that the Arduino will use this pin to send voltage signals out to control external components.
1 2 3 4 5 6 7 8 9 10 11 |
void loop() {   digitalWrite(pinBuzzer, HIGH); // Output HIGH level, stop sounding   delay(3000); // Wait for 3000 milliseconds   digitalWrite(pinBuzzer, LOW); // Output LOW level, sound   delay(1000); // Wait for 1000 milliseconds } |
The loop() function is another standard Arduino function that runs repeatedly after the setup() function completes. In this function, the Arduino turns the buzzer on for 3 seconds digitalWrite(pinBuzzer, HIGH); by setting the pin specified by pinBuzzer to a high voltage level. Then it waits for 3 seconds delay(3000);. After that, it turns the buzzer off digitalWrite(pinBuzzer, LOW); by setting the pin to a low voltage level and waits for 1 second delay(1000);. This pattern repeats indefinitely, creating a simple on-off sound pattern with the buzzer.