We bought our parachute today from Rocketman chutes. We bought a 4 foot chute which should make the payload descend quickly enough but not too fast. They have a great website. We also bought our balloon from Kaymont, which is a premier supplier of the Totex balloon from Japan. We used the habhub calc (see earlier post) to calculate that our 3 pound payload requires the 800g balloon to reach our target altitude of 100,000 feet.
1 Comment
so at long last, all the work we did on the arduino paid off. we found out that the Temp sensors work as well as the GPS. the temperature data is stored in one file and the GPS... you can guess.. is in another file! SUPRISE!! here is some temperature data for the same people who wanted to see the code:
E8 74.30 17 74.41 E8 74.30 17 74.41 E8 74.52 17 78.57 E8 74.52 17 84.76 E8 66.54 17 86.79 E8 49.32 17 88.14 E8 36.84 17 86.68 E8 34.25 17 85.44 E8 43.36 17 61.93 E8 75.65 17 39.43 E8 83.19 17 36.95 E8 86.79 17 36.05 E8 88.25 17 35.38 E8 and 17 are the 2 sensor IDs... i guess later we could name them somthing like "frank" or "Jim". The GPS data is stored exactly how it comes out of the GPS device. these are called NMEA sentences. this is a good way to store data because we can take it later and put it into google earth. more geeky data: $GPGGA,004251.00,4217.25610,N,08330.02461,W,1,03,1.98,252.4,M,-34.7,M,,*6A $GPGSA,A,2,29,12,06,,,,,,,,,,2.22,1.98,1.00*0E $GPGSV,2,1,08,05,,,34,06,42,063,33,12,49,247,31,19,,,35*76 $GPGSV,2,2,08,20,,,21461,W,004251.00,A,A*70 $GPRMC,004252.00,A,4217.25610,N,08330.02460,W,0.077,,170616,,,A*6C $GPVTG,,T,,M,0.077,N,0.143,K,A*25 $GPGGA,004252.00,4217.25610,N,08330.02460,W,1,03,1.98,251.9,M,-34.7,M,,*66 $GPGSA,A,2,29,12,06,,,,,,,,,,2.22,1.98,1.00*0E $GPGSV,2,1,07,05,,,35,06,42,063,31,12,49,247,32,19,,,35*79 $GPGSV,2,2,07,23,,,27,25,,,37,29,16,307,38*4A $GPGLL,4217.25610,N,08330.02460,W,004252.00,A,A*72 $GPRMC,004253.00,A,4217.25615,N,08330.02459,W,0.149,,170616,,,A*6E $GPVTG,,T,,M,0.149,N,0.277,K,A*2D $GPGGA,004253.00,4217.25615,N,08330.02459,W,1,03,1.98,252.0,M,-34.7,M,,*62 $GPGSA,A,2,29,12,06,,,,,,,,,,2.22,1.98,1.00*0E $GPGSV,2,1,07,05,,,36,06,42,063,30,12,49,247,33,19,,,35*7A $GPGSV,2,2,07,23,,,28,25,,,37,29,16,307,38*45 $GPGLL,4217.25615,N,08330.02459,W,004253.00,A,A*7C $GPRMC,004254.00,A,4217.25620,N,08330.02476,W,0.814,,170616,,,A*63 $GPVTG,,T,,M,0.814,N,1.508,K,A*22 $GPGGA,004254.00,4217.25620,N,08330.02476,W,1,03,1.98,253.0,M,-34.7,M,,*6F $GPGSA,A,2,29,12,06,,,,,,,,,,2.21,1.98,1.00*0D $GPGSV,2,1,07,05,,,35,06,42,063,30,12,49,247,33,19,,,34*78 $GPGSV,2,2,07,23,,,28,25,,,37,2,A*70 $GPRMC,004255.00,A,4217.25625,N,08330.02480,W,0.693,,170616,,,A $GPRMC,004256.00,A,4217.25635,N,08330.02481,W,0.300,,170616,,,A*63 $GPVTG,,T,,M,0.300,N,0.556,K,A*26 $GPGGA,004256.00,4217.25635,N,08330.02481,W,1,03,1.98,252.3,M,-34.7,M,,*63 $GPGSA,A,2,29,12,06,,,,,,,,,,2.21,1.98,1.00*0D $GPGSV,2,1,07,05,,,35,06,42,063,30,12,49,247,33,19,,,35*79 $GPGSV,2,2,07,23,,,28,25,,,36,29,16,307,37*4BW $GPRMC,004257.00,A,4217.25641,N,08330.02479,W,0.054,,170616,,,A*64 $GPVTG,,T,,M,0.054,N,0.100,K,A*23 $GPGGA,004257.00,4217.25641,N,08330.02479,W,1,03,1.98,252.0,M,-34.7,M,,*65 $GPGSA,A,2,29,12,06,,,,,,,,,,2.21,1.98,1.00*0D $GPGSV,2,1,07,05,,,34,06,42,063,30,12,49,247,31,19,,,35*7A $GPGSV,2,2,07,23,,,27,25,,,36,29,16,307,37*44 $GPGLL,4217.25641,N,08330.02479,W,004257.00,A,A*7B $GPRMC,004258.00,A,4217.25645,N,08330.02474,W,0.038,,170616,,,A*68 $GPVTG,,T,,M,0.038,N,0.071,K,A*2E $GPGGA,004258.00,4217.25645,N,08330.02474,W,1,03,1.97,252.0,M,-34.7,M,,*6C $GPGSA,A,2,29,12,06,,,,,,,,,,2.21,1.97,1.00*02 $GPGSV,2,1,07,05,,,33,06,42,063,30,12,49,247,31,19,,,35*7D $GPGSV,2,2,07,23,,,26,25,,,37,29,16,307,37*44 $GPGLL,4217.25645,N,08330.02474,W,004258.00,A,A*7D $GPRMC,004259.00,A,4217.25646,N,08330.02505,W,1.390,,170616,,,A*6D $GPVTG,,T,,M,1.390,N,2.575,K,A*2D $GPGGA,004259.00,4217.25646,N,08330.02505,W,1,03,1.97,252.5,M,-34.7,M,,*6C $GPGSA,A,2,29,12,06,,,,,,,,,,2.21,1.97,1.00*02 $GPGSV,2,1,07,05,,,34,06,42,063,29,12,49,247,32,19,,,34*70 here is about 5 seconds of data... and 7% of the 3 minute data. and also this is a little question for you guys: is data pronounced Dah-Tah or Day-Tuh? please tell me in the comments below :D so there are 2 things that the arduino is doing: #1 temp sensors #2 storing GPS locations now, you may be wondering "why dont they just use the phone for this?" well... its because we dont know if the phone can actually save data for the GPS and also it doesnt have enough memory (because its also taking pictures every 2 seconds.) and it cant communicate above 20,000 feet. so we did some work on the Arduino and we think we got it. also we bought a NEO6MV2 GPS module (only $12!!!) so this is basically what it looks like: we found a pretty good website that helped us do the wiring: http://arduinostuff.blogspot.com/2014/05/neo6mv2-gps-module-with-arduino-uno-how.html here is the whole thing... looks messy: This is the wiring diagram we followed from the website, except we had to wire the GPS software serial port to pins 3 and 5, since pin 4 is reserved for the SD card: we stol- i mean borrowed some code from the same website. it wasnt our code. we integrated it into our SD and temperature program... for some reason we think some people want to see it all... so here you go:
#include <OneWire.h> #include <SPI.h> #include <SoftwareSerial.h> #include <SD.h> /* This sample sketch demonstrates the normal use of a TinyGPS++ (TinyGPSPlus) object. It requires the use of SoftwareSerial, and assumes that you have a 9600-baud serial GPS device hooked up on pins 5(rx) and 3(tx). ** SD card attached to SPI bus as follows: ** MOSI - pin 11 ** MISO - pin 12 ** CLK - pin 13 ** CS - pin 4 */ static const int RXPin = 5, TXPin = 3; static const uint32_t GPSBaud = 9600; const int chipSelect = 4; long previousMillis = 0; // will store last time temps were updated long interval = 5000; // interval at which to read temps (milliseconds), [ 5 seconds to debug] 30 seconds OneWire ds(9); // on pin 9 (a 4.7K resistor is necessary) // The serial connection to the GPS device SoftwareSerial ss(RXPin, TXPin); void setup() { Serial.begin(115200); ss.begin(GPSBaud); Serial.println(); Serial.print("Initializing SD card..."); // see if the card is present and can be initialized: if (!SD.begin(chipSelect)) { Serial.println("Card failed, or not present"); return; } Serial.println("card initialized."); } void loop() // this is the main program loop – can add while( millis) to stop { unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) { // if at the interval, enter the temp loop previousMillis = currentMillis; byte i; byte present = 0; byte type_s; byte data[12]; byte addr[8]; float celsius, fahrenheit; if (ds.search(addr)) { // if there are still unpolled sensors, poll them and write temp data Serial.print(addr[7], HEX); // print last address byte of sensor reporting Serial.write(' '); if (OneWire::crc8(addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return; } // the first ROM byte indicates which chip type - this program is for DS18B20, so comment out case statement type_s = 0; /* switch (addr[0]) { case 0x10: Serial.println(" Chip = DS18S20"); // or old DS1820 type_s = 1; break; case 0x28: Serial.println(" Chip = DS18B20"); type_s = 0; break; case 0x22: Serial.println(" Chip = DS1822"); type_s = 0; break; default: Serial.println("Device is not a DS18x20 family device."); return; } */ // poll the temp sensor and get the temp data ds.reset(); ds.select(addr); ds.write(0x44); // start conversion, use ds.write(0x44,1) with parasite power on at the end delay(750); // maybe 750ms is enough, maybe not present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } // Convert the data to actual temperature // because the result is a 16 bit signed integer, it should // be stored to an "int16_t" type, which is always 16 bits // even when compiled on a 32 bit processor. int16_t raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; // 9 bit resolution default if (data[7] == 0x10) { // "count remain" gives full 12 bit resolution raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); // at lower res, the low bits are undefined, so let's zero them if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms // default is 12 bit resolution, 750 ms conversion time } celsius = (float)raw / 16.0; fahrenheit = celsius * 1.8 + 32.0; // Serial.print(" Temperature = "); // Serial.print(celsius); // Serial.print(" Celsius, "); Serial.print(fahrenheit); Serial.write(' '); // Serial.println(" Fahrenheit"); // open file on SD, write to it, and close immediately File dataFile = SD.open("tempdata.txt", FILE_WRITE); // if the file is available, write to it: if (dataFile) { dataFile.print(addr[7], HEX); // print last address word of sensor to show which sensors are reporting dataFile.write(' '); dataFile.print(fahrenheit); dataFile.write(' '); dataFile.close(); } } else { // in the event that you have read the last sensor close file and resume NMEA ds.reset_search(); Serial.println(""); File dataFile = SD.open("tempdata.txt", FILE_WRITE); // open SD datafile to write CR-LF dataFile.println(""); dataFile.close(); // write new line to file and close immediately delay(500); // delay before going back to NMEA return; } } // end while loop that processes temperatures // write NMEA sentences. Writes information every time a new sentence is available. File dataFile = SD.open("nmeadata.txt", FILE_WRITE); while (ss.available() > 0) { char c = ss.read(); Serial.write(c); dataFile.print(c); } dataFile.close(); } So we had some work to do with the Arduino to work with the Temperature sensors to read the temperature on the box a while back... the problem was that it wouldn't save what it saw with the sensors on the SD card. we tried running it but it wasn't working so we spent about 128746 hours looking for it in the code but since we were just acting like monkeys at the keyboard we didn't look at the wiring.. That was when we realized we wired the Data wire to the VCC wire... :( so least to say is that we let the smoke out of the sensors... However, Luckily we had more!!!! We also got a screw Shield for the Arduino that allows us to not use the Breadboard because it would take up 2 much space and the wires fall out... you can see the screw shield on the Arduino in the Picture above...^^^^
so now our "Flight Computer" has 3 different Circuit boards #1 Uno Arduino R3 #2 Ethernet Shield with SD card #3 Screw Shield The Ethernet Shield allows us to save data to a SD card. Next step: GPS (Global Positioning System) it was a dark and stormy nightNot really but it was a good day to work on our box!
We had to figure out how to attach string from the box, to the balloon and tucked in parachute. We thought we could have a tube going through one side of the box and peeking out the other side. we didn't do it because: 1. We would have to cut holes through the box which would let air in 2. the tube would have cold air running through it which would make the tube cold. This was bad because it would then make the BOX cold... We could not let it sit on the strings cause it would fall, DUHH... So we made notches on the outside of the box and put the tube in the notch and we glued it with White Gorilla Glue, BTW it is activated by water, which was cool. The tube was a faucet riser tube (which of course was only 3 bucks cause my dad is cheap :P). I'm sorry this seems to be going on forever but this is interesting! Ok so we need a box, right? so we have made one! It may or may not work like if worst-case scenario happends like the bottom falls off if it lands in a tree... we found some styrofoam and we measured it and cut it in the dimensions we wanted. The problem was that the piece of styrofoam was too thick so we had to cut it on both sides. We had to hot-glue the box together, the last piece was hard because we had to do 3 sides! When we were done, the box turned out pretty good but one side was too low for the lid to fit perfectly! I know what your thinking, the box might be too heavy for the balloon to go upward. We set a target of 330 grams in a earlier post. The box came in at 315 grams so we are happy about that! We also had to hit a certain size to make sure all our stuff fit; As you can see below we made it even bigger than perfect
Hey, we are back after taking time off to do Robofest. We couldn't do both because there was not enough of three things:
So this is our overall plan, or at least a list of things we gotta do:
so we need a pod for all of our stuff to go into... right? so we got the phone and the battery packs and the Arduino and put it in a box (this is not the box we are sending in space... this is just to test the size) that we thought might work. we set all the stuff into the little box and arranged it to be perfect... however it was to small and that was not to much of a problem because this was just a test box. we then placed all the stuff on a piece of paper and measured the dimensions and we figured out the right size: 17cm wide, 21cm long and 12cm high
We visited a local welding supply store called Matheson. We need helium to fill up the balloon so we had to find a store that was selling helium cheap. Welders use helium to help with their welding so the weld doesn't rust. The guys at Matheson were really nice. They were interested in our project. They agreed to sell us a 125 cubic foot cylinder of helium for a really good price. We recommend Matheson!
We then realized we needed to figure out if that was enough helium to fill the balloon. Our goal is to get to 100,000 feet altitude, or 30,500 meters. ---------------------------------------------------------------------------------------------------------------------- The two factors in altitude are payload and balloon size, so we needed to estimate the weight of the payload. We weighed all our parts: 330g 2 battery packs (android and arduino) 327g foam box 150g android phone 75g arduino with SD shield and screw shield 45g 2 temperature sensors 45g 2 hand warmers 40g rope 311g parachute (we weighed a shirt since we didn't buy it yet) 28g power cables for phone and arduino 15g GPS sensor for altitude, works with arduino without wifi 10g piezo buzzer so we can find it when down, works with arduino 1376g total -- or 3.05 lb This is a good weight because it has to be below 4 lbs per FAA regulations. Phew! ---------------------------------------------------------------------------------------------------------------------- We used the payload mass to figure out what balloon we needed to get to our target altitude. We went to http://habhub.org/calc/ and it told us we can use the Kaymont 800g balloon with 93.8 cubic feet of helium to get to our altitude! Our time to burst will be 142 minutes or 2 1/2 hours. It also told us how fast the balloon would rise. This is a really cool website. Looks like the plan is looking good!!! we got the arduino all together and got the temp sensors to talk to the arduino. we got two temperature sensors off our older brother. They are called DS18b20. It turns out they are not analog - they talk on a "one wire bus". We had to download some arduino code and installed a library called "One WIre". We didn't know how to write the fancy code to read the sensors, but we cut and pasted off someone else's website, and it worked! We tested them two cups of cold and hot water. We switched the sensors and they changed readings! and BONUS we got a SD card that kept track of the temps! we tested it and it worked. it took very long and many problems happend.
So we tried to code an app to make it where we could take photos (and send its location) with an android phone... one problem.... theres LOTS of problems... the app inventor does not take photos... instead it brings you to the camera. so we decided to download an app called LapseIt its a good app because you can set how long you want to wait for a photo to be taken, pics you wanna take, potato, etc. we tried it on my pet bird and our dog. it wasn't that amazing because our dog and bird dont do much... but i guess you could waste about 20 seconds of your life watching these:
https://play.google.com/store/apps/details?id=com.ui.LapseIt
For Christmas our brother got us an Arduino UNO R3 (an Arduino is a circuit board) and what do you suppose we got it for? well... what everyone wants to know... how COLD it is up there (its mostly around -60 degF)
REPEAT -60 (its not 960-) well we got a breadboard and some wires we can connect to the Arduino and some heat sensors. its interesting and is in code of C++. Its good besides the fact we dont even KNOW C++! We did a Blink program where it blinks an LED. You can also set the time of how long it turns on and how long it turns off. We also used a program to read a voltage from a resistor and show it on the laptop. We combined the programs so we were able to use the voltage - the voltage is how many seconds the LED turns on for. we got a All New Battery Bank just in case... Our phone already has 1850mAh. (milli amp hours is a measure of battery size) the bank has 6600mAh so its got more than 3 times the phone battery. we weighed it and it weighed 174g and the phone weighed 161g. so it basically doubled the weight. so its ok as long as it weighs under 2000g. the bank said that it can only work above 32F which is freezing. we expect to get as cold as -60F at very high altitudes. because it will be cold it wont give all the juice to the phone but luckly its lithium which is the best type of battery at low temp. it was at five below (the store) for five bucks. -Ezra
hi! this is Malachi. recently we got the phone we were using to track the balloon and where it lands. and honestly i don't think we can get anything better then this. we use a GPS to track where it lands and it was not that good at first because we could not see where we were (and by that i mean us... the car... not the balloon). but we figured out that we could turn the cords to google maps and it was wayyyyyy better.
tracking = "done" we activated our phone by using a sim card from target for 10$ (and using consumer cellular) (no IDW with MLA) We got our phone in the mail today! We also found a Great website for what we need: Phone Tracking! we are really happy we found what we need. It is called Real TIme GPS Tracker, and it is free on Android (it might be also available in the app store!). We also liked it because it was very customizeable and easy-to-use. <--- Ezra with the phone with the GPS tracker running We used the tracker to send the location of the Android phone, and it worked! We were able to see the location of the Android phone on a second device. We set it up to wake up GPS every 10 minutes to save batteries. Here is a picture of the screen:
|
AuthorMalachi and Ezra's page where we build cool stuff and either break it, set fire to it, etc. in the name of science. Archives
August 2019
Categories
All
|