Benutzer-Werkzeuge

Webseiten-Werkzeuge


teleskop_steuerung_fuer_c8

Dies ist eine alte Version des Dokuments!


-

Teleskop Steuerung für C8-Celestron

Teleskop Steuerung für die Great Polaris – DX Montierung

Was kann die Steuerung

Die Steuerung bildet alle Funktionen der Handsteuerbox nach.

Die zusätzlichen Erweiterungen sind;

  • Computer gesteuert
    • INDI-Linux ermöglicht die Anbindung an alle INDI-Clients (KStart, Carte de Ciel, Stellarium…)
  • Tracking Es werden weitere Tracking-Arten unterstützt.
    • Individuell Individuelle Nachführung einstellbar

Die Steuerung ist eine Minimal-Steuerung, die allerdings (leicht) erweitert werden könnte (wenn man ein wenig Zeit hat):

Das kann die Steuerung (noch) nicht:

  • Encoder die Schrittmotoren haben keine Encoder, um die genaue Position der Koordinaten zu kennen (RA/DEC)
  • Park/Unpark die Montierung (Steuerung) hat kein Park/Unpark Feature
  • Die Montierung bewegt sich nicht (es werden die Originalen Schrittmotoren (inkl. Übersetzung) verwendet) besonders schnell.

Teleskope mit Linux steuern

Es gibt (man ahnt es schon) natürlich mehrere Möglichkeiten, um ein Teleskop mit Linux zu steuern. Voraussetzung ist immer eine Steuerelektronik zwischen Linux und dem Teleskop. Mikrocontroller sind immer die erste Wahl, wenn diese Elektronik noch nicht vorhanden ist, und deshalb im Eigenbau gefertigt wird.

Der Bau einer Elektronik wird unten beschrieben, um das Teleskop zum Leben zu erwecken wird Software benötigt.

Folgende Ansätze bieten sich an:

  1. Entwicklung einer eigenen Software (für die Elektronik und Linux) um das Teleskop anzusprechen
    • Vorteil: Schreiben der Mikrocontroller Software geht am einfachsten.
    • Nachteil: Es ist notwendig auch die Client-Software für Linux zu entwickeln. Man kann in der Regel nur seine Eigene Software zur Steuerung des Teleskops verwenden, d.h. vorhandene Linux-Software kann nicht verwendet werden.
  2. Entwicklung einer eigenen Software für den Mikrocontroller der ein bereits bekanntes Teleskop-Protokoll spricht, so dass Linuxsoftware die dieses Protokoll unterstützt verwendet werden kann.
    • Vorteil: Vorhandene Linux-Clients (KStars, Stellarium,…) kann verwendet werden.
    • Nachteil: Das verwendete Protokoll muss bekannt und verstanden worden sein. Falls sich die Schnittstelle zukünftig ändert, muss immer auch die Mikrocontroller-Software angepasst werden.
  3. Entwicklung eins INDI-Treibers (auf der Linux-Seite) um den Mikrocontroller anzusprechen. Dies ist die professionelle Methode.
    • Vorteil: Alle Linux Programme, die die INDI-Schnittstelle unterstützen können verwendet werden
    • Nachteil: Gute Linux Kenntnisse sowie solide C++ Kenntnisse sind für die Treiberdentwicklung notwendig. Kann auch als Vorteil gesehen werden, da mit sich in die Materie einarbeiten darf ;-)

Bau und Inbetriebnahme der Steuerung

Simulation mit Java

1. Virtuelle serielle Schnittstelle erzeugen

socat -d -d PTY,link=/dev/ttyUSB60 PTY,link=/dev/ttyUSB61

2.Rechte setzen

# chmod 777 /dev/ttyUSB6*

3. Testen

i) Konsole

echo ":GD#" > /dev/ttyUSB60

Simulator.java sollte Nachricht anzeigen!

ii) Stellarium

lx200 Teleskop einrichten mit /dev/ttyUSB60 als Device

Die Schnittstelle muss häufig neu eingerichtet werden (schritte 1 + 2 ).

package test;
 
import com.fazecast.jSerialComm.SerialPort;
 
public class Test01 {
 
	public static void main(String[] args) {
		SerialPort comPort = SerialPort.getCommPorts()[2];
		comPort.openPort();
		comPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 100, 0);
		try {
			while (true) {
				byte[] readBuffer = new byte[1024];
				int numRead = comPort.readBytes(readBuffer, readBuffer.length);
 
				if (numRead > 0) {
					plot(numRead, readBuffer);
 
					if(getRADEC(numRead,readBuffer)){
						System.out.println("received radec messgage");
						writeRADEC(comPort);
					}
					if (isGetRA(numRead, readBuffer)) {
						System.out.println("received ra messgage");
						writeRa(comPort);
					}
					if (isGetDec(numRead, readBuffer)) {
						System.out.println("received dec messgage");
						writeDec(comPort);
					}
					//
				}
				Thread.sleep(100);
 
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		comPort.closePort();
 
	}
 
	static void plot(int numRead, byte[] readBuffer) {
		System.out.println("Read " + numRead + " bytes.");
 
		for (int i = 0; i < numRead; i++) {
			char c = (char) readBuffer[i];
			System.out.print(c);
		}
		System.out.println("");
	}
	static boolean getRADEC(int num, byte[] readBuffer) {
		char c[] = new char[num];
		if (readBuffer.length < 1)
			return false;
 
		for (int i = 0; i < num; i++) {
			c[i] = (char) readBuffer[i];
 
		}
 
		if (c[0] == 'e' ) {
			return true;
		}
 
		return false;
	}
 
	static void writeRADEC(SerialPort p) {
 
		String str = "34AB0500,12CE0500#";
		byte[] buffer = new byte[18];
		byte[] byte_str = str.getBytes();
		for (int i = 0; i < 18; i++)
			buffer[i] = byte_str[i];
 
//		buffer[9] = 0x0D;
//		buffer[10] = 0x0A;
 
		p.writeBytes(buffer, (long) buffer.length);
	}
 
 
 
 
 
 
 
 
	static boolean isGetRA(int num, byte[] readBuffer) {
		char c[] = new char[num];
		if (readBuffer.length < 4)
			return false;
 
		for (int i = 0; i < num; i++) {
			c[i] = (char) readBuffer[i];
 
		}
 
		if (c[0] == '#' && c[1] == ':' && c[2] == 'G' && c[3] == 'R' && c[4] == '#') {
			return true;
		}
 
		return false;
	}
 
	static boolean isGetDec(int num, byte[] readBuffer) {
		char c[] = new char[num];
		if (readBuffer.length < 4)
			return false;
 
		for (int i = 0; i < num; i++) {
			c[i] = (char) readBuffer[i];
 
		}
 
		if (c[0] == '#' && c[1] == ':' && c[2] == 'G' && c[3] == 'D' && c[4] == '#') {
			return true;
		}
 
		return false;
	}
 
	static void writeRa(SerialPort p) {
 
		String str = "14:15:00#";
		byte[] buffer = new byte[9];
		byte[] byte_str = str.getBytes();
		for (int i = 0; i < 9; i++)
			buffer[i] = byte_str[i];
 
//		buffer[9] = 0x0D;
//		buffer[10] = 0x0A;
 
		p.writeBytes(buffer, (long) buffer.length);
	}
 
	static void writeDec(SerialPort p) {
		String str = "+19*10#";
		//"%c%02d%c%02d:%02d#"
		byte[] buffer = new byte[7];
		byte[] byte_str = str.getBytes();
		for (int i = 0; i < 7; i++)
			buffer[i] = byte_str[i];
//
//		buffer[7] = 0x0D;
//		buffer[8] = 0x0A;
 
		p.writeBytes(buffer, (long) buffer.length);
	}
 
}

DIY Teleskop-Steuerung

teleskop_steuerung_fuer_c8.1561368719.txt.gz · Zuletzt geändert: 2020/11/22 16:51 (Externe Bearbeitung)