Ozocard Projekte
Ozocard Projekte¶
POC(proof of concept) akutualisiert:
so nutzt man den Sensor?
Was ist ppm?¶
- PPM (Parts per Million) misst die Alkoholkonzentration in der Luft. Ein Sensor auf der Oxocard zeigt den Alkoholgehalt in PPM an, z.B. 1000 PPM = 1000 Teile Alkohol pro Million Teile Luft. Um in Promille umzurechnen, teilst du PPM durch 1000.
Wie kommt man zu Promille von ppm?¶
Formel:
Promille = PPM / 1000
Beispiel:
Wenn der Sensor 1500 PPM misst, rechnest du:
1500 PPM ÷ 1000 = 1,5 Promille
Das bedeutet, dass eine Konzentration von 1500 PPM einem Alkoholgehalt von 1,5 Promille entspricht.
Antworten zu TUV Süd:
- Blutalkohol zu Atemluft:
Der Faktor 2100 ist ein gängiges Verhältnis zwischen Blut- und Atemalkohol. Blutalkohol in mg/100ml geteilt durch 2100 ergibt den Atemalkohol in mg/L. - Atemalkohol zu PPM:
1 mg/L Atemalkohol entspricht etwa 478 PPM. Also multiplizierst du den Atemalkoholwert in mg/L mit 478, um PPM zu erhalten. - Temperatur:
Temperatur beeinflusst die Verdampfung von Alkohol, daher muss sie für genaue Messungen konstant gehalten werden.
Unsere Erarbeitete Lösung:¶
Unser Code funktioniert Grundsätzlich jedoch hatten wir Probleme mit der Anzeigung des Wertes vom Alkohol. Die Wertetabelle konnten wir auch nicht erstellen und deshalb den Durchschnittswert auch nicht.
const TOLERANZ = 0.15 # 0.0 .. 0.5
const PUST_DAUER = 5 # 0 .. 15
const HAT_TICKET = 1 # 1 = true, 0 = false
const HAT_RESERVATION = 0 # 1 = true, 0 = false
const PROMILLE = 0.01 # 0.0 .. 1.0
const ALTER = 35 # 5 .. 100
# Konstanten für Berechnungen
const SCHWELLE_PROMILLE = 0.5
const SCHWELLE_ATEMLUFT = SCHWELLE_PROMILLE / 2.22
const SCHWELLE_PPM = SCHWELLE_ATEMLUFT * 4.78
# Variable, um zu überprüfen, ob die Messung aktiv ist
messungAktiv = 0 # 0 = False, 1 = True
sekunde = 5
etoh = getETOH()
summe = 0 + etoh
durchschnitt = etoh/sekunde
werteliste = [1]
# Hauptprogrammschleife
messung = true
while messung:
if getButton() == 1:
# Messung starten # Setzt Messung auf aktiv (True)
drawText(0, 120, "Messung beginnt\nin Kürze")
update()
clear()
delay(3000)
# Zählschleife für PUST_DAUER Sekunden
while sekunde > 0:
drawText(10, 100, "jetzt pusten für sekunden")
clear()
drawText(120,120,sekunde)
update()
clear()
sekunde -= 1
print(etoh)
print(summe)
delay(1000)
if sekunde == 0:
drawText(20,120,durchschnitt)
update()
delay(3000)
clear()
# Eine Sekunde warten
# Messung abgeschlossen
else:
# Standardanzeige, wenn keine Messung läuft oder ein anderer Knopf gedrückt wird
drawText(0, 120, "Zum Start der\nMessung\nMitte drücken")
update()
clear()
Musterlösung¶
const HAT_TICKET = false # true .. false
const HAT_RESERVATION = true # true .. false
const ALTER = 12 # 5 .. 100
const TOLERANZ = 0.1 # 0.0 .. 0.5
const PUST_DAUER = 5 # 0 .. 15
const SCHWELLE_PROMILLE = 0.5
const SCHWELLE_ATEMLUFT = SCHWELLE_PROMILLE / 2
const SCHWELLE_PPM = SCHWELLE_ATEMLUFT / 2.054
textFont(FONT_ROBOTO_24)
# Alkoholmessung in der Atemluft
messung = true
while (messung):
if getButton() == 1:
clear()
drawText(0,120,"Messung beginnt\nin Kürze")
update()
delay(3000)
for i in PUST_DAUER:
clear()
drawText(80,20, "Jetzt" + "\n" + PUST_DAUER +" s lang" + "\n" + "pusten")
drawText(120,120,i+1)
update()
werte: float[PUST_DAUER]
werte [i] = getETOH()
delay(1000)
messung = false
else:
drawText(0,120,"Zum Start der\nMessung\nMitte drücken")
update()
# Berechnung des Durchschnittwerts
summe = 0.0
for i in werte:
summe += werte[i]
durchschnitt = summe/PUST_DAUER
print("Durchschnittswert = " + durchschnitt + " ppm")
# von Ausbaustufe 2, PROMILLE durch durchschnitt ersetzt:
def onDraw():
textFont(FONT_ROBOTO_24)
clear()
if (HAT_TICKET or HAT_RESERVATION) and ((ALTER >= 14 and ALTER <16 and durchschnitt <= TOLERANZ) or (durchschnitt <= SCHWELLE_PPM and ALTER >= 16)):
drawText(10,10,"Zugang gewährt")
drawCircle(120,120,30)
fill(0,255,0)
else:
if not (HAT_TICKET or HAT_RESERVATION):
text = "Kein Ticket\nKeine Reservation"
else:
if (ALTER < 14):
text = "Mindestalter\nnicht erreicht"
elif (durchschnitt > TOLERANZ and ALTER <14):
text = "Alkoholisiertes Kind\n" + durchschnitt + " ppm"
else:
text = "Zu stark alkoholisiert\n" + durchschnitt + " ppm"
drawText(10,10,"Zugang verweigert" + "\n" + text)
drawCircle(120,150,30)
fill(255,0,0)
update()


