Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.02 KB | None | 0 0
  1. import warnings
  2. import serial
  3. import serial.tools.list_ports
  4. import math
  5. import time
  6. from datetime import datetime
  7. import ephem
  8. import sys
  9. import urllib.request
  10. import os
  11. import argparse
  12.  
  13. def translate(val, oMin, oMax, nMin, nMax):
  14.     oSpan = oMax - oMin
  15.     nSpan = nMax - nMin
  16.     valMapped = float(val - oMin) / float(oSpan)
  17.     return nMin + (valMapped * nSpan)
  18.  
  19. parser = argparse.ArgumentParser(description='Write satellite\'s position on the sky over serial.')
  20. parser.add_argument('-sat', dest='sat',
  21.                     help='satellite name')
  22.  
  23. args = parser.parse_args()
  24.  
  25. file = "amateur.txt"
  26.  
  27. if os.path.exists('./' + file):
  28.     stat = os.stat('./' + file).st_mtime
  29.     if time.time() - stat > 86400:
  30.         urllib.request.urlretrieve("https://www.celestrak.com/NORAD/elements/" + file, file)
  31. else:
  32.     urllib.request.urlretrieve("https://www.celestrak.com/NORAD/elements/" + file, file)
  33.  
  34. tle = open('./' + file)
  35. tleArray = []
  36. i = 0
  37.  
  38. for line in tle:
  39.     if i > 0:
  40.         tleArray.append(line.rstrip())
  41.         i += 1
  42.  
  43.     if args.sat in line:
  44.         tleArray.append(line.rstrip())
  45.         i += 1
  46.  
  47.     if i > 2:
  48.         break
  49.  
  50. rad = 180.0 / math.pi
  51. home = ephem.Observer()
  52. home.lat = '52.3182'
  53. home.lon = '16.1283'
  54. home.elevation = 90
  55.  
  56. sat = ephem.readtle(tleArray[0], tleArray[1], tleArray[2])
  57.  
  58. arduino_ports = [
  59.     p.device
  60.     for p in serial.tools.list_ports.comports()
  61.     if 'Arduino' in p.description
  62. ]
  63.  
  64. if not arduino_ports:
  65.     raise IOError("No Arduino found")
  66. if len(arduino_ports) > 1:
  67.     warnings.warn('Multiple Arduinos found - using the first')
  68.  
  69. ser = serial.Serial()
  70. ser.baudrate = 9600
  71. ser.port = arduino_ports[0]
  72. ser.open()
  73.  
  74. print("sleeping")
  75. time.sleep(3)
  76. print("done")
  77.  
  78. x = 1
  79.  
  80. #
  81. # @ - az    move finished
  82. # % - alt   move finished
  83. #
  84.  
  85. response = ""
  86.  
  87. while True:
  88.     home.date = datetime.utcnow()
  89.     sat.compute(home)
  90.     if sat.alt * rad > 0:
  91.         print('alt %4.3f, az %5.3f' % (sat.alt * rad, sat.az * rad), end="\n")
  92.         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")
  93.         if x % 2 == 0:
  94.             ser.write('t%i\n'.encode() % -int(round(translate(sat.alt * rad, -90, 90, -120, 120))))
  95.             while True:
  96.                 response += str(ser.read())
  97.                 if "%" in response:
  98.                     response = ""
  99.                     print("ALT move finished")
  100.                     time.sleep(0.2)
  101.                     break
  102.         else:
  103.             ser.write('z%i\n'.encode() % int(round(translate(sat.az * rad, 0, 360, 0, 1200))))
  104.             print('z%i\n'.encode() % int(round(translate(sat.az * rad, 0, 360, 0, 1200))))
  105.             while True:
  106.                 response += str(ser.read())
  107.                 print(response)
  108.                 if "!" in response:
  109.                     response = ""
  110.                     print("AZ move finished")
  111.                     time.sleep(0.2)
  112.                     break
  113.         x += 1
  114.  
  115. ser.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement