Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
medikamenten-stell-system [2019/07/01 23:41] studentmedikamenten-stell-system [2023/07/03 10:16] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +===== Medikamenten-Stell-System =====
 + 
 +Wir haben ein System entwickelt, welches die Aufgabe des „Medikamenten Stellens“ übernehmen kann. Das Einscannen der einzelnen Medikamente ermöglicht dem Benutzer sich Gewissheit zu verschaffen, ob er das Medikament schon gestellt hat oder nicht. 
 +Dabei hat man die Möglichkeit über den Button „neues Medikament einpflegen“ ein neues Medikament, mittels scannen des QR-Codes, welcher sich auf der Verpackung des Medikaments befindet, in die Datenbank einzupflegen und über den Button „Medikament stellen“ ein Medikament für die Tageseinnahme vorzubereiten. Dieses geschieht wieder durch das Scannen des QR-Codes, da so die Informationen über das jeweilige Medikament aus der Datenbank abgefragt und ausgegeben werden. 
  
 +
 +
 +
 +===== Aufbau: =====
 +
 +{{:img-0910.jpg?400|}}
 +
 +
 +
 +**Bauteile:**
 +
 +Als Bauteile wurden ein Raspberry Pi Touch-LCD-Screen, ein Raspi-Cam Kameramodul und ein Raspberry PI 3 verwendet. 
 +Der Raspberry Pi Touch-LCD-Screen und das Raspi-Cam Kameramodul sind über ein Flachbandkabel mit dem Raspberry PI 3 verbunden.
 +
 +
 +
 +
 +===== Code-Ausschnitte: =====
 +
 +Besteht aus drei Teilen:
 +  *  Graphische Oberfläche
 +  *  Medikament stellen
 +  *  neues Medikament einpflegen
 +
 +Import von ,,tkinter“ Bibliothek erforderlich
 +
 +Python als Programmiersprache 
 +
 +
 +
 +
 +** Exportieren der Daten aus der SQLite Datenbank in eine CSV-Datei um den QR-Code zu erstellen: **
 +
 +1) Eingabe: .mode csv
 +
 +2) Eingabe: .separator ,
 +
 +3) Eingabe: .once Dateiname.csv
 +
 +4) Eingabe: SELECT * FROM Tabellenname;
 +
 + 
 +<file python medistellen.py>
 +# Code des ersten Buttons mit der Funktion "stellen"
 +def stellen ():
 +
 + #Verbindung zur DB
 + conn = sqlite3.connect('medis.db')
 + curs = conn.cursor() # erzeugen eines Objekts um Datensaetze aus einer DB auszulesen
 +
 + # sende SQL-Befehl an DB um alle Zeilen der Spalte "gestellt" auf Null zu setzen
 + curs.execute("UPDATE stellliste SET gestellt= 0")
 +
 + conn.commit() # Änderung in der DB speichern
 + curs.close  # schliesst den Cursor
 + conn.close # Verbindung zur DB schliessen
 +
 +
 + print(" Bitte Medikament einscannen")
 + # Startet den VideoStream und warm laufen der Kamera
 + vs = VideoStream(usePiCamera=True).start()
 + time.sleep(2.0)
 +
 +
 + while True:
 +        # Liest das Muster des QR-Codes ein und setzt ein Maximum der Breite von 400 Pixel
 +        frame = vs.read()
 +        frame = imutils.resize(frame, width=400)
 +
 +        # Dekodieren des  eingescannten QR-Code
 +        barcodes = pyzbar.decode(frame)
 +
 +        for barcode in barcodes:
 +                # wandelt die QR-Code Daten in einen utf-8 string
 +                barcodeData = barcode.data.decode("utf-8")
 + a,b,c,d,e,f,g,h = barcodeData.split(",") #splittet den qr-code
 +                print(barcodeData)
 +
 +                # Zuweisung der Variablen
 +                neumed = b
 +                gestellt = 0
 +
 + #Verbindung zur DB
 +                conn = sqlite3.connect('medis.db')
 +                cur = conn.cursor()
 +                curv = conn.cursor()
 +
 +                # Abfrage an die DB ob das eingescannte Medikament schon gestellt wurde
 +                cur.execute("select * from stellliste WHERE medikament= ? AND gestellt=?",(neumed, gestellt,))
 +                # Abfrage an die DB ob das eingescannte Medikament in der DB ist
 +                curv.execute("select * from stellliste WHERE medikament= ?",(neumed,))
 +
 +                # wenn Medikament nicht in der DB ist, gibt es eine Meldung aus
 +                if len(list(curv)) == 0: 
 +                        print("Medikament nicht gefunden")
 +
 +  # falls ja, pruefe ob Medikament schon gestellt wurde
 +                else:
 +                        if len(list(cur)) == 0:         # wenn ja, gebe Meldung/Hinweis
 +                                print("Medikament wurde schon gestellt.")
 +                        # wenn nicht,setze den Wert fuer gestellt auf 1 in der DB
 +                        else:
 +                                cur.execute(" UPDATE stellliste SET gestellt=1 WHERE medikament=?",(neumed,))
 +
 +                        conn.commit()
 +                cur.close
 +                conn.close
 +        time.sleep(3.0)
 +
 + vs.stop()
 +
 +</file>  
 +
 +**Code-Ausschnitt um ein neues Medikament in die Datenbank hinzuzufügen.**
 +<file python hinzufuegen.py>
 +
 +# dekodiert den eingescannten QR-Code
 +barcodes = pyzbar.decode(frame)
 +
 +   for barcode in barcodes:
 +   # wandelt die QR-Code Daten bzw. cvs-Datei in einen utf-8 string um
 +         barcodeData = barcode.data.decode("utf-8")
 +         a,b,c,d,e,f,g,h = barcodeData.split(",") #splittet den qr-code
 +         print(barcodeData)
 +
 +         # Zuweisung der Variablen
 +         neumed = b
 +         neudos = c
 +         neumorg = d
 + neumittags = e
 +         neuabends = f
 +         neunachts = g
 +         neuhinweise = h
 + # Verbindung zur DB
 +         conn = sqlite3.connect('medis.db')
 +         cur = conn.cursor()
 +         cur.execute("select * from stellliste where Medikament=? ",(neumed,))
 +
 + # überprüfe ob das Medikament schon in der DB ist, falls ja, beende die Schleife
 +         if len(list(cur)) != 0:
 +                print("Medikament schon vorhanden")
 + # wenn nicht,speicher Daten aus dem QR-Code in die DB
 + else:
 +                print("Medikament neu eingetragen")
 +                cur1 = conn.cursor()
 +                cur1.execute("insert into stellliste (medikament, dosierung,morgens, mittags, abends, nachts, hinweise) 
 +                values(?, ?, ?, ?, ?, ?, ?)", (neumed, neudos, neumorg, neumittags, neuabends, neunachts, neuhinweise))
 +                conn.commit()
 +         cur.close
 +         conn.close # schließt die Verbinung zur DB
 +</file>  
 +
 +
 +===== Quellen =====
 +-  Erstellen der QR-Codes [[https://white.qrd.by/user/bulk/import/upload]]
 +
 +
 +- QR-Code Scanner
 +[[https://www.pyimagesearch.com/2018/05/21/an-opencv-barcode-and-qr-code-scanner-with-zbar/]]
 +
 +- Datenbank SQLite3
 +[[https://randomnerdtutorials.com/sqlite-database-on-a-raspberry-pi/]]
 +[[https://docs.python.org/3/library/sqlite3.html]]
 +[[http://www.schwarze-schuette.de/wp-content/uploads/2011/05/SQLite-Tutorial-13.pdf]]
 +
 +- GUI
 +[[https://tutorials-raspberrypi.de/programmieren-lernen-am-raspberry-pi-teil-3-gui-erstellen/]]
 +  
 +