Documentation

1027 Flat Coin Vibration Motor for Arduino, Raspberry Pi & ESP32 | ShillehTek Product Manual
Documentation / 1027 Flat Coin Vibration Motor for Arduino, Raspberry Pi & ESP32 | ShillehTek Product Manual

1027 Flat Coin Vibration Motor for Arduino, Raspberry Pi & ESP32 | ShillehTek Product Manual

manualshillehtek

Overview

The 1027 is a flat "coin" vibration motor — 10 mm across, under 3 mm thick — the same class of part that buzzes in phones and smartwatches. Feed it around 3V and its internal eccentric weight spins up to produce silent, tactile vibration for notifications, alarms, haptic feedback on buttons, and wearables where an LED or beeper won't do.

It is a two-wire brushed motor with tiny lead wires, and it should be driven through a small transistor with a flyback diode rather than straight off a GPIO pin. PWM lets you shape intensity: short pulses read as taps, ramps feel like modern phone haptics. The circuit and code below give you both.

At a Glance

Rated Voltage
3V DC
Current
~60-90 mA
Speed
~9,000-12,000 RPM
Size
10 x 2.7 mm
Type
Flat coin (ERM)
Connection
2 lead wires

Specifications

Parameter Value
Model 1027 flat coin vibration motor (ERM type)
Rated Voltage 3.0V DC (typical operating window ~2.5-3.5V)
Rated Current ~60-90 mA (startup surge higher)
Start Voltage ~2.3V or lower
Rated Speed ~9,000-12,000 RPM
Dimensions 10 mm diameter x 2.7 mm thick
Mounting Adhesive pad or clamp — vibration transfers best when pressed against the enclosure
Lead Wires Fine gauge — strain-relieve them; they do not survive repeated flexing
Load Type Inductive brushed motor — flyback diode required

Wiring & Driving Guide

Drive it with any small NPN transistor (2N2222, S8050) or logic-level MOSFET (2N7000, AO3400):

Connection Goes To
Motor lead 1 +3.3V rail (ideal) or 3V battery
Motor lead 2 Transistor collector / MOSFET drain
Emitter / source GND, shared with the microcontroller
Base via 1k / gate via 220R PWM-capable GPIO (D9 Arduino, GP15 Pico)
Flyback diode (1N4148/1N4001) Across motor leads, cathode (stripe) to +
Optional 0.1 µF ceramic cap Across motor leads — tames brush noise
Warning: This is a 3V motor. On a 5V Arduino, don't feed it 5V continuously — power it from the 3.3V pin, or if you must switch 5V, cap the PWM duty around 60% so the average stays near 3V. And never drive it from a GPIO directly; the current and inductive kick exceed pin limits.
Tip: Haptics are about contact, not power. Taped firmly to a case wall or wristband, a 50% pulse feels stronger than a free-floating motor at 100%. Mount it rigid, leads slack.

Code Examples

Arduino: notification buzz patterns

haptic_patterns.ino
// 1027 coin motor through a transistor on D9 (PWM).
// Motor powered from 3.3V; duty values here assume that rail.

const int MOTOR_PIN = 9;

void buzz(int strength, int ms) {   // strength 0-255
  analogWrite(MOTOR_PIN, strength);
  delay(ms);
  analogWrite(MOTOR_PIN, 0);
}

void setup() {
  pinMode(MOTOR_PIN, OUTPUT);
}

void loop() {
  // Single tap
  buzz(255, 80);
  delay(1000);

  // Double tap
  buzz(255, 60); delay(100); buzz(255, 60);
  delay(1000);

  // Soft ramp (phone-style)
  for (int p = 60; p <= 255; p += 15) {
    analogWrite(MOTOR_PIN, p);
    delay(30);
  }
  analogWrite(MOTOR_PIN, 0);
  delay(2000);
}

Pico (MicroPython): intensity control

haptic_pico.py
# Coin motor via transistor on GP15, motor powered from 3V3.

from machine import Pin, PWM
import time

motor = PWM(Pin(15))
motor.freq(1000)

def vibe(percent, ms):
    motor.duty_u16(int(65535 * percent / 100))
    time.sleep_ms(ms)
    motor.duty_u16(0)

while True:
    vibe(100, 80)          # tap
    time.sleep(1)
    vibe(60, 300)          # soft buzz
    time.sleep(1)
    for p in range(30, 101, 10):   # rising alert
        motor.duty_u16(int(65535 * p / 100))
        time.sleep_ms(40)
    motor.duty_u16(0)
    time.sleep(2)

Frequently Asked Questions

Can I connect it directly to a GPIO pin since it's only ~75 mA?
No — 75 mA steady (plus startup surge and inductive kickback) is beyond the 20-40 mA pin ratings of Arduino, ESP32, and Pico alike. A one-cent transistor and a diode keep your board safe.
Does polarity matter?
Functionally no — reversed leads just spin the weight the other way and it vibrates the same. Follow the red-to-positive convention anyway so your wiring stays readable.
Why does my motor stall at low PWM values?
ERM motors need a kick to overcome static friction — below ~30-40% duty they may not start, though they'll keep running if already spinning. Start at full duty for 20-50 ms, then drop to the level you want.
How do I make the vibration feel stronger without more voltage?
Mounting is everything: fix the motor rigidly to the surface the user touches, put mass behind it, and use crisp on/off patterns instead of long buzzes. A firmly taped motor at 3V beats a dangling one at 4V.
Is brief 5V operation going to kill it?
Short PWM-limited bursts on a 5V rail are common in hobby builds and generally tolerated; continuous 5V DC overheats the coil and wears brushes fast. If you want maximum lifespan, stay at 3-3.3V.
What's the difference between this ERM motor and an LRA?
ERM (this part) spins a weight — simple, cheap, driven with plain DC/PWM. LRAs resonate at a specific frequency and need an AC drive (often a DRV2605 driver) but give sharper, quieter haptics. For DIY notification buzz, ERM is the practical choice.