in the upper atmosphere it gets -60F above 10,000 meters, So we need to counter act the cold with the epic powers of the handwarmer. we got our awesome box and we then put the arduino and wiring and handwarmers X2. we sealed it like it was going on a flight. so how do we test it? well almost everyone can! so we put it in our freezer and pluged it in (to power arduino) and we were off! i like to spell in big wordswe took the data of the arduino after 4 hours. the freezer is at about 0F AKA of and the inside was about 55F. yey good news!
0 Comments
well theres not much to say about tying knots... theres only pictures... so... uh... i dont know... just stare at these for about 4 hours and your for sure going to be dead... so... yey we also had to test the parachute... so... what do you think we did??? yes... well if you thought we thrown it off our roof... then your right... we dont think mom saw the video yet... so we dont know if shes mad at dad for doing that. The Parachute worked, Dad didnt fall off the roof, the box didnt get damaged, and we had tacos that night. AKA big success.
With the Arduino (Flight Computer) soldered up we connected the cell phone power bank and let it log GPS and temperature for 6 hours. When we looked at the data on the SD card, it was all chinese characters - honestly! The files were messed up. This made us think that the program got goofy after running a long time. THen we checked the voltage on the power bank and it was down to 3.4 V so the Arduino got unstable. We thought we could use a new battery pack and drove to Electronic Connection (Westland). It was closed so we went to Radio Shack and bought a 8-cell AA holder and loaded it with Energizer Lithium AA batteries. WIth 8 cells it had 14 volts! We connected Dad's multimeter and measured 300 mA of current. When we took two batteries out it dropped to 10 volts and we still measured 330 mA! So we decided to only use 6 batteries. We connected it so the current still flowed because the holder needs 8 to work. We checked the battery stats at: http://data.energizer.com/PDFs/l91.pdf and it looks like we can get 10 hours out of these batteries if they stay warm, and 5 hours if they get really cold. So we need to hand warmers to do a great job! 0.3 Amps is 300 mA.Dad connected the meter wrong and blew it two times! Almost let the smoke out!
We got the parachute and the balloon today. They look pretty cool. The parachute is red and smaller than we thought. Ezra flew it in front of a box fan and it opened up. The parachute only weighs 106g. This is good news because we were not sure so we had weighed a 330g shirt and this is a lot lighter so we will get higher.
The balloon came in a small bag in a small box. (car key for scale) We used a breadboard to try out the circuit for the temperature sensors and the GPS. Now that it's working we decided to remove the breadboard and solder all the wires onto the screw shield. This will make sure none of wires fall out during flight.
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.
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(); } |
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
|