Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
#!/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
You can’t perform that action at this time.