Übersicht

Zur Zeitmessung im Agility Hundesport dient das hier vorgestellte Projekt. Es besteht aus den folgenden Komponenten:

  • Zwei Lichtschranken die an Start- und Zielsprung angebracht werden, diese bestehen jeweils aus:
    • Infrarot Sender
    • Einem Infrarot-Funk-Transmitter TRX bestehend aus:
    • Infrarot Empfänger
    • 868Mhz Funksender
  • Einer Zeitmesseinheit mit Funkempfänger und Stoppuhr. Als Stoppuhr soll zunächst ein Laptop dienen, es ist aber auch eine integrierte Lösung mit einem Microcontroller, JControl oder Ähnlichem denkbar.

Hier zunächst ein paar Bilder des fertigen Prototyps, das Gesamte System mit Empfänger und Auswerte-Laptop (im Koffer) sowie den beiden Lichtschranken Paaren (die zum Transport ebenfalls ihren Platz im Koffer finden):

Die Lichtschranken (jeweils IR-Sender und Transmitter), wie man sieht zwei verschiedene Gehäuse für die IR-Sender:

Eine der beiden Lichtschranken einsatzfertig aufgebaut mit einfachem "Holz-Stativ":

Grafische Oberfläche zur Zeitmessung bei einem Hunderennen:

Aufbau

Blockschaltbild:

Lichtschranke

Die Infrarotsender der Lichtschranken sind aus einem Bausatz "B232" von Kemo. Die Platine ist mit "B232 S" gekennzeichnet:

Infrarot Senderplatine mit Batterie und Ein/Ausschalter im Gehäuse:

Die Empfängerplatine "B232 E1" aus dem Bausatz habe ich nicht verwendet, da die Schaltung für unsere Zwecke nicht geeignet ist. Aus dem Empfänger habe ich nur den IR-Baustein "TFMO 4036N" benutzt.

Das Signal des TFMO IR-Empfängers muss zur Übertragung per Funk "Manchester codiert" werden. Dies übernimmt ein microcontroller vom Typ 12F629, und um diesen anschliessen zu können, habe ich ersteinmal das Ausgangssignal der Lichtschranke gemessen.

Das folgende Bild zeigt das Ausgangssignal bei Unterbrechung des IR-Lichtstrahls.

So, nun wissen wir, dass der Ausgang des IR-Moduls "active high" ist, der Microcontroller muss also auf der negativen Flanke triggern (sleep/interrup-on-change).

Microcontroller Programmierung, Protokoll, Manchester Codierung

Die per Funk zu übertragende Information soll wie folgt aussehen:

  • Sync-Sequenz, 5*Rechteck, 100 Baud
  • Startbit "0", 500 Baud
  • 8bit - Paket-Zähler, 500 Baud
  • 8bit - Modul-ID, 500 Baud

Die Sync-Sequenz erlaubt es dem Funkempfänger sich einzuschwingen und sich zu synchronisieren. Mit dem Paket-Zähler kann man fehlende Funkpakete erkennen und ggf. die orginale Start/Stopzeit errechnen. Die Modul-Id schliesslich erlaubt das Auseinanderhalten verschiedener Lichtschranken, z.B. einer Start- und einer Ziellichtschranke.

Um eine sichere Datenübertragung über die Funkmodule zu erreichen muss die Information im Manchestercode übertragen werden.

Um die empfangenen Impulse am Parport des Laptops abzutasten, muss das Polling entsprechend schnell sein. Ein kleiner Test der Abtastfrequenz am Parport des Gericom Laptops mit einem Python Programm ergibt:

  • Max. Abtastfrequenz Grössenordnung 50 KHz -> viel mehr als die 2KHz Banbreite der Funkmodule, das reicht also aus.
  • Gewählte baudrate: ca. 500 Baud, damit wird das Ganze nicht so zeitkritisch auf der PC Seite.

Mit den gewählten Taktraten ergibt sich die Dauer eines pakets zu:

(10 * 10ms) + 2ms + (16 * 2ms) = 134ms, alle 5 Pakete: 670ms

Beschaltung des PIC 12F629, Pins/Ports:

  • Pin 1: +5V
  • Pin 2: Gpio5, Output, NC
  • Pin 3: Gpio4, Output NC
  • Pin 4: Gpio3 (Input only), verbunden mit Masse
  • Pin 5: Gpio2, Trigger-Input, verbunden mit "Pin2" von der Lichtschranke
  • Pin 6: Gpio1, Output, NC
  • Pin 7: Gpio0, Output zum Funk-Sender
  • Pin 8: Masse

Das nächste Bild zeigt das Manchestercodierte Signal am Ausgang (Gpio0) des PICs, die 5 Pakete sind deutlich zu erkennen:

Folgendes Bild zeigt das erste Datenpaket vergrössert, ma erkennt die 10 Syncimpulse, das Startbit und danach den Paketzähler (8Bit) und die Modul-ID (8Bit). Danach beginnt das nächste Datenpaket wieder mit den Syncimpulsen:

Bild TRX Schaltplan

TRX Prototyp auf Lochraster:

TRX 868 MHz Sender:

TRX Prototyp im Gehäuse, der 868 MHz Funksender befindet sich mit Antenne in dem Rohr rechts:

Der Assemblercode für den TRX gibts im Sourcecode Archiv weiter unten.

Stoppuhr/Empfänger Schaltung, Software

Die Empfängerschaltung ist recht einfach, Sie besteht nur aus dem 868 Mhz Empfängermodul "RX2" welches direkt am parport des Laptops angeschlossen wird (über die BUSY-Leitung). Die Auswertung der Signale erfolgt in Software, die Spannungsversorgung erfolgt über einen USB Port des Laptops (+5V).

Bild 868 Mhz Empfänger:

Schaltplan:

Empfänger "im Rohr":

Fertiger 868 Mhz Empfänger:

Die Software zur Zeitmessung läuft unter Linux und ist in Python geschrieben, der Betrieb unter Windows ist hier beschrieben. Das Ansprechen des Druckerports geschieht über den ppdev Treiber und das Python Modul "pyparallel". Die Software besteht aus verschiedenen Teilen:

  • libstoppuhr.py übernimmt das Abfragen der Druckerschnittstelle und die Zeitmessung.
  • tkstopp.py ist eine einfache grafische Oberfläche zur Zeitmessung.
  • twagi.py ist eine einfaches Programm zur Durführung von Hunderennen, Agilityläufen oder ähnliches. Es besteht die Möglichkeit zur Erfassung von Starterlisten in verschiedene Klassen. Die gemessenen Zeiten werden einem Starter zugeordnet und es können einige Auswertungen (Bestenliste usw.) gemacht werden.

Tkstopp.py:

TwAgi.py:

Stromverbrauch

Bei Batteriebetriebenen Geräten ist natürlich der Stromverbrauch von wesentlicher Bedeutung. Hierbei müssen nur der IR Sender und der TRX betrachtet werden, da der Funkempfänger nur wenige Milliampere verbraucht und daher im Vergleich zum Stromverbrauch des Laptops nicht ins Gewicht fällt.

Strommessungen:

  • TRX: Ruhestrom 0.5 mA, kurzzeitig 10 mA beim Senden. Nehmen wir die Kapazität einer 9V Alkalibatterie mit 250 mAh an, so können wir damit den TRX für mehrere 100 Stunden betreiben.
  • Der IR Sender verbraucht ca. 100 mA, das ist zuviel. Durch vergrösserung des IR-LED Vorwiderstandes R5 von 12 auf 120 ohm wird die Stromaufnahme auf ca. 30 mA reduziert. Die Reichweite der Lichtschranke verringert sich dadurch zwar, ist aber immernoch ausreichend für den in unserem Fall notwendigen geringen Abstand von 1,5 m.