Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
medikamenten-stell-system [2019/07/01 23:19] – student | medikamenten-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, | ||
+ | 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: ===== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | |||
+ | **Bauteile: | ||
+ | |||
+ | Als Bauteile wurden ein Raspberry Pi Touch-LCD-Screen, | ||
+ | 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 ,, | ||
+ | |||
+ | 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 " | ||
+ | def stellen (): | ||
+ | |||
+ | # | ||
+ | conn = sqlite3.connect(' | ||
+ | curs = conn.cursor() # erzeugen eines Objekts um Datensaetze aus einer DB auszulesen | ||
+ | |||
+ | # sende SQL-Befehl an DB um alle Zeilen der Spalte " | ||
+ | curs.execute(" | ||
+ | |||
+ | conn.commit() # Änderung in der DB speichern | ||
+ | curs.close | ||
+ | conn.close # Verbindung zur DB schliessen | ||
+ | |||
+ | |||
+ | print(" | ||
+ | # 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, | ||
+ | |||
+ | # 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(" | ||
+ | a, | ||
+ | print(barcodeData) | ||
+ | |||
+ | # Zuweisung der Variablen | ||
+ | neumed = b | ||
+ | gestellt = 0 | ||
+ | |||
+ | # | ||
+ | conn = sqlite3.connect(' | ||
+ | cur = conn.cursor() | ||
+ | curv = conn.cursor() | ||
+ | |||
+ | # Abfrage an die DB ob das eingescannte Medikament schon gestellt wurde | ||
+ | cur.execute(" | ||
+ | # Abfrage an die DB ob das eingescannte Medikament in der DB ist | ||
+ | curv.execute(" | ||
+ | |||
+ | # wenn Medikament nicht in der DB ist, gibt es eine Meldung aus | ||
+ | if len(list(curv)) == 0: | ||
+ | print(" | ||
+ | |||
+ | # falls ja, pruefe ob Medikament schon gestellt wurde | ||
+ | else: | ||
+ | if len(list(cur)) == 0: # wenn ja, gebe Meldung/ | ||
+ | print(" | ||
+ | # wenn nicht,setze den Wert fuer gestellt auf 1 in der DB | ||
+ | else: | ||
+ | cur.execute(" | ||
+ | |||
+ | conn.commit() | ||
+ | cur.close | ||
+ | conn.close | ||
+ | time.sleep(3.0) | ||
+ | |||
+ | vs.stop() | ||
+ | |||
+ | </ | ||
+ | |||
+ | **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 | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | # Zuweisung der Variablen | ||
+ | | ||
+ | | ||
+ | | ||
+ | neumittags = e | ||
+ | | ||
+ | | ||
+ | | ||
+ | # Verbindung zur DB | ||
+ | conn = sqlite3.connect(' | ||
+ | cur = conn.cursor() | ||
+ | | ||
+ | |||
+ | # überprüfe ob das Medikament schon in der DB ist, falls ja, beende die Schleife | ||
+ | if len(list(cur)) != 0: | ||
+ | print(" | ||
+ | # wenn nicht, | ||
+ | else: | ||
+ | print(" | ||
+ | cur1 = conn.cursor() | ||
+ | cur1.execute(" | ||
+ | values(?, ?, ?, ?, ?, ?, ?)", (neumed, neudos, neumorg, neumittags, neuabends, neunachts, neuhinweise)) | ||
+ | conn.commit() | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Quellen ===== | ||
+ | - Erstellen der QR-Codes [[https:// | ||
+ | |||
+ | |||
+ | - QR-Code Scanner | ||
+ | [[https:// | ||
+ | |||
+ | - Datenbank SQLite3 | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | [[http:// | ||
+ | |||
+ | - GUI | ||
+ | [[https:// | ||
+ | | ||
+ |