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, 18:40
26 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 erst einmal 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 Nutzung 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 wie viel 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 relativ 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 eventuell einen Operationsverstärker mit Rail-to-Rail Ausgang (leider meistens etwas teurer) 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 Spaß 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 Schaltplan 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, 21: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, 04: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, 17: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, 13: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, 19: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, 09: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, 16: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, 16: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, 18: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, 19: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, 19: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, 18:25 dazu:

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

# Jacob meinte am 28. März 2007, 18: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, 20:01 dazu:

Klar, zum Beispiel CNY36/37.

# H.A.R.R.Y. meinte am 3. April 2007, 13: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, 16: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, 13: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, 14: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

# Christian meinte am 7. Juli 2008, 14:43 dazu:

Vorwiderstand-Rechnung

Hallo, wie groß muss die Vorwiderstand für Emitter sein, wenn ich 5 V betreibe?

Datenblatt CNY70

im Datenblatt steht, Max-Spannung 1,6 V, IF= 50 mA

Rv = (5 V-1,6 V)/50 mA = 68 Ohm

Ist das richtig?

# Fabian Greif meinte am 7. Juli 2008, 23:56 dazu:

Nein, IF steht unter “Absolute Maximum Ratings” mit 50 mA angegeben. Man sollte im Normalen Betrieb also drunter bleiben.

Ein guter Wert für den Vorwiderstand wäre zum Beispiel 330 Ohm, dann fließen ziemlich genau 10 mA oder 180 Ohm, dann wäre man bei etwa 18 mA. Das sollte im Normalfall ausreichen.

IF = (5V-1,6V) / 330 Ohm = 0,0103 mA

# Wisda Noobie meinte am 10. Januar 2010, 14:02 dazu:

Hallo, hat sich schon etwas in Richtung software getan? wenn nicht werde ich wohl eine schreiben?da ich aber noch anfänger bin, wird die wohl nicht massentauglich sein. ich würde sie dann trotzdem zur eVerfügung stellen?

# Fabian Greif meinte am 10. Januar 2010, 16:43 dazu:

hat sich schon etwas in Richtung software getan?

Nein, da gibt es bisher nichts neues.

Grüße Fabian

# Martey meinte am 24. März 2010, 14:33 dazu:

Hallo,

es ist sehr schön dass ich diese Seite hier gefunden habe. Muss auch einen Liniensensor für mein Projekt einsetzen. Bin aber auch noch Anfänger. Habe eine ATMega32-Platine zur Verfügung und würde die Sensoren gerne direkt über den Analog/Digital-Wandler abfragen.

Jetzt meine Frage:

Kann mir jemand sagen, wie ich den CNY70 richtig anschließe?

Und hat dazu jemand schon ein Programm geschrieben?

Grüße Martey

# Andy meinte am 1. April 2010, 00:31 dazu:

ich glaube ich dreh jetzt langsam durch, ich habe alles genau sowie hier beschrieben gemacht aber trotzdem funktioniert es nicht Was bei mir passiert: Wenn ich sehr nahe am boden bin dann sind alle werte gleich (125-127mV) auch wenn da eine unterscheidliche farbe ist, jedoch wenn ich mit den sensoren raufgehe dann wird die spannung Vout größer(3,8-4,3V) und bei engeren abständen wieder kleiner

ich habe den vom vishay und auch richtig angeschlossen, denn bei einem fehler beim anschließen haut das eh nicht mehr hin

bitte um hile

# ET-Tutorials meinte am 24. August 2010, 13:25 dazu:

Ich habe im letzten Jahr ebenfalls mit meinen Technikerklassen einen Linienfolger auf CNY-70 Basis gebaut. Das hat den Schülern sehr viel Spaß gemacht. Hier 2 Videos, die wir dazu aufgenommen haben:

http://et-tutorials.de/704/linientreue-roboter-gesucht/

# Boris meinte am 18. November 2011, 18:15 dazu:

Hi, ich würde anstelle des Phototransitors die Photodiode BWP34 nehmen - wie sieht denn die Schaltung dazu aus?

Gruß Boris