Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import warnings
- import serial
- import serial.tools.list_ports
- import math
- import time
- from datetime import datetime
- import ephem
- import sys
- import urllib.request
- import os
- import argparse
- def translate(val, oMin, oMax, nMin, nMax):
- oSpan = oMax - oMin
- nSpan = nMax - nMin
- valMapped = float(val - oMin) / float(oSpan)
- return nMin + (valMapped * nSpan)
- parser = argparse.ArgumentParser(description='Write satellite\'s position on the sky over serial.')
- parser.add_argument('-sat', dest='sat',
- help='satellite name')
- args = parser.parse_args()
- file = "amateur.txt"
- if os.path.exists('./' + file):
- stat = os.stat('./' + file).st_mtime
- if time.time() - stat > 86400:
- urllib.request.urlretrieve("https://www.celestrak.com/NORAD/elements/" + file, file)
- else:
- urllib.request.urlretrieve("https://www.celestrak.com/NORAD/elements/" + file, file)
- tle = open('./' + file)
- tleArray = []
- i = 0
- for line in tle:
- if i > 0:
- tleArray.append(line.rstrip())
- i += 1
- if args.sat in line:
- tleArray.append(line.rstrip())
- i += 1
- if i > 2:
- break
- rad = 180.0 / math.pi
- home = ephem.Observer()
- home.lat = '52.3182'
- home.lon = '16.1283'
- home.elevation = 90
- sat = ephem.readtle(tleArray[0], tleArray[1], tleArray[2])
- arduino_ports = [
- p.device
- for p in serial.tools.list_ports.comports()
- if 'Arduino' in p.description
- ]
- if not arduino_ports:
- raise IOError("No Arduino found")
- if len(arduino_ports) > 1:
- warnings.warn('Multiple Arduinos found - using the first')
- ser = serial.Serial()
- ser.baudrate = 9600
- ser.port = arduino_ports[0]
- ser.open()
- print("sleeping")
- time.sleep(3)
- print("done")
- x = 1
- #
- # @ - az move finished
- # % - alt move finished
- #
- response = ""
- while True:
- home.date = datetime.utcnow()
- sat.compute(home)
- if sat.alt * rad > 0:
- print('alt %4.3f, az %5.3f' % (sat.alt * rad, sat.az * rad), end="\n")
- print('t%i z%i' % (-int(round(translate(sat.alt * rad, -90, 90, -120, 120))), int(round(translate(sat.az * rad, 0, 360, 0, 1200)))), end="\n")
- if x % 2 == 0:
- ser.write('t%i\n'.encode() % -int(round(translate(sat.alt * rad, -90, 90, -120, 120))))
- while True:
- response += str(ser.read())
- if "%" in response:
- response = ""
- print("ALT move finished")
- time.sleep(0.2)
- break
- else:
- ser.write('z%i\n'.encode() % int(round(translate(sat.az * rad, 0, 360, 0, 1200))))
- print('z%i\n'.encode() % int(round(translate(sat.az * rad, 0, 360, 0, 1200))))
- while True:
- response += str(ser.read())
- print(response)
- if "!" in response:
- response = ""
- print("AZ move finished")
- time.sleep(0.2)
- break
- x += 1
- ser.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement