Posts by Bubi

    Quote

    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Ein weiterer Punkt wo ich mich null auskenne. Der PI „alleine“ wird es wohl nicht schaffen, die ganzen [/font][font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Servo[/font][font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]s [/font][font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]ansteuern[/font][font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"] zu können. Daher benötige ich doch sicher eine Erweiterung wie zB[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"] [/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Erweiterung 1[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Erweiterung 2[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"] [/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Ist Python beispielsweise eine brauchbare Sprache (für meinen Fall)? Der Polulu Maestro verwendet diese ja anscheinend.[/font]


    1: Der PI schafft es "alleine" alle 6 Servos anzusteuern. Es gibt genügend GPIO Pins, die softwareseitige PWM erlauben.
    2: Python ist (auch) brauchbar dafür.
    3: Warum eröffnest Du 2 Themen für das gleiche Problem?

    Hallo Donjupp2009,


    wie Du Deinen Servo zum laufen bringst, kann ich Dir auch nicht sagen.
    Ich will aber mal auf das "Phänomen" eingehen, dass sich der Servo, beim Anschluss an einen Pin bewegt, ohne dass der Pi überhaupt eingeschaltet ist (nur LAN-Kabel).


    "Habe Spaßes halber mal das Signalkabel an einen X-beliebigen GPIO angelegt, der Servo dreht konstant. Warum kurios? Der Pi ist nicht an und das Netzteil ist garnicht angesteckt. Aber woher kommt das Signal? Bleibt ja nur eine Möglichkeit, das LAN- Kabel... Wenn ich das abstecke, hört der Servo auch auf zu drehen."


    Das Problem hört sich sehr nach einem "Masseproblem" an.
    Wie Du schreibst, hast Du den Servo an einem anderen Netzteil hängen, wie den Pi. Ist auch sehr vernünftig.
    Hast Du die beiden "Massen" (Minus vom PC Netzteil und ein "GROUND" vom Pi) verbunden? Wenn nicht, können die tollsten "Phänomene" auftreten. Da reicht schon die Spannung vom LAN-Kabel.
    Am einfachsten ist, das Kabel, welches an den Minus vom Servo geht zusätzlich mit einem GROUND vom Pi verbinden.


    Gruß
    Bubi

    Hallo jar,


    Java erwähnt im ersten Beitrag den "L293D". In einem weiteren Beitrag ist die Rede von einem womöglich "falsch herum positionierter Widerstand".
    Daher gehe ich davon aus, dass sie kein fertiges Board benutzen, sondern sich mit dem "L293D" selbst ein Driverboard basteln wollen. Keine andere Schaltung auf der im ersten Beitrag verlinkten Seite beinhaltet einen Widerstand.
    Daher auch meine Empfehlung, ein fertiges Board zu benutzen.


    Gruß
    bubi

    Ist schon etwas spät, aber vielleicht hilft es doch noch.
    Pythonscript zur Ansteuerung eines bipolaren Schrittmotors.
    Dabei habe ich mich an dem Skript für einen unipolaren Motor von hier orientiert.
    Benutzte Hardware:
    - Raspberry Pi (verständlich)
    - Treiber: LN298 (gibt's auch wesentlich billiger)
    - Schrittmotor
    Im ersten Skript dreht der Motor die gewünschten Anzahl von Schritten, mit der in "Pause" angegebenen Schritten.
    Im 2. Skript kann man überprüfen, ob bei den jeweiligen Schritten "Stepps" auch die gewünschten Eingänge des Treibers angesteuert werden (beim Ausführen keinen Motor anschließen).
    Wie hier dargestellt, kann ein bipolarer Stepper auch in "Halbschritten" angesteuert werden. Dies habe ich aber noch nicht getestet.


    Skript 1:




    Skript 2:


    Ich dosiere auch Flüssigkeiten, zeitgesteuert über Pumpen (hier). Daher kann ich behaupten, dass zumindest mit Billigpumpen kein ml - genaues dosieren möglich ist, was aber bei meinem Projekt nicht so zu Buche schlägt.
    Für das o.g. Projekt hatte ich auch versucht, das Volumen über eine Einwegspritze, angetrieben von einer Spindel und Schrittmotor zu erhalten. Musste aber bald feststellen, dass Einwegspritzen - wie der Name schon sagt - auf Dauer nicht dazu geeignet sind. Wenn diese Methode, dann mit hochwertigem Equipment (Mehrwegspritze, oder der Vorschlag von Andreas).
    Eine weitere Möglichkeit wären zwei Magnetventile. Die benötigte Menge an Flüssigkeit wird zwischen den Ventilen gestaut.
    1: unteres Ventil zu, oberes Ventil auf. Jetzt läuft die Flüssigkeit in den Behälter zwischen den Ventilen.
    2: Oberes Ventil zu, unteres Ventil auf. Jetzt läuft die dosierte Flüssigkeitsmenge aus dem Behälter.

    Da kann ich mich __deets__ nur anschließen. Anlagen welche zuversichtlich ml genau dosieren sind für den privaten Gebrauch nicht bezahlbar.
    Eine annähernde Lösung wäre vielleicht diese:
    Man nimmt einen größeren Ausgangsbehälter und einen kleineren, in welche die Flüssigkeit hinein gemessen wird. Im ml - Bereich könnte man eine Einwegspritze in betracht ziehen.
    Von dieser den Kolben entfernen und so abschneiden, dass sie bis zum Rand genau die gewünschten ml aufnimmt.
    Diese Spritze nun oberhalb des Ausgagsbehälters platzieren. Nun mit einer Pumpe die Spritze befüllen. Die Pumpe so lange laufen lassen, bis die Spritze überläuft. Die überflüssige Flüssigkeit fließt in den Ausgangsbehälter zurück.
    Nun mittels Magnetventil die Spritze leeren.
    Ist bestimmt nicht die eleganteste Lösung, aber im bezahlbaren Bereich.

    Habe wohl zu früh nachgefragt.
    Habe das Problem gelöst, indem ich die Bedingung: "if GPIO.input (GPIO vom Taster) == 0" an den Anfang der Interrupt-Routine gesetzt habe.
    Jetzt kann "sleep ()" auch höher als "bouncetime" sein.


    Gruß
    bubi

    Hallo timsch,


    hast Du inzwischen eine Lösung für das Problem?
    Ich stehe gerade vor dem gleichen Problem und finde keine Lösung.
    Der zweite Interrupt wird ausgelöst, wenn "sleep ()" größer als "bouncetime" ist.


    Danke,


    Gruß
    bubi

    Falls Du aber mal einen GPIO Port mit angeschlossenen Relaisboard als Eingang konfigurieren solltest, ist er vermutlich schnell kaputt.


    Habe zwar nicht vor, die am Board angeschlossenen GPIO Ports als Eingänge zu definieren, noch will ich Deine Aussage dementieren. Dazu habe ich viel zu wenig Ahnung.
    Dennoch will ich mir die Frage erlauben: Warum soll der RPI kaputt gehen? Wie schon erwähnt, habe ich an den In - Anschlüssen vom Relaisboard ca. 2,9 V gemessen.

    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]@ [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]BarnyFeuerstein[/font][font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"] [/font][/font]


    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"][font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Habe heute auch so ein Relaisboard (8 Kanal) getestet. [/font][/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"][font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Angeschlossen habe ich auch (externe) +5 V an VCC von der 10-er Leiste und hier auch GND. [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]JD-VCC und VCC sind überbrückt.[/font] [/font][/font][font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Dabei konnte ich auch nur ca. 2,9 V a[/font][font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]n den IN - Anschlüssen messen.[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Somit dürfte es für den RPI kein Problem sein, die IN - Anschlüsse direkt über die GPIO´s des RPI zu steuern.[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Im Kurztest hat mein RPI überlebt.[/font]


    Melde dich wenn's nicht so hinhaut wie von dir gewünscht ....


    Hallo flyer99,


    nochmals besten Dank für die Unterstützung.
    Habe den Code für den Reaktionstest nach Deiner Empfehlung abgeändert.
    Obwohl Interrupts für mich Böhmische Dörfer waren, habe ich es irgendwie geschafft.
    Wie es aussieht, sollte es jetzt hinhauen.


    Gruß
    Bubi


    Hier der Code:

    Hallo flyer99,


    besten Dank für Deine Antwort.
    Komme zwar nicht aus dem "Land - Ländle", aber auch nicht weit davon weg. Ich wohne bei Crailsheim...
    Wie schon erwähnt, bin ich blutiger Anfänger in Sachen Programmierung, aber werde mal versuchen es mit Interrupts zu realisieren.


    Gruß
    Bubi

    [font="Calibri"]Schankanlage mit Reaktionstest[/font]


    [font="Calibri"]Hallo zusammen![/font]
    [font="Calibri"]Nach einigen Fehlschlägen und intensiver Internetrecherche habe ich nun mein erstes Projekt zum Großteil funktionsfähig.[/font]
    [font="Calibri"]Bei dem Schlagwort: „Erstes Projekt“, denkt man normalerweise an Jugendliche von 14 -15 Jahren. Dies ist bei mir leider nicht der Fall. Meine Kinder haben schon fast 30 Jahre auf dem Buckel…[/font]
    [font="Calibri"]Dennoch will ich hiermit zeigen, dass es nie zu spät ist mit einem neuen Hobby zu beginnen.[/font]
    [font="Calibri"]Obwohl ich sowohl auf dem Gebiet „Raspberry“, als auch in der Programmierung ein absoluter Neuling bin, habe ich es irgendwie (zum Teil) geschafft. Ich hatte zwar schon ein wenig Erfahrung in Sachen: „MS Excel 4 Makros“ jedoch sonst wirklich nie etwas mit Programmierung am Hut. Ja, „MS Excel 4“ ist wahrscheinlich für die meisten Leser(innen) dieses Forums überhaupt kein Begriff mehr :s[/font]
    [font="Calibri"]OK, muss gestehen, dass ich vor ein paar Jahren mal mit der „Programmiersprache“: „click.exe“ ein wenig herumexperimentiert und unter anderem auch eine Relaiskartensteuerung – angeschlossen am parallelen Port eines Windows PC´s hin bekommen habe. [/font]
    [font="Calibri"]Nun aber genug geplappert. Jetzt geht’s zur Sache.[/font]
    [font="Calibri"]Wie die Überschrift schon sagt, habe ich eine Ausschankanlage gebastelt. Damit man nicht nur dumm an der Bar herum steht, habe ich noch einen Reaktionstest hinzugefügt.[/font]
    [font="Calibri"]Das Ganze ist natürlich zum privaten Zweck gedacht. Darum muss ich auch nicht irgendwelche gesetzliche Vorschriften beachten. Es reicht, dass keiner bei der Benutzung einen Schaden davon trägt.[/font]
    [font="Calibri"]Das Prinzip ist ganz schnell erklärt:[/font]
    [font="Calibri"]Auf einem Drehteller, angetrieben von einem Schrittmotor, stehen bis zu 6 Schnapsgläser (20 ml). Über eine Tastatur kann angewählt werden, wie viele Gläser gefüllt werden sollen.[/font]
    [font="Calibri"]Zurzeit steuere ich den PI über einen (Windows)Laptop, über „Remotedesktop“. Dies ist einfacher, als eine Tastatur und Bildschirm herumzutragen.[/font]
    [font="Calibri"]Nach Eingabe der Anzahl beginnt der Teller zu drehen. Über einen kapazitiven Sensor wird erkannt, wenn ein Glas unter dem Einlaufstutzen steht. Dann startet – zeitgesteuert - eine Pumpe und füllt das darunter stehende Glas. Der Vorgang wird wiederholt, bis die Anzahl der eingegebenen Gläser erreicht ist.[/font]
    [font="Calibri"]Das war der Anfang, mit einer Pumpe. Inzwischen habe ich das Projekt – zumindest theoretisch – auf 4 Pumpen erweitert. Damit können 4 verschiedene Getränkesorten und die Gläseranzahl ausgewählt werden. Zurzeit habe ich nur 1 Pumpe und 3 LED´s angeschlossen.[/font]
    [font="Calibri"]Warum 4? Ich steuere die Pumpen über eine „Doppel H Brücke“. Diese hat ja 4 Ein- und Ausgänge. Da ich weder PWZ, noch Richtungsänderung an den Pumpen brauche, „missbrauche“ ich diese Brücke als eine Art Relaiskarte. Und es funktioniert.[/font]
    [font="Calibri"]Die von mir verwendete Membranpumpe schafft 20 ml in 7 Sek. Dies, wenn die Flasche unterhalb des Einfüllstutzens steht. Wenn die Flasche oberhalb ist, besteht das Risiko, dass die Flüssigkeit nachtropft.[/font]
    [font="Calibri"]Inzwischen habe ich mir aber auch eine Zahnradpumpe besorgt. Diese hat ein größeres Pumpvolumen, jedoch zieht sie auch bis zu 4,5 A! Daher kann ich sie schlecht mit meiner jetzigen Hardware benutzen. Die H Brücke verträgt nur bis max. 2 A und auch das benutze 12 V Netzteil liefert nur 2 A. Habe sie zwar mal kurz getestet, jedoch will ich mir meine Hardware nicht zerschießen. Daher kann ich diesbezüglich auch keine brauchbaren Infos liefern.[/font]
    [font="Calibri"]Inzwischen habe ich mir ein größeres Netzteil – 12 V, 10 A – und eine Relaiskarte bestellt. Dann kann ja nichts mehr schief gehen, oder?[/font]
    [font="Calibri"]Die H Brücke ersetze ich dann durch die Relaiskarte.[/font]
    [font="Calibri"]Bin mal gespannt, was die ausgewählte Zahnradpumpe dann leistet. In einem Internetbeitrag habe ich zwar gelesen, dass diese nicht das Gelbe vom Ei ist; aber „schaun mer mal“. Bei dem Preis kann man nichts kaputt machen…[/font]
    [font="Calibri"]Bin zwar mit der Membranpumpe zufrieden, jedoch muss man auch an ein „Speedup“ denken. Wenn das Glas dann in 3 statt 7 Sek. voll ist, ist das schon ein Fortschritt.[/font]
    [font="Calibri"]Na ja, nicht wirklich darum will ich auf andere Pumpen umsteigen. Im Hinterkopf schwebt der Gedanke, auch Mischgetränke ausschenken zu können. Dann muss ein größeres Volumen gepumpt werden…[/font]
    [font="Calibri"]Ich weiß zwar nicht, ob es so einfach ist kohlensäurehaltige Getränke – wie Cola – zu pumpen, aber „schaun mer mal“. Es gäbe da ja auch noch die Möglichkeit mit 2 Magnetventilen, wo die benötigte Menge dazwischen gestaut wird… Dann müsste aber der Spender (Flasche) oberhalb des Abfüllstutzens liegen. Ich plane aber, dass alle Getränke in einer - mit Eis gefüllten – Box unterhalb des Abfüllstutzens liegen. [/font]
    [font="Calibri"]Natürlich können diese Mischgetränke nicht auf dem Drehteller ausgeschenkt werden. Der verwendete Schrittmotor schafft es gerade mal 6 volle, 20 ml Gläser zu drehen.[/font]
    [font="Calibri"]Da würde eine „stationäre“ Abfüllposition, nach folgendem Prinzip, in Frage kommen:[/font]
    [font="Calibri"]1: Entweder über das gleiche Skript, wo man eben ein Getränk auswählt und das Glas dann unter den entsprechenden Ausschankstutzen stellt, oder[/font]
    [font="Calibri"]2: Ein separates Skript, einen 2. Sensor. Sobald der Sensor ein Glas erkennt, starten die entsprechenden Pumpen.[/font]
    [font="Calibri"]Die verwendete, als auch die Zahnradpumpe sind selbstansaugend. An der Saugleitung ist ein Rückschlagventil angebracht. [/font]
    [font="Calibri"]         [/font]
    [font="Calibri"]Warum „Doppel H Brücke“? Ganz einfach: Weil ich diese zur Verfügung hatte.[/font]
    [font="Calibri"]Zuerst wollte ich die Dosierung mittels einer Einwegspritze realisieren. Hier sollte – angetrieben von einem e-Motor, über eine Spindel - der Kolben vor und zurück bewegt werden. Noch jeweils ein Rückschlagventil vor und nach der Spritze und in der Theorie ist alles OK. Der erste Versuch war auch vielversprechend. Jedoch gibt eine Einwegspritze bald ihren Geist auf. Die Reibung zwischen Kolben und Spritze wird immer größer und nach kurzer Zeit verhakt sich der Kolben total. Diese Spritzen sind halt nur für den Einmalgebrauch gedacht. Eine Mehrwegspritze kam aus Kostengründen nicht in Frage. Da kostet eine Spritze mehr, als die ganze Anlage. Daher bin ich auf Pumpen umgestiegen. Natürlich dosieren die von mir verwendete(n) Pumpe(n) – zeitgesteuert - nicht auf den Milliliter genau. Ich dosiere aber nur Spirituosen und keine Medikamente. Da ist niemand böse, wenn er anstatt 20 ml, 22 ml, oder nur 18 ml im Glas hat.[/font]
    [font="Calibri"]Viele (Um)wege führen nach Rom. So auch mein Python Code. Er funktioniert zwar, jedoch bin ich mir sicher, dass einiges besser gemacht werden könnte.[/font]
    [font="Calibri"]Für die Statistik zähle ich die Anzahl der gefüllten Gläser und addiere diese in 4 verschiedenen Textdateien (je nach Getränkewahl). Gerade hier ist der Code – nach meiner Meinung – recht umständlich. Er funktioniert aber.[/font]
    [font="Calibri"]Wenn ich die Datei gleichzeitig zum lesen und schreiben öffne, ergibt mir die Addition einen unbrauchbaren Wert, da in diesem Fall immer hinten angehängt und somit ein ganz anderer Wert aus der Datei angenommen wird. Ja, ist recht unverständlich erklärt, aber Profis können eventuell was damit anfangen. [/font]
    [font="Calibri"]Für Anregungen bin ich Euch sehr dankbar.[/font]
    [font="Calibri"]Ich füge unten mal den Code für 4 Pumpen ein. [/font]
    [font="Calibri"] [/font]
    [font="Calibri"]Was nicht wirklich funktioniert ist der Reaktionstest![/font]
    [font="Calibri"]Er besteht aus 2 Taster und 3 LED´s. Die gedrückten Taster schalten den jeweiligen GPIO Port auf 0. Sin der Sache ist, dass nach dem aufleuchten der mittleren LED erkannt wird, welcher der beiden Taster zuerst gedrückt wurde. Dementsprechend leuchtet die zugehörige LED auf. Die mittlere LED beginnt nach 2 – 5 sec (Zufallsprinzip) zu leuchten. Wenn beide Taster schon gedrückt sind, sobald die ausschlaggebende (mittlere) LED aufleuchtet, blinken alle 3 LED´s auf. Keiner hat gewonnen. Wenn nur ein Taster schon gedrückt ist, bevor die LED aufleuchtet, hat der Andere noch ca. 5 Sek. die Möglichkeit zu drücken und zu gewinnen. Soweit funktioniert es auch.[/font]
    [font="Calibri"]Das Problem tritt auf, wenn beide Taster erst nach aufleuchten der mittleren LED gedrückt werden.[/font]
    [font="Calibri"] In diesem Fall bin ich der Meinung, dass der zuerst abgefragte Taster den Vorrang hat. Theoretisch ist es nun mal so, dass das zuerst abgefragte Ereignis Vorrang hat. Jedoch sollte sich dies praktisch nicht bemerkbar machen. Oder liege ich da mit meinen (sehr) beschränkten Programmierkenntnissen total falsch? An der Hardware kann es nicht liegen, denn es wird immer der Taster bevorzugt, den ich als ersten abfrage.[/font]
    [font="Calibri"]Für Anregungen bin ich sehr dankbar![/font]
    [font="Calibri"][font="Calibri"]Der Code ist weiter unten aufgeführt.[/font][/font]
    [font="Calibri"]Nun noch eine kleine Anmerkung zum Schluss:[/font]
    [font="Calibri"]Für Profis ist es ein alter Hut, dass man immer zuverlässige, wackelfreie Verbindungen herstellt. Ich musste dies erstmals schmerzhaft erlernen. Darum ein Hinweis an alle Neulinge so wie ich: Stellt erstmals sicher, dass Eure Verbindungen wirklich „bombenfest“ sind. Sonst passiert es Euch wie mir. Ich musste extra Skripts schreiben, damit ich den Zustand der GPIO Ports auslesen kann um meine wackeligen Verbindungen zu eliminieren.[/font]
    [font="Calibri"]Zum Schluss habe ich IDE – Kabel verwendet. Ein 40 – poliges IDE – Kabel passt genau auf den GPIO – Anschluss von Pi 2. [/font]
    [font="Calibri"] [/font]
    [font="Calibri"]Nun zu der verwendeten Hardware:[/font]
    [font="Calibri"] [/font]
    [font="Calibri"]-[/font][font="Times New Roman"] [/font][font="Calibri"]Raspberry Pi 2 Model B[/font]
    [font="Calibri"]-[/font][font="Times New Roman"] [/font][font="Calibri"]Schrittmotor mit Treiber[/font]
    [font="Calibri"]-[/font][font="Times New Roman"] [/font][font="Calibri"]Kapazitiver Sensor[/font]
    [font="Calibri"]-[/font][font="Times New Roman"] [/font][font="Calibri"]H Brücke[/font]
    [font="Calibri"]-[/font][font="Times New Roman"] [/font][font="Calibri"]Membranpumpe[/font]
    [font="Calibri"]-[/font][font="Times New Roman"] [/font][font="Calibri"]DC – DC Convertor[/font]
    [font="Calibri"]-[/font][font="Times New Roman"] [/font][font="Calibri"]Zahnradpumpe, noch zu Experimentierzwecken[/font]
    [font="Calibri"]-[/font][font="Times New Roman"] [/font][font="Calibri"]12 V, 2 A Netzteil, hatte ich so rumliegen. Wird durch dieses ersetzt (12V, 10 A)[/font]
    [font="Calibri"]-[/font][font="Times New Roman"]   [/font][font="Calibri"]5 V Netzteil für den Pi[/font]
    [font="Calibri"]-[/font][font="Times New Roman"] [/font][font="Calibri"]LED´s und Microtaster für den Reaktionstest.[/font]
    [font="Calibri"]-[/font][font="Times New Roman"] [/font][font="Calibri"]IDE Kabel für die Anschlüsse.[/font]


    Hier das Skript für die Schankanlage:
    [font="Calibri"]

    Python
    #!/usr/bin/python3.2[/font][/size][/color]# -*- coding: utf-8 -*-from time import sleepimport RPi.GPIO as GPIO#GPIOs unter GPIO-Nummern ansprechenGPIO.setmode(GPIO.BCM)# Verwendete Pins am Rapberry Pi# A bis D = Ausgangspins für Schrittmotor Drehteller starten# S = Eingangspin für Näherungsschalter abfragen# P1 bis P4 = Ausgangspinns für Pumpen startenA=18B=23C=24D=25S=21 P1=16P2=20P3=12P4=22# time = Pause zwischen den Schaltzyklen des Drehteller-Schrittmotorstime = 0.001# Pins A, B, C, D, Schrittmotor und Pumpe 1 bis 4 als Ausgänge definierenGPIO.setup(A,GPIO.OUT)GPIO.setup(B,GPIO.OUT)GPIO.setup(C,GPIO.OUT)GPIO.setup(D,GPIO.OUT)GPIO.setup(P1,GPIO.OUT)GPIO.setup(P2,GPIO.OUT)GPIO.setup(P3,GPIO.OUT)GPIO.setup(P4,GPIO.OUT)GPIO.output(A, False)GPIO.output(B, False)GPIO.output(C, False)GPIO.output(D, False)GPIO.output(P1, False)GPIO.output(P2, False)GPIO.output(P3, False)GPIO.output(P4, False)# Pin S, Näherungssensor als Eingang definieren GPIO.setup(S,GPIO.IN)# Schrittmotor für Drehteller wird in 8 Steps angesteuert# Schritte 1 - 8 für Drehteller-Schrittmotor festlegendef Step1():   GPIO.output(D, True)   sleep (time)   GPIO.output(D, False)def Step2():   GPIO.output(D, True)   GPIO.output(C, True)   sleep (time)   GPIO.output(D, False)   GPIO.output(C, False)def Step3():   GPIO.output(C, True)   sleep (time)   GPIO.output(C, False)def Step4():   GPIO.output(B, True)   GPIO.output(C, True)   sleep (time)   GPIO.output(B, False)   GPIO.output(C, False)def Step5():   GPIO.output(B, True)   sleep (time)   GPIO.output(B, False)def Step6():   GPIO.output(A, True)   GPIO.output(B, True)   sleep (time)   GPIO.output(A, False)   GPIO.output(B, False)def Step7():   GPIO.output(A, True)   sleep (time)   GPIO.output(A, False)def Step8():   GPIO.output(D, True)   GPIO.output(A, True)   sleep (time)   GPIO.output(D, False)   GPIO.output(A, False)try:# Start der Schleife, wie viele Gläser befüllt werden sollen   while 1:       print ("*************************************************")       while True:           try:               print ("Getraenkewahl treffen")               gw = input("Bitte eine Zahl zwischen 1 und 4 eingeben: ")               gw = int(gw)               while gw < 1 or gw > 4:                   print ("")                   print ("Getraenkewahl treffen")                   gw = input ("Bitte eine Zahl zwischen 1 und 4 eingeben: ")                   gw = int (gw)                         break           except:               print("")       while True:           try:               #print ("Anzahl der Glaeser")               print ("")               anzahl = input("Bitte Anzahl der Glaeser eingeben: ")               anzahl = int(anzahl)                     break           except:               print("")                       gl = 1       for x in range (anzahl):               r = 0               while GPIO.input(S) == 1:                   #print ("suchen")                                      for i in range (3):                           Step8()                       Step7()                       Step6()                       Step5()                       Step4()                       Step3()                       Step2()                       Step1()                   #sleep (0.01)                   r = r + 1                   #print (r)                   if r >= 180:                       print ("")                       print ("Kein Glas gefunden")                       anzahl = 0                       break               if r >= 180:                   break               if GPIO.input(S) == 0:                                # wenn nötig, etwas vordrehen nachdem Glas gefunden wurde                   for i in range (0):                           Step8()                       Step7()                       Step6()                       Step5()                       Step4()                       Step3()                       Step2()                       Step1()                   sleep (0)# Wenn Glas erkannt wurde Pumpe starten                   print ("")                   print ("Fuelle Glas ", gl, "von ", anzahl,)                   print ("")                   if gw == 1:                       GPIO.output(P1, True)                       sleep (1)                       GPIO.output(P1, False)                   if gw == 2:                       GPIO.output(P2, True)                       print ("starte Pumpe 2")                       sleep (1)                       GPIO.output(P2, False)                   if gw == 3:                       GPIO.output(P3, True)                       print ("starte Pumpe 3")                       sleep (1)                       GPIO.output(P3, False)                   if gw == 4:                       GPIO.output(P4, True)                       #print ("starte Pumpe 2")                       sleep (1)                       GPIO.output(P4, False)                                          # Pumpe nach 7 Sekunden stoppen und Drehteller nach vorne bewegen                   for i in range (65):                           Step8()                       Step7()                       Step6()                       Step5()                       Step4()                       Step3()                       Step2()                       Step1()                   #sleep (3)                   gl = gl + 1       if gw == 1:           y = "g1.txt"       if gw == 2:           y = "g2.txt"       if gw == 3:           y = "g3.txt"       if gw == 4:           y = "g4.txt"          datei = open(y, "r")       for line in datei:           print ("")           #print(line.rstrip())       datei.close()       datei = open(y, "w")       line = int(line)       summe = anzahl + line       summe = str (summe)       datei.write(summe)       #print (summe)       datei.close()except KeyboardInterrupt:   print("Programm vom User gestoppt")   GPIO.cleanup()           [color=#000000][size=14][font="Calibri"]

    [/font][/size][/color]


    [font="Calibri"] Hier das Skript für den Reaktionstest:[/font]
    [font="Calibri"]

    Python
    #!/usr/bin/python3.2[/size][/font][/color]# -*- coding: utf-8 -*-from time import sleepimport RPi.GPIO as GPIOfrom random import randintGPIO.setmode(GPIO.BCM)# Verwendete Pins am Rapberry PiSR=6SL=5LM=13LL=19LR=26time = 0.5# Pins als Ein-/Ausgänge definierenGPIO.setup(SL,GPIO.IN)GPIO.setup(SR,GPIO.IN)GPIO.setup(LM,GPIO.OUT)GPIO.setup(LR,GPIO.OUT)GPIO.setup(LL,GPIO.OUT)GPIO.output(LM, False)GPIO.output(LL, False)GPIO.output(LR, False)#GPIO.setup(SR,GPIO.IN)#GPIO.setup(SL,GPIO.IN)try:   while 1:       while GPIO.input(SL) == 1 or GPIO.input(SR) == 1:       # LEDs durch Zufall blinken lassen           zufall = randint (1, 3)           if zufall == 1:               GPIO.output(LL, True)               sleep (0.2)               GPIO.output(LM, False)               GPIO.output(LL, False)               GPIO.output(LR, False)           if zufall == 2:                GPIO.output(LR, True)               sleep (0.2)               GPIO.output(LM, False)               GPIO.output(LL, False)               GPIO.output(LR, False)           if zufall == 3:                GPIO.output(LM, True)               sleep (0.2)               GPIO.output(LM, False)               GPIO.output(LL, False)               GPIO.output(LR, False)       # Wenn beide Taster gedrueckt sind       else:           #print ("beide gedrueckt")           GPIO.output(LM, False)           GPIO.output(LL, False)           GPIO.output(LR, False)           verz = randint (2, 5)           #print ("Verzoegerung", verz)           sleep (verz)       # Mittlere LED einschalten           #print ("Mitte einschalten")           GPIO.output(LM, True)                # Wenn Beide zu frueh gedrueckt haben       if GPIO.input(SL) == 0 and GPIO.input(SR) == 0:           #print ("beide zu frueh")           for x in range (5):               GPIO.output(LM, True)               GPIO.output(LL, True)               GPIO.output(LR, True)               sleep (0.5)               GPIO.output(LM, False)               GPIO.output(LL, False)               GPIO.output(LR, False)               sleep (0.5)               else:       # beide gut gedückt           if GPIO.input(SL) == 1 and GPIO.input(SR) == 1:               #print ("Beide gut")               for y in range (50000):                   #print (y)                   if GPIO.input(SL) == 0:                       #print ("liks gedrueckt")                       for z in range (5):                           GPIO.output(LM, False)                           #print ("links ein")                           GPIO.output(LL, True)                           sleep (0.5)                           #print ("links aus")                           GPIO.output(LL, False)                           sleep (0.5)                       #print ("beende")                       break                                    if GPIO.input(SR) == 0:                       #print ("rechts gedrueckt")                       for z in range (5):                           GPIO.output(LM, False)                           #print ("rechts ein")                           GPIO.output(LR, True)                           sleep (0.5)                           #print ("rechts aus")                           GPIO.output(LR, False)                           sleep (0.5)                       #print ("beende")                       break                   sleep (0.0001)           if GPIO.input(SL) == 0:               #print ("links zu frueh")               for y in range (50):                   #print (y)                   if GPIO.input(SR) == 0:                       #print ("rechts gedrueckt")                       for z in range (5):                           GPIO.output(LM, False)                           #print ("rechts ein")                           GPIO.output(LR, True)                           sleep (0.5)                           #print ("rechts aus")                           GPIO.output(LR, False)                           sleep (0.5)                       #print ("beende")                       break                   sleep(0.1)           if GPIO.input(SR) == 0:               #print ("rechts zu frueh")               for y in range (50):                   #print (y)                   if GPIO.input(SL) == 0:                       #print ("links gedrueckt")                       for z in range (5):                           GPIO.output(LM, False)                           #print ("links ein")                           GPIO.output(LL, True)                           sleep (0.5)                           #print ("links aus")                           GPIO.output(LL, False)                           sleep (0.5)                       #print ("beende")                       break                   sleep(0.1)                              except KeyboardInterrupt:   print("Programm vom User gestoppt")   GPIO.cleanup()           [color=#000000][font="Calibri"][size=14]

    [/size][/font][/color]
    [font="Calibri"] [/font]
    [font="Calibri"] [/font]
    [font="Calibri"]    [/font]
    [font="Calibri"] [/font]