Zum Inhalt

Ozocard Projekte

Ozocard Projekte

POC(proof of concept) akutualisiert:

programmablaufv2.png

so nutzt man den Sensor?

dateivorschau.png

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

musterlösung.png