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

AnschlussMotorAufgabe
S1180°-ServoGeglätteter (träger) Hauptzeiger
S2180°-ServoRohwert-Zeiger
S3180°-ServoDifferenz-Zeiger (Filterverzögerung)
S4360°-ServoSensor-Wechsel-Anzeige links
S5360°-ServoSensor-Wechsel-Anzeige rechts
S6180°-ServoZeigt den aktuell gewählten Sensor
STEPPERSchrittmotorDreht ein Sternrad zur gewählten Sensor-Quelle
DCDC-MotorLeichtes 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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.