So, I am a student at a public high school in northern Virginia. I was able to work on a NRL (Naval Research Laboratories) project, project ANDE. So I introduced my mentor to Arduino and he was like, well this makes everything easier to develop with. I am proud to announce Arduino is going into space.
In this case it just controls the payload boards. I designed the accelerometer payload and some other members worked on the gyroscope payload, both using an atmega168.
Currently we are working on a cube sat. This sat will be all arduino. there will probably be a library released that does radio communication with arduino.
just so we are clear, we use the Arduino boot loader in space. Of course we designed our own boards :3
I should write a full article on this later.
But, I think this will be the first ARDUINO IN SPACE!
On this mission, it simply reads serial from the main processor and returns information from the accelerometers. There are three accelerometer on the perimeter of the satellite measuring the acceleration towards the center. Originally we were going to calculate the RPM live on the processor, but we ran out of time trying to solve the equation. Oh yea, we are using this to find out the RPM of the satellite and center of rotation.
Now that I think about, the main board on Pollux probably has the arduino boot loader too.
The overall goal of the project is this.
Provide Total Atmospheric Density for Orbit Determination and Collision Avoidance
Validate Fundamental Theories on the Calculation of the Drag Coefficient
Provide Calibration Objects for SSN
Establish a Method to Validate Neutral/Ion Density and Composition Derived from DMSP Sensors
Space to Ground Optical Communication Experiment
Number 2 is a big one.
Also, Pollux is testing how well commercially available devices (sensors) work in space. In this case the accelerometers I picked out for it is as fallows.
The SCA610 from VTI. The 10bit A/D converter on the atmega168 gives us about a 3 RPM accuracy, but higher do to my sampling.
I also used the arduino environment to control our high school ground station. The device I made is the Goldberg-1000. Uses USB serial communication and a series of mosfets to control motor rotation. It is accurate within 2 degrees. Future one will use UDP/IP to control it, this board will be quite a challenge. NRL decided to fund these boards, seeing they are the best on the market :), I am only 17, hehe
Here is the Goldberg-1000
Here is the Schematic of the Payload.
I could ask 1000 questions because I find it very interesting what you did. Maybe my two most important questions:
Did you write sketches with the Arduino IDE or did you only use the bootloader to upload program that you wrote in C or assembler? I mean will a digitalWrite() line of code be in space?
Can you explain the space to earth communication? What kind of signal is used, how does the receiver look like and what tasks does Goldberg-1000 have?
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 "? >"
Request current AZ, EL:
Command: "C2?"
Response: "+0aaa+0eee"
where aaa = azimuth (000 to 450), eee = elevation (1 to 180)
Position the antenna to AZ, EL:
Command: "Waaa eee", where aaa = azimuth (000 to 450) and eee=elevation (000 to 180)
Response: ""
Cancel current command execution:
Command: "S"
Response: ""
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...
The satellite will be low orbit, 350 km out and will be up for a year until it burns back to earth.
It will launch from Florida on the shuttle. You can contact it with a UHF FM Radio. 400Mhz and 100Mhz range. If you have this equipment send me a message.
So, arduino in space...
Yes, the G1000 software will interface with predict.
I will come out with a few bits of software, for predict, gpredict, and a perl module.
Right now I can manual control the g1000 by using cat.
I do plan to release further details later, possibly get a published article.
I can tell you the cost and features.
the Goldberg-1000 will sell for about $50 a pop, mainly due to the cost of manufacturing boards
It uses a FTDI232R USB serial ship, so it shows up as a USB serial interface in Windows, Mac, And Linux with kernels 2.4 and newer I believe. It has over voltage protection on the sample pins.
It is really small, 1 inch by 1 inch and a half roughly.
If you would like to help with the computer programs that is fine, they will be under the GPL License, not sure which one yet.
Project looks really cool! I used to work with NRL and know several employees there - which code is sponsoring this? Again, congrats and let us know when she flies!
It would be great if you could tell us more about the data format that you broadcast.
We have a ground station at the university that tracks satellites and ISS. Maybe they can try to receive your data and introduce me to this topic as I have never done anything with 2m or 70cm radio.
What kind of payload will the satellite broadcast?
Bah, anyways next I will build an Ethernet version, tough I might use an ARM.
I am already working on a cube sat using arduino and a payload for a 2 mile high rocket launch.
On my agenda is also a CAN bus or I2c bus H-bridge for an electric go-cart.
Possibly an ac-relay box for Christmas lights :3
Anyways, I have a lot planned. Stay tuned!
This is great. I have been playing with arduino, and AVR's in general for a while now. I am also a licensed amateur radio operator. Go and get your license, it's a lot of fun. Keep us all posted on the details of this project, I would love to make contact with the satellite.