Hvor højt flyver raketten?

Instruktionen nedenfor er didaktiseret i meget ringe grad.

Trykket falder med højden over Jorden.

tryk-og-hoejde
Læs mere her: https://da.wikipedia.org/wiki/Barometrisk_h%C3%B8jdeformel. Hvis vi måler trykket, kan højden beregnes.

Trykket måler vi med BMP180, som også måler temperaturen:
bmp180
Saml kredsløbet med BMP180 (trykmåler), LCD display, Arduino og 9V batteri:
Højdemåler2
Arduino – Nokia 5110 display
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)

BMP180 – Arduino
VIN – 3V3 (3V spænding, IKKE 5V!)
GND – GND (ground)
SDA – analog pin A4
SCL – analog pin A5

Pak delene i en beholder, som kan monteres ovenpå en raket.

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.

Data kan også gemmes på et SD-kort. Se fx her side 19-21: http://gymlab.dk/wp-content/uploads/2016/05/Raketforl%C3%B8b-v1.6.pdf (pdf)

Koden nedenfor er tilpasset Codebender.cc, som kun virker i Chrome og FireFox. Første gang du bruger Codebender, skal du installere et plugin: Codebender getting started.
Slet den kode der står i Codebender i forvejen. Copy-paste koden nedenfor i den grå box, ind i Codebender. Vælg den rigtige port, og det board du har (som regel Arduino Uno). Tryk derefter “run on Arduino”.

Når/hvis programmet virker, skal du ændre det til at måle mindst to gange i sekundet, da en flyvetur med vandraket, kan være overstået på få sekunder.

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);

}


Kendte problemer:

  • Koden forudsætter at temperaturen er konstant (=start temperaturen), hvilket med sikkerhed ikke gælder ved større højder.
  • Displayet kan blive mørkt. Skift det fra 3,3 V til 5 V eller den anden vej.
  • Trykmåleren er meget følsom. Læg et filter ind i koden fx et gennemsnit af 10 målinger.