-         
RSS-Feed anzeigen

witkatz

Liniensensor mit µC

Bewerten
Für meinen mobilen Roboter WR02 bastle ich jetzt an einem intelligenten Liniensensormodul, das eine schwarze Leitlinie mit 3bit Auflösung abtastet.

Es ist eine Schaltung mit PIC16F630, die 4 Photoreflexsensoren RPR220 zu einer 3 Bit Zahl auswertet. Das Ergebnis ist eine Zahl im Bereich -3 .. 3. Der Wert -4 signalisiert Fehler oder Linie nicht erkannt, Wert 0 signalisiert Linie exakt mittig. Die drei Bits werden über drei Signalleitungen an den HauptPIC des Roboters gesendet. Dort wird der 3bit Wert zu einer 8bit Regelabweichung erweitert, damit der 'Linienregler' was zu rechnen hat.

Die schwarze Linie ist ca. 1,5 mal so breit wie der Abstand der Reflexlichtschranken, so dass immer eine oder zwei LS bedämpft sind. Die theoretische Auflösung ist ca. 0,5 x Abstand der LS zueinander. Es ergibt sich folgendes Auswerteschema:
Klicke auf die Grafik für eine größere Ansicht

Name:	Auswerteschema.PNG
Hits:	62
Größe:	22,7 KB
ID:	30817

Hier der Schaltplan:
Klicke auf die Grafik für eine größere Ansicht

Name:	Schaltplan.PNG
Hits:	66
Größe:	85,0 KB
ID:	30818
Die NPN Transistoren sorgen für eindeutige Logikpegel. Der RPR220 schaltet am besten beim Abstand von ca. 15mm und reagiert sehr gut auf mit Edding ausgemalte oder mit Laserdrucker ausegdruckte Linien und auf Isolierband. Weil das Isolierband glänzende Oberfläche hat und Reflexionen verursachen könnte, kucken die Sensoren etwas schräg nach vorn. So reagiert der Sensor sehr gut auf die schwarze Farbe vom Isolierband und nicht auf Reflexionen.
Bei Linienbreite von 30mm und 20mm Abstand zwischen den Sensoren sollte theoretisch eine Auflösung von 10mm erreicht werden.

Klicke auf die Grafik für eine größere Ansicht

Name:	DSC_0019s.jpg
Hits:	68
Größe:	29,4 KB
ID:	30816

Im Testaufbau funktioniert die Schaltung schon mal ganz gut. Der PIC schaltet die 4 IR LEDs der Sensoren nacheinander ein, und wertet das Signal der Phototransistoren aus. Das Quellcode in C für XC8 und PIC16F630 ist angefügt.
Miniaturansichten angehängter Grafiken Angehängte Dateien
  • Dateityp: c main.c (3,3 KB, 52x aufgerufen)

"Liniensensor mit µC" bei Twitter speichern "Liniensensor mit µC" bei Facebook speichern "Liniensensor mit µC" bei Mister Wong speichern "Liniensensor mit µC" bei YiGG.de speichern "Liniensensor mit µC" bei Google speichern "Liniensensor mit µC" bei del.icio.us speichern "Liniensensor mit µC" bei Webnews speichern "Liniensensor mit µC" bei My Yahoo speichern

Aktualisiert: 18.02.2016 um 11:28 von witkatz

Stichworte: - Stichworte bearbeiten
Kategorien
PIC Basteln

Kommentare

  1. Avatar von Searcher
    Hi,
    ich bastele ja an was Ähnlichem. Habe nur zwei Photodioden, die analog an einem ADC ausgewertet werden. Funktioniert sehr gut mit Motoren, die praktisch sofort auf Steuerungsinformationen reagieren können ABER ein rechtwinkliger Knick in der Linie wird einfach nicht wahrgenommen und somit ignoriert außer ich schneide ein kleines Dreieck an der Außenkante des Knicks an der Linie ab. Bin gespannt, ob Dein Sensor bzw die Auswertung das packt. Ich muß vermutlich noch irgendetwas nachrüsten (oder alle 90° Knicke beschneiden )

    Warum benutzt Du mehrere µCs und wie werden die beiden verbunden, HW und Protokoll?

    Viel Erfolg und
    Gruß
    Searcher
  2. Avatar von witkatz
    Hallo Searcher,

    natürlich habe ich gesehen, woran du bastelst. Ich verfolge deinen Blog genau und mit viel Freude. Es sieht sieht super gut aus, wie dein steppender Linienfolger schön exakt und ohne erkennbare Schwingungen die Linie nachfährt. Ob das bei meinem Butler auch so gut klappen wird, werde ich erst sehen.

    Knicke brauche ich deshalb, weil ich die Bahn aus bedruckten DIN A4 Einzelblättern auslegen möchte. Knicke von 90° sind erstmal nicht vorgesehen. Wenn mein Butler 45° schafft ohne das Getränk zu verschütten, bin ich schon zufrieden. Ich werde dann auch ein Video posten, als neuen Blog-Beitrag oder als Kommentar zu dem alten Roboterbeitrag wie ich das bis jetzt gemacht habe. Was würdest du vorschlagen?

    Tja, jetzt zu deiner schwierigen warum Frage. Ich habe mehrere Gründe für die verwendung von mehreren µC:
    1. I/O Pins des Haupt µC sparen
    2. Spaß an Modulen, die ich separat testen kann.
    3. Um die PICs zu verbasteln, die ich in 10er Losgrößen in China bestellt habe, als der EUR noch hoch stand

    Der Liniensensor hat nur 3 Bits zu melden, da nehme ich einfach HW Verbindung mit TTL Pegeln. Bei größeren Datenbreiten würde ich I2C nehmen.

    Gruß
    witkatz
  3. Avatar von Searcher
    Hallo witkatz,
    danke für die Infos. Bei der Verbindung des Liniensensors zum Hauptprozessor hatte ich zu kompliziert gedacht und Deine Lösung geht ja auch eigentlich aus Deiner Vorstellung des Liniensensors hervor. Ich kämpfe gerade bei mir damit rum, da ich ja Daten seriell von meinem Liniensensor-µC zum Haupt-µC übertrage.

    Bei Deiner Begründung zu den vielen vielen eingesetzten µC ist mir nur Punkt 3 sofort eingängig.


    Das meiner der Linie recht gut folgt ist eventuell Glücksache. Es gibt keine Regelung, sondern der ADC liest die Sensoren im Freerunning Modus so schnell aus wie er kann, paßt sie größenordnungsmäßig an, damit sie im Hauptprozessor direkt als Steuerinformation genutzt werden kann. Zuerst hatte ich den Liniensensorwert durch 2 geteilt - Übersteuern. Durch 4 geteilt - geht bei angepaßter Grundgeschwindigkeit per Fernbedienung. Quick und dirty eben. Aber auch unterstützt durch die fast unschlagbare Reaktion der Schrittmotore auf die Steuerinformation.

    Bei mir sieht es nach noch viel Arbeit aus, vor allem die Programme zu überarbeiten und dabei auch in einem Jahr noch verständliche Kommentare zu haben. Hoffe bei Dir läuft das besser.

    Gruß
    Searcher
  4. Avatar von witkatz
    Mein Liniensensor folgt einem anderen Ansatz als deiner. Die Lichtschranken werden schwarz/weiss von einem kleinen Sklaven µC ausgewertet, ohne ADC. Mit den 4 Lichtschranken wird die Entfernung der Linie von der Mitte des Sensors diskret gemessen und als vorzeichenbehaftete Zahl an den Haupt µC gesendet. Das Ergebnis ist also auch eine vorzeichenbehaftete Zahl ähnlich wie bei deiner bipolaren Differentiell-ADC Messung, allerdings bei mir mit einer viel gröberen Auflösung von 1cm, bzw. halben Sensorabstand.

    In wie weit sich der Ansatz bewährt, weiss ich noch nicht. Ich bin gerade dabei, meinen Roboter so umzubauen, dass ich diesen Sensor hier und später ggf. diverse andere auf eine 100mm breiten Platine aufgebaute Liniensensoren einfach dranschrauben und ausprobieren kann.

    Gruß
    witkatz
    Aktualisiert: 18.02.2016 um 11:29 von witkatz
  5. Avatar von witkatz
    Der Liniensensor ist jetzt am Roboter montiert und hat erste Funktionstests bestanden.



    Bis zu 45° Knicke werden bei problemlos im Test Bahn gefahren. Die Bahn besteht aus DIN A4 Blättern, auf allen ist einfach eine 30mm dicke gerade Linie ausgedruckt. Die Blätter sind an den Stoßstellen mit einem Stückchen PVC Isolierband zusammengeklebt, dass sich oft abnehmen und wieder aufkleben lässt. Die "Bahnstücke" lassen sich so für verschiedene Strecken wiederverwenden.

    Hier ein kurzes Video vom Einsatz als Buttler:
    Aktualisiert: 18.02.2016 um 11:31 von witkatz