Introduction: Cubesat
CubeSats provide a cost effective platform for science investigations, new technology demonstrations and advanced mission concepts using constellations.The standard CubeSat size uses a "one unit" or "1U" measuring of 10x10x10 cms.
In physics, we have been building a model CubeSat that will travel to Mars and collect data on the climate. We have programmed and wired an Arduino, designed and built a CubeSat, and used the principles of circular and gravitational motion. Our class goal is to learn how to design, build and program a model of a Mars Orbiter, that will collect data & inform us on specific aspects of the planet.
Some of the criteria we were faced with are: the Cubesat with Arduino to weigh less than 1.3Kg, have a 10X10X10 cm Cubesat, protect Arduino, sturdy structure, collect data. The constraints we were faced with were cost, supplies, size & weight and unpredictability of the Arduino collecting data and the Cubesat staying in tack during a shake test.
My group, the CUTEsats, programmed our Arduino to measure the climate specifically the temperature of Mars atmosphere. This will allow us to analysis the temperatures to see if its suitable for human life in the future.
Step 1: Materials
List of parts used for Arduino:
- Arduino UNO- https://store.arduino.cc/usa/arduino-uno-rev3
- RGB LED- https://www.adafruit.com/product/159
- Thermistor- https://www.adafruit.com/product/159
- 220k resistors x3 - https://www.adafruit.com/product/159
- 10,000k resistors x1 - https://www.adafruit.com/product/159
- Breadboard- https://www.adafruit.com/product/159
List of parts used for Cubesat:
- 3D printing filament
- Zipties
- Program for Cubesat design
Step 2: Tools & Safety Practices
Tools:
- File
- Wire cutters
- 3D printer
- Zipties
- Velcro
- Exacto knife
Safety Practices:
- Googles
- Cutting mat
- Working at a clean space
- Being careful
- Supervision by teacher
Step 3: How to Build a Cubesat & Wire an Arduino
Step by step instructions:
Cubesat:
- Find a 3D file of Cubesat that would be printed
- Connect the computer to printer & get it started
- Cut out supports and put together
Arduino:
- Download Arduino IDE
- Wire up breadboard accordingly
- Copy sketch to IDE and upload to Arduino
- Make sure the Arduino, breadboard, and battery fit in Cubesat.
Step 4: Code for Arduino
<p>// which analog pin to connect<br>#define THERMISTORPIN A0 // resistance at 25 degrees C #define THERMISTORNOMINAL 10000 // temp. for nominal resistance (almost always 25 C) #define TEMPERATURENOMINAL 25 // how many samples to take and average, more takes longer // but is more 'smooth' #define NUMSAMPLES 5 // The beta coefficient of the thermistor (usually 3000-4000) #define BCOEFFICIENT 3950 // the value of the 'other' resistor #define SERIESRESISTOR 10000 </p><p>int redPin = 11; // Red Leg of LED, connected to digital pin 11 int grnPin = 10; // Green Leg of LED, connected to digital pin 10 int bluPin = 9; // Blue Leg of LED, connected to digital pin 9 uint16_t samples[NUMSAMPLES]; void setup(void) { Serial.begin(9600); analogReference(EXTERNAL);</p><p> pinMode(redPin, OUTPUT); // Sets the LED pins as outputs pinMode(grnPin, OUTPUT); pinMode(bluPin, OUTPUT); } void loop(void) { uint8_t i; float average; // take N samples in a row, with a slight delay for (i=0; i< NUMSAMPLES; i++) { samples[i] = analogRead(THERMISTORPIN); delay(10); } // average all the samples out average = 0; for (i=0; i< NUMSAMPLES; i++) { average += samples[i]; } average /= NUMSAMPLES; Serial.print("Average analog reading "); Serial.println(average); // convert the value to resistance average = 1023 / average - 1; average = SERIESRESISTOR / average; Serial.print("Thermistor resistance "); Serial.println(average); float steinhart; steinhart = average / THERMISTORNOMINAL; // (R/Ro) steinhart = log(steinhart); // ln(R/Ro) steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro) steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To) steinhart = 1.0 / steinhart; // Invert steinhart -= 273.15; // convert to C Serial.print("Temperature "); Serial.print(steinhart); Serial.println(" *C"); delay(1000);</p><p> if((steinhart) >= 26.2) { digitalWrite(redPin, HIGH); // red delay(100); digitalWrite(grnPin, LOW); digitalWrite(bluPin, LOW); } if(((steinhart) < 26) && (steinhart)>= 23.2) { digitalWrite(redPin, HIGH); // yellow digitalWrite(grnPin, HIGH); delay(100); digitalWrite(bluPin, LOW); } if(((steinhart) < 23) && (steinhart) > 20.2) { digitalWrite(grnPin, HIGH); // green delay(100); digitalWrite(redPin, LOW); digitalWrite(bluPin, LOW); } if(((steinhart) < 20) && ((steinhart) > 17.2)) { digitalWrite(grnPin, HIGH); // aqua digitalWrite(bluPin, HIGH); delay(100); digitalWrite(redPin, LOW); } if((steinhart) <= 17) { digitalWrite(bluPin, HIGH); // blue delay(100); digitalWrite(grnPin, LOW); digitalWrite(redPin, LOW); } }</p>
Step 5: Lessons Learned
Physics applied & used:
- Circular motion and gravitational forces
Issues/problems encountered and troubleshooting:
- Finding the right code and wiring for the Arduino
- Finding a good 3D design to fit and protect the Arduino
- Adjusting code to make sure the color displayed the right temperature
Advice for others who wish to do this project:
- 3D print it so that the measurements will be right
- Don't procrastinate on the building and programming
Step 6: Preliminary Tests
Flight Test:
- had to withstand orbiting Mars for 30 seconds, this stimulated a Cubesat in space
Vibration Test:
- had to withstand 25 volts of force for 30 seconds, this stimulated a Cubesat in a rocket launching into space
Step 7: Results
- First picture is the color scale for our LED, to show changes in temperature
- Second is the graph of date from the final flight of the CubeSat. The heat source in Mars didn't effect the temperature very much. The thermistor did not pick up the heat from Mars, so the atmosphere temperature seems suitable for human life so far.