Projekt I03 - Präzise Winkelsteuerung mit PWM
Servo.hTheorie-Module 1-5, PWM-Grundlagen aus B05, Verständnis von analogWrite()
Der SG90 Micro Servo
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
20ms Periode (50Hz)
├────────────────────────────────────────┤
1ms Puls = 0° 1.5ms = 90° 2ms Puls = 180°
┌─┐ ┌──┐ ┌───┐
│ │ │ │ │ │
──┘ └──────────── ───┘ └────────── ───┘ └──────────
Die Library übernimmt das komplizierte Timing. Du gibst nur den Winkel an!
// 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();Pin 9 ist PWM-fähig (markiert mit ~). Die Servo-Library nutzt Timer1 für präzises Timing.
Einfache Verkabelung - nur 3 Drähte!
Arduino Uno SG90 Servo
┌─────────────┐ ┌─────────┐
│ │ │ ┌───┐ │
│ 5V ────────┼─red────┼──│ V+│ │
│ │ │ ├───┤ │
│ Pin 9 ─────┼─orange─┼──│PWM│ │
│ │ │ ├───┤ │
│ GND ───────┼─brown──┼──│GND│ │
│ │ │ └───┘ │
└─────────────┘ └─────────┘
Bei mehreren Servos: Externe 5V-Stromversorgung verwenden! Arduino kann max. 500mA liefern.
// 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
}#include <Servo.h> - Library einbindenServo servo; - Objekt erstellenservo.attach(pin) - Pin zuweisenDer Servo sollte sich zur Mitte (90°) bewegen und dort bleiben.
// 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);
}Der Servo fährt nacheinander drei Positionen an: Links (0°) → Mitte (90°) → Rechts (180°) und wiederholt das endlos.
// 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);
}Simulation in Wokwi
Probiere diese Aufgaben aus
Potentiometer steuert den Servo-Winkel. Drehe am Poti = Servo folgt!
→ challenge1_poti.ino
Langsames, sanftes Hin- und Herschwenken mit einstellbarer Geschwindigkeit.
→ challenge2_sweep.ino
2 Taster: Links/Rechts drehen in 10°-Schritten. Manuelle Kontrolle!
→ challenge3_taster.ino
Servo als Radar: Ultraschall misst Entfernung bei verschiedenen Winkeln.
→ challenge4_ultraschall.ino
Du kannst jetzt Servos präzise steuern
Library eingebunden und genutzt
50Hz, 1-2ms Pulsbreite verstanden
Präzise Positionierung gemeistert
I04: OLED-Display - Grafiken und Text auf kleinem Bildschirm