| #!/usr/bin/python3 | |
| import ephem | |
| import picamera | |
| import time | |
| import datetime as dt | |
| from math import degrees, radians, cos, sin, asin, sqrt | |
| time_format = "%d/%m/%Y %H:%M:%S" | |
| name = "ISS (ZARYA)" | |
| line1 = "1 25544U 98067A 18015.76213144 .00002375 00000-0 42846-4 0 9998" | |
| line2 = "2 25544 51.6430 58.5835 0003578 19.8447 92.3735 15.54313934 94810" | |
| def haversine(lon1, lat1, lon2, lat2): | |
| """ | |
| Calculate the great circle distance between two points | |
| on the earth (specified in decimal degrees) | |
| """ | |
| # convert decimal degrees to radians | |
| lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2]) | |
| # haversine formula | |
| dlon = lon2 - lon1 | |
| dlat = lat2 - lat1 | |
| a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2 | |
| c = 2 * asin(sqrt(a)) | |
| r = 6371 # Radius of earth in kilometers. Use 3956 for miles | |
| return c * r | |
| iss = ephem.readtle(name, line1, line2) | |
| cam = picamera.PiCamera() | |
| cam.annotate_background = picamera.Color('black') | |
| cam.annotate_text_size = 50 | |
| target_lat = 53.349805 | |
| target_long = -6.260310 | |
| image_range = 208 # km | |
| while True: | |
| iss.compute() | |
| iss_lat = degrees(iss.sublat) | |
| iss_long = degrees(iss.sublong) | |
| dist = haversine(iss_long, iss_lat, target_long, target_lat) | |
| print(dist) | |
| if dist < image_range: # take pictures | |
| print("Target in range, taking picture") | |
| cam.start_preview() | |
| time.sleep(5) # give time for camera to adjust to light level | |
| cam.annotate_text = dt.datetime.now().strftime(time_format) | |
| cam.capture("%s.jpg" % round(time.time())) | |
| cam.stop_preview() | |
| time.sleep(1) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment