MODE 9 — GALVANO
Medium · 1h 30 min · Fast kostenlos
Ziel & Anwendung
Ein echtes Galvanometer-Verhalten in Software: S1 folgt dem gewählten Sensor mit starker Low-Pass-Glättung (α=0,05) — träge und schwungvoll wie ein analoges Drehspul-Messwerk. S2 zeigt parallel den ungefilterten Rohwert. S3 macht die Filterverzögerung sichtbar. Encoder-Button wechselt zwischen sechs Sensor-Quellen.
- Low-Pass-Filter (α=0,05) für träges Galvanometer-Verhalten auf einem Servo implementieren.
- Rohmesswert und gefiltertes Signal gleichzeitig als separate Zeiger darstellen.
- Sensor-Auswahl zwischen sechs Quellen per Encoder-Button implementieren.
Anschluss & Funktion
Motoren am Board
| Anschluss | Motor | Aufgabe |
|---|---|---|
| S1 | 180°-Servo | Geglätteter (träger) Hauptzeiger |
| S2 | 180°-Servo | Rohwert-Zeiger |
| S3 | 180°-Servo | Differenz-Zeiger (Filterverzögerung) |
| S4 | 360°-Servo | Sensor-Wechsel-Anzeige links |
| S5 | 360°-Servo | Sensor-Wechsel-Anzeige rechts |
| S6 | 180°-Servo | Zeigt den aktuell gewählten Sensor |
| STEPPER | Schrittmotor | Dreht ein Sternrad zur gewählten Sensor-Quelle |
| DC | DC-Motor | Leichtes Dauer-Jittern wie ein echtes Galvanometer |
Materialliste
- Kartonstreifen je ca. 12 × 2 cm als Zeiger (3 Stück, verschiedene Längen für optische Tiefe)
- Breites Skalenblatt aus Karton ca. 22 × 12 cm
- Transparente Folie oder Backpapier als leichte Verkleidung vor dem Skalenblatt
- Filzstift für Skaleneinteilung
- Klebeband und Heißkleber
Step-by-Step Tutorial
Galvanometer-Gehäuse mit drei Zeigern bauen
Skalenblatt (22 × 12 cm) mit einheitlicher 0–100-%-Teilung aufbauen. S1 hinten (langer Zeiger, geglätteter Wert), S2 vorn (kurzer Zeiger, Rohwert), S3 in der Mitte (Differenz-Zeiger). Optional: transparente Folie als Glasscheibe vor das Skalenblatt kleben.
Check: Drei Zeiger auf einer Skala: S1 (geglättet, lang), S2 (roh, kurz), S3 (Differenz, mittel)
Tipp: Galvanometer-Look: Zeiger S1 deutlich länger (12 cm) als S2 (8 cm) und S3 (6 cm) — typisches Aussehen analoger Messgeräte.
Low-Pass-Filter verstehen und testen
Low-Pass-Formel: galSmooth = galSmooth × (1-α) + rawPulse × α. Mit α=0,05: sehr träge, 'schwere' Zeigerbewegung. S2 zeigt rawPulse (sofort). S3 zeigt Differenz: constrain(1500 + (int)(rawPulse - galSmooth), 1000, 2000) — S3 schlägt aus wenn Rohwert und Glättung abweichen.
Check: S1 bewegt sich deutlich langsamer als S2 bei schnellen Sensor-Änderungen
Tipp: filterAnalog(rawPulse, galSmooth, 0.05f): pro Zyklus bewegt sich galSmooth um 5 % auf rawPulse zu. Bei Sprung von 1000 auf 2000 µs braucht S1 ~45 Zyklen bis 90 % erreicht.
Sensor-Auswahl aufbauen
Sechs Sensoren per galSensor (0–5) wählbar. EncoderButton erhöht galSensor und dreht Stepper (galSensor × 30 Schritte) als Skalenbeleuchter. Aktive Sensor-Quelle auf Klebezettel notieren: 0=Temp, 1=Dist, 2=LDR %, 3=GyroX, 4=IR, 5=Feuchte.
Check: Encoder-Button wechselt zwischen 6 Sensoren: 0=Temp, 1=Distanz, 2=LDR, 3=GyroX, 4=IRSensor, 5=Feuchte
Tipp: Klebezettel-Label unter S2 immer aktuell beschriften — so ist sichtbar welcher Sensor gerade gewählt ist.
Stepper als Sensor-Wahl-Anzeige aufbauen
Sechszackiges Sternrad (Ø 4 cm) aus Karton ausschneiden. Zacken beschriften: T, D, L, G, IR, RH. Auf Stepper-Mitnehmer kleben. Bei Sensor-Wechsel (galSensor != lastGalSensor): stepper.move(galSensor × 30). Sternrad zeigt aktiven Sensor.
Check: Stepper dreht bei jedem Sensor-Wechsel um eine definierte Schrittanzahl — 6 Sektoren sichtbar
Tipp: Kleines Karton-Sternrad mit 6 Zacken auf Stepper-Mitnehmer: jeder Sensor-Wechsel dreht eine Zacke weiter.
Leichtgängigkeits-Test ohne Strom
S1-Zeiger von Hand drehen: kein Klemmen durch Eigengewicht? Stepper-Sternrad von Hand 6 Positionen weiterdrehen: frei? Alle drei Zeiger gleichzeitig auf Mitte drehen: kein Kontakt? Erst dann einschalten.
Check: Alle drei Zeiger drehen frei. Stepper-Sternrad dreht 6 × 30 = 180 Schritte ohne Blockade.
Tipp: Langer S1-Zeiger (12 cm) ist schwerer — prüfen ob Servo ihn wirklich frei drehen kann. Hebel >10 cm braucht leichten Zeiger-Karton.
MODE 9 aktivieren — Galvanometer beobachten
Messgeräte → MODE 9. galSensor 4 (IR) wählen. Hand schnell über IR halten dann weg: S2 springt sofort, S1 bewegt sich träge nach. S3 zeigt Differenz als Ausschlag während Transition. EncoderButton: Sensor wechseln, Sternrad dreht.
Check: S1 bewegt sich träge nach Sensor-Änderung. S2 folgt sofort. S3 schlägt während der Übergangszeit aus.
Tipp: Hand schnell über IR-Sensor (galSensor=4) halten und weg: S2 springt, S1 kriecht nach — perfekter Galvanometer-Effekt.
Troubleshooting
- S1 bewegt sich gar nicht — bleibt auf 1500 µs stehen — galSmooth wurde nicht initialisiert oder filterAnalog wird falsch aufgerufen. Sicherstellen dass filterAnalog(rawPulse, galSmooth, 0.05f) jede Schleife ausgeführt wird und galSmooth als static float definiert ist.
- S1 und S2 zeigen identischen Wert — kein Filter-Effekt sichtbar — α-Wert prüfen. Bei α=1.0f kein Glättungseffekt. Sicherstellen dass 0.05f (nicht 0.5f) verwendet wird. Sensor-Wert schnell ändern (Hand über IR-Sensor) um Filterverzögerung sichtbar zu machen.
Modifikationen & Sicherheit
- Pro-Tipp: α-Wert per Encoder justieren (0,01 bis 0,2) — je kleiner, desto träger das Galvanometer.
- Erweiterung: Mechanisches Rückhol-Gummiband an S1-Zeiger für echtes Galvanometer-Pendelverhalten.
- Sicherheit: Sehr langer Zeiger (>15 cm) überfordert das Servo-Drehmoment — maximale Zeigerlänge 12 cm.
Wichtige Code-Teile
// Sensor-Auswahl
static uint8_t galSensor = 0;
if(isButtonPressed(EncoderButton, lastEncBtn8)) galSensor = (galSensor + 1) % 6;
// Rohwert je Sensor
float rawPulse = 1500;
switch(galSensor) {
case 0: rawPulse = mapTemperature; break;
case 1: rawPulse = mapDistanceCMshort; break;
case 2: rawPulse = mapLDR; break;
case 3: rawPulse = mapGyroX; break;
case 4: rawPulse = map(constrain(IRSensor,0,4095), 0, 4095, 1000, 2000); break;
case 5: rawPulse = map(constrain((int)humiditiy,0,100), 0, 100, 1000, 2000); break;
}
// Low-Pass α=0.05: träges Galvanometer-Verhalten
filterAnalog(rawPulse, galSmooth, 0.05f);
// S1: geglättet, S2: Rohwert, S3: Differenz
servocontroller.setServoPulse(1, (uint16_t)galSmooth);
servocontroller.setServoPulse(2, (uint16_t)rawPulse);
servocontroller.setServoPulse(3, constrain(1500 + (int)(rawPulse - galSmooth), 1000, 2000));Ähnliche Projekte
- MODE 6 — PEAK HOLD — Ein universeller Peak-Detektor für fünf verschiedene Sensoren: Encoder-Button wechselt den aktiven Sensor (Temperatur, Distanz, Helligkeit, Spannung, Feuchte), S1 zeigt den Live-Wert, S2 hält das bisherige Maximum und S3 das bisherige Minimum — alle gleichzeitig auf derselben Skala. touch2 löscht alle gespeicherten Extremwerte.
- MODE 7 — DIFF METER — Zwei Sensor-Kanäle werden verglichen: S1 zeigt die Differenz von Sensor A zu einem gesetzten Referenzpunkt (touch1 = Nullpunkt setzen), S2 zeigt Sensor A live, S3 zeigt Sensor B live. EncoderButton wechselt Sensor A, touch2 wechselt Sensor B. Der DC-Motor warnt wenn die Differenz zwischen A und B einen Schwellwert überschreitet.
- MODE 1 — VOLTMETER — Drei Servo-Zeiger verwandeln den ProtoPeaks in ein echtes Analog-Messgerät: S1 zeigt den 0–3,3 V Direkt-Bereich, S2 den erweiterten 0–10 V Bereich via simuliertem Spannungsteiler, S3 misst parallel die LDR-Lichtspannung. Der Stepper rollt wie ein mechanischer Rollenzähler mit und der DC-Motor warnt bei hoher Spannung.