NRL Satellite (ARDUINO IN SAPCE!)

Yes, i used the arduino libraries and the code was written in the java IDE. I mean, it is just so easy to use digitalWrite() and AnalogRead() :3

The communications are done over UHF FM radio. It is a standard, I haven't got much into this yet because of how complicated RF electronics are, but i am learning little by little, I am applying for my radio license now so I can use the equipment at school.

The radio on the satellite is a 1/2 watt radio, and the antenna is the body of the satellite. The ground station is a Dual Band, Yagi antenna. We use a YAESU - FT-8800R radio in our ground station and a YAESU G-5500 Rotor. Anyone can communicate with the satellites, in fact, if anyone has a ground station, we would like to talk to you.

The Goldberg-1000 I came up with because of a device I saw designed that hurt a little to look at. It was a board with read relays to control the g-5500. The g-5500 has pins on the back that allow you to control the rotors and outputs a linear voltage relating to the angle of the motors/antenna. I realized how easy it would be to make a cheep little board to control it. So i started designing it on my own for fun. I showed it to my mentor, Ivan Galysh, and he said, cool. He said that it was better then any of the other boards on the market, What makes it appealing is how small it is. In fact, i planned on it to be inline, but that is to expensive to produce when i can put it in a simple project box.

The code for the Goldberg-1000 uses the arduino libraries too. It has some cool code to it, I suppose I could post it. It has self-calibrating system that finds out the min and max range of the voltage coming back from the motors, and throws an error if the motors voltage range is to small for the device to be accurate. (you can control the voltage range on the outputs on the g-5500). And there is 5.1 volt diode to ground to prevent damage to the atmega168. The calibration takes about 2 minutes to complete. I learned to use interrupts and the timers on board in order to do timeouts when reading serial data, because it is bad when your moving an antenna for your program to hang :X

So yea, the g-5500 interfaces with a program on the computer, (that am currently working on), the send it a command to move the antenna to a position.

I'm using "" to bracket everything that would be sent to the G-1000,
is carriage-return (Hex value of '0x0D')
is line feed (Hex value of '0x0A)
All other data is ASCII

Any error condition will return the ASCII string "? >"

  1. Request current AZ, EL:
    Command: "C2?"
    Response: "+0aaa+0eee"

where aaa = azimuth (000 to 450), eee = elevation (1 to 180)

2. Select Azimuth Rotator Turning Speed:
~~ Command: "Xn", where n=1 (slowest), 4 (fastest)~~
~~ Response: ~~

  1. Position the antenna to AZ, EL:
    Command: "Waaa eee", where aaa = azimuth (000 to 450) and eee=elevation (000 to 180)
    Response: ""

  2. Cancel current command execution:
    Command: "S"
    Response: ""

  3. Reset G-1000: (Reset the G-1000)
    Command: "R"
    Response: ""

Calibrate command is not listed because, well he didn't realize you needed it.

Now then, we have programs that give us satellite locations. My program will couple in with it and allow to select a USB serial device (IE: the g-5500) and move the antenna to the position relative to the satellite you want to pick!

FEW, that was a lot to say. Any more questions on that?

Oh yea, anyone know how I can store a float into the EEPROM?
I have this

void save() {
  char *ptr;
  int i;

  ptr = &CalConf.EL;
  for (i = 0; i < 4; i++) 
     EEPROM.write(i,prt+i);

  ptr = &CalConf.AZ
  for (i = 0; i < 4; i++)
     EEPROM.write((i+4),prt+i);
}

But avr-gcc does not like compiling it, This is for saving the calibration

The Final G-1000 - revision 7.
I have made changes to this, but it gives you an idea...