Seite 1 von 1

Warenautomat

Verfasst: 24 Jun 2016, 13:53
von Techniker
Hallo!

Ich bin aktuell dabei einen Warenautomat zu bauen. Grundsätzlich steht der auch schon.
Ich habe auch einen Kartenleser eingebaut. Diesen möchte ich über die Community-Firmware über QR-Codes betreiben.
Außerdem möchte ich ein etwas größeres Display über I2C betreiben, da das des TXT doch relativ klein ist.
Dazu habe ich einige Fragen, wovon ich hoffe das ihr sie beantworten könnt:

1. Welchen Typ/ Größe/ Marke von Display würdet ihr verwenden?
2. Wie kriege ich Daten vom TXT zum TX (unter Python?),einfache Zahlen würden reichen?
3. Könnte mir vielleich jemand ein kurzes Python Programm schreiben, in dem ein Eingang und ein Ausgang (am besten Encodermotor mit Distanz über Zählereingang, dannach warten)? So als Anschauungsobjekt.

Danke für Antworten/ Vorschläge!

Re: Warenautomat

Verfasst: 24 Jun 2016, 18:23
von Torsten
Techniker hat geschrieben:Hallo!

Ich bin aktuell dabei einen Warenautomat zu bauen. Grundsätzlich steht der auch schon.
Ich habe auch einen Kartenleser eingebaut. Diesen möchte ich über die Community-Firmware über QR-Codes betreiben.
Außerdem möchte ich ein etwas größeres Display über I2C betreiben, da das des TXT doch relativ klein ist.
Dazu habe ich einige Fragen, wovon ich hoffe das ihr sie beantworten könnt:

1. Welchen Typ/ Größe/ Marke von Display würdet ihr verwenden?
2. Wie kriege ich Daten vom TXT zum TX (unter Python?),einfache Zahlen würden reichen?
3. Könnte mir vielleich jemand ein kurzes Python Programm schreiben, in dem ein Eingang und ein Ausgang (am besten Encodermotor mit Distanz über Zählereingang, dannach warten)? So als Anschauungsobjekt.

Danke für Antworten/ Vorschläge!
Hallo Techniker,

ich habe zwar nicht genau verstanden, wie Dein Aufbau aussieht, aber grundsätzlich könnte der Code zum Einziehen einer Karte (die am Endpunkt einen Taster auslöst) z.B. so aussehen:

Code: Alles auswählen


import ftrobopy
import time

# Zunächst wird die Verbindung zwischen ftrobopy und dem TXT-Kontrollprozess aufgebaut
txt     = ftrobopy.ftrobopy('127.0.0.1', 65000)

# Dann werden die Ein- und  Ausgänge definiert
motor   = txt.motor(1)  # (Encoder-)Motor angeschlossen an M1 und C1
taster1 = txt.input(2)  # Taster1 (Anschlüsse 1 und 3) angeschlossen an I1
                        # detektiert am Kartenslot-Eingang, ob eine Karte eingelegt wurde
taster2 = txt.input(1)  # Taster2 (Anschlüsse 1 und 3) angeschlossen an I2, detektiert
                        # ob die Karte den Endpunkt des Karteneinzugs erreicht hat

# Solange warten, bis eine Karte in den Kartenslot eingelegt wird
while taster1.state() == 0: # solange der Taster1 nicht gedrückt wurde, ist der Status 0 ansonsten ist er 1
  time.sleep(0.01)          # 10ms warten

# Den Motor aktivieren
speed  = 300            # Geschwindigkeit des Motors, minimal 0, maximal 512
motor.setDistance(9000) # Maximaldistanz des Encodermotors (72 entspricht einer Achsumdrehung)
motor.setSpeed(speed)   # positive/negative Werte für Speed lassen den Motor links- bzw. rechtsherum drehen
time.sleep(0.01)        # 10ms warten, bis die Daten im TXT-Kontrollprozess angekommen sind
                        # (die Kommunikation zwischen ftrobopy und dem TXT-Kontrollprozess findet nur alle 10ms statt)

# der Motor läuft jetzt bereits und sollte die Karte einziehen

while taster2.state() == 0:  # solange warten, bis der Taster2 (von der Karte) betätigt wurde
  time.sleep(0.01)           # 10ms warten

dist = motor.getCurrentDistance() # die Distanz ermitteln, die der Motor bis jetzt zurückgelegt hat
motor.stop()                      # Motor anhalten
time.sleep(0.01)                  # nach spätestens diesen 10ms steht der Motor

#########
# ...
# hier könnte der Code stehen, der die Karte abfragt, bzw. den QR-Code einliesst
# ...
#########

# Karte wieder ausgeben
motor.setDistance(dist)   # die zuvor ermittelte Distanz verwenden, um die Karte wieder auszugeben
                          # (oder vielleicht auch etwas weniger, damit die Karte nicht runterfällt)
motor.setSpeed(-speed)    # den Motor in entgegengesetzter Richtung laufen lassen

# Solange warten, bis der Motor die volle eingestellte Distanz (dist) zurückgelegt hat
while not motor.finished():
  time.sleep(0.01)

#########
# ...
# hier könnte der Code für die Warenausgabe stehen
# ...
#########