Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Druksensor ijken en maken van een pV-diagram

Introductie

In de experimentele natuurkunde was het lang geleden gelukt om de krachten tussen ladingen te bestuderen zonder dat bekend was hoe groot die ladingen nu precies waren. Men laadde een metalen bol op en hield deze tegen een andere metalen bol van hetzelfde materiaal. Men redeneerde dat de ladingen op de bollen gelijk waren, omdat ze van hetzelfde materiaal waren. Vervolgens plaatste men de bollen in een vacuüm en mat men de krachten tussen de bollen met een zeer gevoelige balans. Op deze manier kon men de krachten tussen de ladingen bestuderen zonder de absolute waarde van de ladingen te kennen. Dit trucje kon herhaald worden met andere bollen waarna een kwantiatieve beschrijving van de krachten tussen ladingen mogelijk werd.

Een soortgelijke meettechniek gaan we gebruiken om een druksensor te ijken. Van de sensor zijn wel wat dingen bekend, maar omdat de spanning van de Arduino niet overeenkomstig is met de gewenste spanning, zouden we deze moeten ijken. We weten dat de sensor lineair is, dus als we twee punten weten, kunnen we de rest van de curve bepalen. Nog beter zou het zijn om drie punten te nemen en zo ook het lineaire karakter van de sensor te bevestigen.

Theorie

Een injectiespuit met een maximaal volume van 50 mL is gevuld met lucht. De spuit kan aan een kant afgesloten worden met een tube die verbonden is met een druksensor die de gasdruk meet. Door de zuiger van de spuit in te drukken, wordt het volume verkleind en de druk verhoogd. Wanneer we de druk langzaam in drukken verwachten we dat de druk in de spuit volgens de wet van Boyle toeneemt:

P1V1=P2V2P_1 V_1 = P_2 V_2

Omdat de gemeten spanning van de druksensor lineair afhankelijk is van de druk, kan de druk uitgedrukt worden als:

P=aU+bP = a U + b

Methode en materialen

Je maakt gebruik van een Arduino. Daarvoor heb je de juiste IDE nodig. Het programma staat al op de Arduino’s in het lokaal. Zodra je de Arduino aansluit op je computer zal de Arduino gaan meten, maar zijn de metingen nog niet zichtbaar. Je moet de Arduino op Arduino MKR Zero zetten. Dan wordt nog wel een driver geinstalleerd.

Controleer of de Arduino herkend wordt door op tools -> port te klikken, daar staat de com poort van de Arduino. Open vervolgens de seriële monitor (het vergrootglas rechtsboven in de IDE) om de gemeten spanning te zien.

int drukpin = A1;

void setup() {
  pinMode(A1,INPUT);
  Serial.begin(9600);
}

void loop() {
  Serial.println(analogRead(drukpin));
  delay(100);
}

Deel 1

Stel de injectiespuit in op 40 mL en sluit de spuit aan op de druksensor door middel van een zo klein mogelijke tube. Meet de spanning van de druksensor met de Arduino en noteer deze waarde als U1U_1. Druk vervolgens de zuiger langzaam in tot 20 mL en meet opnieuw de spanning van de druksensor, noteer deze waarde als U2U_2. Herhaal dit voor volumes van 10 mL.

  1. Leg uit waarom een zo klein mogelijke tube gebruikt moet worden.

  2. Welke waarde hoort bij de gasdruk bij 40 mL? Zoek deze waarde op.

  3. Welke waarden horen bij de gasdruk bij 20 en 10 mL?

  4. Gebruik de drie punten om de waarden van aa en bb in vergelijking 2 te bepalen en controleer of de sensor inderdaad lineair is door de waarden te plotten.

Deel 2

Vervang daarbij de kleine tube voor een langere en bepaal het onbekende volume van de tube met een volgende meetserie waarbij je de druk en het volume bepaald. Zorg ervoor dat ook drukken onder de 1 atm gemeten worden.

Resultaten

# Antwoord op Deel 1 vraag 4
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

# Meetdata
U_waarden = np.array([208,215,224,235,246,262,276,293,316,337,365])  # in bits
V = np.linspace(40, 20, 11)  # volumes in mL, van 40 naar 20

P_waarden = (101300 * 40) / V  # in Pascal

# Model: rechte lijn P = a * U + b
def f(U, a, b):
    return a * U + b
popt, pcov = curve_fit(f, U_waarden, P_waarden)  
a, b = popt

# Waarden van de fit op de meetpunten
P_fit = f(U_waarden, a, b)

# Plot
plt.scatter(U_waarden, P_waarden, label="metingen")
plt.plot(U_waarden, P_fit, label="fit")
plt.xlabel("U (bits)")
plt.ylabel("P (Pa)")
plt.legend()
plt.grid(True)
plt.show()

print("a =", a)
print("b =", b)
print(f"Ijkformule: P = {a:.3f} * U + {b:.3f}")

<Figure size 640x480 with 1 Axes>
a = 636.1374710460672
b = -30568.217133702394
Ijkformule: P = 636.137 * U + -30568.217
#Deel 2 (met lange slang)
#Dit zijn de 2 volume waardes (in ml) die wij gebruikt hebben om daar de bijbehorende U waarde te vinden.
V1 = 36 
V2 = 30 
#Onze bijbehorende U waarden in bits
U1 = 208
U2 = 240 
#Bijbehorende P waarden (in pascal) die wij uitgerekend hebben m.b.v P = a*U + b relatie
P1 = 1.01748279 * 10**5
P2 = 1.22104663 * 10**5
#Vervolgens gebruiken wij P1(V(slang)+V1) = P2(V(slang)+V2) relatie om V(slang) uit te rekenen, met verder algebraische uitwerking krijgen we de volgende:
V_slang = ((P1*V1)-(P2*V2))/(P2-P1)
print(V_slang)
# Uit onze berekening volgt een zeer klein en zelfs licht negatief slangvolume. Dit is fysisch niet mogelijk, maar is goed te verklaren: onze meetpunten voldoen bijna aan PV = constante alsof er geen extra slangvolume is. Het werkelijke slangvolume is klein ten opzichte van het spuitvolume en valt daardoor binnen de meetonnauwkeurigheid van de druksensor en de ijking. Kleine meet- en afrondfouten leiden er dan toe dat de fit V(slang) ongeveer gelijk aan 0 is of zelfs een klein negatief getal oplevert.




-0.009915611731430456

#Antwoorden vragen 1 t/m 3


# We nemen aan dat de druk bij 40 mL gelijk is aan de luchtdruk.
# Typische luchtdruk in dit geval is:
P40_hPa = 1013.0             # in hPa  (≈ 1 atm)
P40_Pa  = 101300.0           # in Pa   (1 hPa = 100 Pa)
P40_bar = 1.013              # in bar

V40_mL = 40.0
V20_mL = 20.0
V10_mL = 10.0


# Vraag 1

vraag_1 = """


Antwoord :
De lucht in het systeem zit in zowel de spuit als de tube.
Voor de berekeningen ga je er vanuit dat het gasvolume gelijk is aan
het volume van de spuit. Als de tube een groot volume heeft, voeg je ongemerkt
extra volume toe dat je niet meeneemt in de berekening. Dat geeft een
systematische fout in het gemeten verband tussen druk en volume en dus in de
ijking van de druksensor.
Door een zo klein mogelijke tube te gebruiken, wordt het extra volume van de tube
verwaarloosbaar klein en wordt de meting nauwkeuriger.
"""
print(vraag_1)


# Vraag 2

vraag_2 = f"""


Antwoord:
Bij 40 mL is de lucht in de spuit niet extra samengedrukt of uitgerekt ten
opzichte van de buitenlucht. De gasdruk in de spuit is dan gelijk aan de
atmosferische druk (luchtdruk).


P(40 mL) ≈ {P40_hPa:.0f} hPa ≈ {P40_bar:.3f} bar ≈ {P40_Pa:.0f} Pa.
"""
print(vraag_2)

#Vraag 3

# Wet van Boyle: P1 * V1 = P2 * V2  (T constant, zelfde hoeveelheid gas)
# Ik gebruik P40 als referentie:
P20_hPa = P40_hPa * (V40_mL / V20_mL)   
P10_hPa = P40_hPa * (V40_mL / V10_mL)   

vraag_3 = f"""


We gebruiken de wet van Boyle: P1 * V1 = P2 * V2.
Met P(40 mL) = P40 en V(40 mL) = 40 mL:

P(20 mL) = P(40 mL) * (40 / 20) = 2 * P(40 mL)
P(10 mL) = P(40 mL) * (40 / 10) = 4 * P(40 mL)

Invullen met P(40 mL) ≈ {P40_hPa:.0f} hPa:

P(20 mL) ≈ {P20_hPa:.0f} hPa
P(10 mL) ≈ {P10_hPa:.0f} hPa
"""

print(vraag_3)







Antwoord :
De lucht in het systeem zit in zowel de spuit als de tube.
Voor de berekeningen ga je er vanuit dat het gasvolume gelijk is aan
het volume van de spuit. Als de tube een groot volume heeft, voeg je ongemerkt
extra volume toe dat je niet meeneemt in de berekening. Dat geeft een
systematische fout in het gemeten verband tussen druk en volume en dus in de
ijking van de druksensor.
Door een zo klein mogelijke tube te gebruiken, wordt het extra volume van de tube
verwaarloosbaar klein en wordt de meting nauwkeuriger.




Antwoord:
Bij 40 mL is de lucht in de spuit niet extra samengedrukt of uitgerekt ten
opzichte van de buitenlucht. De gasdruk in de spuit is dan gelijk aan de
atmosferische druk (luchtdruk).


P(40 mL) ≈ 1013 hPa ≈ 1.013 bar ≈ 101300 Pa.




We gebruiken de wet van Boyle: P1 * V1 = P2 * V2.
Met P(40 mL) = P40 en V(40 mL) = 40 mL:

P(20 mL) = P(40 mL) * (40 / 20) = 2 * P(40 mL)
P(10 mL) = P(40 mL) * (40 / 10) = 4 * P(40 mL)

Invullen met P(40 mL) ≈ 1013 hPa:

P(20 mL) ≈ 2026 hPa
P(10 mL) ≈ 4052 hPa