Themen:

AVR, avr-gcc, CAN, CPLD, Elektronik, Mikrocontroller, MSP430, PIC, Roboter, Schaltungen, Sensoren, Software, Testboards

Liniensensor mit CNY70

Tags: Roboter, Schaltungen, Sensoren
Stand: 13. Januar 2007, 17:40
18 Kommentar(e)

Wie man aus einem CNY70 Reflexkoppler und ein paar Widerständen einen Liniensensor für Roboter oder ähnliches baut.

Eine beliebte Aufgabe für Roboter ist das Liniensuchen. Doch um die Linie ersteinmal zu erkennen braucht man einen Sensor der die Unterschiede des Bodens erkennen kann. Eine häufig eingesetzte Methode ist dabei die Erkennung über IR-Licht. Man braucht dazu lediglich eine IR-Diode zur Beleuchtung des Bodens und eine Photodiode oder einen LDR zur Detektion des zurückgeworfenen Lichtes.

CNY70 Messprinzip

Eine elegante Möglichkeit ist dabei die Nutztung eines sogenannten Reflexkopplers. Das ist ein Baustein der aus einer IR-Diode und einen Phototransistor in einem Gehäuse besteht. Ein solcher ist der CNY70 von Vishay. Man bekommt ihn für 71 cent bei Reichelt.

ACHTUNG: Es gibt allerdings von einen weiteren CNY70 von Temic Semiconductors der äußerlich dem von Vishay absolut gleicht, allerdings einen andere Beschaltung des Phototransistor hat. Dieser ist bei der Version von Temic genau gedreht eingebaut.
Man sollte also nochmal genauer schauen welchen CNY70 man jetzt genau hat!

Mit diesem Baustein kann man sich sehr leicht einen einfachen Liniensensor bauen.

Das Prinzip das dahinter steckt ist relativ einfach. Eigentlich misst man die Reflektionseigenschaften des Untergrund und schließt darüber auf die Helligkeit des Untergrundes. Das heißt man sendet mit einer LED Licht aus und schaut wieviel davon dann beim Empfänger ankommt. Zum Messen wird in diesem Fall ein Phototransistor benutzt. Die einfachste Methode um dieses Signal auszuwerten besteht in einer Art Spannungsteiler:

Grundbeschaltung eines CNY70

R1 (Vorwiderstand für die IR-LED) ist je nach gewünschter Helligkeit zwischen 100 und ca. 600 Ohm zu wählen. R2 muss dann den jeweiligen Aufbau bzw. Boden angepasst werden. Die angegebenen 47 kOhm sind allerdings schon ein guter Ausgangswert.

Dabei kann man dann Spannungen von 3,9 Volt bei schwarzen Untergrund und von 0,3 Volt bei weißem erreichen. Damit hat man einen ausreichend großen Spannungsunterschied um weiß und schwarz sicher unterscheiden zu können.

Um das Signal weiterzuarbeiten gibt es im Prinzip drei Möglichkeiten:

1. Analog/Digital-Wandler

Das Signal des CNY70 wird direkt an einen AD-Wandler Eingang geführt und dort gemessen. Diese Methode hat den Vorteil, dass man im Programm praktisch auch die “Güte” des Untergrundes (also den Unterschied von Schwarz zu Weiß) auswerten kann und gebenfalls darauf reagieren kann.

Allerdings braucht man für jeden Sensoren einen AD-Wandler Kanal und die Auswertung im Programm wird komplizierter, da man nicht mehr nur die Werte Weiß und Schwarz hat, sondern auch die Zwischenstufen.

2. Schmitt-Trigger

CNY per Schmitt-Trigger ausgewertet Das Signal wird dabei an einen Schmitt-Trigger IC, wie den 40106 (6x Invertierender Schmitt-Trigger), geführt und dort in ein Digitales Signal verwandelt. Liegt der Spannungswert dabei oberhalb einer bestimmten Grenze schaltet der Schmitt-Trigger um.

Um diesen Schaltpunkt einzustellen ist in dem Schaltplan das Poti R3 zusammen mit dem Widerstand R2 vorgesehen. Gute Werte für die beiden sind zum Beispiel 100 kOhm für das Poti und 20 kOhm für R2. Aber auch hier gilt wieder, das dies stark von dem Untergrund abhängig ist.

3. Komparator

CNY70 mit einem Komparator ausgewertet Die dritte Variante funktioniert im Prinzip wie die zweite Variante, nur das hier anstelle des Schmitt-Triggers einen als Komparator verschalteter Operationsverstärker verwendet wird. Das hat den Vorteil, das der Eingang des OPs wesentlich hochohmiger ist, der Spannung des Sensors also weniger belastet wird. Außerdem lässt sich der Schaltpunkt wesentlich besser einstellen.

Mit dem Widerständen R3 und R4 wird der Schaltpunkt eingestellt. Dies geschieht am einfachsten in dem man den Sensor nach Variante 1 aufbaut, die Spannung bei Weißen und Schwarzen Untergrund misst und dann mit R3 und R4 einen Spannungsteiler aufbaut, dessen Spannung genau in der Mitte des vorher gemessenen Intervalls liegt.

Welcher Operationsverstärker verwendet wird ist realtiv egal, es werden keine großen Anforderungen an ihn gestellt. Man sollte allerdings darauf achten, das er eine ausreichende Ausgangsspannung liefern kann. Der LM324 liefert zum Beispiel maximal 3,5V bei 5V Versorgungsspannung.
Es lohnt sich also eventl. einen Operationsverstärker mit Rail-to-Rail Ausgang (leider meistens etwas teuerer) oder direkt einen “echten” Komparator (z.B. LM311) zu verwenden falls man in der Schaltung nur 5V Spannung zur Verfügung hat.

Liniensensor mit ATTiny26 und 8xCNY70

Ich habe zum Spass mal einen kleines Board mit 8xCNY70 und einem ATTiny26 zur Auswertung der Sensoren geroutet. Geplant ist es dazu eine Firmware zu schreiben die es ermöglicht die Sensoren per I2C auszuwerten. Dazu ist ein Standard I2C-Stecker vorgesehen, der an die USI-Anschlüsse des ATTiny26 geführt ist.
Falls jemand Lust hat kann er sich gerne daran beteiligen.

Hier also Schalplan und Bestückungsplan für das Projekt:

Wie man sieht wurde hier Variante 1 gewählt um so das Kalibrieren der Sensoren per Software durchführen zu können. Die Sensoren können außerdem über den MOSFET Q1 abgeschaltet werden um so Strom zu sparen.
Programmiert werden kann der ATTiny26 in der Schaltung über den I2C Stecker und einen kleine Adapterplatine. Bis auf die Reset-Leitung sind alle notwendigen Leitungen vorhanden.

Downloads:

liniensensor.zip [97.66 kB]

Zum Anfang

Kommentare

# Wolfgang Schmidt meinte am 26. Dezember 2006, 20:50 dazu:

Hallöchen,

da ich mit meinen Technikklassen gerade den Bau eines kleinen Roboters plane und nach einer einfachen Möglichkeit der Linienverfolgung gesucht habe, war dieser Beitrag genau das, was ich gesucht habe. Sauber und übersichtlich geschrieben! Vielen Dank.

Viele Grüße Wolfgang

# Marius Schmidt meinte am 1. Januar 2007, 03:56 dazu:

Hast du mal versucht den Sensor mit einer IR fernbedienung aus zu lösen? Ich glaube deine schaltung würde darauf reagieren. Um fremd-licht auszublenden misst man am besten per ADC eine spannung die sich aus einem spannungsteiler mit fotodiode und widerstand ergibt.

Du machst eine messung mit ausgeschalteter fotodiode und eine mit angeschalteter. Du misst dann nur noch die veränderung des einfallenden lichtes indem du beide messwerte subtrahierst.

# Fabian Greif meinte am 1. Januar 2007, 16:43 dazu:

Hast du mal versucht den Sensor mit einer IR fernbedienung aus zu lösen? Ich glaube deine schaltung würde darauf reagieren.

Richtig. Daher muss man wenn man den Sensor aufbaut entweder ihn gut gegen Fremdlicht abschirmen oder die von dir beschriebene Methode nutzen. Da aber der Sensor bei zu viel Fremdlicht auch damit nichts mehr erkennen kann, da er dauerhaft “übersteuern” würde ist eine Kombination von beidem am besten.

Du machst eine messung mit ausgeschalteter fotodiode und eine mit angeschalteter. Du misst dann nur noch die veränderung des einfallenden lichtes indem du beide messwerte subtrahierst.

Genau das ist für die Firmware des Liniensensors geplant ;-) Daher sind ja auch die LEDs des CNY70 per MOSFET abschaltbar gemacht.

# Martin meinte am 7. Januar 2007, 12:48 dazu:

Hallo! Als Elektronik-Laie hab ich die Schaltung mit einem OpAmp LM324N aufgebaut, habe aber ein Problem: Ich hatte gehofft, TTL-kompatibles High/Low (5V) zu erhalten, stelle aber fest, dass beim Schalten entweder 0V oder 3,79V rauskommen. Mein Spannungsteiler aus R3/R4 liegt bei 3,81V, denn genau da will ich das Signal ?triggern?. Was muss ich tun, um 5V, bzw. 0V am Ausgang des OpAmps zu messen?

# Fabian Greif meinte am 7. Januar 2007, 18:47 dazu:

Was für eine Versorgungsspannung hat der LM324 den?
Da der OP als Komperator verschaltet ist sollte am Ausgang entweder V+ (+5V) oder V- (0V) anliegen.

# Martin meinte am 8. Januar 2007, 08:51 dazu:

Er wird mit 5V versorgt. Ich werde mal einen der anderen OPs auf dem IC probieren, vielleicht habe ich ja gerade den bereits kaputtgespielt… Danke!

# Martin meinte am 13. Januar 2007, 15:36 dazu:

Hallo ich bins mal wieder: Irgendwie krieg ich es nicht hin und hab jetzt in einem anderen Forum gelesen:

“Der LM324 kann keine Spannungen > Vcc-2V (in deinem Fall >3V) verarbeiten”.

Nochmal zu meiner Schaltung: Stromversorgung des LM324: 5V Pin 2 (also der Spannungsteiler): 3,81V Pin 3 (liegt der Ausgang des CNY70, Werte zw. 3V und 4V) Am Pin 1 messe ich weder ein klares 0V noch ein 5V, sondern nunmehr Spannungen zwischen 0 und max 3,7V. Kann das was mit obiger Aussage zu tun haben?

Hab schon einen anderen LM324N benutzt, um einen Defekt auszuschliessen. Alle Bauteile nutzen das gleiche Vcc von 5V und die gleiche Masse. Ich bin ratlos und unwissend… Noch irgendeine Idee?

# Martin meinte am 13. Januar 2007, 15:50 dazu:

Und auf dieser Seite irritiert mich der letzte Absatz: http://www.ferromel.de/tronic_2503.htm

Meine Versorgungsspannung ist nicht Ub und -Ub, sondern Ub und GND. Wo zur Hölle krieg ich denn -Ub her?

# Fabian Greif meinte am 13. Januar 2007, 17:22 dazu:

Hmm, ich habe gerade nochmal nachgeschaut. Im Datenblatt des LM324 ist unter “Output Voltage High Limit” eine Spannung von 3,5 Volt bei 5 Volt Versorgungsspannung angeben, das würde ja mit deinen Beobachtungen übereinstimmen.
Das heißt man kann jetzt folgendes machen:

  • Höhere Versorgungsspannung für den LM324 (nicht unbedingt sinnvoll in dem Fall)
  • Operationsverstärker mit Rail-to-Rail Ausgang verwenden (z.B. OPA 347).
  • Direkt einen Komparator verwenden und keinen als Komparator verschalteten Operationsverstärker (z.B. LM311)

Tut mir leid das du da jetzt herumprobieren musstest, ich hatte das mit einem OPA 347 getestet da ich den gerade noch da hatte. Ich werde das oben in der Beschreibung ergänzen.

Btw. -Ub brauchst du nur wenn du mit Spannung in der nähe von Null Volt oder kleiner arbeiten willst. In dem Bereich arbeitet der LM324 ansonsten nicht mehr.

# Martin meinte am 13. Januar 2007, 18:09 dazu:

Just den Moment hab ich das auch gelesen. Son Schiet, nochmal bei Reichelt bestellen :-(

Ich würde gern mit dem Sensor meinen Stromzaehler ablesen. Der PC soll letzendlich das Signal verarbeiten. Ich hab gelesen, dass TTL-I/O-Ports von PICs oder auch vom PC ab 48% der Betriebsspannung (also im Falle von 5V bei >2,4V, würde ja reichen) einen Highpegel erkennen. Könnte ich (wenn ich die Massen von Versorgungsspannung der Schaltung und dem Gameport zusammenlege)den Gameport direkt mit dem OUT vom LM324 verbinden? Der sollte doch dann die BUTTON-Leitung vom Gameport auf Masse ziehen, so daß ich das Signal verarbeiten kann, oder?

# Fabian Greif meinte am 13. Januar 2007, 18:46 dazu:

Die TTL-IO-Pins der PIC-Familie erkennen laut Datenblatt ein Signal ab 2 Volt als High-Pegel, es wäre also gar kein Problem die Schaltung dort anzuschließen.

Wie das beim Gameport eines PCs ist kann ich dir leider nicht sagen.

# Christian Grübler meinte am 10. März 2007, 17:25 dazu:

Der CNY70 von VISHAY ist super. ich hab damit bis jetzt nur gute Erfahrungen.

# Jacob meinte am 28. März 2007, 17:37 dazu:

Gibt es so was wie den CNY70 auch als “Gabellichtschranke” so wie man es in alten PC-Mäusen findet?

# Fabian Greif meinte am 30. März 2007, 19:01 dazu:

Klar, zum Beispiel CNY36/37.

# H.A.R.R.Y. meinte am 3. April 2007, 12:52 dazu:

Ein feiner Artikel. Aus eigener Erfahrung möchte ich noch etwas dazu beitragen:

Die Abschaltung der IR-LEDs um das Hintergrundlicht auszumessen funktioniert sehr gut. ABER:
a) Netzbrummen durch Kunstlicht (Neonröhre, Glühlampe) führt zu überlagertem Brummen auf den ADC-Abtastungen. Das muß per SW ausgeblendet werden.
b) Helles Umgebungslicht (z.B. Sonnenlicht) verschiebt die Arbeitspunkte der Fototransistoren so, daß keine Auswertung mehr erfolgen kann.

Fazit: Eine sorgfältige Abschattung ist in jedem Falle erforderlich.

Es gibt noch ein paar Kniffe um mehr aus den Sensoren herauszuholen und die Auswertung etwas unempfindlicher gegen die genannten Probleme zu machen. Das erfordert aber höheren Aufwand und ist mit einem ATtiny26 im gezeigten Umfang leider nicht machbar.

# Dirk Uffmann meinte am 19. April 2007, 15:18 dazu:

Interessant gestaltete Seite mit guten Ideen. Die hier vorgestellte Lösung ist schön und funktioniert. Die Erfahrung mit Robotern für Linienerkennung zeigt allerdings, dass man im optischen Bereich (also anstelle Infrarot) bessere Ergebnisse bzgl. Kontrasterkennung erzielen kann. Es gibt z.B. Linienmarkierungen, die optisch sehr gut erkennbar sind, im IR-Bereich aber kaum Kontrast zum Untergrund zeigen.

# Klaus-Peter meinte am 9. August 2007, 12:07 dazu:

Das Datenblatt vom CNY70 sagt: Maximum 100mW für die Diode, d.h. bei 5V dass man einen Vorwiderstand von mindestens 250 Ohm verwenden muss wenn man nicht nur kurze Freude haben will. Besser 500 Ohm oder 1 kOhm.

# Kalle meinte am 4. März 2008, 13:50 dazu:

Hey ich hoffe mir kann hier jemand weiterhelfen. Wir haben in der schule gerade ein projekt über den CNY70 als Liniensensor aufgedrückt bekommen.
Kann mir vllt jemand erzählen wie man es hinbekommt bzw was man machen muss das der bot jetzt weiß das er auf der linien entlang fährt?
wäre echt nett wenn mir jemand helfen könnte

Deine Meinung:

  • Textformatierung ist mit Markdown möglich.
  • HTML wird entfernt.
  • Kommentare werden moderiert und sind daher eventuell nicht sofort sichtbar.
  • Irrelevante Kommentare werden gelöscht.