Aus RN-Wissen.de
Version vom 24. Februar 2006, 18:04 Uhr von Dennis.strehl (Diskussion | Beiträge) (Kompaß-Modul CMPS03)

Wechseln zu: Navigation, Suche
Laderegler Test Tueftler Seite

Welche Sensorarten gibt es

Damit sich ein Roboter in seiner Umgebung bewegen kann, ohne an Hindernisse anzustoßen, und damit er ein Ziel finden und ansteuern kann, muß er irgendwie seine Umwelt "wahrnehmen". Hauptanwendung für diese Informationen aus der Umwelt ist die Navigation

Bumpers

Als Bumpers bezeichnet man eine Art Stoßstange, die einen Mikro-Switch auslöst.

http://www.roboternetz.de/wiki/uploads/Main/microschalter.jpg

Die Auswertung erfolgt am besten digital an einem Pin mit Pull-up Widerstand. Man kann den Eingang pollen (abfragen), aber auch einen Interrupt auslösen lassen. -->

Whiskers (Fühler)

Das sind flexible Kunststoff-Streifen von ca. 10 cm Länge, eigentlich für Datenhandschuhe vorgesehen. Aber man kann sie auch als Fühler einsetzen, und daher auch für die Kollisions-Sensorik verwenden. Beim Verbiegen steigt der Widerstand an.

http://www.roboternetz.de/wiki/uploads/Main/flexs_200.jpg

Um zu messen, wird mit einem zweiten Widerstand ein Spannungsteiler aufgebaut, der dann mit einem Analog-Eingang einen Grad der Verbiegung erkennen läßt. -->

Incremental-Geber

Dienen zur Erfassung von Drehzahl bzw. der Messung von Wegstrecken

Drehgeber Sharp GP1A30

http://www.roboternetz.de/wiki/uploads/Main/gp1a30.jpg

Beim Sharp GP1A30 handelt es sich um eine Gabellichtschranke mit inkrementaler Drehgeberfunktion. Im Gegensatz zu herkömmlichen Gabellichtschranken können mit dieser sowohl Drehzahl als auch Drehrichtung ermittelt werden. Notwendig sind dafür nur 2 digitale Ports. Verzichtet man auf die Auswertung der Drehrichtung, reicht nur ein Port. Der Sensor hat den Vorteil das die Signale bereits TTL kompatibel sind und direkt an ein Controllerboard angeschlossen werden können. Ein Beispielprogramm zu RN-Control findet man hier

http://www.roboternetz.de/wiki/uploads/Main/GP1A30.gif

Die Auswertung inkrementaler Drehgeber ist recht einfach. Ein Ausgang liefert einen Impuls pro Markierung (Scheibe auf der Welle). Prüft man bei jedem Impuls (Flanke) noch gleichzeitig den aktuellen Pegel des zweiten Ausganges, so kann daraus die Drehrichtung abgeleitet werden.

Der Signalverlauf an den Sensorausgängen ist phasenversetzt:

http://www.roboternetz.de/wiki/uploads/Main/inkremental1.gif

Optische Sensoren

Helligkeit

!!! Anwendung Die Hauptanwendung solcher Sensoren ist, den hellsten Fleck im Raum zu finden. Dies ist auch Teil vieler Roboterwettbewerbe. (Robo Callenge (2002 sic!), 'Ein Platz an der Sonne')

Solche Sensoren können einfache LDRs oder Photodioden bzw. Phototransistoren sein. LDRs haben den Vorteil, dass sie relativ hoch aussteuern, der große Nachteil ist aber, dass diese Sensoren ziemlich Wärmeempfindlich und etwas träge. Photodioden und Phototransistoren aheb den Vorteil, dass sie sehr genau sind, aber nicht besonders hoch aussteuern. Diese sollte man evtl. über einen OpAmp verstärken.

http://www.alscomposants.com/boutique/images_produits/vMPY7P510.jpg

Ein Typischer LDR, der LDR07

http://www.diotronic.com/images/productos/optoelectronica/bpw42.jpg

Der BPW42, ein typischer Phototransistor.

Dioden kenne ich jetzt keine in dem Farbbereich.

Die Suche nach dem Hellsten Fleck im raum ist wie ich finde ein gutes Einsteigerthema!

'-by tobimc-'


Distanzsensor IS471F

IS471F - Hindernisserkennung mit Infrarot Distanzsensor

Das hier vorgestellte IC IS471F erlaubt eine einfach und sogar recht preisgünstige Hinternisserkennung per Infarot. Dazu muß im wesentlichen nur noch eine Infrarot-Diode an das IC angeschlossen werden. Das modulierte Licht wird von einem Gegenstand direkt auf das IC zurückgeworfen und somit das Hinterniss erkannt. Tageslicht/Fremdlicht stört den IS471 überhaupt nicht, da das Licht mit einer bestimmten Frequenz moduliert wird.


Is471.png


Der normale Schaltungsaufbau sieht also wie oben abgebildet aus! In der Praxis kann das dann in etwa so aussehen:


Is471beispiel.jpg


Das englische Datenblatt findet man im Roboternetz-Download-Bereich

Die normale Reichweite ist in gewissen Grenzen abhängig von der Farbe des Hinternisses. In der Regel reicht es jedoch durchaus einige cm so das langsame Roboter durchaus sehr gut damit zurecht kommen. Durch besonders helle Infrarot LED´s und durch zusätzlich LED-Fassungen kann man die Reichweite erhöhen. Wem das noch nicht reicht, der kann über einen zusätzlichen Transistor die Strahlungsleistung der LED noch weiter erhöhen.

Is471verstaerkung.png


http://www.roboternetz.de/bilder/mehrereis471.gif

Sharp Infrarotsensoren

Sharp hat eine ganz interessante Serie von Bausteinen herausgebracht mit denen ein Roboter sogar recht genau Entfernungen messen kann. Das Messergebnis ist nahezu unabhängig von der Farbe und Helligkeit des gemessenen Objektes. Die Ansteuerung ist sehr einfach, der Sensorausgang kann zum Beispiel direkt an einen analogen Eingang eines Mikrocontrollers angeschlossen werden. Die Sensoren sind unter den Roboter-Bastlern weit verbreitet. Bei vielen Händlern erhältlich kosten die Sensoren derzeit je nach Typ und Händlerspanne zwischen 13 bis 25 Euro.

Sharpentfernungssensor.jpg


Oft werden selbst in kleinen Roboter-Projekten mehrere dieser Sensoren genutzt da sie nur einen äußerst engen Erfassungsbereich haben. Sie eignen sich daher sehr gut zur Vermessung einer Umgebung, insbesondere dann wenn Sie drehbar auf einem Servo montiert werden. Als Kollisionsschutz sind sie wegen dem engen Winkel nur bedingt geeignet, zu diesem Zweck eignen sich zum Beispiel Ultraschallsensoren besser. Das Funktionsprinzip der Sensoren ist einfach. Der Sensor besteht aus Sender und Empfänger. Der Sender sendet einen Infrarot-Strahl aus, der vom Hindernis reflektiert wird. Je nach Entfernung trifft der reflektierte Strahl an einer unterschiedlichen Stelle auf den Empfänger (ein sog. Position Sensitive Device, PSD). Der Empfänger setzt den Auftreffpunkt in einen analogen Spannungswert um. Eine schöne Skizze dazu:

Sharpfunktion.jpg


Einige der beliebtesten Bausteine sind:

Sharp GP2D12

Distanz 10 - 80 cm - Entfernung wird durch analoge Spannung am Ausgang übermittelt Dies ist der am häufigsten eingesetzte Sharp Typ bei mobilen Robotern.


GP2D12anschluss.gif

Sharp GP2YA21YK

Distanz 10 - 80 cm - Entfernung wird durch analoge Spannung am Ausgang übermittelt

Sharp GP2D120

Distanz 4 - 30 cm - Entfernung wird durch analoge Spannung am Ausgang übermittelt

Sharp GP2Y0A02YK

Distanz 20 - 150 cm - Entfernung wird durch analoge Spannung am Ausgang übermittelt

http://www.shop.robotikhardware.de/shop/catalog/images/artikelbilder/sensoren/gp2y0a02yk_diagramm.gif

Sharp GP2D02

Distanz 10 - 80 cm - Entfernung wird durch 8 Bit Digitalausgang übermittelt

Sharp GP2D150

Distanz 3-30 cm - 1 Bit Schaltausgang


Datenblätter zu den oberen Sensoren findet man im Download-Bereich des Roboternetz, siehe unter #Weblinks.

Um die analogen Spannung der Sensoren in eine Entfernung umzurechnen, kann man sich mit Hilfe des Datenblattes oder einfacher Probemessungen Tabellen erstellen, welche dann vom Controller zur Umsetzung genutzt werden. Bequemer ist allerdings eine Näherungsformel:

Formel zur Entfernungsberechnung

D = A/(X-B) 
D ist die Entfernung 
X ist der Ausgabewert des Sensors 
A ist die Steigung der Kurve A/X 
B ist der Offset der Kurve 

Die Konstanten A und B ermittelt man am besten über zwei Probemessungen:

D und X sind die Entfernung und der Ausgabewert der ersten Messung (z.B. bei 20 cm) D' und X' sind die Entfernung und der Ausgabewert der zweiten Messung (z.B. bei 60 cm)

A = ((X' - X) * D' * D) /(D - D' ) 
B = (D' * X' - D * X) /(D' - D) 

GP2D12 Messkurve

http://www.roboternetz.de/wiki/uploads/Main/gpd12kurve.gif

GPD120 Messkurve

http://www.roboternetz.de/wiki/uploads/Main/gpd120kurve.gif

Ultraschall Sensoren

Ultraschallsensoren SRF04 und SRF08

Die Firma Devantech hat eine Serie von sehr günstigen und kleinen Ultraschallsensoren entwickelt, die sich im Bereich "autonome Robotersysteme" durchgesetzt haben. Sie sind sehr verbreitet, da sie auch für "Hobby-Robotiker" erschwinglich sind und es sich nicht lohnen würde vergleichbare Module selber zu bauen, da diese meistens ungenauer und teurer wären.

Bekannt wurde die Serie durch den SRF04. Mit seinen kleinen Abmessungen, der niedrigen Stromaufnahme und der hohen Genauigkeit ist er für kleine Messaufgaben im Entfernungsbereich von 3cm bis 3m gut geeignet. Der SRF04 kann einen 3cm dicken Besenstiel in 2m Entfernung erkennen und wird durch ein PWM-Signal ausgewertet.

http://www.roboter-teile.de/images/srf04_400.jpg http://www.roboter-teile.de/images/srf04b_400.jpg

Der Nachfolger des SRF04 ist der noch erfolgreichere SRF08, der nun über den I2C-Bus ausgewertet werden kann und über eine Reichweite von 3cm bis 6m verfügt. Er hat eine noch kleinere Stromaufnahme und zusätzlich befindet sich auf der Platinenfront ein Fotowiderstand(LDR) dessen Lichtmesswerte sich ebenfalls über den I2C-Bus auswerten lassen. Durch den SRF08 wird es möglich auch bis zu 16 Mehrfachechos, von weiter hinten gelegenen Gegenständen, auszuwerten, die bei dem SRF04 ignoriert wurden. Über den I2C-Bus kann man die Messwerte in cm, zoll und in der Laufzeit µs auslesen und spart sich somit die externe Auswertung der Laufzeit, wie bei dem SRF04. Weiterhin können insgesamt 16 SRF08-Module an einen I2C-Bus angeschlossen werden.

http://www.roboter-teile.de/images/srf08_400.jpg http://www.roboter-teile.de/images/srf08b_400.jpg

Fotoquelle: www.roboter-teile.de

SRF08 Programmbeispiel

SFR08 Programm Beispiel mit BasCom Über die grundsätzliche Behandlung des I2C-Bus mit BasCom kann man hier nachlesen.

Const Sf08_adr_0 = &HE0             ' I2C Adresse
Const Sf08_c_range = 100            ' Reichweite
Const Sf08_c_gain = 1               ' Empfindlichkeit

Die Adresse ist der Default-Wert für den Sensor, und kann eingestellt werden. Range und Gain sind anzupassen, die angegeben Werte sind aber mal grundsätzlich verwendbar.

Setup Nach dem Reset sind einmal Range und Gain zu setzen.

Setzen Range

     I2cstart
     I2cwbyte Sf08_adr_0   ' Device I2C Adresse
     I2cwbyte 2            ' register "range"
     I2cwbyte Sf08_c_range  
     I2cstop

Setzen Gain

     I2cstart
     I2cwbyte Sf08_adr_0   ' Device I2C Adresse
     I2cwbyte 1            ' register "gain"
     I2cwbyte Sf08_c_gain    
     I2cstop

Abfrage Trigger

Die Abfrage soll laut Beschreibung in zwei Schritten erfolgen, zwischen denen ca 70 mS gewartet werden soll. Diese Zeit braucht das Gerät zum Messen.

Trigger

     I2cstart
     I2cwbyte Sf08_adr_0   ' Device I2C Adresse
     I2cwbyte 0            ' register "Trigger"
     I2cwbyte 81           ' Meßwert in Zentimetern
     Waitms 70 

Ergebnis abholen

 DIM Lsb as Byte
 DIM Msb as Byte
 DIM IVal as word

      I2cstart              ' Repeated Start
      I2cwbyte Sf08_adr_0   ' Device I2C Adresse
      I2cwbyte 2            ' Meßwert US

      I2cstart                 ' repeated Start
      I2cwbyte Sf08_adr_0 + 1  ' Device I2C Adresse READ!
      I2crbyte Msb , Ack      ' Bit 8-15
      I2crbyte Lsb , Nack     ' Bit 0-7
      I2cstop

      Ival = Makeint(lsb , Msb) ' umwandeln in Word (16 Bit)

Kompaß

Kompaß-Modul CMPS03

Laut der Doku ist diese Modul speziell für die Bedürnisse von Robotern gestaltet worden. Es mißt seine Lage relativ zum Erdmagnetfeld und liefert diesen Wert

  • Als PWM-Signal
  • Über I2C entweder 0-255 als Byte oder
  • 0-3599 als 16-Bit Wert (MSB first)

In der vorliegenden Doku ist eine fixe I2C-Adresse von 0xC0 angegeben. Was leider noch fehlt, sind Angaben, ob und wie diese Adresse geändert werden kann.

Bei waagrechter Montage ist das also ein Kompaß, bei senkrechter Montage dieser Module kann man auch die Neigung in Nord-Süd-Richtung messen. Hierzu sind 2 Module nötig, die zueinander um 90° gedreht angeordnet sein müssen. Die Neigung in Ost-West-Richtung zu messen, ist dagegen leider nicht möglich.

Das Ganze ist eine Anwendung des Philips-KMZ51 Magnet-Feld-Sensors mittels eines PIC16F872

Gelegentlich sollte das Modul kalibriert werden. Das kann über den I2C-Bus, aber auch mittels einen Pins am Modul initiiert werden. Dann muß das Module langsam um 360 Grad gedreht werden. Dabei nimmt das Modul 4 Meßpunkte auf und speichert sie im EEPROM.

http://www.roboternetz.de/wiki/uploads/Main/cmps3pin.jpg

Beschleunigung

...

Temperatur

Temperatur-Sensor LM75

http://www.roboternetz.de/wiki/uploads/Main/lm75.gif

Dieser Chip von National Semiconductors kann die Umgebungstemperatur mit einer Genauigkeit von 0.5o Grad Celsius messen. Das angegebene Bereich ist -25o bis 100o C. Es wird zweierlei geboten:

  • Ein Schaltausgang - Wenn man also z.B. einen Ventilator einschalten möchte
  • I2C - Der obere Teil der Adresse ist fix 0x9n, die Bits 1-3 kann man mit Jumper einstellbar machen oder fest verdrahten.

Durch einen einfachen I2C-Lesebefehl kann man die Temperatur einlesen (16-Bit), das Format ist allerdings etwas tricky. Das erste Byte (8-Bit) ist die Temperatur in ganzen Grad, als normales signed char, vom zweiten Byte gibt das MSB an, ob noch 0.5o dazuzuzählen sind (also auch, wenn vorne eine negative Zahl steht)

Der Grund ist der: die vorzeichenbehaftete 9-Bit Zahl, die da linksbündig in zwei Datenbytes übertragen wird, gibt eigentlich an, wieviel 0.5 Grad - Einheiten gemessen wurden. Rein rechnerisch wäre also Temperatur = Wert * 0.5, das müßte man aber als float durchführen oder erweitern

Programm-Beispiel für LM75

Der LM75 wird über den I2C-Bus angesprochen In BasCom, wo es ja keine signed char gibt, wird das Interpretieren auf sehr unterschiedliche Art empfohlen.

Ich empfehle:

dim Ival as integer
dim Msb as byte
dim Lsb as byte
        I2cstart
        I2cwbyte &H91   ' Lese-adresse !  
        If Err = 1 Then
           I2cstop       ' kein ACK vom LM75 --> irgendein Fehler
           Ival = 9999   ' Zeichen, daß der Wert ungültig ist !
        Else
           I2crbyte Msb , Ack
           I2crbyte Lsb , Nack
           I2cstop
           If Msb.7 = 1 Then
              Ival = Makeint(msb , &HFF)   ' auffüllen mit den Vorzeichen bits
           Else
              Ival = Makeint(msb , &H00)   ' positiv, also bleibt es so
           End If
           Ival = Ival * 10                ' erweitern 
           If Lsb.7 = 1 Then
             Ival = Ival + 5               ' fünf Zehntel Grad dazu 
           End If
        End if

das ergibt die Temperatur in Zehntel-Grad (Natürlich nur, wenn's keine Fehler gab).

Resistive Sensoren

...

Kapazitive Sensoren

...

Induktive Sensoren

Induktiver Näherungsschalter

...

Piezoelektrische Sensoren

Hier ist ein Experiment dargestellt das die Funktion von Piezowandlern demonstriert.

Drückt man auf eine längliche Glasplatte (Mikroskopträger Länge 76mm), die an den Enden auf je einem Piezo Wandler gelagert ist, dann ergeben sich Signale, die von den Kräften auf die Wandler abhängig sind.

Die Summe der beiden Kräfte entspricht der Gesamtkraft. Das Verhältnis der beiden Kräfte entspricht dem Verhältnis der Abstände des Druckpunktes zum Wandler.

http://www.roboternetz.de/wissen/images/6/66/Piezowandler.jpg

Im Versuch wurde mit der Frequenz von ca. 4Hz (0,5s/div) von einem Ende bis zum anderen auf die Platte gedrückt. (Tonleiter). Die Signale der beiden Wandler sind im Oszillogramm aufgetragen und die Folge der Druck-Positionen ist auf den ersten Blick schon mal nachvollziehbar.

PIR Passiv Infrarot Sensoren

...


Siehe auch

Weblinks


LiFePO4 Speicher Test