Astronomiezeiger: Unterschied zwischen den Versionen

Aus Wiki Physik und ihre Didaktik
1>SOrth
Die Seite wurde neu angelegt: „{{subst:Experiment}}“
 
K 15 Versionen importiert
 
(14 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:In Bearbeitung]]
[[Kategorie:Astronomie]]


<div class="row">
<div class="row">
   <div class="large-7 columns>
   <div class="large-7 columns>


Physikalisches Ziel des Experiments. Beschreibe hier genauer z.B. welches Phänomen hier gezeigt werden soll oder was genau hier gemessen werden soll.
In diesem Projekt soll ein Zeiger gebaut werden, der die aktuelle Position verschiedener astronomischer Objekte am Himmel anzeigt.
Der Zeiger besteht aus insgesamt drei 180°-Servomotoren, zwei Motoren steuern den Azimut des Objektes an und der dritte Motor den Höhenwinkel.
Die Winkel eines Objektes werden mit einem Python-Program ermittelt und mit Hilfe eines Arduinos an die entsprechenden Servomotoren übermittelt. [[BP:Astronomiezeiger|Astronomiezeiger]]


__INHALTSVERZEICHNIS__
__INHALTSVERZEICHNIS__


= Theoretische Zusammenfassung =
</div>
  <div class="large-5 columns>
[[Datei:BP Astrologiezeiger komplett.JPG|Beschreibung|1499px|thumb|center|Kompletter Aufbau des Astronomiezeigers verbunden mit Arduino und Laptop ]]
  </div>
</div>


Welche physikalische Theorie steckt hinter dem Versuch. Gerne so genau wie möglich und so ausführlich wie nötig.


= Didaktischer Rahmen =
== Benötigtes Material ==


== Fachdidaktische Zielsetzung ==
Folgende Materialien werden benötigt:
* Zeiger (möglicherweiße selbstbauen)
* Arduino Uno
* kleines Steckbrett
* 9 längere Steckbrückenkabel (für Verbindung von Servomotoren mit dem Arduino)
* USB-B zu USB Kabel (für die Verbindung von Arduino mit dem Laptop)
* Laptop zum Programmieren
* Arduino IDE (<b>[https://www.arduino.cc/en/software Link zur Arduino Software]</b>)
* Programm um mit Python zu arbeiten (Beispielsweise <b> [https://jupyter.org Jupyter]</b>)
* Laserdiode (optional)


Auf welche prozessbezogene Kompetenz soll hier Wert gelegt werden? Beschreibe hier genauer was die SuS mit diesem Experiment lernen sollen.


== Nötige Vorkenntnisse ==


Beschreibe hier genauer welche Vorkenntnisse ein*e SuS benötigt um das Experiment verstehen zu können. Dabei müssen auch die nötigen Vorkenntnisse aus anderen Fächern beachtet werden.
== Aufbauanleitung ==
 
Genauere Beschreibung des Versuchsaufbaus. Hier können auch einzelne Schritte beschrieben werden. Gerne zu jedem Schritt Bilder einfügen.
 
<div class="row">
  <div class="large-8 columns">
 
; Schritt 1 : Als erstes werden die Servomotoren mittels der Steckbrückenkabel (wie in der Skizze....Skizze wird noch nachgeliefert) mit dem Arduino verkabelt. Anschließend den Arduino mit dem Laptop verbinden.  


== Mögliche Schülerschwierigkeiten ==
; Schritt 2: Über die Software Arduino IDE muss als nächstes Firmata auf den Arduino geladen werden. Dazu über File/Examples/Firmata die Datei StandardFirmata aufrufen und auf den Arduino hochladen. Dieser Arduino-Sketch dient dazu, dass die Servomotoren mit Python angesteuert werden können.


Beschreibe hier welche Schwierigkeiten die SuS beim Beobachten des Demonstrationsexperiments bzw. beim eigenständigen Durchführen des Experiments haben könnten. GGf. kannst du hier auch Lösungsansätze beschreiben.
; Schritt 3: Servomotoren in den 3D-Druck einfügen und alles zusammenbauen. Dabei auf eine einheitliche Ausrichtung nach Norden achten. (Bild)


== Schülervorstellungen, die hier relevant werden ==
; Schritt 4: Über Python den unten angegebenen Code einfügen, eventuell anpassen. Eingabe der Sterne oder Planeten, die man sehen möchte (darauf achten, ob man sie über den Code ansteuren kann).


Gibt es in der Literatur (z.B. Schecker, Horst; Wilhelm, Thomas; Hopf, Martin; Duit Reinders (Hrsg.) (2018): Schülervorstellungen und Physikunterricht. Berlin: Springer-Verlag GmbH) bereits erforschte Schülervorstellungen, die bei diesem Experiment relevant werden könnten? Beschreibe die Schülervorstellungen mit eigenen Worten und beschreibe warum sie hier relevant sind. GGf. kannst du auch einen Lösungsansatz beschreiben.  
; Schritt 5: Eventuell Laserdiode in den Zeiger einbauen.


  </div>
</div>
  <div class="large-5 columns>
[[Datei:00 Platzhalter.jpeg|Beschreibung|1499px|thumb|center|Die Auswahl des Bildes sollte symbolisch den gesamten Versuch beschreiben und ansprechend sein]]
  </div>
  <div class="large-5 columns>
{| class="wikitable" style="margin: auto; width: 100%;"|
|+ Allgemein
|-
! style="width: 50%"|Klassenstufe
| Klasse
|-
! style="width: 50%"|Kategorie
| ?
|-
! style="width: 50%"|Einordnung in den Bildungsplan von BW
| Kapitel, Abschnitt
|-
|}
  </div>
</div>
</div>


= Versuchsanleitung =


== Benötigtes Material ==
== Aufbauanleitung Zeiger ==
 
Der Zeiger, in dem hier beschrieben Projekt, besteht aus vier 3D-gedruckten Bauteilen, einer [Bodenplatte], einer [Servobox], einem [Arm] und einem [Pfeil], und drei 180°-Servomotoren mit passenden Servohörnern.
 
; ACHTUNG : Beim Einbauen der Servos, darauf achten, dass diese sich in der Nullstellung befinden.


Als Liste einfügen mit den Links zur Hardware, wenn sie sich schon im Wiki befindet. Beispiel:
; Schritt 1 : Als erstes werden die Servohörner so an die Unterseiten vom Pfeil, dem Arm und der Servobox verklebt, dass die Servohörner über die vorgesehenen Löcher in den Bauteilen mit einer Schraube an den Servos geschraubt werden können.
* [[HW:Influenzmaschine|Influenzmaschine]]


== Versuchsaufbau ==
; Schritt 2 : Nun wird ein Servo, so in der Bodenplatte eingesetzt und verklebt, dass die Drehachse des Servos im Mittelpunkt der Bodenplatte liegt. Anschließend wird die Servobox auf dem Servo in der Bodenplatte so platziert und verschraubt, dass die Servobox genau über dem Servo liegt.


Genauere Beschreibung des Versuchsaufbaus. Hier können auch einzelne Schritte beschrieben werden. Gerne zu jedem Schritt Bilder einfügen.
; Schritt 3 : Ein weitere Servo wird dann in die Servobox so eingesetzt und verklebt, dass das Anschlusskabel durch die vorgesehene seitliche Öffnung liegt. Der letzte Servo wird so im Loch am Arm verklebt, dass das Anschlusskabel des Servos nach unten zeigt.


<div class="row">
; Schritt 4 : Den Pfeil nun so an den Servo am Arm schrauben, dass dieser nach unten zeigt. Den Arm mit dem Servo in der Servobox so verschrauben, dass bei einer Ausrichtung Richtung Norden, der Arm nach Westen zeigt. (siehe Bild)
  <div class="large-8 columns">


; Schritt 1 : BlaBla.
; Schritt 2: Aber bitte nicht jede einzelne angezogene Schraube beschreiben! Wenn bestimmte Größen ausgeschrieben werden wie z.B. 500&thinsp;g dann kann man zwischen der Maßzahl wie hier ein halbes Leerzeichen einfügen.


</div>
[[Datei:BP Astrologiezeiger nah.JPG|600px|thumb|right||Nahaufnahme des Zeigers um die Position des Arms in den Nullstellungen des Servomotors zu zeigen.]]
  <div class="large-4 columns">
[[Datei:00 Platzhalter_Kolibri.jpg|600px|thumb|right||Durch das geschickte Setzen von Umgebungen kann das Bild des Kolibris hier an dieser Stelle erscheinen und könnte jetzt zum Beispiel den ersten Schritt des Experiments beschreiben]]
</div>
</div>


== Versuchsdurchführung ==  
== Versuchsdurchführung ==  


Beschreibe hier genauer was man zur Durchführung tun muss. Aus was muss dabei geachtet werden?
Achte auf eine saubere Eingabe der Namen der Himmelsobjekte (hier kleingeschrieben und auf englisch). Verwende einen Laser mit möglichst wenig Leistung und stecke ihn am besten erst am Ende an, sodass er nicht im Raum herumstrahlt.
 
== Programmcode ==
Im Nachfolgenden ist der komplette Programmcode zur Ausrichtung des Pfeils aufgeführt:
 
<syntaxhighlight lang="python">
import pyfirmata
import time
import astropy.units as u
import astropy.coordinates as coord
from astropy.coordinates import AltAz, EarthLocation, SkyCoord, solar_system_ephemeris
from astropy.time import Time
from datetime import datetime
 
 
standort = EarthLocation(lat=48.7758*u.deg, lon=9.1829*u.deg, height=260*u.m)  # Hier müssen der Breiten- und Längengrad vom aktuellen Standort in Grad angegeben werden (Aktuell Stuttgart)
time1 = Time(datetime.now(), format='datetime')                                # Zeit aus dem PC
timeUTC = datetime.utcnow()
 
'Einrichten des Arduinos'
port = 'COM5'
board = pyfirmata.Arduino(port)
 
'Einrichten der Servo'
PinAlt = 9              #Servo für den Höhenwinkel
PinAz1  = 10            #oberer Servo für Azimut
PinAz2  = 11            #unterer Servo für Azimut
horizont = 88          #Ausgangsposition für den Winkel des Altitude-Servos, damit der Horizont=0° ist
 
ServoAlt = board.get_pin(f'd:{PinAlt}:s')
ServoAz1  = board.get_pin(f'd:{PinAz1}:s')
ServoAz2  = board.get_pin(f'd:{PinAz2}:s')


== Auswertung ==
'Funktionen, die die Servos bewegen'
def rotate_alt(angle):              #Rotiert Altitude-Servo
    if angle >= 88:
        for i in range(horizont, angle+1):
            ServoAlt.write(i)
            time.sleep(0.015)        #Rotationsgeschwindigkeit, je größer die Zeit, umso langsamer rotiert der Servo
    else:
        for i in reversed(range(angle, horizont+1)):
            ServoAlt.write(i)
            time.sleep(0.015)


Hier sollen Diagramme, Werte und eine Fehlerabschätzung zum Experiment hin. Gegebenenfalls können hier auch Gleichungen eingebunden werden. Mathematische Ausdrücke werden durch den <code><nowiki><math></nowiki></code>-Tag initiiert:
def reverse_alt(angle):              # Rotiert den Altitude-Servo wieder auf die Höhe des Horizonts
    if angle >= 88:
        for i in reversed(range(horizont, angle+1)):
            ServoAlt.write(i)
            time.sleep(0.015)        #Rotationsgeschwindigkeit, je größer die Zeit, umso langsamer rotiert der Servo
    else:
        for i in range(angle, horizont+1):
            ServoAlt.write(i)
            time.sleep(0.015)
           
def rotate_az(angle):                #Rotiert den Azimut-Servo in gewünschte Position
    if angle < 180:
        angleS1 = angle
        angleS2 = 0
    elif angle >= 180:
        angleS1 = 179
        angleS2 = angle - 179
    for i in range(angleS1 +1):
        ServoAz1.write(i)
        time.sleep(0.015)
    for j in range(angleS2 +1):
        ServoAz2.write(j)
        time.sleep(0.015)          #Rotationsgeschwindigkeit, je größer die Zeit, umso langsamer rotieren die Servos
   
def reverse_az(angle):              # Rotiert die Azimut-Servo wieder nach Norden     
    if angle < 180:
        angleS1 = angle
        angleS2 = 0
    elif angle >= 180:
        angleS1 = 179
        angleS2 = angle - 179
    for i in reversed(range(angleS1 +1)):
        ServoAz1.write(i)
        time.sleep(0.015)
    for j in reversed(range(angleS2 +1)):
        ServoAz2.write(j)
        time.sleep(0.015)


:<math>
def ausrichten(variable):          #Abfrage was Angezeigt werden soll und durchführen der Rotationen
\mathrm{i}\hbar\frac{\partial}{\partial t} |\,\psi (t) \rangle = \hat{H} |\,\psi (t) \rangle.
    i=0
</math>
    j=0
    try:
        while i==0:
            objekt = str(input("Bitte eingeben ob Planet (Eingabe 'Planet') oder Objekt aus SIMBAD (Eingabe 'SIMBAD') beobachtet werden soll:"))
            if objekt == 'Planet' :
                while j==0:
                    obj = str(input("Bitte Planetenname eingeben (engl. & kleingeschrieben):"))
                    if obj in solar_system_ephemeris.bodies:
                        body = coord.get_body(obj, time1)
                        j=j+1
                    else:
                        print("Falsche Eingabe. Bitte erneut eingeben")
                i = i+1
            elif objekt == 'SIMBAD' :
                obj = str(input("Bitte SIMBAD-identifier eingeben:"))
                body = SkyCoord.from_name(obj)
                i = i+1
               
        bodyaltaz = body.transform_to(AltAz(obstime=timeUTC, location=standort))
        altitude = int(bodyaltaz.alt.deg)
        azimuth = 360 - int(bodyaltaz.az.deg)
        rotate_alt(horizont + altitude)
        rotate_az(azimuth)
       
        print(f"Im Horizontsystem lauten die Koordinaten für das Objekt {obj}:")
        print(f"Der Höhenwinkel beträgt {altitude}°.")
        print(f"Das Azimut beträgt {int(bodyaltaz.az.deg)}°")
        reset = str(input("Soll ein weiteres Objekt betrachtet werden?(y/n):"))
        if reset == 'y':
            reverse_alt(altitude + horizont)
            reverse_az(azimuth)
            ausrichten(0)
        elif reset =='n':
            reverse_alt(altitude + horizont)
            reverse_az(azimuth)
            board.exit()
       
    except :
        board.exit()
'Mit dem folgendem Kommando wird das Program gestartet'
'Den Servo für den Höhenwinkel auf den Horizont ausrichten(0°)'


Beim Vergleich mit Literaturwerten oder ähnlichem sollte durch die Referenzumgebung <code><nowiki><ref></nowiki></code> auf geeignete Quellen verwiesen werden, diese erscheinen dann auch automatisch am Seitenende.<ref>[https://www.pi5.uni-stuttgart.de/de/forschung/physik-und-ihre-didaktik/ ''Website Abteilung Physik und ihre Didaktik''] Abgerufen am 31.08.2021</ref>
rotate_alt(horizont)
rotate_az(0)
ausrichten(0)
</syntaxhighlight>


== Fehlerabschätzung ==


== Mögliche Probleme und ihre Lösungen ==
== Mögliche Probleme und ihre Lösungen ==
Treten beim Experiment häufiger Fehler auf? Bitte beschreibe sie hier.
Es werden hier 3 Servomotoren mit 180° benutzt, 2 für die horizontale Achse und einer für die vertikale Achse, für eine genauere Ansteuerung der Himmelsobjekte.
Bei einem 360° Motor treten Probleme auf:
- Er lässt sich nur über die Drehgeschwindigkeit und Zeitdauer in eine Richtung steuern. Diese sind nicht immer gleich und hängen von der Spannung ab, die der Arduino bekommt.
- D.h. es können keinen genaue Winkel angesteuert werden und die Ausgangsposition ändert sich. Deswegen ist hier zu einem 360° Motor abzuraten.
 
Der Augbau kann etwas wackeln, wenn die Motoren sich bewegen. Hierzu entweder den Aufbau befestigen, ein Gegengewicht anfügen oder ihn groß genug drucken lassen.


== Sicherheitshinweise ==
Hier nötige Sicherheitshinweise notieren. Ggf. Betriebsanweisung verlinken.
* [[BA:Influenzmaschine|Influenzmaschine]]


= Fotos =
= Fotos =
Am Ende des Dokuments kommt eine Galerie aller Bilder, die zu diesem Experiment unter dem Namensraum "Datei:" bereits vorhanden sind. Im Allgemeinen lohnt es sich häufig auch, bereits bestehende Texte und deren Syntax zu betrachten:<br>
<code>
<nowiki><div class="row">
  <div class="large-4 large-centered columns">
<ul class="example-orbit" data-orbit>
  <li>
    [[Datei:Bild.png|slide 1]]
    <div class="orbit-caption">
      Bildbeschreibung
    </div>
  </li>
</ul>
  </div>
</div></nowiki>
</code>
<br>


<div class="row">
<div class="row">
Zeile 120: Zeile 220:
<ul class="example-orbit" data-orbit>
<ul class="example-orbit" data-orbit>
   <li>
   <li>
     [[Datei:00 Platzhalter.jpeg|slide 1]]
     [[Datei:BP Astrologiezeiger komplett.JPG|slide 1]]
     <div class="orbit-caption">
     <div class="orbit-caption">
     Platzhalter
     Kompletter Aufbau des Astronomozeigers.
     </div>
     </div>
   </li>
   </li>
   <li>
   <li>
     [[Datei:00 Platzhalter_Kolibri.jpg|slide 2]]
     [[Datei:BP Astrologiezeiger nah.JPG|slide 2]]
     <div class="orbit-caption">
     <div class="orbit-caption">
       Ein Kolibri
       Nahaufnahme des Astronomiezeigers.
     </div>
     </div>
   </li>
   </li>
Zeile 134: Zeile 234:
   </div>
   </div>
</div>
</div>
= Literatur =
<references />


{|
{|

Aktuelle Version vom 16. Oktober 2025, 09:17 Uhr


In diesem Projekt soll ein Zeiger gebaut werden, der die aktuelle Position verschiedener astronomischer Objekte am Himmel anzeigt. Der Zeiger besteht aus insgesamt drei 180°-Servomotoren, zwei Motoren steuern den Azimut des Objektes an und der dritte Motor den Höhenwinkel. Die Winkel eines Objektes werden mit einem Python-Program ermittelt und mit Hilfe eines Arduinos an die entsprechenden Servomotoren übermittelt. Astronomiezeiger

Kompletter Aufbau des Astronomiezeigers verbunden mit Arduino und Laptop


Benötigtes Material

Folgende Materialien werden benötigt:

  • Zeiger (möglicherweiße selbstbauen)
  • Arduino Uno
  • kleines Steckbrett
  • 9 längere Steckbrückenkabel (für Verbindung von Servomotoren mit dem Arduino)
  • USB-B zu USB Kabel (für die Verbindung von Arduino mit dem Laptop)
  • Laptop zum Programmieren
  • Arduino IDE (Link zur Arduino Software)
  • Programm um mit Python zu arbeiten (Beispielsweise Jupyter)
  • Laserdiode (optional)


Aufbauanleitung

Genauere Beschreibung des Versuchsaufbaus. Hier können auch einzelne Schritte beschrieben werden. Gerne zu jedem Schritt Bilder einfügen.

Schritt 1
Als erstes werden die Servomotoren mittels der Steckbrückenkabel (wie in der Skizze....Skizze wird noch nachgeliefert) mit dem Arduino verkabelt. Anschließend den Arduino mit dem Laptop verbinden.
Schritt 2
Über die Software Arduino IDE muss als nächstes Firmata auf den Arduino geladen werden. Dazu über File/Examples/Firmata die Datei StandardFirmata aufrufen und auf den Arduino hochladen. Dieser Arduino-Sketch dient dazu, dass die Servomotoren mit Python angesteuert werden können.
Schritt 3
Servomotoren in den 3D-Druck einfügen und alles zusammenbauen. Dabei auf eine einheitliche Ausrichtung nach Norden achten. (Bild)
Schritt 4
Über Python den unten angegebenen Code einfügen, eventuell anpassen. Eingabe der Sterne oder Planeten, die man sehen möchte (darauf achten, ob man sie über den Code ansteuren kann).
Schritt 5
Eventuell Laserdiode in den Zeiger einbauen.


Aufbauanleitung Zeiger

Der Zeiger, in dem hier beschrieben Projekt, besteht aus vier 3D-gedruckten Bauteilen, einer [Bodenplatte], einer [Servobox], einem [Arm] und einem [Pfeil], und drei 180°-Servomotoren mit passenden Servohörnern.

ACHTUNG
Beim Einbauen der Servos, darauf achten, dass diese sich in der Nullstellung befinden.
Schritt 1
Als erstes werden die Servohörner so an die Unterseiten vom Pfeil, dem Arm und der Servobox verklebt, dass die Servohörner über die vorgesehenen Löcher in den Bauteilen mit einer Schraube an den Servos geschraubt werden können.
Schritt 2
Nun wird ein Servo, so in der Bodenplatte eingesetzt und verklebt, dass die Drehachse des Servos im Mittelpunkt der Bodenplatte liegt. Anschließend wird die Servobox auf dem Servo in der Bodenplatte so platziert und verschraubt, dass die Servobox genau über dem Servo liegt.
Schritt 3
Ein weitere Servo wird dann in die Servobox so eingesetzt und verklebt, dass das Anschlusskabel durch die vorgesehene seitliche Öffnung liegt. Der letzte Servo wird so im Loch am Arm verklebt, dass das Anschlusskabel des Servos nach unten zeigt.
Schritt 4
Den Pfeil nun so an den Servo am Arm schrauben, dass dieser nach unten zeigt. Den Arm mit dem Servo in der Servobox so verschrauben, dass bei einer Ausrichtung Richtung Norden, der Arm nach Westen zeigt. (siehe Bild)


Nahaufnahme des Zeigers um die Position des Arms in den Nullstellungen des Servomotors zu zeigen.

Versuchsdurchführung

Achte auf eine saubere Eingabe der Namen der Himmelsobjekte (hier kleingeschrieben und auf englisch). Verwende einen Laser mit möglichst wenig Leistung und stecke ihn am besten erst am Ende an, sodass er nicht im Raum herumstrahlt.

Programmcode

Im Nachfolgenden ist der komplette Programmcode zur Ausrichtung des Pfeils aufgeführt:

import pyfirmata
import time
import astropy.units as u
import astropy.coordinates as coord
from astropy.coordinates import AltAz, EarthLocation, SkyCoord, solar_system_ephemeris
from astropy.time import Time
from datetime import datetime


standort = EarthLocation(lat=48.7758*u.deg, lon=9.1829*u.deg, height=260*u.m)   # Hier müssen der Breiten- und Längengrad vom aktuellen Standort in Grad angegeben werden (Aktuell Stuttgart)
time1 = Time(datetime.now(), format='datetime')                                 # Zeit aus dem PC
timeUTC = datetime.utcnow()

'Einrichten des Arduinos'
port = 'COM5'
board = pyfirmata.Arduino(port)

'Einrichten der Servo'
PinAlt = 9              #Servo für den Höhenwinkel
PinAz1  = 10            #oberer Servo für Azimut
PinAz2  = 11            #unterer Servo für Azimut
horizont = 88           #Ausgangsposition für den Winkel des Altitude-Servos, damit der Horizont=0° ist

ServoAlt = board.get_pin(f'd:{PinAlt}:s')
ServoAz1  = board.get_pin(f'd:{PinAz1}:s')
ServoAz2  = board.get_pin(f'd:{PinAz2}:s')

'Funktionen, die die Servos bewegen'
def rotate_alt(angle):               #Rotiert Altitude-Servo
    if angle >= 88:
        for i in range(horizont, angle+1):
            ServoAlt.write(i)
            time.sleep(0.015)        #Rotationsgeschwindigkeit, je größer die Zeit, umso langsamer rotiert der Servo
    else:
        for i in reversed(range(angle, horizont+1)):
            ServoAlt.write(i)
            time.sleep(0.015)

def reverse_alt(angle):              # Rotiert den Altitude-Servo wieder auf die Höhe des Horizonts
    if angle >= 88:
        for i in reversed(range(horizont, angle+1)):
            ServoAlt.write(i)
            time.sleep(0.015)        #Rotationsgeschwindigkeit, je größer die Zeit, umso langsamer rotiert der Servo
    else:
        for i in range(angle, horizont+1):
            ServoAlt.write(i)
            time.sleep(0.015)
            
def rotate_az(angle):                #Rotiert den Azimut-Servo in gewünschte Position
    if angle < 180:
        angleS1 = angle
        angleS2 = 0
    elif angle >= 180:
        angleS1 = 179
        angleS2 = angle - 179
    for i in range(angleS1 +1):
        ServoAz1.write(i)
        time.sleep(0.015)
    for j in range(angleS2 +1):
        ServoAz2.write(j)
        time.sleep(0.015)           #Rotationsgeschwindigkeit, je größer die Zeit, umso langsamer rotieren die Servos
    
def reverse_az(angle):              # Rotiert die Azimut-Servo wieder nach Norden      
    if angle < 180:
        angleS1 = angle
        angleS2 = 0
    elif angle >= 180:
        angleS1 = 179
        angleS2 = angle - 179
    for i in reversed(range(angleS1 +1)):
        ServoAz1.write(i)
        time.sleep(0.015)
    for j in reversed(range(angleS2 +1)):
        ServoAz2.write(j)
        time.sleep(0.015)

def ausrichten(variable):           #Abfrage was Angezeigt werden soll und durchführen der Rotationen
    i=0
    j=0
    try:
        while i==0:
            objekt = str(input("Bitte eingeben ob Planet (Eingabe 'Planet') oder Objekt aus SIMBAD (Eingabe 'SIMBAD') beobachtet werden soll:"))
            if objekt == 'Planet' :
                while j==0:
                    obj = str(input("Bitte Planetenname eingeben (engl. & kleingeschrieben):"))
                    if obj in solar_system_ephemeris.bodies:
                        body = coord.get_body(obj, time1)
                        j=j+1
                    else:
                        print("Falsche Eingabe. Bitte erneut eingeben")
                i = i+1
            elif objekt == 'SIMBAD' :
                obj = str(input("Bitte SIMBAD-identifier eingeben:"))
                body = SkyCoord.from_name(obj)
                i = i+1
                
        bodyaltaz = body.transform_to(AltAz(obstime=timeUTC, location=standort))
        altitude = int(bodyaltaz.alt.deg)
        azimuth = 360 - int(bodyaltaz.az.deg)
        rotate_alt(horizont + altitude)
        rotate_az(azimuth)
        
        print(f"Im Horizontsystem lauten die Koordinaten für das Objekt {obj}:")
        print(f"Der Höhenwinkel beträgt {altitude}°.")
        print(f"Das Azimut beträgt {int(bodyaltaz.az.deg)}°")
        reset = str(input("Soll ein weiteres Objekt betrachtet werden?(y/n):"))
        if reset == 'y':
            reverse_alt(altitude + horizont)
            reverse_az(azimuth)
            ausrichten(0)
        elif reset =='n':
            reverse_alt(altitude + horizont)
            reverse_az(azimuth)
            board.exit()
        
    except :
        board.exit()
 
'Mit dem folgendem Kommando wird das Program gestartet'
'Den Servo für den Höhenwinkel auf den Horizont ausrichten(0°)'

rotate_alt(horizont)
rotate_az(0)
ausrichten(0)


Mögliche Probleme und ihre Lösungen

Es werden hier 3 Servomotoren mit 180° benutzt, 2 für die horizontale Achse und einer für die vertikale Achse, für eine genauere Ansteuerung der Himmelsobjekte. Bei einem 360° Motor treten Probleme auf: - Er lässt sich nur über die Drehgeschwindigkeit und Zeitdauer in eine Richtung steuern. Diese sind nicht immer gleich und hängen von der Spannung ab, die der Arduino bekommt. - D.h. es können keinen genaue Winkel angesteuert werden und die Ausgangsposition ändert sich. Deswegen ist hier zu einem 360° Motor abzuraten.

Der Augbau kann etwas wackeln, wenn die Motoren sich bewegen. Hierzu entweder den Aufbau befestigen, ein Gegengewicht anfügen oder ihn groß genug drucken lassen.


Fotos

  • slide 1
        Kompletter Aufbau des Astronomozeigers.
    
  • slide 2
         Nahaufnahme des Astronomiezeigers.
    
88x31.png Universität Stuttgart, 5. Physikalisches Institut, AG Physik und ihre Didaktik, lizenziert unter CC BY-NC-SA 4.0