I am trying to learn about how to talk to satellites and the ARISS via ham radio. What I am wondering is if there is an audio feature I can access for the azimuth. In the sun, I cannot really see the images on the laptop that well, so this would be helpful. I use Gpredict for a satellite tracking program. Any suggestions are always helpful, thank you very much in advance.
I just wrote you one.
One of the things Gpredict can do is control antenna rotators (via the hamlib driver library). In this case, you're the rotator, but hamlib can't handle that (as far as I know), so instead we'll use a program that pretends to be hamlib (more precisely, pretends to be
Setup instructions (I'm going to assume you're on a unixy system and somewhat comfortable with it; if not I recommend finding someone to help you in person):
- Install Twisted, a Python library I used. It should be available through your favorite package manager as well as from their site.
- Install some text-to-speech software if you don't have any already.
- Change the line
COMMAND = 'say'in my program to refer to whatever command your text-to-speech software uses (I hear
spd-sayare some other names;
sayis the command on Mac OS X).
- In Gpredict, go to Edit → Preferences → Interface → Rotators → Add New. Put in some name or other and leave the rest of the settings alone.
- Start my program.
- In the "module options" menu accessed by the little button in the upper-right corner of the main window, select Antenna Control. In the Antenna Control window:
- Set the Cycle and Tolerance values to control how often it speaks.
- Click the Engage button.
- Choose your target and click the Track button.
#!/usr/bin/env python import os from twisted.internet import protocol, reactor, endpoints from twisted.protocols.basic import LineReceiver COMMAND = 'say' class RotctlEmulator(protocol.Protocol): def __init__(self): self.az = 0.0 self.el = 0.0 self.__line_receiver = LineReceiver() self.__line_receiver.delimiter = '\n' self.__line_receiver.lineReceived = self.__lineReceived def dataReceived(self, data): self.__line_receiver.dataReceived(data) def __lineReceived(self, line): if line == 'p': self.transport.write('%.6f\n%.6f\n' % (self.az, self.el)) elif line.startswith('P'): _p, azstr, elstr = line.split() new_az = float(azstr) new_el = float(elstr) self.transport.write('RPRT 0\n') self.update(new_az, new_el) else: print 'unrecognized:', line def update(self, new_az, new_el): # round to degrees new_az = int(round(new_az)) new_el = int(round(new_el)) if self.az != new_az or self.el != new_el: os.spawnlp(os.P_NOWAIT, COMMAND, COMMAND, '%s %s' % (new_az, new_el)) self.az = new_az self.el = new_el class Factory(protocol.Factory): def buildProtocol(self, addr): return RotctlEmulator() endpoints.serverFromString(reactor, 'tcp:4533:localhost').listen(Factory()) reactor.run()