Jeg har skiftet retning med en højdemåler i en vandraket. Jeg vil fortsat måle trykket, og beregne højden deraf. Men går fra at skrive data til et SD-kort, hvilket giver en spændende graf. Men SD-kortet skal aflæses i en computer, og jeg vil gerne have et resultat så snart raketten rammer jorden.
Derfor har jeg sat et LC Display ind i setuppet. Spændt på om det overlever sammenstødet med jorden.
[office src=”https://onedrive.live.com/embed?cid=7C4F7C2F7519A4B4&resid=7C4F7C2F7519A4B4%2110262&authkey=AG9fDbOFnLZsuXM” width=”320″ height=”180″]
Højdemålingerne svinger en smule. Det kan gøres mindre ved at lægge et filter i programmet, men komplicerer tingene for meget:
Hvis du kan genkende LCD’et, er det fra en Nokia 5110. Da produktionen stoppede, blev der mange millioner displays til overs, og de kan nu erhverves for ca. 10 kr stykket. Dertil har de et meget lavt strømforbrug.
Koden er tilpasset Codebender.cc:
double pressure; //Variabel til tryk i Pascal (Pa) double startpressure; //Variabel til tryk i Pascal (Pa) double tempC; //Variabel til temperatur i grader Celcius double starttempC; //Variabel til temperatur i grader Celcius double hojde; // variabel til højden i meter over havet double maxHojde = 0; double starttempK; //Variabel til temperaturen i Kelvin int pauseTid = 5000; //tid mellem hver måling const double gaskonstant = 8.31; // gaskonstanten i N*m/mol*K const double tyngdeacceleration = 9.807; //tyngdeaccelerationen i m/s^2 const double molarmasse = 0.02896; //Molarmassen af luft i kg/mol #include "Wire.h" #include "Adafruit_BMP085.h" Adafruit_BMP085 mySensor; // laver et objekt kaldet mySensor #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> // pin 7 - Serial clock out (SCLK) // pin 6 - Serial data out (DIN) // pin 5 - Data/Command select (D/C) // pin 4 - LCD chip select (CS) // pin 3 - LCD reset (RST) Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3); void setup() { Serial.begin(9600); mySensor.begin(); // starter tryk-sensoren mySensor starttempC = mySensor.readTemperature(); // Måler STARTtemperaturen i grader C fra BMP180 startpressure=mySensor.readPressure(); // Måler STARTtrykket i Pa starttempK = starttempC + 273; // temperaturen i Kelvin display.begin(); // init done // you can change the contrast around to adapt the display // for the best viewing! display.setContrast(50); display.clearDisplay(); // clears the screen and buffer } void loop() { tempC = mySensor.readTemperature(); // Måler temperaturen i grader C fra BMP180 pressure=mySensor.readPressure(); // Måler trykket i Pa hojde = -(starttempK*gaskonstant/(molarmasse*tyngdeacceleration))*log(pressure/startpressure); display.setTextSize(1); display.setTextColor(BLACK); display.setCursor(0,0); display.println("Tryk:"); display.print(pressure); display.println(" Pa "); display.print("Hojde:"); display.print(hojde); display.println(" m "); display.println("Max hojde: "); display.print(maxHojde); display.println(" m "); display.display(); display.clearDisplay(); // clears the screen and buffer if (hojde>maxHojde) { maxHojde = hojde; } delay(250); }