Vibrationsmotor mit Arduino

Als vorbereitenden Versuch für ein kleine Projekt von mir, wollte ich zunächst nur eine Komponente testen: Einen Vibrationsmotor (u.a. auch in Smartphones verwendet), der über einen Arduino gesteuert wird.

Video: Live-Demonstration

Funktionsweise

Vibrationsmotoren sind Gleichstrommotor (auch: DC-Motoren), diese durch ständige drehwinkel-abhängige Umpolung ein wechselndes Magnetfeld im Rotor des Motors erzeugen (Magnetspulen um eine rotierende Achse). Elektromotoren benötigen je nach Größe recht hohe Ströme und induzieren einen Strom zurück. Deshalb benötigt man an den Anschlüssen des Motors eine Diode, die den induzierten Strom wieder ableiten kann.
Zusätzlich erzeugen Elektromotoren hochfrequente Störungen, die z.B. Funksignale im Umfeld stören können. Um dies zu vermeiden, sollte man drei kleine Keramikkondensatoren direkt am Elektromotor anbringen. (Je näher am Motor, desto besser). Die Kapazität sollte zwischen ca. 10nF...100nF liegen.
Zwei dieser Kondensatoren werden von jeweils einem Motoranschluss an das metallische Motorgehäuse gelötet, der dritte überbrückt beide Anschlüsse.
Da der hier verwendete Vibrationsmotor sehr klein ist, wurde nur ein Kondensator parallel zu den Anschlüssen verwendet.

Verwendete Bauteile

Aufbau der Schaltung

Da alle Gleichstrommotoren eine recht hohe Stromaufnahme haben, sollte man auch diesen Vibrationsmotor NICHT direkt über die VCC-Pins des Mikrocontroller-Boards versorgen, sondern über eine externe Stromquelle (Batterie, Akku, etc.). Der Mikrocontroller könnte sonst Schaden nehmen!
Der direkte Anschluss an den Arduino wurde hier nur zur Vereinfachung verwendet (Verwendung auf eigene Verantwortung!)

Schaltplan für die Steuerung eines Vibrationsmotors

Hinweis: Evtl. ist bei dem verwendeten Motor die Spannung von 3,3V nicht ausreichend. Daher muss die 5V-Versorgung des Arduino verwendet werden.

Vibrationsmotor-Schaltung am Breadboard
Abb.: Aufbau der Schaltung am Breadboard

Sketch

const int MOTOR_PIN = 3;

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

void loop()
{
    digitalWrite(MOTOR_PIN, HIGH);
    delay(1000);
    digitalWrite(MOTOR_PIN, LOW);
    delay(1000);
}
zurück