Introductie¶
Wanneer je een gas snel samenperst bij gelijkblijvende volume neemt de temperatuur toe. Wanneer je het gas vervolgens laat ontsnappen, neemt de temperatuur af omdat het gas arbeid verricht.
We gaan eigenschappen van dit proces bestuderen. In dit practicum ga je een -diagram van een brandblusser bestuderen en gebruiken om de specifieke warmte verhouding te bepalen voor lucht.
Experiment (60 min)¶
In dit experiment vullen we een brandblusser met lucht (). We laten de lucht snel ontsnappen (), in zo’n korte tijd dat we aannemen dat dit een adiabatisch proces is. Doordat het gas arbeid verricht zal het gas afkoelen. Wanneer we dan, kort na het ontsnappen van de lucht, de kraan weer dicht doen, zal de druk weer toenemen ().
In het eerste deel van het proces geldt:
ook wel bekend als ... , met de specifieke warmte verhouding: .
Het tweede deel van het proces kan beschreven worden met de wet van Gay-Lussac:
Onder de aanname dat volgt hieruit:
import numpy as np
import matplotlib.pyplot as plt
data = np.loadtxt('Druk_data.CSV', delimiter=',')
a = 690
b = -22247
def P(x):
return a*x+b
plt.plot(data[:,0], P(data[:,1]), "k.")
P_1 = P(data[977,1])
P_3 = P(data[1269, 1])
P_atm = P(data[0,1])
gamma = (np.log(P_1)-np.log(P_atm))/(np.log(P_1)-np.log(P_3))
print(f"gamma = {gamma}")
gamma = 1.0861451574191106

Arduino¶
Gebruikte arduino code, heb je verder niet nodig.
#include <SPI.h>
#include <SD.h>
const int drukpin = A1;
const int CS_PIN = SDCARD_SS_PIN;
const uint32_t SAMPLE_MS = 100; // log-interval
const char* FNAME = "DATA.CSV";
void blink(uint8_t times, uint16_t onMs, uint16_t offMs, uint16_t pauseMs) {
for (uint8_t i = 0; i < times; i++) {
digitalWrite(LED_BUILTIN, HIGH);
delay(onMs);
digitalWrite(LED_BUILTIN, LOW);
delay(offMs);
}
delay(pauseMs);
}
void fatalSd() {
while (1) blink(3, 100, 100, 600); // 3 snelle
}
void fatalFile() {
while (1) blink(2, 250, 250, 800); // 2 langzame
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
pinMode(drukpin, INPUT);
// Geef voeding + SD wat tijd op batterij
delay(800);
// SD init met retries (zonder Serial kun je anders niks zien)
bool ok = false;
for (int attempt = 0; attempt < 5; attempt++) {
if (SD.begin(CS_PIN)) { ok = true; break; }
blink(1, 50, 50, 200); // klein "ik probeer" knipje
delay(300);
}
if (!ok) fatalSd();
// Bestand aanmaken + header schrijven (1x), dan sluiten
File f = SD.open(FNAME, FILE_WRITE);
if (!f) fatalFile();
// Als bestand leeg is, header toevoegen
if (f.size() == 0) {
f.println("time_ms,value");
}
f.close();
// korte bevestiging
blink(5, 60, 60, 300);
}
void loop() {
static uint32_t last = 0;
uint32_t now = millis();
if (now - last < SAMPLE_MS) return;
last = now;
int value = analogRead(drukpin);
File f = SD.open(FNAME, FILE_WRITE);
if (!f) fatalFile();
f.print(now);
f.print(',');
f.println(value);
f.close(); // <- belangrijk: file echt wegschrijven
// schrijf-indicatie
digitalWrite(LED_BUILTIN, HIGH);
delay(10);
digitalWrite(LED_BUILTIN, LOW);
}