Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - QTI Sensor und Linienfolger

Was ist ein QTI Sensor? Kurz gesagt, ein Sensor, der hell von dunkel unterscheidet, mit dem man Objekt- und Mustererkennung durchführen kann. Ein Sensor, mit dem sich ein Linienfolger (Line Follower) bauen lässt.

 

 

 

 

 

 

 

 

 

 

 

 

 

Abbildung 1 - QTI Sensor (Courtesy of Parallax Inc.)

2 - Daten des Sensors, Aufbau, Einsatzmöglichkeiten

  • Versorgungsspannung: 3,3V - 5V
  • Kommunikation: analoger Ausgang für die Entladezeit des Kondensators; die Entladezeit hängt von der Intensität des reflektierten IR Signals ab.
  • QRD1114 IR Reflektionssensor zur Untersuchung des Reflextionsverhaltens von Oberflächen. Befindet sich der Sensor über einer dunklen Oberfläche, dann ist die Intensität des reflektierten IR Lichtes gering; über einer hellen Oberfläche ist sie sehr hoch.
  • Fototransistorausgang: vorhanden
  • Tageslichtfilter: auf dem Sensor
  • kontaktfreie Oberflächensensorik
  • unfokussiert, um diffuse Reflektionen aufzunehmen zu können

Schaltungsaufbau

Abbildung 2 - (Courtesy of Parallax Inc.)

Einsatzmöglichkeiten

  • Unterscheidet zwischen hellen und dunklen Objekten und kann so, einfach aber sehr effektiv,  kontaktfrei Muster und Objekte wahrnehmen, indem IR Licht von einer LED ausgesandt, an der Oberfläche oder einem Objekt reflektiert und vom Fototransistor aufgenommen wird.
  • Mustererkennung: erfolgt über die Unterscheidung zwischen hellen und dunklen Oberflächen, wie zum Beispiel schwarzen Linien, die auf einem weißen Blatt Papier aufgebracht sind (sehr hilfreich in der Robotik beim Bau eines Linienfolgers).
  • Objekterkennung: der Sensor kann Abstände zu einem Objekt über die Menge des reflektierten Lichtes beurteilen (hilfreich in der Robotik zum Beispiel bei der Erkennung von Tischplattenrändern).
  • Arbeitet als analoger Sensor an einem digitalen I/O Pin des Prozessors.
  • Annäherungserkennung mit Bewertung der relativen Entfernung zu einem Objekt.
Abbildung 3 - (Courtesy of Parallax Inc.)

Die Abkürzung QTI ist ein Akronym und steht für Charge Transfer Infrared oder besser Q für Ladung, T für Transfer und I für Infrarot. Es beschreibt, wie der Sensor die Lade-/Entladezeit des Kondensators für eine skalierte Ausgabegröße nutzt, ohne  einen zusätzlichen AD-Wandler einzusetzen.

In einer Anwendungsschaltung misst ein Controller die Entladezeit t des QTI Kondensators. Sie ist ein Maß für den Ladungsfluss durch den IR Fototransistor und ein Maß dafür, wieviel IR Licht von der Oberfläche reflektiert wurde.

Einige Objekte, wie zum Beispiel der schwarze antistatische Schaumstoff, in den die Elektroden empfindlicher IC-Bausteine gesteckt werden, reflektiert nur wenig oder gar kein IR Licht und kann vom QTI nicht sicher erkannt werden.

 

Wird an den Eingang White (auf dem Sensor mit W markiert) eine Versorgungsspannung zwischen 3,3V und +5V angelegt, dann fließt ein Strom durch den 470 Ohm Widerstand und die IR-LED (Abb. 2). Das von der LED an einer Oberfläche reflektierte Licht wird vom Fototransistor aufgenommen, der sich hier wie ein IR-gesteuerter Widerstand verhält.

3 - Vorversuch zum QTI

In einem Vorversuch werden wir das Verhalten der folgenden Schaltung genauer untersuchen.

 

Schaltskizze

Vorversuch zum QTI
Material
  • 1x  Prop-BoE
  • 1x  Widerstand, 220 Ohm
  • 1x  Widerstand 100 kOhm
  • 1x  Kondensator, keramisch 0,01µF
  • 1x  Steckbrett (nur beim Arduino UNO)
  • 1x  USB-Kabel
  • 1x  Steckernetzteil
  • 3x  Steckdraht
Aufgaben
  • Baue die Schaltung nach der Schaltskizze auf.
  • Übertrage das Programm Vorversuch.c in den Editor und speichere es ab.
  • Erkläre - bevor du das Programm startest - jede Programmzeile in dem Programm.
  • Starte das Programm und überprüfe, ob du mit deinen Einschätzungen richtig gelegen hast.

Das Programm Vorversuch.c

Wie arbeitet das Programm?

P6 wird OUTPUT und der Ausgang wird auf HIGH gesetzt. Anschließend tritt eine Pause von 1ms ein. In dieser Zeit liegen beide Anschlüsse des Kondensators auf gleichem Potential, mit der Folge, dass sich die Platten neutralisieren.

P6 wird auf INPUT gesetzt und die Funktion RC_TIME aus der Bibliothek simpletools aufgerufen. Am Eingang von P6 liegt jetzt eine 1. Die überschüssige Ladung auf der unteren Kondensatorplatte kann über den 100 kOhm Widerstand gegen Masse abfließen und der Kondensator entlädt sich. Der Widerstandswert beeinflusst, wie schnell sich der Kondensator entlädt.

Kleinere Widerstandswerte führen zu schnelleren Entladungen und kürzeren Messzeiten, höhere Widerstände entsprechend zu langsameren Entladungen und längeren Messzeiten. 

Fällt der Spannungspegel unter ca. 1,45V, erkennt der Eingang des Propeller Controllers eine 0 und beendet die Messung, legt den Wert in der Variablen t ab und gibt den Zahlenwert anschließend im Terminal aus. Das zugehörige Oszillogramm zeigt die folgende Abbildung. Die waagerechte gestrichelte Linie markiert einen Spannungswert von ca. 1,47V (Grenze zwischen HIGH und LOW), während die beiden senkrechten Linien den Zeitbereich angeben, in dem der Eingang P6 des Controllers eine 1 erkennt.

4 - Versuchsschaltung für das BoE mit BASIC Stamp 2

Abbildung 4 - Schaltskizze für die Anschlussbelegung des QTI-Sensors

Das Programm BS2_QTI1.bs2

Die Entladung des Kondensators kann über ein Oszillogramm sichtbar gemacht werden. Gleichzeitig erkennt man, dass die Pause von 1ms bei einer BASIC Stamp ca. 1,2ms lang ist. Das beeinflusst hier aber nicht die Ergebnisse.

Abbildung 5 - Entladekurve aufgenommen an P6 des QTI mit PicoScope 2205 MSO.

Wie arbeitet das Programm BS2_QTI1.bs2?

Der Anschluss R am QTI ist Messeingang an P6 der BASIC Stamp.

Zeile 7

Anschluss W liegt an +5V. Mit R auf HIGH entlädt sich der Kondensator über den 220 Ohm Widerstand. Die für die Entladung vorgesehene Zeitspanne beträgt 1ms (Zeile 9).

 

Zeile 10

Der Eingang P6, der direkt mit R am QTI verbunden ist, misst die Entladezeit des Kondensators (Argument im Befehl RCTIME ist auf 1 gesetzt) und speichert den Messwert in der Variablen Dauer vom Typ Word ab.

 

Zeile 12 - 17

Anschließend erfolgt die Ausgabe des Messwertes im Terminal.

Über einem grauen Klebeband mit glatter mattglänzender Oberfläche ergibt sich bei einem Abstand von ca. 5mm ein Wert von 47. Über dem Klebeband des gleichen Herstellers mit gleicher Oberfläche aber gelber Farbe ergibt sich bei gleichem Abstand ein Wert von 21 und über einem dunklen Filzbelag ein Wert von über 600.

5 - Versuchsschaltung für das Prop-BoE und Prop-AB

Der Schaltungsaufbau für das Prop-BoE und Prop-AB ist mit Abb. 4 identisch. Da der Propeller Controller in C oder SPIN programmiert werden kann, muss das Ansteuerungsprogramm neu geschrieben werden. Das nachfolgende Programm ist in SPIN-Code verfasst und greift auf die Objekte "FullDuplexSerial" und "RCTime" zurück, die wir beide in das Verzeichnis, in dem das SPIN-Programm abgelegt wird, kopieren. Die Daten des Sensors werden in diesem Beispiel über die serielle Schnittstelle übertragen.

 

Diejenigen, die lieber ein Prop-C Programm benutzen möchten, sollten sich das Programm Vorversuch.c aus Abschnitt 3 in den Editor übertragen oder, wenn es bereits abgespeichert ist, neu laden.

Versuchsschaltung mit Prop-BoE oder Prop-AB
Aufgaben
  • Starte das Programm Propeller Tool und übertrage das Programm SPIN_QTI1.spin in den Editor.
  • Öffne über File - Open from ... - Propeller Library die Datei FullDuplexSerial.spin.
  • Lade auf die gleiche Weise die Datei RCTime.spin.

Die zusammengefassten Inhalte der neu geladenen Dateien lassen sich über den Radiobutton Summary im Editor anzeigen.

Von den vier angebotenen Methoden im Objekt RCTime interessiert uns nur die Methode

  • RCTIME(Pin, State, RCValueAddress)

mit den Parametern

Pin, State, RCValueAddress

Pin gibt den I/O Pin am Propeller Controller an, der mit dem Ausgang des Sensors verbunden ist (bei einem QTI die Leitung R).

State gibt den Status der Messung an; dabei steht eine 1 für die Entladung (der Sprung von HIGH nach LOW) und eine 0 für die Ladung des Kondensators (der Sprung von LOW nach HIGH).

RCValueAddress gibt die Adresse an,

Von den 11 angegebenen Methoden im Objekt FullDuplexSerial schauen wir uns die Methode

  • Start(rxPin, txPin, mode, baudrate) : okay
    

mit den Parametern

rxPin, txPin, mode, baudrate

etwas genauer an. Die Bedeutung der Parameter im Einzelnen:

rxPin   Propeller Pin für die Rx-Leitung

txPin   Propeller Pin für die Tx-Leitung;

            es wird über die beiden Portpin rxPin und txPin ein serieller Port geöffnet

mode   4-Bit Wort, über das die Übertragung eingestellt wird; es bedeuten

            Bit 0 -> invertiere rx, Bit 1 -> invertiere tx, Bit 2 ->  open-drain/source tx, Bit 3 tx Echo an

            rx ignorieren

baudrate         Angabe der Baudrate; z. B. 9600 oder 115200

Das Programm SPIN_QTI1.bs2

Courtesy of Parallax Inc.

Die Entladekurve des Kondensators zeigt das nachfolgende Oszillogramm. Die Methode rc.rctime enthält eine Lade-/Entladepause von 1ms, die im Oszillogramm erscheint. Bei einem Propeller Board entspricht dem Pegel HIGH ein Wert von 3,3V.

Abbildung 6 - Entladekurve des Kondensators im QTI; an der Hochachse sind Volt, an der Rechtsachse ms aufgetragen. Aufgenommen mit PicoScope 2205A MSO

6 - Versuchsschaltung für das Board Arduino UNO

Für den Versuchsaufbau mit dem Arduino UNO gilt ebenfalls das Schaltbild Abb. 4. Bei der Verdrahtung muss sorgfältig darauf geachtet werden, dass die Versorgungsspannung mit der korrekten Polung an den QTI-Sensor gelegt wird. Ausgang R(ot) geht an den digitalen Port P6. Da P6 sowohl OUTPUT wie INPUT ist, wird der Pinmode nicht in der Methode setup(), sondern in loop() gesetzt.

Programm arduinoUNO_QTI1.ino

Abbildung 7 - Arduino-C Programm mit RCTime Funktion (Courtesy of Parallax Inc.)

Die WHILE-Schleife wird solange durchlaufen, wie digitalRead(sensorIn) identisch 1 ist. Mit jedem Durchlauf wird der Zähler dauer um 1 erhöht.

 

Die in diesem Programm aufgerufene Funktion RCTime mit dem Rückgabewert dauer entspricht in ihrem Verhalten der BASIC Stamp Funktion RCTIME aus Abschnitt 3. Der Übergabewert ist R_Pin und mit dauer = 0 wird der Zähler auf 0 gesetzt. R_Pin ist zunächst OUTPUT und geht für 1ms auf HIGH. Nach Abb. 2 entlädt sich in dieser Zeit der Kondensator über den Widerstand 220 Ohm, da seine beiden Elektroden auf gleichem Potential liegen. Das zugehörige Oszillogramm sollte die Entladekurve eines Kondensators zeigen, die mal flacher (bei dunklem Untergrund und schwacher Reflexion) und mal steiler verläuft (bei hellem Untergrund und hoher Reflexion).

Abbildung 8 - Entladekurve aufgenommen an P6 des QTI mit PicoScope 2205 MSO.

Im Oszillogramm ist die Verzögerungszeit von 1ms als Plateau gut zu sehen; mit dem Umschalten des Ausgangs P6 auf Eingang, setzt der Entladevorgang des Kondensators ein.

Kommentar schreiben

Kommentare

  • olaf (Sonntag, 10. Dezember 2017 08:35)

    wow...die mit Abstand beste Site, die ich bisher zu diesem Thema gesehen habe :-))
    Vielen Dank dafür. Hilft super beim Erklären!!

  • David Eisenblätter (Sonntag, 11. Februar 2018 13:38)

    Sehr schön erklärt, und zufällig heute, wo ich nochmal nach einer detailierten Gedankenstütze diesbezüglich gesucht habe!

    Vielen vielen Dank!

    David.

Bitte geben Sie den Code ein
* Pflichtfelder
Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf