An improved version of the initial star tracker I built with smartphone control over wifi using an ESP32 and Rust.
In der Astrofotografie stellt die Erdrotation eine grosse Herausforderung dar. Damit Himmelsobjekte mit langer Belichtungszeit fotografiert werden können, wird ein ''Star Tracker'' benötigt, der die Erdrotation ausgleicht und das gewünschte Objekt nachführt. Professionelle Star Tracker sind oft teuer, deshalb habe ich vor einiger Zeit selbst einen ''Barn Door Tracker'' konstruiert und gebaut, der auf Polaris ausgerichtet wird und dadurch ebenfalls die Erdrotation für Fotos kompensiert.
Wie in den Bildern ersichtlich ist, funktioniert der Tracker grundsätzlich, jedoch gibt es einige Probleme, Unschönheiten und Schwierigkeiten bei der Benutzung unterwegs:
Entsprechend dieser Problemstellung ist das Ziel dieses Projektes, die Überarbeitung des Star Trackers sowohl elektronisch als auch softwaretechnisch. Konkret:
Das System ist wie folgt aufgebaut:
Die Steuerung erfolgt über den Browser am Smartphone. Die Webapp wird von einem ESP32-C3 Supermini über einen HTTP-Server zur Verfügung gestellt. Die Kommunikation erfolgt nach dem Verbindungsaufbau in Echtzeit und asynchron über ein eigenes Websocket-Protokoll. Der ESP steuert anschliessend den Schrittmotor über einen TMC2208 Stepper Motor Driver. Dieses Modell wurde gewählt, da dadurch der Schrittmotor besonders leise ist und so gut wie keine Vibrationen auslöst. Des Weiteren steuert der ESP über einen Optokoppler und einen 2.5mm Klinkenstecker den Auslöser der Kamera. Es wird zudem ein Limit-Switch an den ESP angeschlossen, damit der Tracker sich kalibrieren kann und merkt, wann die beiden Holzplatten aufeinandertreffen. Schliesslich wird noch eine I2C Schnittstelle zur Verfügung gestellt (über einen XH2.54 Stecker) damit in Zukunft weitere nützliche Sensoren angeschlossen werden können.
Um die technische Machbarkeit zu überprüfen, wurden in einem ersten Schritt sämtliche Komponenten zunächst auf einem Breadboard zusammengesetzt. Folgende Komponenten kamen zum Einsatz:
Nachdem das System auf dem Breadboard stabil funktionierte, wurde die gesamte Schaltung als PCB in ''EasyEDA'' ausgelegt und bei JLCPCB gefertigt.
Folgende Abbildung zeigt das Schema der Leiterplatte:
Bereits nach einer Woche kam ich die bestückbare Platine an und es konnten sämtliche Bauteile eingelötet und getestet werden. Der Umstieg vom Breadboard auf das PCB verlief erstaunlich reibungslos. Ein erster Test zeigte, dass der Schrittmotor mit der Schaltung des PCBs funktionierte:
Rückblickend wäre die Verbesserung von kleineren Aspekten im Design notwendig:
Diese Änderungen würden Änderungen an dem Design der Leiterplatte benötigen und sind daher nur durch Bestellen einer neuen Leiterplatte möglich.
Eine besondere Herausforderung stellte die richtige Auswahl der Stromquelle dar. Der Schrittmotortreiber benötigt rund 5V bis 36V, der ESP32 hingegen darf mit maximal 5V betrieben werden. Daher wurde ein DC-DC Step-Down-Wandler zwischen Batterie und ESP eingebaut.
Verschiedene Tests mit 24V (6S) und 12V (3S) LiPo-Batterien zeigten, dass nicht jede Kombination stabil funktioniert. Der Motortreiber schien beim Einschalten zu viel Strom zieht zu ziehen. Der Treiber zeigte über den Diagnose-Pin unmittelbar einen Fehler und schaltete sich aus. Bei der 6S Batterie war dies oft der Fall. Mit einer 3S Batterie funktionierte es zuverlässiger, wenn auch nicht immer. Möglicherweise müsste zwischen Stromversorgung und Treiber einen grösserer Kondensator oder einen anderen Schutzmechanismus eingebaut werden. Rückblickend wäre es gut gewesen, wenn man bei der PCB-Gestaltung den Motortreiber über den ESP resetten bzw. ein- und ausschalten hätte können.
Die gesamte Logik wird auf dem ESP32-C3 unter Verwendung von ESP-IDF und Rust ausgeführt. Das System stellt ein eigenes WLAN bereit und hostet eine Webanwendung, die direkt über den Browser eines Smartphones bedient werden kann. Die Kommunikation zwischen Smartphone und Tracker erfolgt bidirektional und in Echtzeit über ein eigenes Web-Socket-Protokoll. Das Frontend zeigt den aktuellen Zustand des Trackers an und ermöglicht das Starten und Stoppen des Trackings, das Verstellen der Höhe, das Auslösen der Kamera sowie das Einrichten eines Intervallometers. Besonderer Fokus wurde darauf gelegt, den Nachführalgorithmus speziell auf die Mechanik des Trackers abzustimmen, um eine möglichst präzise Kompensation der Erdrotation zu erreichen. Die vollständige Software ist unter https://github.com/yannherren/stellavue zu finden.
src/stepper/mod.rs: Steuert den Schrittmotor über einen TMC2208-Treiber, inklusive Kalibrierung, Tracking und Geschwindigkeitsregelungsrc/camera/mod.rs: Steuert den Kameraauslöser und unterstützt Einzel- sowie Intervallaufnahmensrc/system/system_state.rs, src/system/system_event.rs: Zentrale Verwaltung der Systemzustände und Ereignisse (z.B. Tracking, Kalibrierung, Bewegung, Idle)src/wifi/mod.rs: Initialisiert und konfiguriert das WLAN als Access Pointsrc/web/server.rs: Stellt eine HTTP- und Web-Socket-Schnittstelle bereit, über die Kommandos empfangen und Statusinformationen gesendet werdensrc/web/protocol.rs: Definiert das binäre Protokoll für die Kommunikation zwischen Webanwendung und Firmwaresrc/stepper/rotation_state.rs, src/stepper/rotation_speeds.json: Speichert den Rotationszustand und liest JSON-Konfigurationsdatei mit Geschwindigkeitsprofilen für die Nachführung, generiert durch das Python-Toolsrc/web/webapp/index.html, src/web/webapp/index.js, src/web/webapp/stylesheet.css: Benutzeroberfläche der Webapp zur Steuerung und Statusanzeige, läuft im Browser des Smartphonesutil/stepper_rotation_speed.py: Skript zur Berechnung und Generierung der GeschwindigkeitsprofileDie Berechnung der Rotationsprofile für die Nachführung erfolgt durch ein separates Python-Skript (stepper_rotation_speed.py). Dieses Skript berechnet für verschiedene Höhenwinkel (α) die jeweils erforderliche Anzahl an Motorumdrehungen und die dazugehörigen Schrittgeschwindigkeiten, um die Erdrotation möglichst präzise zu kompensieren.
Der Algorithmus geht dabei wie folgt vor:
Durch diese Vorgehensweise kann die Software für jeden beliebigen Höhenwinkel die optimale Geschwindigkeit für den Schrittmotor auswählen und so eine gleichmässige und präzise Nachführung gewährleisten. Die Auslagerung der Berechnung in ein Python-Skript ermöglicht eine einfache Anpassung an verschiedene mechanische Parameter, ohne die Software selbst ändern zu müssen.
Die Kommunikation zwischen Webanwendung und Software erfolgt über ein binäres Web-Socket-Protokoll. Kommandos und Statusmeldungen werden jeweils als 4-Byte-Nachrichten übertragen, wobei die unteren Bits die Art der Aktion bzw. des Ereignisses kodieren und die oberen Bits die zugehörigen Parameter enthalten.
Eine vollständige Beschreibung der Kommandos und Antworttypen findet sich im Readme im Projekt unter: https://github.com/yannherren/stellavue/blob/master/docs/PROTOCOL.md
Nachdem die Elektronik funktionierte, wurde ein passendes Gehäuse entworfen und gefertigt. Auf Basis der exakten Masse der PCB-Leiterplatte wurde das Design in der Software Fusion 360 entworfen. Das Gehäuse besteht aus zwei Teilen: einer Bodenplatte zur Montage auf der unteren Holzplatte sowie einem Deckel zum Anschrauben. Die notwendigen Bohrungen für Stecker und Bedienelemente wurden ebenfalls berücksichtigt. Anschliessend wurden die Teile mit kleineren Anpassungen mehrmals 3D gedruckt und schliesslich montiert.
Schliesslich folgte der praktische Test. Nach der vollständigen Integration folgte der praktische Test: In einer klaren Nacht konnte der Tracker in Feldbedingungen mit Kamera aufgebaut und gestartet werden.
Bereits ein Einzelbild mit Sekunden Belichtungszeit zeigte punktförmige Sterne ohne Verzerrungen. Durch die Aufnahme und Kombination von rund 170 solcher Einzelbilder (auch bekannt als ''Stacking'') und entsprechend einer Integrationszeit von etwa einer Stunde war die Galaxie M101 auf dem Bild klar sichtbar:
Die Bedienung per Webapp war dabei ein grosser Vorteil. Testaufnahmen, Starten/Stoppen des Trackings sowie das Auslösen von Aufnahmeserien konnten komfortabel direkt am Smartphone durchgeführt und jederzeit angepasst werden. Der Feldtest bestätigte, dass alle Schwachstellen des alten Systems (Bedienkomfort, Zuverlässigkeit, Stromversorgung, Softwarestabilität) erfolgreich gelöst werden konnten. Die Nachführung mit dem neuen Algorithmus arbeitete präzise. Allerdings zeigte sich, dass nun eher das Stativ oder die Kameramontage als limitierende Faktoren auftraten. Bei Wind begann der Aufbau leicht zu schwanken, was die maximal mögliche Belichtungszeit reduzierte und einige Bilder verwackelt waren. Die Ausrichtung der Kamera am Stativkopf ist zudem eine Schwachstelle. Es ist sehr schwierig die Kamera präzise zu den kleinen Himmelsobjekten auszurichten, da keine Feinjustierungen mit dem Stativkopf möglich sin.
Zusammenfassend funktioniert der neue Star Tracker zuverlässig und ist in der Bedienung ein enormer Fortschritt zur alten Version. Die Kombination aus Hardware, individueller PCB-Leiterplatte, zentraler Steuerung per Smartphone und verbessertem Tracking-Algorithmus macht das Gerät gut geeignet für die Astrofotografie. Es hat sich gezeigt, dass die grössten Schwachstellen nun ausserhalb des Trackers selbst liegen (Stativ, Montage).
In Zukunft könnte der Tracker mit zusätzlichen Sensoren wie Kameraausrichtung, Trackerausrichtung etc. erweitert werden. Dies würde die Bedienung und präzision noch weiter vereinfachen