Astronomiezeiger: Unterschied zwischen den Versionen

Aus Wiki Physik und ihre Didaktik
1>SOrth
Keine Bearbeitungszusammenfassung
K 15 Versionen importiert
 
(11 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:In Bearbeitung]]
[[Kategorie:Astronomie]]


<div class="row">
<div class="row">
Zeile 6: Zeile 6:
In diesem Projekt soll ein Zeiger gebaut werden, der die aktuelle Position verschiedener astronomischer Objekte am Himmel anzeigt.  
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.
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.
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__
== Schülervorstellungen, die hier relevant werden ==
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.


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


= Versuchsanleitung =


== Benötigtes Material ==
== Benötigtes Material ==


Folgende Materialien werden benötigt:
Folgende Materialien werden benötigt:
* Zusammengebauter Zeiger (keine Ahnung wie ich es sonst nennen soll???)
* Zeiger (möglicherweiße selbstbauen)
* Arduino Uno
* Arduino Uno
* kleines Steckbrett
* kleines Steckbrett
Zeile 32: Zeile 27:
* Laptop zum Programmieren
* Laptop zum Programmieren
* Arduino IDE (<b>[https://www.arduino.cc/en/software Link zur Arduino Software]</b>)
* 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>)
* Programm um mit Python zu arbeiten (Beispielsweise <b> [https://jupyter.org Jupyter]</b>)
* Laserdiode (optional)
* Laserdiode (optional)


== Aufbau Zeiger ==
 
 
== 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.
 
; 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.
 
</div>
</div>
 
 
== 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.  
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.  
Zeile 47: Zeile 65:
; 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 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. (Unklar??? evtl Bild.)
; 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)
 
 
[[Datei:BP Astrologiezeiger nah.JPG|600px|thumb|right||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:


== Aufbauanleitung ==
<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


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


<div class="row">
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)
  <div class="large-8 columns">
time1 = Time(datetime.now(), format='datetime')                                # Zeit aus dem PC
timeUTC = datetime.utcnow()


; Schritt 1 : Als erstes werden die Servomotoren mit de.
'Einrichten des Arduinos'
; 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.
port = 'COM5'
board = pyfirmata.Arduino(port)


</div>
'Einrichten der Servo'
  <div class="large-4 columns">
PinAlt = 9              #Servo für den Höhenwinkel
[[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]]
PinAz1 = 10            #oberer Servo für Azimut
  </div>
PinAz2  = 11            #unterer Servo für Azimut
</div>
horizont = 88          #Ausgangsposition für den Winkel des Altitude-Servos, damit der Horizont=0° ist


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


Beschreibe hier genauer was man zur Durchführung tun muss. Aus was muss dabei geachtet werden?
'Funktionen, die die Servos bewegen'
== Software ==
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)


Bevor der Astronomiezeiger über Python genutzt werden kann muss zunächst auf dem Arduino d
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)


== Programmcode ==
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)
</syntaxhighlight>




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




= 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 104: 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>

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