← How-Tos
electronics Aug 31, 2026 ◑ 1 views ◯ 6 min read

Piezo Buzzers, Speakers, and Haptic Motors for Makers: How to Choose and Drive Each

piezobuzzerhaptic motorermlradrv2605transducerarduinoesp32sound

Nearly every maker project that needs an alert tone, a click of confirmation, or a buzz of feedback reaches for "a buzzer" without thinking much about which of several very different components that actually means. Piezo buzzers, piezo speakers, and vibration motors are three distinct technologies with different drive circuits, different failure modes, and very different sound or feel — picking the wrong one, or driving the right one incorrectly, is why so many DIY alert circuits sound thin and buzzy or why a "haptic" project just feels like a cheap toy. This guide sorts out what each component actually is and how to drive it properly.

Piezo Buzzers: Self-Driven and Simple

A piezo buzzer (sometimes called a piezo "beeper") is a piezoelectric disc paired with a small internal driver circuit that already contains its own oscillator. You apply DC voltage (often 3–12V depending on the part) and it produces a fixed-frequency tone on its own — no PWM signal required, no external driving circuit needed. This is the component behind most cheap "beep" sounds: smoke detectors, microwave timers, and simple confirmation beeps. Its main limitation is that it usually produces one tone (or a very narrow range if it does accept an external signal) and cannot play music or varied alert patterns.

Passive Piezo Elements: You Drive the Frequency

A passive piezo element (no internal driver) is just the piezoelectric disc itself — it makes no sound until you apply an AC signal, and the frequency of that signal is the pitch you hear. This is what Arduino's tone() function is built around: it toggles a GPIO pin at your requested frequency, and a passive piezo turns that square wave directly into sound.

// Arduino tone() drives a passive piezo directly from a digital pin tone(BUZZER_PIN, 440, 200); // 440Hz (A4) for 200ms noTone(BUZZER_PIN);

Because you control the frequency in software, a passive piezo can play simple melodies, rising/falling alert tones, or Morse-style patterns — something a self-driven buzzer cannot do. The tradeoff is volume and tone quality: driven directly off a GPIO pin, output is quiet and thin. A small transistor or MOSFET driver stage between the microcontroller and the piezo element increases the current available and noticeably improves volume.

Piezo Speakers: Same Idea, Wider Bandwidth

A piezo speaker is built for a wider, flatter frequency response than a beeper-style buzzer — still a piezoelectric disc, but paired with a resonant cavity or diaphragm designed to reproduce more of the audible range reasonably evenly, closer to (but still well short of) a real dynamic speaker. These are the right choice for anything that needs to sound like actual audio rather than a single alert tone — simple voice alerts, tune playback, or door-chime style projects — while remaining far cheaper and thinner than a dynamic speaker and its enclosure. They still benefit from an amplifier stage for anything beyond whisper volume; see this site's Class-D amplifier project for a proper audio path if intelligibility matters.

Vibration Motors: ERM vs. LRA

Haptic feedback — a phone's buzz, a game controller's rumble — comes from a completely different component family: small vibration motors, not piezo elements at all (though piezo haptic actuators exist in high-end products, they're rare in hobbyist parts bins).

ERM (Eccentric Rotating Mass)LRA (Linear Resonant Actuator) How it worksA tiny DC motor spins an off-center weightA magnetic mass oscillates back and forth on a spring at its resonant frequency Drive signalSimple DC voltage, or PWM for variable intensityAC signal at (or very near) its specific resonant frequency — typically 150–250Hz Response timeSlower to spin up and coast down — feels "mushy," a delayed buzzFast, crisp start/stop — feels like a sharp "click" or "tap" EfficiencyLower; wastes energy spinning an eccentric massHigher when driven at resonance; poor off-resonance Typical useCheap pagers, simple "buzz" alerts, cost-sensitive projectsGame controllers, phones, anything wanting sharp tactile feedback

ERMs are forgiving: apply PWM through a flyback-protected MOSFET or a simple driver like the DRV8833 and you get a variable-intensity buzz with almost no tuning required. LRAs are the opposite — drive one at the wrong frequency (or with plain DC) and it barely moves; drive it at its rated resonant frequency and it snaps sharply. This is exactly the problem haptic driver ICs like the DRV2605/DRV2605L exist to solve: they contain a library of pre-tuned haptic effects (clicks, buzzes, ramps) and auto-resonance-tracking calibration for LRAs, controllable over I2C from an Arduino or ESP32 with no manual frequency tuning required.

// DRV2605L via Adafruit's library, I2C haptic driver #include "Adafruit_DRV2605.h" Adafruit_DRV2605 drv; drv.begin(); drv.selectLibrary(1); drv.setMode(DRV2605_MODE_INTTRIG); drv.setWaveform(0, 47); // "Buzz 1" effect drv.setWaveform(1, 0); // end of sequence drv.go();

Choosing the Right Component

Wiring Notes and Common Mistakes

These three component families get lumped together as "buzzers" constantly, but treating them as interchangeable is exactly why so many DIY alert and haptic circuits underperform. Match the component to the actual job — alert tone, audio, or tactile feedback — and drive it the way its datasheet actually calls for.