Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
pflegeruf [2022/06/23 14:54] – [Schaltplan] studentpflegeruf [2023/07/03 10:16] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== Projekt: PflegeRuf ====== 
 +
 +{{ :bamicapflegeruf.jpeg?400 |}}
 +
 +===== Ziel & Funktion des PflegeRufs =====
 +
 +===Ziel:===
 +Das Pflegepersonal in medizinischen Einrichtungen, wie Krankenhäusern oder Pflegeeinrichtungen, ist, 
 +aufgrund des Mangels an Pflegepersonal, mit der intensiven und zeitaufwendigen Pflege der Patienten oder Bewohner stark überfordert.
 +Das System "PflegeRuf" soll das Pflegepersonal unterstützen und entlasten, indem die Patienten auswählen können,
 +**warum** Sie das Pflegepersonal zu sich ins Zimmer rufen möchten. Somit spart sich das Pflegepersonal kostbare Zeit und Energie, hin und her zu laufen, um erstmal den Grund für den Ruf zu erfahren und daraufhin die notwendigen Materialien zu holen, um dann wieder zurück zum Patienten zu gehen. 
 +
 +===Funktion:===
 +Um den PflegeRuf nutzen zu können, muss der Patient die Gesichtserkennung nutzen, indem er das Gesicht zur Kamera hält, welche sich über dem Touch Display befindet. Die Kamera erkennt nur bereits vorher registrierte Nutzer. Unbekannte Gesichter werden mit der Bezeichnung "Unknown" nicht zur Nutzung des PflegeRufs zugelassen.
 +Nachdem der Patient erkannt wurde, öffnet sich der PflegeRuf. Hier gibt es 3 Auswahlmöglichkeiten (//siehe Bild oben//).
 +  - Entweder kann der Patient das Pflegepersonal rufen und ein bestimmtes Anliegen auswählen. Nachdem einer der Button angeklickt wurde, erhält das Pflegepersonal sofort eine Email mit dem ausgewählten Grund für den Ruf. Folgende Anliegen können auf der grafischen Benutzeroberfläche ausgewählt werden:  
 +  * Schmerzen       {{ :pflegerufanliegen.jpeg?300|}}       
 +  * Medikamente
 +  * WC
 +  * Waschen
 +  * Essen
 +  * Getränke
 +  * TV
 +  - (2) Zusätzlich kann der Patient eigenständig seinen Puls messen. Sobald der Button "Puls messen" betätigt wird, startet die Messung. Auf dem kleineren Display unter dem großen Display wird dem Patienten angezeigt, wann die Messung startet und wann es fertig ist. Sobald die Messung vollendet ist, erscheint eine Grafik mit der Herzschlag des Patienten. Wenn der Wert zu hoch oder zu niedrig ist, erhält auch hier das Pflegepersonal ebenfalls eine E-Mail mit einer Warnung.
 +  - (3) Zu guter Letzt kann der Patient, falls Langeweile besteht, mit dem Zimmergenosse "TicTacToe" spielen. Der Gewinner wird auf dem kleinen Display angezeigt.
 +
 +  
 +===== Diese Bauteile wurden verwendet: =====
 +  * Raspberry Pi 4 B
 +  * (Half-Size) Breadboard --> darauf: MCP 3008 A/D Wandler
 +  * Jumper Kabel
 +  * KY-039 Herzschlagsensor
 +  * RASPBERRY PI 7TD Raspberry Pi Shield - Display LCD-Touch, 7", 800x480 Pixel
 +  * I2C LCD Display
 +  * Raspberry Pi Camera Module V2
 +
 +===== Beschreibung des Quellcodes =====
 +==== Gesichtserkennung ====
 +//Der Vorgang zur Einrichtung der Gesichtserkennung, sowie der Quellcode mit Ausnahme Zeile 78-80, sowie Zeile 113-114, wurden aus folgendem Tutorial entnommen und kann dort ausführlich nachgelesen werden: [[https://core-electronics.com.au/guides/face-identify-raspberry-pi/]] //
 +Um die Gesichtserkennung starten zu können musste OpenCV installiert werden und eine haarcascade_frontalface.xml Datei aus dem Internet heruntergeladen werden für das Erkennen von Gesichtern.
 +Wir haben mindestens 10 Fotos von unseren Gesichtern aufgenommen und diese in einem Ordner gespeichert. Auf diesen Ordner wird zugegriffen und während der Videoaufnahme erscheint der Name des Ordners und somit der Name der Person.
 +
 +<file python facial_req.py>
 +<#!/usr/bin/python3
 +
 +# import the necessary packages
 +from imutils.video import VideoStream
 +from imutils.video import FPS
 +import face_recognition
 +import imutils
 +import pickle
 +import time
 +import cv2
 +import RPi.GPIO as GPIO
 +from time import sleep
 +import subprocess
 +import sys
 +
 +#Initialize 'currentname' to trigger only when a new person is identified.
 +currentname = "unknown"
 +#Determine faces from encodings.pickle file model created from train_model.py
 +encodingsP = "encodings.pickle"
 +
 +# load the known faces and embeddings along with OpenCV's Haar
 +# cascade for face detection
 +print("[INFO] loading encodings + face detector...")
 +data = pickle.loads(open(encodingsP, "rb").read())
 +
 +# initialize the video stream and allow the camera sensor to warm up
 +# Set the ser to the followng
 +# src = 0 : for the build in single web cam, could be your laptop webcam
 +# src = 2 : I had to set it to 2 inorder to use the USB webcam attached to my laptop
 +#vs = VideoStream(src=2,framerate=10).start()
 +vs = VideoStream(usePiCamera=True).start()
 +time.sleep(2.0)
 +
 +# start the FPS counter
 +fps = FPS().start()
 +
 +# loop over frames from the video file stream
 +while True:
 + # grab the frame from the threaded video stream and resize it
 + # to 500px (to speedup processing)
 + frame = vs.read()
 + frame = imutils.resize(frame, width=500)
 + # Detect the fce boxes
 + boxes = face_recognition.face_locations(frame)
 + # compute the facial embeddings for each face bounding box
 + encodings = face_recognition.face_encodings(frame, boxes)
 + names = []
 +
 + # loop over the facial embeddings
 + for encoding in encodings:
 + # attempt to match each face in the input image to our known
 + # encodings
 + matches = face_recognition.compare_faces(data["encodings"],
 + encoding)
 + name = "Unknown" #if face is not recognized, then print Unknown
 +
 + # check to see if we have found a match
 + if True in matches:
 + # find the indexes of all matched faces then initialize a
 + # dictionary to count the total number of times each face
 + # was matched
 + matchedIdxs = [i for (i, b) in enumerate(matches) if b]
 + counts = {}
 +
 + # loop over the matched indexes and maintain a count for
 + # each recognized face face
 + for i in matchedIdxs:
 + name = data["names"][i]
 + counts[name] = counts.get(name, 0) + 1
 +
 + # determine the recognized face with the largest number
 + # of votes (note: in the event of an unlikely tie Python
 + # will select first entry in the dictionary)
 + name = max(counts, key=counts.get)
 + #If someone in your dataset is identified, print their name on the screen
 + if currentname != name:
 + currentname = name
 + cmd = 'python3 pflegeRuf.py'
 + p = subprocess.Popen(cmd, shell=True)
 + sys.exit().sys.exit()
 +            
 +
 + # update the list of names
 + names.append(name)
 +
 +    
 +
 + # loop over the recognized faces
 + for ((top, right, bottom, left), name) in zip(boxes, names):
 + # draw the predicted face name on the image - color is in BGR
 + cv2.rectangle(frame, (left, top), (right, bottom),
 + (0, 255, 225), 2)
 + y = top - 15 if top - 15 > 15 else top + 15
 + cv2.putText(frame, name, (left, y), cv2.FONT_HERSHEY_SIMPLEX,
 + .8, (0, 255, 255), 2)
 +
 + # display the image to our screen
 + cv2.imshow("Facial Recognition is Running", frame)
 + key = cv2.waitKey(1) & 0xFF
 +
 + # quit when 'q' key is pressed
 + if key == ord("q"):
 + break
 +
 + # update the FPS counter
 + fps.update()
 +
 +# stop the timer and display FPS information
 +fps.stop()
 +print("[INFO] elasped time: {:.2f}".format(fps.elapsed()))
 +print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))
 +
 +if currentname != name:
 +    sys.exit().sys.exit()
 +    cv2.destroyAllWindows()
 +    vs.stop()
 +>
 +</file>
 +
 +----
 +
 +=== Graphische Benutzeroberfläche ===
 +Die Graphische Benutzeroberfläche wurde mit dem GUI-Framework PysimpleGui erstellt. Jede Zeile mit den []-Klammern erweitert das Display und ermöglicht das Hinzufügen von den gewünschten Elementen wie z.B. Button, Bilder, Text, Input Felder und vieles mehr.
 +Um "Image Buttons" erstellen zu können, müssen Bilder (png oder jpeg) vorher zu Base_64 konvertiert und im Quellcode als Variable hinzugefügt werden. Erst dann können die Bilder als Button genutzt werden. Nachdem ein Anliegen ausgewählt wurde, erscheint für 4 Sekunden ein Pop up Fenster, welches sich automatisch wieder schließt.
 +Zusätzlich werden E-Mails verschickt, indem der Email Sender und Empfänger, sowie ein Passwort für die externe Nutzung durch weniger gesicherte Apps, notiert werden. 
 +<file python pflegeRuf.py>
 +<#!/usr/bin/python3
 +import PySimpleGUI as sg
 +import smtplib
 +import os
 +from email.message import EmailMessage
 +import ssl
 +import subprocess
 +import RPi.GPIO as GPIO
 +import time
 +
 +email_sender = 'melaley98@gmail.com'
 +email_password = 'ddvpqksaxtxvhlne'
 +email_receiver = 'pflegepersonal98@gmail.com'
 +
 +                                                        
 +
 +schmerzen_base64 = b'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'
 +medikamente_base64 = b'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'
 +wc_base64 = b'iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAYAAAA5ZDbSAAAAAXNSR0IArs4c6QAAIABJREFUeF7tXQd4VMUW/ufeu7vphGooAgGko4ACggLSCRpFQRGlC4J0BBERkac+RToIagRUBFFEVGpAVJqA9KogEeklQCCB1N29d9535t5NdkPqJkR338736Qfs7r0z559z5vRhQ5fu5fANr6UA8wHstdiKhfkA9m58fQB7Ob4+gH0AezsFvHx9vjPYB7CXU8DLl+fjYB/AhU8Bxjk4A7zbw8LAjAVqkCFBA4MGzljhEzSHJxYpB2uaBtACJWGCAxogMRncC5FmTDUglSAxDYyWrnFALlJ8i9BM4hyqqsLEOFIuxOD47u04dngvblw+AzXNWrSrLoq3MQmBYeVRtXpt1GvaEqXDayHVFABZUsCKkIsLnYOZxsAZiWBOPArYrfhr/3akxJ7F3o0rkRJ3ERpXi4LE/553CEIoYCZ/NGwTiZLV6qF6w5bgFpOQZHRkCcl2B0ahA0zy1s4UmCWO+JjD2LQsCpePH4BNTQN9RruXe6NMzgM4Em15JgFMRrkaNRHesA3qd+oOO5Mh3yGNpNABVhmDnJqIH+dPQ8yOtUKxICVDHEIEMO1ZSYFiNkNWFP0shncqXAwcmqZCtVphV1WQZilDBckvBQx2SChesRqee2M2WEDJO8LFhQSwHRoUKJzj2pm/sHfFh4jZ/ys4Z7rmCAmyyYQKtRqgWNnKCChVFuG1GyKscjXSszIWRqq1lwzSG2XYcTMuFiePHkLC+b9hu3kNx/dsgWZN0ddNkhkMgSXC0LrvGJS7vyVMhoVRWGQoFIDJHCD1/9T+rdi+aAoSrsUKMWySoO/SsIpo138cQspVgim4FCRwoTnrykYGqF6ELxjXLQZhHDEJMreD21Jw9dRJHN/8HX7ftlYXW1yDxhkCgkNRr8OzaNzlRfBC1FEKCDDNUAfoaswRRM95HTfjLumKAzSYg0ugbY9hCG/ZFRpPhSSMXwZNIq42fmmgqkPtPfaSBjpx6UjikDQJmsShkeLJZcjEEck38NmrfZB4/ZJgBolzcZQ93H0g7uvUE5BJiBd8uA0wiV2Fp8DO/KDdiscPU0bi8smjQnuWIKFy3cZoENkb5eo2opMIhvFb8Bl70RNuxl7A4TWLcHTLGqh2m3D+BIWWxmPD3kJorcZQBCcXDGa3AWaczCEVsqZh1ZRROH1kNzjXwBhH1QYt8Uj/8fAvVgaq8GvYfABnsTE5N0G1JeGvzd/gpy/mAppdKF+BpSthwMylSGGmAtvMBQCYnG8qDq/7Ctu/mi20RRJKQaXK4ZlJnyCgVBg0sQF5hjj2Iu4rnKWokCUTbElJgobHf16BNFLOOEdo1QZ4dtJcSLKlQAeX2wBzLkGzJ2D12yNx8eQhIUoUSxCeGjcHxe+pC0mi80b4JH0jDxRIir2A5f8ZgOSEq8LuCAgojvbD30T5Oi0A2S7ObneMSbcBZpKM83uj8cO0N8AlDhOX8HCPEajV6TmhFZq4WuSO9TzQ8V/6FWGGIO3KGSwc0w0aiWoO1GnTGU37TxB/zlBn87cEtwHm9hR81K89JDUVKmcIDSuPx16ejZC7K0AiE4g4vGD6Qf5W4uHfJrOKTuBtH0/AH9vXQY/LmNDnw+UICqkgaOkOOfMFMCn9EtdDXqcPbMOP08fAxlURDKvbrita9n0V6v+pG7Kg+4uYQpIknDm0AxvmjENychJkJuHBbn3RMHKQQNcdIzJfADssVYVrWDdnPE7t2Qi72GlmDJ+/FmpA8YKu8//29wSwcOrZU7Hi3eE4/+d+oUEzORDDFm2ExszkHso3ffIHsHEQqGnJWD/rVZw6shNMkxAQGoZe81ZBFp6p/E8i37P2wh84kgOIetEfvIlTv60VYlnhMl74eBVMwXe5JaPzCTA5y+2IvXge0VOHI+HKBUHqDj1HosqjPaGoeqaGbxSEAgzXft+NZf8dLJxGMmdoMWAC6rTq7Bbz5BtgBhWnjx7C6ilDATVNiJEXpi+FuUwNkbngliZQEHp42W+JgwN4Cqb2agOmkoOIo+rDTyFi8Hi3ZGP+AKZXcIYzh3Zh9ZThgAh8MfSYuQIly1SByuxeRu5/YDmMQeE2zOr5CJhqFT798EYdETHqHbcmk0+AyXdlxvlDm7Hm/Zd1HzOT0WP6twgNu9utCfh+dDsFyFKZ07M5wG0wcQ0VG7dBxMj33SKVWwCfO7gZa6a8DJE1Bxk9ZqxAaFgFtybg+1E2APdqDmj/AMAazDh7cDPWTiEOphQcGc8LDvYBXFiblXK0Puj1sACYTNJKRcXB9GINJpw9tAlrp4wCxTwp7fW56ct9ABcWunp8RgDMNKtIHAhv1AYRo4pARPsALkQUc3iUD+CiofM/9hYfwP8Y6YvmxT6Ai4bO/9hbPBJgZw+mu97qwniGM2r/1ud5JMCOaAkR2N04cWE8wxngwn4eAePYNO6ukebnkQDLlEBqxIrdXbxIJDBKX9x9RmaAHXPiUsGiJCL1leLlhTA/jwFYoko6exp2rFwCWFPAmYyHIp8BAkuCq3aRcZkbWR2pKiIZ15aMPeu/g5pyE5LFghoPtoZf2cowU1lmHgeZeiozAclxOLhxFezWJMhmPzR9vAdskgmaUV7jeBzlNTs/XZIVPTFd08ATr+P3PTtx89plMG4X9UUqzUWS4VfiLjRo9gi4f6h4JiRFlK1QIryIq3MZUja+e88BWNOw86vZ2P/TSmhplKEAlKxcG+0GvoGgirWh8LRc63FERjXnMHM7Ph3XE8mxZ6HarZBlf5iLh2HA9CWwKZY8wkvOVRk85Sai503C2SO7wOzJ4LIFpSvXwNNvzAM3+Ym0/XSAuQaVKSKFncEGf0nCwV/WYM/aL4GUBCQn3oTdSuWvohjFGAosJhmBxUrBJlnQvGs/1HioLZIkf5i4VWRNKpodVtmc5bw9BuC4k0exbNIAcJWSumVRpkG796Ene6Pu0yNg4vbcWVhEsICdyz7EvlWf6YngxrMoB7vyg+3x2PB381yxSGAlH9uGxW+NFHndDvak9Jh6nV/EQ1376RWAxhDnqiSDJ8bh2G8b8cuiWZDsaSKOJs5LI0oruJymZrC7KLMz/kJJc5pfCB7rNxSh1Zsh8C7KW7NnK708BuD4mP34ctIgPSHeKVxdrEwFdHv/a/iZA6BRDDnHocGWZsPPc8birwM7jG/qVCSeovywEZ9vhmoKMN6Qs9CnTbF4ZFckxJ4VAXU9Q4GLfKgGHZ9F0+eGg0smUNyb3kD5Zn9sWo0zu9cj5sgeULK3XiPpENyO9xn10OmfZPx7xvIYSt59D9r3HYFiNZpBZpRLrhfuOc/aYwC+FnMIyyYNBCdOdRpUPjr042ggIBS5KzcaLsYcx5r3h8KafDPLrdC2/0TUah1pkDxngM1qMmb2biOqCDLnONXv+Dwe7jlCbBridFLqzmz6FtGfzYBmT3UroyKrCZsCiqHFMwNQq0N3sWGERHI66T0G4PjYC1g7eQRuxJ6+bZ11Wj6J1gMn5J5Ixhgu7PkRK2dNENUTWY16rZ5Aq/7jRRVfTjKfNPBd30Rh7/efGMpOhvokK2Z0fmUWytZrLOYkcyBm8w/YsGAqJG6FnfLNCiljVGxBxhAx4n1UadQ6Q9Y7HQseEWwg6bvpk//g2NY1IMGWcbABMvPD8MVbYGVUBK6rMFkl7FE4cuW7g3DuyK5sU1bKV6uLiJenw794CVGTnNUQx6GmInrmGJzcv814Y8acTAHF8VLUWqgSacnAiZ+W4+dF08Xx4px0bkh08QoyiSgeToqbYgkAkyVo1lRoahokbmjM1GRG089bURDuNLn7Wj+FFi/QxnTdlh7DwbSavas+x+5v5olyDOdBZ1uHl6ehygMtDGCJ+243dxR7Gmb1bQWo2TdqkWQzur8ZhdCqdcCcFKTMQMefPonVM0Yh4drFdAWJ/kBvfaBDNzTp86r4S/xfB/H120Og2qnthAMSo/0CV9O7FNxVowG6jX0PqaYQWDUOlcswy9SOQUVxloaVUVNwYttqccqmv9AJ4Qatn0Tzfq/BLhE1MtbuMQCTzWlLjscnAztB0yiBzLFOBiZxVGsSgYghk8R5l65+ZkIlZssP+HH+u+CU6p/NIO5o03M4anTqoxdeZzU4w7m9P2PlrHHpoKXLDFnByIU/IUUJhJKSiE/HPAvrrStQRYF2BuFpC8qyGTWad0LDjs8iqOI9QkeTuSZMOfF1o/mMnZlEsN6WFI+fF07Dqf1boNpSMh7HGNq98AZqt34cZDo7Cx6PAZi6cxB9lo3tgesXYpwltCDE3dXvRbtRsxAUFABNIlGdsQVIxEGSsHhsd8Sfj8nx+CMPkiWkJAZERYu6qMxDeJmYhK1Rb+HwlpXpvKK365JRolJNdH/nU3D6zsL/4simH3RN2fBO6SYQh2QKRsRLE1G1UXPYJeqQo4tdJ95zWoEjk52Bq2k49dvP+HVZFG5duwDI/ug8+HVUaNwWnJxBmdo2eAzAZGfaVAWW66cxd3gXsXjySKU7BSQzOr82DxVr3wtNaJIGhxu1x8nXLuObN/shKT4uRztX6D+QMGpBNGz+JW/nX8Zg4XbM6NEK0JJdDgI6458YPB7lHuqMxIunsXrqUNyIpS4FGYOgtMsWtOszFrXadxHKXn46BcmqjFSZyn5S4K9qYJKERO4Pk5x1FqrHAEwcQGk9MrMjqn972JMTMmmvDB36v4KqrZ8VqkoGJ1C7A4ZjG77F5i+mCSUlxyHEJFCtaQTaD3/nNuKTCEyK2Y8vyGQztpnjeRb/IHQc+T7urtcIR9YuxfalH8CeqUeGWZHR8NF+eLD7YKRx0rBpPnkvjdWYHZKmQNYk2CX6pX6MZFck4DkAi1Xo1Q47v5iJA+uXupBXdJgpUw49Z6+FQk1KHFSnswsmHFn6Pnas/dpFtItgAxWVO9RZhyQEULJCFTz37hKoiu4CTHc1cI7lr/dF3OnfDQ+U4ShhEspVq4vI1+ZBliVETx+DU4dJW884x+l9QWWrod/kz6CZ/I3N46xX57z3nD/V5yNSFXPer56YkxWzbS1+/ORtEWTIGMR6MkZ8+gs0U4ALB6clJuKLMU/DevPabc7+RyK7YdMPXwoykYRwiHyzfxA6DH4Xle5v5mLaKPZkLBjeBUnxVzOJZ4aKDVvh0ZHvgaWl4MNBEeCZHBqklfd9Kwp+4fUhFTDilNet4FkcbKzq+vmTWDdtFOKvXnSxhgike9t3R/PeozNYjgG2iycQNaYn4CIuJZgsgej538/w2Wu9RaBAE10EMjzDrXuMQt2I5wWfEJNTA9TjW9Zg66fv6c3InLhTkmR0fTMKpe9pCH79PD4a9qSwe50nGFKmAiLHfYgSYeXcKh3JK6gunO6JHEx0XfH2QFz5c5+Lo57YMLTU3eg1+1tRAC14kilYM3koTh3a7kIfcixUbdgMrQdNwd6VC7F/zWe3nalV6jZBxNg5YIru1dJUjoPLZ2PnqiVCNJK9qXM9B5MtGPrlFnBNwbHNK7D5k8lCE3DWi+s0j0DLgZMgS/TL3IKb7sCZhU7okQBzCftXLsTO5R8ZXJKxMP+AEHQcPQ3lazUUhLdwDdN7PQKoKS6rVyQZ90U8ixY9RuPqn/ux5D+DDA53BB/I6rFg2Px1sPuFCICtCTewavIQxJ45oT9LGL+6X6lF9xdR7/EXhAm+bs5EnP5tvW7LOvFqvdZPokX/8UKJI8WvKIZHimix+9NuYV6/toBT8EG0ypY5mnYZgsZP9BE+31O7f8a62eOcFBqdrIqs4NFXZ6FincaiReCq90fixoVTrmIXDJ1eeh13N+8sMiysl09h/uhuGaKe2jqRY0G2oPf0pQguEy66aX49cSDiT+7XnQ5OANdt8zRavDBOOC18AOewvWlX2pkda94ajvPH9winAjMafZFWXLNJW7Qe/BYURca6Dybir50bbnsaRWEGfrIBnHy+KsfWhZNxbPNKaE7eKwLVFFgcLy7YABUKdi2Zgf1rF2cK7plRtnptRIyZAf+gYoJnv39vFC4doSOBRHiGwVanTVe07jceqkTeqqLgXw/NyRIAyzKsfx/G5+P7gDy6eqNSY0hm9PtgFRSzgrVTR+HSX78LBcl51Gz+GNoMmkheftEW8bfvP8e+FR+6fE+XwDIGzVsJv9DSmNWDQoOJ6Y/R3ZMymnbuiQeeGZJ+rm5bNAtHNpAZ5wpwvVaP45H+E/U2hL4zOPsdTkBK3IT4a2fx/cR+SEy45uLmI/XnyTFTAEsQVk4dCdVK8Vcng4oxDIxaBzm4DCSRg8VguxWHjwdH6DFVJwjJJ3ZfZF/UuL+piEeTCHYeismMVoPeQo2mbdP/+eofu7H8HR1wZzu4aoMH0XbIVJgCyLYumn78HnkGC0qSoqJZsf3TyTiyabWLKFSoH0XxcLR7qgtWL5ye7uQnrpEgI6RsOJ6f/qVwSRIXkvglvXb+kA6wxl/VH+7k9KjZpCWsdoa/9212tX3BEFCsJPrNXgVu1juui6kl3cKHA1obWR4Z20ExB+CpNxeidKXKYIb/+U4Las8FWPjsOXavWIDd33/i4lIUZJbMCC1RAjeuxbqkxBDE7fqMQPX2z2XwqciOVJB0cg++eGOgoftmOD2CQ0tA1TSk3Ix3SbGhDVOmekN0+88nerajMbjNivmDI2FNjssUtZQQ0WcYKrXvDSWTJLhTQHs0wMROiZdP48vxPWBLo86MGSaOw7/rGhZnMFsC0H7oO6h8f3MXgMUlJhLDvD6PgFuTDD+3qzjOnEZAaa99Ji+GX4V7XJQm0px3LpqOAz8uc9l41DkXioKe73+J4LLhdwpT1+PII+1g51OSA1EDH4WaFKvHXHMY5CosV6U2Hhs3D6bAwEzf1P26OxfPxIFoEt85PYg+Y4AlEEM+o/ZPVkM6O8IPEg7/9B22fT4FoM8yjfL31EPXNz+CRsF5TUk3mfLSVYgkjUz9NmTqUUTDBNmWAgqDGx2lPTPpLltyc+DvLd8hesHkHAP5QmpLEirf3xqPjngXXMo6gnNiyypsnP9f41lZwazzMf3/4WcGovbjg2BhNiOHS5+luPlEVfHNhF6IPWs4RVz5Cg06dEOzPmP009/Q8PNywRfTNCTeTEDiuWNIunoRwaGhUCrURWjpMJGi68jgdLzOs0W0cVoqqg2z+7QERKug7Af597u+sQCla9bP1kiJPfMn1k8bjcS42GyS+HQXJZfNeHT0dITXbypOU2e/FMFPyaun9m7C6pljson3SmjQsgPu6/wigkqVF5svLwDLqfH4ZvoEXD2+DxqtV1JQokIVdBr6NoIrVNf9AU6T8XCA9aaLClSsmjIap47+Cq6SDzproCXJDy8t2SpsV+e8pcxb4ttJA3DlxIHs1SAGlA+vg/ajZyCQkvMyWbXC8DKYP3re2zi7cxVsQv7engIkWwLQfcQbKNWwDazMDFhTYZJ17Z60fLLuVR4E8JvYuWQODv+0DKr99ph2/XbPoHnfV43N5oE5WdmLaAYbl3DxtzVYN2+i6FabFSHp9w907IYmvV5xpLln/UjOsWPZxziw+tNsOE+vMrinUUd0Gvm2cLLkNJKunMcPU8ci/tJJ8CxSdR1pr4qlGBp2eAJlwmtBYybYNf0iEonbcOHYHhz6ZSNUNRE8m9qp+q2eQIv+r0NlojQvfUoezsFEa00UesWdOIAfZ45DQsI1p+xFV9I/P2UJipWrDUnUkGStRtH5aU9MQNTgjtBc4s3pp5r4bcdhU1CtaeuskjddXyrLuB5zGF9R2Y09u2xOfZOkA0MpRyJ3iO6Hoo68jrKW7POp723zDFr0e1W3JLxHRBNZdE8UnT2r3huBc0d3uTg99LWaULJ8OCInzEVgSAlDE8qG70TzcTM+G9YJyXFXjI1AhNa/T8KTurWOWrIN1Dsut7sDxT6igjdFxsw+D0OzpkHRVIjsZkrLzRQzzlEcGMk9VJ6iSykucrJMsowBH0aDBZcwrkPIeIrHc3A6XzFg86czcHTjV1koRzIejHwOjZ4dJgITOQ5xnZ4ZcQd/woopo42QX4YFTIBWatgaT7w8GXQzW27DUYdMvzt77CD2fvsRzh3bLzakHk7MbF3n9kS9rlmsQpJRrub9eGr0ZMA/SE9YEGmzXiSiHeSgJVmvx2L+sMjbRLQim9D8hddR55HHcqeeuGFNxY3LZ7FsQj9oKTeNc9bhu5TQZ9rXCA6rYlwzkLPx7Vr5z5GcEI/zezbi5yUfAdZb6QkLuU/MiStpk0p+eOylsShTrzlCQovDKpRnqoDQ7xdO3/ie7ujIWAiJaQ1LJg5CytmDSLXrQQNZ1q+WeWHqUlhlqv3NxRsiPqZLQFTs/HIGDkQvNxpo6+fnXVXqo+vYqUBwCRHBcneYVCvmTxgCfu0krClJsGn6NUJObnDxaOJv8p8Lj5wsweIfiGqN2qFlr+HC0eJIvEtPCsxksnmNiCZikEYrJ8dh44JpOHlghzBeqtVvhCZPD0Jwuaq5F6dlQuvG+dP4Y+PXOLbjF9htNlRr0AS123ZBWM1GYLIeosxDUXKWe0DcoyBrsN+8jsO/rEPajVhYb8Xh7MkTuBV3FYzypZmE0LvKo3zlcJGMby5RFg+07yo6EqiyCchSCXR9nVcBTOomORytqUm4folqhhhKli0HS2CQYaLkfmY6k0cws2pH7JnTokS0dPm7YQoIMe4sdoCbv2dmPF9X3DgpTEwFXQ5mt6YhPu6a4GjybtH7/YNCEFIiFCaLv97uUeiU9BnVSececvQygJ0ZyuEXLmBo3ZDoDj9xBpy69l6Q4TgsdPPIWci6PjXDkZLxvby+3bsALgi1vfS3PoC9FFiv06K9HCe3l+fjYLdJ5xk/9AHsGTi5PUsfwG6TzjN+6APYM3Bye5Y+gN0mnWf88B8DWFTnaRLOHt4ksjGET1VS0HPacoTepd+blJckNM8g8z80S1HiA3z8/MMAUoUXrErjtogY+Z5b1Y35vDeJPG4yzhzdilV0b5KmimTwntO+QfGwiiKbojDa/P5DpP1XvFZ4y5mKj59vDpWi1xpH1Qc7ImL420UAsPDTKfj70DasmzpKVAkypqD3jBUILl1OxDx9ABdwn4hcbxvmdn9ItFum5IIqjTug04h3cu3Mm9Wb88XBdDaoTMKlPw9gzdRRsBm9I3tN+giB1ZtAFolzuTvTC0gCr/65OAYTr2DuixF6RyKmoV7HvmjZc7BbfvR8ASwykKgyIe4S1s8cjSunTwixXOuhCLQb/LbROTbv3We8Gim3F8dwJHoptiyeLjiWmPiJcXNRvl4Tt8Ik+QKYdhc1s6YXb5g9Gid2b9GzGCUzRn6xDfYcOta5vd7/sx+SlPzunaG4cGyXnmgIGSO++hU21Zxt0mFOJMoXwLqarEuKX5fMxu/rF8OmUfWBCV1enY4ydZuJxELfyD8FqGmcrJqRcP0M1k95GbEX/haJ+MXKV8ezU5YY3Jt/4uYfYGPuaVfPY8GorqJJGTVHqXhvM0S+Ml2YTb6RfwoQs1L7/3PbVmBj1Duwqqpglh4T5iK4VjORieKcO53XN7gNMImOBUMjkXr9vGBpi18g2g59C+ENqXusb+SXAuRfsDMbFg17Ckk3qNWUDCUoGH1nrRQ5XdnlhOf2HvcBZjLSLp3EwleeF0XdlHtco0krdBw1FXYqGczUYDO3ify/f075Yn98vwibls3Vj0FJQtMuA/DAk31hF9TNf6ou0dRtgElcqCrHjkWTcfDn742OqRJqPvIk2g0YDwk2UYXvG3mjwPFfo/FLFHUCpCaOgH/p8nh6wjwElCqv9zMRx28u2aVZvMptgKlXpAIbzv5xCNEzX0Fqyk0hReiupJa9X0aNtl0hi1k5/sv/5PJGGk/71u2cGHc2ButnvoYbV88YJVoSmjw1EA90exHMrldDOPpQ53e1bgPs0KgpI/L3tUuwbdlHoi6IMgdD6FKoJwbg3rZPGNfpZF9XlN8Je/r3KRNT9NLTfRg4//se/PbNB7jy13HdQJGA2s06otXACdBki1uKlTONCgaw40lMwZHv5mHbd5+L+leqlZMs/qjZIhJt+o5GGjNBztSi19OBcnv+xs1rElRc3LcVPy58FykJcaIBG0UWwmvdjw7D3gEPKQ8zTzUqMdx+m/tnsPMrKSFcS03C9sXTcHTranDRIFQvyKhYtxEe6jkCwXdVgmy2CE+Ys61cVP0f3SeRe790NWl05wGtVeUa0q5ewJENy7Fvw7dg3Cq61JNTI6RMRXQZPxN+pSpQNnWeymxym13hcLDwmXLwxETsWTkf+9Z9bTQnM24sYRLqtIxEySr3on7L9tBMFmhcNorKsr4qJ7eJ/9s/pwoHyahCpA1v1lJxfN9OxJ44hL/3btIvBhH3JIpLfBB+b2O06/8qLGUqgYuuuIUzCgVg0d+Cpkr1VVYV+zeswK5ls6FqNr3JiNCvNMgmM4KKlQBXAlCyQiWUrXUfSoVVhp+/f+Gs5l/0FKorvnb5PGL/jsG5E4cg2VKQcusGrGkpusUBBQqjTgAM5arXR+SYyeDBYbDwZKMbbuEsplAAVpkm2tXTjWEEJN2DcOvsH4heMA3Xz52EmnYLzBDbVMrBmHHVHYXGCu++qcKhSCE9hRqXOvRlAlQvedPL0oT4Zgyh5Svh4a79Ed6kveg2JJqk5t8bmeOMCwXg7N5gT03BuQNbcWrfNvy5azM0lRwiVHDmfBdRIa+okAAqjMe4VA8KcUxSjqFslbqo1bwjKtzbGIFhFSFrdE1BYbzx9mfcUYDpLiGC0m63Q0mOR8yuX7DhyyjAlixsBPpcREy80EQmYUZcqSdA0NUFQWjQqhOaPdkd8AsF/EL0YnIh/dwK9eZpR9xRgB33AYlF0v/ELtZgYSrSkm7ixtXLSIu/Aa0QlYo8rboIvkR1w0pwKIqXLIPg4iVhE24hWTTzowPKBPIZUHIEKaIUN7ozu/yOAlwEdPS9IhcK+AD28i3iA9gHsJdTwMuX5+P5KvJuAAAAMklEQVRgH8BeTgEvX56Pg30AezkFvHx5Pg72AezlFPDy5fk42Aewl1PAy5fn42AvB/h/rHNnEPC/lgUAAAAASUVORK5CYII='
 +waschen_base64 = b'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'
 +essen_base64 = b'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'
 +getränk_base64 = b'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'
 +tv_base64 = b'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'
 +
 +
 +layout = [
 +    [sg.Text('  ')],
 +    [sg.Text('Willkommen im PflegeRuf des Krankenhauses Niederrhein!', size=(800,1), font=('Calibri',19), justification='center')],
 +    [sg.Image('hospitalLogo.png', size=(800,100))],
 +    [sg.Text('Wählen Sie eine der folgenden Optionen aus:', size=(800,1), font=('Calibri',17), justification='center')],
 +    [sg.Text(' ', size=(800,2))],
 +    [sg.Text(' ', size=(19,1)), sg.Button('Pflegepersonal rufen',  size=(17,2), font=('Calibri',13)), sg.Text('    '), sg.Button('Puls messen', size=(17,2), font=('Calibri',13))],
 +    [sg.Text('  ')],
 +    [sg.Text(' ', size=(36,1)), sg.Button('TicTacToe spielen', size=(17,2), font=('Calibri',13))]
 +]
 +
 +window = sg.Window('PflegeRuf - Krankenhaus Niederrhein - Menü', layout, size=(800,480))
 +
 +
 +
 +def pflegeruf_window():
 +    pflegeruf_layout = [
 +        [sg.Button('Menü', size=(6,1), font=('Calibri', 11))],
 +        [sg.Text('Bitte wählen Sie Ihr Anliegen aus, indem Sie auf das entsprechende Feld klicken!', size=(800,1), font=('Calibri',14), justification='center')],
 +        [sg.Text(' ', size=(800,2))],
 +        [sg.Text(' ', size=(5,1)), sg.Button('', image_data=schmerzen_base64, button_color=(sg.theme_background_color(),sg.theme_background_color()),border_width=0, key='Schmerzen'), sg.Text(' ', size=(5,1)), sg.Button('', image_data=medikamente_base64, button_color=(sg.theme_background_color(),sg.theme_background_color()),border_width=0, key='Medikamente'), sg.Text(' ', size=(5,1)), sg.Button('', image_data=wc_base64, button_color=(sg.theme_background_color(),sg.theme_background_color()),border_width=0, key='WC'), sg.Text(' ', size=(5,1)), sg.Button('', image_data=waschen_base64, button_color=(sg.theme_background_color(),sg.theme_background_color()),border_width=0, key='Waschen'), sg.Text(' ', size=(5,1))],
 +        [sg.Text(' ', size=(800,1))],
 +        [sg.Text(' ', size=(18,1)), sg.Button('', image_data=essen_base64, button_color=(sg.theme_background_color(),sg.theme_background_color()),border_width=0, key='Essen'), sg.Text(' ', size=(5,1)), sg.Button('', image_data=getränk_base64, button_color=(sg.theme_background_color(),sg.theme_background_color()),border_width=0, key='Getränk'), sg.Text(' ', size=(5,1)), sg.Button('', image_data=tv_base64, button_color=(sg.theme_background_color(),sg.theme_background_color()),border_width=0, key='TV'), sg.Text(' ', size=(5,1))],
 +    ]
 +
 +    pflegeruf_window = sg.Window('PflegeRuf - Krankenhaus Niederrhein - Pflegepersonal rufen', pflegeruf_layout, size=(800,480))
 +    
 +    while True:
 +        event, values = pflegeruf_window.read()
 +        if event == sg.WIN_CLOSED:
 +            break
 +        elif event == 'Schmerzen':
 +           subject = 'PflegeRuf aus Zimmer 014'
 +           body = 'Aus dem Zimmer 014 wurde der PflegeRuf betätigt, mit folgendem Anliegen: Schmerzen!'
 +           
 +           em = EmailMessage()
 +           em['From'] = email_sender
 +           em['to'] = email_receiver
 +           em['Subject'] = subject
 +           em.set_content(body)
 +           context = ssl.create_default_context()
 +           
 +           with smtplib.SMTP_SSL('smtp.gmail.com', 465, context=context) as smtp:
 +               smtp.login(email_sender, email_password)
 +               smtp.sendmail(email_sender, email_receiver, em.as_string())
 +           sg.popup_timed('Sie haben den PflegeRuf betätigt, mit folgendem Anliegen: Schmerzen. In Kürze wird sich das Pflegepersonal um Sie kümmern!', auto_close_duration=4)
 +
 +            
 +        elif event == 'Medikamente':
 +            subject = 'PflegeRuf aus Zimmer 014'
 +            body = 'Aus dem Zimmer 014 wurde der PflegeRuf betätigt, mit folgendem Anliegen: Medikamente!'
 +            
 +            em = EmailMessage()
 +            em['From'] = email_sender
 +            em['to'] = email_receiver
 +            em['Subject'] = subject
 +            em.set_content(body)
 +            context = ssl.create_default_context()
 +            
 +            with smtplib.SMTP_SSL('smtp.gmail.com', 465, context=context) as smtp:
 +                smtp.login(email_sender, email_password)
 +                smtp.sendmail(email_sender, email_receiver, em.as_string())
 +            sg.popup_timed('Sie haben den PflegeRuf betätigt, mit folgendem Anliegen: Medikamente. In Kürze wird sich das Pflegepersonal um Sie kümmern!', auto_close_duration=4)
 +        
 +        elif event == 'WC':
 +            subject = 'PflegeRuf aus Zimmer 014'
 +            body = 'Aus dem Zimmer 014 wurde der PflegeRuf betätigt, mit folgendem Anliegen: WC!'
 +            
 +            em = EmailMessage()
 +            em['From'] = email_sender
 +            em['to'] = email_receiver
 +            em['Subject'] = subject
 +            em.set_content(body)
 +            context = ssl.create_default_context()
 +            
 +            with smtplib.SMTP_SSL('smtp.gmail.com', 465, context=context) as smtp:
 +                smtp.login(email_sender, email_password)
 +                smtp.sendmail(email_sender, email_receiver, em.as_string())
 +            sg.popup_timed('Sie haben den PflegeRuf betätigt, mit folgendem Anliegen: WC. In Kürze wird sich das Pflegepersonal um Sie kümmern!', auto_close_duration=4)
 +    
 +        elif event == 'Waschen':
 +            subject = 'PflegeRuf aus Zimmer 014'
 +            body = 'Aus dem Zimmer 014 wurde der PflegeRuf betätigt, mit folgendem Anliegen: Waschen!'
 +           
 +            em = EmailMessage()
 +            em['From'] = email_sender
 +            em['to'] = email_receiver
 +            em['Subject'] = subject
 +            em.set_content(body)
 +            context = ssl.create_default_context()
 +            
 +            with smtplib.SMTP_SSL('smtp.gmail.com', 465, context=context) as smtp:
 +                smtp.login(email_sender, email_password)
 +                smtp.sendmail(email_sender, email_receiver, em.as_string())
 +            sg.popup_timed('Sie haben den PflegeRuf betätigt, mit folgendem Anliegen: Waschen. In Kürze wird sich das Pflegepersonal um Sie kümmern!', auto_close_duration=4)
 +        
 +        elif event == 'Essen':
 +            subject = 'PflegeRuf aus Zimmer 014'
 +            body = 'Aus dem Zimmer 014 wurde der PflegeRuf betätigt, mit folgendem Anliegen: Essen!'
 +           
 +            em = EmailMessage()
 +            em['From'] = email_sender
 +            em['to'] = email_receiver
 +            em['Subject'] = subject
 +            em.set_content(body)
 +            context = ssl.create_default_context()
 +            
 +            with smtplib.SMTP_SSL('smtp.gmail.com', 465, context=context) as smtp:
 +                smtp.login(email_sender, email_password)
 +                smtp.sendmail(email_sender, email_receiver, em.as_string())
 +            sg.popup_timed('Sie haben den PflegeRuf betätigt, mit folgendem Anliegen: Essen. In Kürze wird sich das Pflegepersonal um Sie kümmern!', auto_close_duration=4)
 +    
 +        elif event == 'Getränk':
 +            subject = 'PflegeRuf aus Zimmer 014'
 +            body = 'Aus dem Zimmer 014 wurde der PflegeRuf betätigt, mit folgendem Anliegen: Getränk!'
 +            
 +            em = EmailMessage()
 +            em['From'] = email_sender
 +            em['to'] = email_receiver
 +            em['Subject'] = subject
 +            em.set_content(body)
 +            context = ssl.create_default_context()
 +           
 +            with smtplib.SMTP_SSL('smtp.gmail.com', 465, context=context) as smtp:
 +                smtp.login(email_sender, email_password)
 +                smtp.sendmail(email_sender, email_receiver, em.as_string())
 +            sg.popup_timed('Sie haben den PflegeRuf betätigt, mit folgendem Anliegen: Getränk. In Kürze wird sich das Pflegepersonal um Sie kümmern!', auto_close_duration=4)
 +    
 +        elif event == 'TV':
 +            subject = 'PflegeRuf aus Zimmer 014'
 +            body = 'Aus dem Zimmer 014 wurde der PflegeRuf betätigt, mit folgendem Anliegen: TV!'
 +           
 +            em = EmailMessage()
 +            em['From'] = email_sender
 +            em['to'] = email_receiver
 +            em['Subject'] = subject
 +            em.set_content(body)
 +            context = ssl.create_default_context()
 +           
 +            with smtplib.SMTP_SSL('smtp.gmail.com', 465, context=context) as smtp:
 +                smtp.login(email_sender, email_password)
 +                smtp.sendmail(email_sender, email_receiver, em.as_string())
 +            sg.popup_timed('Sie haben den PflegeRuf betätigt, mit folgendem Anliegen: TV. In Kürze wird sich das Pflegepersonal um Sie kümmern!', auto_close_duration=4)
 +    
 +        elif event == 'Menü':
 +            break
 +    
 +    pflegeruf_window.close()
 +    
 +
 +while True:
 +    event, values = window.read()
 +    if event == sg.WIN_CLOSED:
 +        break
 +    elif event == 'Pflegepersonal rufen':
 +        pflegeruf_window()
 +
 +    elif event == 'Puls messen':
 +        cmd = 'python3 pulse_v3.py'
 +        p = subprocess.Popen(cmd, shell=True)
 +        
 +    elif event == 'Kalender':
 +        print('hallo')
 +    
 +    elif event == 'TicTacToe spielen':
 +        cmd = 'python3 sign_up_window.py'
 +        p = subprocess.Popen(cmd, shell=True)
 +        
 +window.close()>
 +</file>
 +
 +
 +----
 +
 +=== Puls messen ===
 +<file python pulse_v3.py>
 +<#!/usr/bin/python3
 +from CA_BOARD_FUNCTIONS import *
 +import lcddriver
 +import matplotlib.pyplot as plt
 +import gpiozero
 +import time
 +import os
 +import ssl
 +import smtplib
 +from email.message import EmailMessage
 +import scipy.signal
 +from pulse_width import *
 +
 +email_sender = 'melaley98@gmail.com'
 +email_password = 'ddvpqksaxtxvhlne'
 +email_receiver = 'pflegepersonal98@gmail.com'
 +
 +# Board-Pinbelegung wird gewaehlt
 +initBoard()
 +# alle LEDs auf dem BOARD werden als Output definiert
 +initLEDs()
 +
 +# Klassen
 +# adc: MCP3008
 +# lcd: lcd
 +adc = gpiozero.MCP3008(channel = 0)
 +lcd = lcddriver.lcd()
 +
 +# Variablendefinition
 +x = []
 +rawData = []
 +
 +filteredData = []
 +filteredDataMean = 0
 +filteredDataMaxValue = 0
 +
 +thres = 0
 +thres_vec = []
 +
 +binPulseData = []
 +
 +meastime = 0
 +
 +# Konfiguration
 +# Messzeit
 +MEASURE_TIME = 10
 +
 +# Abtastfrequenz
 +SAMPLE_FREQ = 1000
 +
 +# Zeit zwischen zwei Messungen
 +TIME_PER_SAMPLE  = 1/SAMPLE_FREQ
 +
 +# Anzahl der Messungen in der angegebenen Messzeit
 +# (stimmt nicht zu 100% ueberein, da das Programm durch andere Prozesse "gestoppt" wird
 +NUM_SAMPLES = MEASURE_TIME * SAMPLE_FREQ
 +
 +# Dateiname (plot)
 +FILENAME = "Aleyna-Yildirim-puls.png"
 +
 +# Variablen für das LCD-Display
 +# lcd_row1: string für die 1. Zeile
 +# lcd_row2: string für die 2. Zeile
 +lcd_row1 = "-----Pulse------"
 +lcd_row2 = ""
 +
 +lcd.lcd_display_string(lcd_row1, 1)
 +
 +# Ausgabe measure starts in 5,4,3 ....
 +for i in range(2, 0,-1):
 +    lcd_row2 = "starts in " + str(i) + "sec."
 +    lcd.lcd_display_string(lcd_row2, 2)
 +    print(lcd_row2)
 +    time.sleep(1)
 +
 +
 +# Ausgabe Messung wird gestartet (start)
 +lcd_row2 = "start"
 +
 +print("start")
 +
 +lcd.lcd_clear()
 +
 +lcd.lcd_display_string(lcd_row1, 1)
 +lcd.lcd_display_string(lcd_row2, 2)
 +
 +# Messung
 +# für die Berechnung der Dauer wird zunaecht ein Zeitstempel gesetzt
 +t1 = time.time()
 +
 +for i in range(NUM_SAMPLES):
 +    # rawData (analog Wert) wird gelesen
 +    rawData.append(adc.raw_value)
 +    # x-Achse
 +    x.append(i)
 +    time.sleep(TIME_PER_SAMPLE)
 +
 +    # 2. Zeitstempel
 +    t2 = time.time()
 +    # Ueberpruefung, ob die angegebene Messzeit erreicht wurde
 +    if (t2-t1) > MEASURE_TIME:
 +        break
 +
 +# die Messdauer wird berechnet
 +measTime = t2-t1
 +
 +
 +
 +# Filter: Das Signal (raw values) wird gefiltert
 +# Lowpass filter (Tiefpass Filter)
 +b, a = scipy.signal.butter(3, 0.1)
 +filteredData = scipy.signal.filtfilt(b, a, rawData)
 +
 +# Schwellwert wird berechnet
 +for i in filteredData:
 +    filteredDataMean = filteredDataMean + i
 +filteredDataMean = filteredDataMean/len(filteredData)
 +
 +filteredDataMaxValue = max(filteredData)
 +
 +thres = int((filteredDataMean + filteredDataMaxValue)/2)
 +
 +
 +
 +
 +# Mit dem gefilterten Signal und einem Schwellwert wird die 3. Kennlinie generiert
 +for i in range(len(filteredData)):
 +    # falls, das gefilterte Signal an der Stelle i groesser oder gleich thres ==> 1 sonst 0
 +    if filteredData[i] >= thres:
 +        binPulseData.append(1)
 +    else:
 +        binPulseData.append(0)
 +
 +
 +# Es wird ein Vektor generiert, damit auch der Schwellenwert geplottet werden kann 
 +for i in range(len(filteredData)):
 +    thres_vec.append(thres)
 +
 +
 +
 +# Verarbeitung der 3. Kennlinie (Beispiel siehe **)
 +
 +# Eingabe der Funktion:
 +# binPulseData: binarisierte Samples || 0: Sample-Wert kleiner als Schwellwert, 1: Sample-Wert groesser als Schwellwert
 +
 +# Ausgabe der Funktion:
 +# PulsBreite: Gibt die Anzahl der PulsBreite in Samples an (Nullen und einsen)
 +# PulsBin: Gibt die Änderung der Sample-Werte in binPulseData an ||   0: Änderung 1 --> 0, 1: Änderung 0 --> 1
 +PulsBreite, PulsBin = analysisPulseBin(binPulseData)
 +
 +
 +# binPulseData =[0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0]
 +# PulseBreite = [10, 6, 7, 2, 10, 1, 8, 4, 6]
 +# PulsBin =     [0,  1,  0,  1, 0,   1,  0,  1,  0]
 +
 +
 +# Wird die Messung richtig durchgefuehrt, so sind alle Impulse in der Variable PulsBin enthalten.
 +counterPuls = 0
 +
 +# Da die Variable PulsBin alle Impulse beinhaltet, werden hier die einsen gezaehlt
 +# Die Einsen  geben an, wie viele Impulse waehrend der Messung erkannt wurden.
 +for i in PulsBin:
 +    if i == 1:
 +        counterPuls = counterPuls + 1
 +
 +
 +# Ausgabe und Berechnung der Herzschlaege pro Minute (Anzahl der Impulse in 10 Sekunden * 6 = Anzahl  der Impulse in einer Minute)
 +print(counterPuls)
 +
 +
 +num_samples = 0
 +time_per_sample = 0
 +
 +num_samples = len(rawData)
 +
 +
 +## Beispiel *
 +# 20 Werte in 10Sek. 
 +# 2 Daten/Sekunde: Frequenz 1/sek.
 +# 10/20 = 0.5 s
 +
 +
 +PulseTime = []
 +
 +# Berechnung Dauer eines Samples (Beispiel siehe *)
 +time_per_sample = measTime / num_samples
 +
 +for i in PulsBreite:
 +    PulseTime.append(i*time_per_sample)
 +
 +print(PulseTime)
 +
 +
 +
 +# Plot mit drei subplots werden erstellt. Die x-Achse gilt fuer alle Plots (Parameter: sharex=True)
 +fig, axs = plt.subplots(3, sharex=True)
 +
 +# Plot
 +axs[0].plot(x, rawData)
 +axs[0].set_title('Pulse sensor raw data')
 +
 +axs[1].plot(x, filteredData)
 +axs[1].plot(x, thres_vec, 'r')
 +axs[1].set_title('Pulse sensor fltered data')
 +
 +axs[2].plot(x, binPulseData)
 +axs[2].set_title('Pulse')
 +
 +
 +plt.show()
 +
 +
 +# Plot wird gespeichert. Dateiname: FILENAME (wird in der Variablendefinition angegeben)
 +plt.savefig(FILENAME)
 +
 +
 +# Ausgabe LCD-Display
 +lcd.lcd_clear()
 +
 +lcd.lcd_display_string(lcd_row1, 1)
 +
 +lcd_row2 = "measure done..."
 +
 +lcd.lcd_display_string(lcd_row2, 2)
 +
 +# Ausgabe am Terminal
 +print("measure done...")
 +print("###############")
 +print("### Summary ###")
 +print("Pulse/min.: " + str(counterPuls*6))
 +print("Time per sample: " + str(time_per_sample))
 +print("measure time: " + str(measTime))
 +print("number samples: " + str(len(rawData)))
 +print("saved file name: " + FILENAME)
 +
 +# alle LEDs blinken 5x
 +allLedBLINK(5, 0.5)
 +
 +puls = counterPuls
 +if puls > 100:
 +    subject = 'Pulswert aus Zimmer 014'
 +    body = 'Der Puls des Patienten aus Zimmer 014 liegt bei mehr als 100 Schlägen pro Minute!'
 +    
 +    em = EmailMessage()
 +    em['From'] = email_sender
 +    em['to'] = email_receiver
 +    em['Subject'] = subject
 +    em.set_content(body)
 +    context = ssl.create_default_context()
 +    
 +    with smtplib.SMTP_SSL('smtp.gmail.com', 465, context=context) as smtp:
 +        smtp.login(email_sender, email_password)
 +        smtp.sendmail(email_sender, email_receiver, em.as_string())
 +
 +elif puls < 60:
 +    subject = 'Pulswert aus Zimmer 014'
 +    body = 'Der Puls des Patienten aus Zimmer 014 liegt bei weniger als 60 Schlägen pro Minute!'
 +    
 +    em = EmailMessage()
 +    em['From'] = email_sender
 +    em['to'] = email_receiver
 +    em['Subject'] = subject
 +    em.set_content(body)
 +    context = ssl.create_default_context()
 +    
 +    with smtplib.SMTP_SSL('smtp.gmail.com', 465, context=context) as smtp:
 +        smtp.login(email_sender, email_password)
 +        smtp.sendmail(email_sender, email_receiver, em.as_string())
 +   
 +# GPIOs freigeben
 +cleanGPIOs()
 +
 +>
 +</file>
 +
 +----
 +
 +=== Spiel spielen (TicTacToe) ===
 +Nebenbei haben wir ein Spiel hinzugefügt auf PysimpleGui, was über Touch einfach zu spielen ist. Der Quellcode wurde komplett aus dem Tutorial entnommen:
 +[[https://www.youtube.com/watch?v=q7Q1EQ1dZdM]]
 +<file python >
 +<#!/usr/bin/python3
 +import PySimpleGUI as sg
 +import game_window
 +import subprocess
 +import lcddriver
 +from time import*
 +
 +lcd = lcddriver.lcd()
 +lcd.lcd_clear()
 +
 +layout = [
 +            [sg.Text("Geben Sie den Namen des ersten Benutzers an!"), sg.Input(key='-FIRST_PLAYER-', do_not_clear=True, size=(20, 1))],
 +            [sg.Text(" ", size=(400,1))],
 +            [sg.Text("Geben Sie den Namen des zweiten Benutzers an!"), sg.Input(key='-SECOND_PLAYER-', do_not_clear=True, size=(20, 1))],
 +            [sg.Text(" ", size=(400,2))],
 +            [sg.Button('Spiel starten'), sg.Text(" "), sg.Exit()]
 +        ]
 +
 +
 +window = sg.Window('Tic Tac Toe', layout, size=(400,260))
 +
 +while True:
 +    event, values = window.read()
 +    if event in (sg.WIN_CLOSED, 'Exit'):
 +        lcd.lcd_clear()
 +        break
 +
 +    elif event == 'Spiel starten':
 +        players = [values['-FIRST_PLAYER-'], values['-SECOND_PLAYER-']]
 +        game_window.initiate_game(players)
 +
 +
 +window.close()
 +
 +>
 +</file>
 +
 +<file python game_window.py>
 +<#!/usr/bin/python3
 +import PySimpleGUI as sg
 +import lcddriver
 +from time import*
 +
 +lcd = lcddriver.lcd()
 +lcd.lcd_clear()
 +
 +
 +sg.theme('DarkBrown5')
 +
 +def check_if_winner(board):   
 +    for column in range(0, 3):
 +        print(board)
 +        if ((0,column) in board.keys()) and ((1, column) in board.keys()) and ((2, column) in board.keys()):
 +            if board[(0, column)] == board[(1, column)] == board[(2, column)]:
 +                return board[(0, column)]
 +    
 +    for row in range(0, 3):
 +        if ((row, 0) in board.keys()) and ((row, 1) in board.keys()) and ((row, 2) in board.keys()):
 +            if board[(row, 0)] == board[(row, 1)] == board[(row, 2)]:
 +                return board[(row, 0)]
 +
 +    if ((0,0) in board.keys()) and ((1,1) in board.keys()) and ((2,2) in board.keys()):
 +        if board[(0,0)] == board[(1,1)] == board[(2,2)]:
 +            return board[(1,1)]
 +
 +    if ((2,0) in board.keys()) and ((1,1) in board.keys()) and ((0,2) in board.keys()):
 +        if board[(2,0)] == board[(1,1)] == board[(0,2)]:
 +            return board[(2, 0)]        
 +
 +def initiate_game(players):
 +    board, player = {}, 0
 +
 +    layout = [[sg.Text('Current Player: ' + players[player], key='-CURRENT_PLAYER-')]]
 +    for row in range(3):
 +        new_row = []
 +        for column in range(3):
 +            new_row.append(sg.Button(size=(3, 2), key=(row, column)))
 +        layout.append(new_row)
 +    layout.append([sg.Button('Nochmal'), sg.Button('Cancel')])
 +
 +    window = sg.Window('TicTacToe', layout, size=(400,240), use_default_focus=False)
 +    while True:
 +        event, values = window.read()
 +        if event == sg.WIN_CLOSED or event == 'Cancel':
 +            break
 +        
 +        if event == 'Reset':
 +            board = {}
 +            for row in range(3):
 +                for col in range(3):
 +                    window[(row, col)].update('')
 +
 +        elif event not in board:
 +            board[event] = player
 +            window[event].update('X' if player else '0')
 +            is_winner = check_if_winner(board)
 +            if is_winner is not None:
 +                sg.popup("Der Gewinner ist "+ players[player])
 +                lcd.lcd_display_string("Gewinner: "+ players[player], 1)
 +                lcd.lcd_display_string("Glückwunsch!", 2)
 +                break
 +            player = (player + 1) % 2
 +            window['-CURRENT_PLAYER-'].update('Current player: ' + players[player])
 +
 +    window.close()
 +
 +>
 +</file>
 +
 +----
 +
 +=== LCD-Display ===
 +Der Quellcode für den kleinen LCD-Display wurde aus den Vorlesungsskripten entnommen.
 +
 +
 +===== Schaltplan =====
 +{{:raspberrycamera.jpeg?500|}}   {{:schaltplanpflegeruf.jpeg?600 |}} 
 +//Auf dem Schaltplan (linke Seite) fehlt die Kamera. Deswegen ist auf der rechten Seite extra der Anschluss der Kamera am Raspberry Pi 4 B zu sehen.//