Frank (Diskussion | Beiträge) (→Drehgeber Sharp GP1A30) |
Frank (Diskussion | Beiträge) (→Temperatur) |
||
Zeile 245: | Zeile 245: | ||
==Beschleunigung== | ==Beschleunigung== | ||
==Temperatur== | ==Temperatur== | ||
− | Temperatur-Sensor LM75 | + | ===Temperatur-Sensor LM75=== |
− | Programm Beispiel | + | |
+ | http://www.roboternetz.de/wiki/uploads/Main/lm75.gif | ||
+ | |||
+ | Dieser Chip von National Semiconductors kann die Umgebungstemperatur mit einer Genauigkeit von 0.5'^o^' Grad Celsius messen. Das angegebene Bereich ist -25'^o^' bis 100'^o^' 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.5'^o^' '''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 | ||
==Weitere Sensoren== | ==Weitere Sensoren== |
Version vom 16. November 2005, 15:31 Uhr
Inhaltsverzeichnis
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.
%center%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
%center%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.
http://www.roboternetz.de/bilder/IS471_grundschaltung.jpg
Der normale Schaltungsaufbau sieht also wie oben abgebildet aus! 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.
http://www.roboternetz.de/bilder/IS471_IRSchalter.jpg
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. Durch ein spezielles Verfahren ist dies auch unabhängig von der Farbe und Helligkeit des Hindernisses. Da die Ansteuerung der Bausteine sehr einfach ist (oft können diese direkt an den Microcontroler Port angeschlossen werden), finden diese Bausteine sehr große Verbreitung unter den Roboter-Bastlern. Der einzige Nachteil, die Bausteine sind nicht ganz billig. Derzeit kosten diese ca. 13 bis 25 Euro !
http://www.roboternetz.de/bilder/gp2d12-nb.jpg
http://www.roboternetz.de/wiki/uploads/Main/gp2d12diagramm_b.gif
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.
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
Sharp GP2D02
Distanz 10 - 80 cm - Entfernung wird durch 8 Bit Digitalausgang übermittelt
Sharp GP2D150
Distanz 3-30 cm - 1 Bit Schaltausgang
Oft werden selbst in kleinen Roboter-Projekten mehrere dieser Sensoren genutzt da die genannten Sensoren 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. Das Prinzip der Sensoren ist einfach. Die Entfernung wird bei dem Sharp Sensor durch den Winkel mit dem der Strahl auftrifft, bestimmt. Eine schöne Skizze dazu:
http://www.roboternetz.de/wiki/uploads/Main/gp2d12diagram_a.jpeg
Datenblätter zu den oberen Sensoren findet man im Download-Bereich des Roboternetz.
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
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 I2cstop Waitms 70 I2cstart 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ß, senkrecht kann man auch die horizontale Neigung messen.
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.5'^o^' Grad Celsius messen. Das angegebene Bereich ist -25'^o^' bis 100'^o^' 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.5'^o^' 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