Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
putnik [2018/07/04 19:01] studentputnik [2023/07/03 10:16] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== PUTNIK ======
 +
 +
 +----
 +==== Beschreibung: ====
 + 
 +
 +Ein Medikamentenschrank, der es dank eines intelligenten Bestellsystems, den Nutzern ermöglicht, notwendige Medizinprodukte und Medikamente anhand eines QR-Code ein zu scannen.\\ Vor jedem Benutzen des Systems wird eine Authentifizierung des Anwenders verlangt. Wenn die Login Daten richtig sind entriegelt das System den Schrank, wenn nicht bleibt er verriegelt.\\ Nach dem erfolgreichen Scanvorgang kann der Bestellauftrag direkt an die Apotheke oder an eine Logistik-Einheit des Krankenhauses geschickt werden.
 +Dabei führt Putnik eine Datenbank darüber, welcher Bestand noch zur Verfügung steht und ob zu viele oder zu wenige Produkte vorhanden sind.
 +
 +----
 +==== Aufbau: ====
 +{{ :putnikprojektfritzing.jpg?nolink&600 |}}
 +
 +==== Bauteile: ====
 +
 +unten links: Touch-LCD-Screen,\\  unten rechts: Raspberry Pi 3,\\  oben rechts: Raspi-cam Kameramodul\\  oben links: Servomotor, um Schrank abschließen zu können.\\ Alles wird verbunden mittels Flachbandkabel bzw. Verbinderkabel.
 +
 +----
 +
 +==== Code-Ausschnitte: ====
 +
 +Import von ,,tkinter“ Bibliothek erforderlich
 +Python als Programmiersprache 
 +<file python HauptGui.py>
 +
 +#Die Buttons
 +#Der Code des ersten Buttons der GUI mit der Funktion Auffüllen
 +def callback1():    
 +    os.system("./scannen.sh") #ruft das bash-skript auf, das den scan ausfuehrt und das Ergebnis ins logfile schreibt
 +    #liest den Medikamenten namen aus dem logfile aus
 +    f = open("logfile")#öffnet die datei "logfile"
 +    medikament = f.read()#liest die datei "logfile" und speichert in variabler medikament
 +    medikament = medikament.strip()#entfernt zeilenumbrüche + leerzeichen
 +    #falls nichts gescannt wurde wird eine fehlermeldung ausgegeben
 +    if medikament == "Barcode konnte nicht gescannt werden, bitte versuchen Sie es erneut." :
 +        box.showwarning("Fehler","Barcode konnte nicht gescannt werden, bitte versuchen Sie es erneut.")
 +    else : 
 +        #liest Medikamentenbestand aus dem  File "bestand" aus
 +        filename = 'bestand'
 +        medi_bestand = {}#legt ein dictionary an
 +        with open(filename) as fh:#öffnet bestand und schließt es nach gebrauch wieder
 +                for line in fh:
 +                        praeparat, bestand = line.strip().split(' ')#jede zeile in bestand enthält 2 parameter mit trennzeichen (split), 
 +                        medi_bestand[praeparat] = int(bestand.strip())#weist im dictionary jedem praeparat einen wert als int zu
 +    #Medikamente einfuellen
 +        medi_bestand[medikament]+=Slider.get()#erhöht die Anzahl des gescanneten Medikaments um den Wert des Sliders
 +    #speichere die aenderung in datei bestand ab
 +        with open('bestand','w') as file: # w = write
 +                for medikament in medi_bestand:
 +                        file.write(medikament + " " + str(medi_bestand[medikament]) + "\n" )#schreibt den bestand wieder als string und fügt zeilenumbruch ein
 +    #zeigt den Erfolgsmeldung auf dem Bildschirm an
 +        box.showinfo('Auffüllen',"Erfolgreicher Scan!")
 +
 +</file>
 +
 +
 +<file bash scannen.sh>
 +
 +#!/bin/bash
 +for ((versuche=0; versuche<10; versuche++))
 +do
 +
 + #schieße Foto
 + scan=$( raspistill -o /home/pi/Projekt/scan.png --width 800 --height 800 --sharpness 100 --contrast 100  )  
 + echo $scan
 + #bearbeite das Foto, damit das Schwarz besser heraussticht
 + convert /home/pi/Projekt/scan.png -black-threshold 20% /home/pi/Projekt/bearbeitet.png
 + #Scanne Barcode
 + qrcode=$(zbarimg -q  /home/pi/Projekt/bearbeitet.png)
 + #überprüfe ob scannen erfolgreich war, falls ja beende die schleife
 + if [ $? -eq 0 ]
 + then
 + command=$(echo $qrcode | awk -F: '{print $2}'
 + echo $command > /home/pi/Projekt/logfile
 + break
 + fi
 + #falls nein geht es weiter bis genug versuche gemacht wurden
 + if [ $versuche -eq 9 ] #nach dem letzten Versuch schreibt er eine Fehlermeldung ins logfile
 + then
 + echo "Barcode konnte nicht gescannt werden, bitte versuchen Sie es erneut." > /home/pi/Projekt/logfile
 + fi
 +done
 +
 +</file>
 +