To start off, I needed to know what this system would be able of doing. The very basics are to locate the position in the sky and stream this to Stellarium, allowing me to find out what I was looking at. After some research into the sky map co-ordinate systems, I found that I could determine the orientation of the telescope and combine this with the time and location to let me calculate the co-ordinates. This left me to think of how to do this.
Sensing the orientation of the telescope was the first task. I had a look at accelerometers and magnetometers and found an open source driver, I2CdevLib, for I2C devices that supported multiple brands of the sensors I wanted. I thought that the ability to support a variety of devices would allow anyone who wanted to build a system of their own a choice, be it the cheapest or just what they happened to have.
GPS was the choice for the time and location, maybe in future I can add support for GLONASS or other alternatives, but for now the open source support and availability of GPS made it more user friendly. The ubiquitous GPSD daemon for Linux was chosen as the driver for the GPS portion of the system. This allows the majority of GPS sensors to be plugged in and used behind the software API the library provides. Again the builder has the choice of what to use.
With the basic concept down, I considered how the system would be used and came up with a list of features:
motorised target tracking
Website Camera control
Website User interface and configuration
Website status output
Stellarium and other PC software integration
Telescope mounted movement controls
I'm intentionally designing the software to allow scope creep with the addition of new features through a website configuration system.
The uses at the moment can be summarised with the following:
Then I decided to split the software down in to parts, each with a well defined task. This can be seen in the UML design on the github.