⚙️

SG90 Servo-Motor

Projekt I03 - Präzise Winkelsteuerung mit PWM

Intermediate
Servo
PWM
1
Lernziele

Was du lernst

  • PWM-Steuerung - Pulsweite bestimmt den Servo-Winkel
  • Servo-Library - Einfache Ansteuerung mit Servo.h
  • Winkelsteuerung - Präzise Positionierung von 0° bis 180°
  • Timing-Prinzip - 50 Hz Signal mit variabler Pulsbreite

Voraussetzungen

Theorie-Module 1-5, PWM-Grundlagen aus B05, Verständnis von analogWrite()

Komponenten

Der SG90 Micro Servo

⚙️

SG90 Servo-Motor

Kompakter Servo für Hobby-Projekte. Dreht präzise zwischen 0° und 180°. Ideal für kleine Mechanismen!

Specs: 4.8-6V, Drehmoment 1.8kg/cm

🔌

3 Anschluss-Pins

  • Rot (V+) → 5V Versorgung
  • Orange (PWM) → Steuer-Signal
  • Braun (GND) → Masse

PWM-Signal für Servos

  20ms Periode (50Hz)
  ├────────────────────────────────────────┤

  1ms Puls = 0°        1.5ms = 90°         2ms Puls = 180°
  ┌─┐                  ┌──┐                ┌───┐
  │ │                  │  │                │   │
──┘ └────────────   ───┘  └──────────   ───┘   └──────────
        
2
Theorie

Wie funktioniert ein Servo?

PWM-Timing

  • Frequenz: 50 Hz (20ms Periode)
  • 1ms Puls → Servo auf 0°
  • 1.5ms Puls → Servo auf 90°
  • 2ms Puls → Servo auf 180°

Servo.h Library

Die Library übernimmt das komplizierte Timing. Du gibst nur den Winkel an!

Wichtige Funktionen

// Servo-Objekt erstellen
Servo myServo;

// An Pin anschliessen
myServo.attach(9);

// Winkel setzen (0-180)
myServo.write(90);

// Aktuellen Winkel lesen
int pos = myServo.read();

Warum Pin 9?

Pin 9 ist PWM-fähig (markiert mit ~). Die Servo-Library nutzt Timer1 für präzises Timing.

Schaltplan

Einfache Verkabelung - nur 3 Drähte!

Wokwi-Aufbau

     Arduino Uno            SG90 Servo
    ┌─────────────┐        ┌─────────┐
    │             │        │  ┌───┐  │
    │  5V ────────┼─red────┼──│ V+│  │
    │             │        │  ├───┤  │
    │  Pin 9 ─────┼─orange─┼──│PWM│  │
    │             │        │  ├───┤  │
    │  GND ───────┼─brown──┼──│GND│  │
    │             │        │  └───┘  │
    └─────────────┘        └─────────┘
            

Verbindungen

  • Rot → Arduino 5V
  • Orange → Arduino Pin 9
  • Braun → Arduino GND

Hinweis

Bei mehreren Servos: Externe 5V-Stromversorgung verwenden! Arduino kann max. 500mA liefern.

3
Code

Schritt 1: Servo einrichten

// Schritt 1: Servo-Objekt und Pin definieren

#include <Servo.h>

#define SERVO_PIN 9   // PWM-faehiger Pin

Servo servo;           // Servo-Objekt erstellen

void setup() {
  Serial.begin(9600);
  servo.attach(SERVO_PIN);  // Servo an Pin binden

  Serial.println("Servo bereit!");
  servo.write(90);           // Startposition: Mitte
}

void loop() {
  // Noch leer
}

Erklärung

  • #include <Servo.h> - Library einbinden
  • Servo servo; - Objekt erstellen
  • servo.attach(pin) - Pin zuweisen

Teste es!

Der Servo sollte sich zur Mitte (90°) bewegen und dort bleiben.

3
Code

Schritt 2: Winkel anfahren

// Schritt 2: Verschiedene Positionen anfahren

#include <Servo.h>

#define SERVO_PIN 9
Servo servo;

void setup() {
  Serial.begin(9600);
  servo.attach(SERVO_PIN);
}

void loop() {
  servo.write(0);            // Ganz links
  Serial.println("Position: 0 Grad");
  delay(1000);

  servo.write(90);           // Mitte
  Serial.println("Position: 90 Grad");
  delay(1000);

  servo.write(180);          // Ganz rechts
  Serial.println("Position: 180 Grad");
  delay(1000);
}

Was passiert?

Der Servo fährt nacheinander drei Positionen an: Links (0°) → Mitte (90°) → Rechts (180°) und wiederholt das endlos.

3
Code

Fertiger Code: Sweep

// I03: SG90 Servo-Motor mit PWM
// Praezise Winkelsteuerung von 0 bis 180 Grad

#include <Servo.h>

#define SERVO_PIN 9
Servo servo;

void setup() {
  Serial.begin(9600);
  servo.attach(SERVO_PIN);
  Serial.println("SG90 Servo-Motor Steuerung");
}

void loop() {
  // Von 0 bis 180 Grad
  for (int angle = 0; angle <= 180; angle += 10) {
    servo.write(angle);
    Serial.print("Winkel: ");
    Serial.println(angle);
    delay(300);
  }
  delay(1000);

  // Von 180 zurueck zu 0 Grad
  for (int angle = 180; angle >= 0; angle -= 10) {
    servo.write(angle);
    Serial.print("Winkel: ");
    Serial.println(angle);
    delay(300);
  }
  delay(1000);
}

Ausprobieren

Simulation in Wokwi

Wokwi Projekt

Erstelle ein neues Projekt mit Arduino Uno:

So testest du

  • Suche "servo" in der Komponenten-Liste und füge ihn hinzu
  • Verbinde: V+ → 5V, PWM → Pin 9, GND → GND
  • Kopiere den Code und klicke auf Play
  • Beobachte die Servo-Bewegung im Simulator!
4
Challenges

Erweiterungen

Probiere diese Aufgaben aus

🎚️

Challenge 1: Poti-Steuerung

Potentiometer steuert den Servo-Winkel. Drehe am Poti = Servo folgt!

→ challenge1_poti.ino

🔄

Challenge 2: Smooth Sweep

Langsames, sanftes Hin- und Herschwenken mit einstellbarer Geschwindigkeit.

→ challenge2_sweep.ino

🕹️

Challenge 3: Taster-Steuerung

2 Taster: Links/Rechts drehen in 10°-Schritten. Manuelle Kontrolle!

→ challenge3_taster.ino

📡

Challenge 4: Radar

Servo als Radar: Ultraschall misst Entfernung bei verschiedenen Winkeln.

→ challenge4_ultraschall.ino

⚙️

Geschafft!

Du kannst jetzt Servos präzise steuern

Servo.h

Library eingebunden und genutzt

PWM-Timing

50Hz, 1-2ms Pulsbreite verstanden

Winkel 0-180°

Präzise Positionierung gemeistert

Nächstes Projekt

I04: OLED-Display - Grafiken und Text auf kleinem Bildschirm

← →
1 / 11