Wir haben das Problem, das die AGVs zum Beladen unter den Kränen anhalten sollen. Dafür können wir keine Stopstellen (sprich: Elektromagnete) verwenden, da die Kräne selbst mobil sind und damit die AGVs immer an anderen Stellen stehenbleiben müssen. In diesem Aufbau sind in der Ladestraße in regelmäßigen Abständen für LKWs Stoppstellen eingelassen. Dies ist für die Straßen-LKWs duchaus möglich und wird in der Realität ebenfalls so gehandhabt, hier gibt es Nummern auf der Ladestraße, zu denen die LKWs zum Umschlagsvorgang fahren und sich bereit halten:
Für AGVs, die sich entlang der Kaikante bewegen, gilt das jedoch nicht. Das Schiff hat eine feste Liegeposition und die Containerbrücken bewegen sich nicht wie eine Schiene/Straße Containerbrücke. Das AGV muss also immer exakt unter dem Kran anhalten können, egal wo er sich gerade befindet. Das AGV fährt dann zur Schiene/Straße Containerbrücke, die den Container übernimmt und ins Lager, auf die Gleise oder wie oben auf einen Straßen-LKW übersetzt. AGVs und Straßen-LKWs sind in Sachen Fahrbahn streng getrennt, wie auch im Vorbild.
Die Arbeitsgruppe „Infrarot“ hat sich dem Problems ein AGV immer exakt unter dem Kran anzuhalten vor einigen Wochen angenommen.
Auf diesem Bild ist ein Prototyp eines kleinen Fahrzeugs zu erkennen, bei dem genau das mittels IR realisiert worden ist. Ein ATiny 85 erzeugt ein PWM-Signal im Bereich um 38 kHz, das vom IR-Empfänger auf dem Fahrzeug erkannt wird. Solange das Signal empfangen wird, bleibt das Fahrzeug stehen. Das IR-Signal muss noch mittels eines kleinen Tubus o.Ä. fokussiert werden, damit der Anhaltebereich exakt stimmt. Aber prinzipiell funktioniert das soweit schon.
Die Software ist denkbar einfach:
// Attiny85 , running @ 16MHZ // Using timer 0 // // +-\/-+ // Ain0 (D 5) PB5 1| |8 VCC // Ain3 (D 3) PB3 2| |7 PB2 (D 2) INT0 Ain1 // Ain2 (D 4) PB4 3| |6 PB1 (D 1) pwm1 // GND 4| |5 PB0 (D 0) pwm0 // +----+ void setup() { DDRB |= (1 << PB0); // Set pin PB0 as output TCNT0 = 0; TCCR0A = 0; TCCR0B = 0; TCCR0A |= (1 << COM0A0); // Timer0 in toggle mode Table 11-2 TCCR0A |= (1 << WGM01); // Start timer 1 in CTC mode Table 11.5 TCCR0B |= (1 << CS00); // Prescaler table 11.6 OCR0A = 216; // CTC Compare value } void loop() { }
Ein Timer wird gesetzt, der mit der benötigten Frequenz eine IR-Diode ansteuert. Das ist alles.
Die Schaltung besteht aus einem IR-Empfänger IR1261, einem BC547, einem Kondensator und zwei Widerständen (Schaltplan folgt demnächst). Das sollte in den AGVs unterzubringen sein und wir haben getestet, die Schaltung ist sogar Outdoor-tauglich. Selbst im hellen Sonnenlicht empfängt das Auto zuverlässig das Stop-Signal vom IR-Sender.
Vielen Dank an dieser Stelle an Stephan, der mal wieder ein Problem von uns Teppichbahnern gelöst hat!