PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IR-Navigation mit TSOP7000, 2 Drehbaken, 15m Reichweite



Christian H
25.06.2009, 23:53
Hi Gemeinde,

seit ich meinen Rasenrobo in Dienst gestellt habe, habe ich über ein Ortungssystem nachgedacht. Den ursprünglichen Wunsch ihn auf cm genau zu navigieren, um systematisch den Rasen zu mähen, habe ich inzwischen aufgegeben. Für meine 200 m^2 reicht das Zufallssystem. Eine Akkuladung reicht für über 2 h. Danach ist alles niedergemäht. Trotzdem hat mich die Entwicklung eines IR-Navigationssystems gereizt, zumal hier im Roboternetz immer wieder über Navigation mit GPS, US, Bilderverarbeitung diskutiert wird.

Anforderungen waren:
Einfacher Aufbau, niedriger Stromverbrauch, also z.B. kein Laptop für Bildverarbeitung
Einfache Installation, also kein Kamerasystem oder Datentransfer per RF
Keine bewegliche Teile beim Empfänger
Empfänger berechnet seine Position und gibt diese per I2c an den Robo weiter
Aktualisierung der Position im Sekundenbereich.

Herausgekommen ist folgendes:


2 Baken, jeweils
1 Servo
1 IR-LED Osram SFH480-2 (verträgt im Impulsbetrieb bis 2A etwa 5 Grad Abstrahlwinkel)
1 Atmega 32
1 ULN2804L (Darlington-Array)
1 10k (Reset)
ggf. Vorwiderstand für LED. Ohne Vorwiderstand große Reichweite. Falls bei geringeren Entfernungen Störungen durch reflektiertes IR auftreten mit passenden Vorwiderstand Strahlenintensität der IR-LED senken.


1 Empfänger
8 TSOP7000 (arbeiten mit 455KHz)
1 Atmega 32
1 1000uF Elko
(Quarz 16 MHz, funktioniert wahrscheinlich auch mit internen Oszillator)
ggf. Display
Spannungsregler 5V (bei neuen Batterien 4 x 1,5 V spinnt meine Anzeige, ansonsten geht's auch ohne)
1 10k

Die 2 Baken werden in bestimmten Abstand aufgestellt und so ausgerichtet, dass die 0 Grad - Anfangspositionen der Servos auf einer Linie liegen. Im Empfänger-Programm muss nur der Abstand der Servos eingegeben werden. Positionen x und y beziehen sich dann auf die Grundlinie zwischen den beiden Baken.


Zusammengefaßt funktionierts folgendermaßen:

Baken:
Atmega 32 schwenkt die IR-LED hin und her
Das Poti des Servos wird angezapft. Per ADC wird die Stellung des Servos bestimmt.
Am einfachsten ist es sich auf einen Schwenkwinkel von 127 Grad zu beschränken.
Der aktuelle Winkel wir von der IR-LED abgestrahlt
Bake 1 sendet von 1 bis 127, Bake 2 von 128 bis 255

Empfänger:
8 TSOP7000 werden einfach parallel geschaltet und ermöglichen Rundumbeobachtung
gemeinsame Datenleitung geht an Rx des Atmega32
Programm analysiert empfangene Bytes nach Winkel und Kennung und errechnet Position

Entfernung: gut 15 m. Über das Darlingtonarray wäre es möglich weitere IR-LED anzusteuern womit die Reichweite sicherlich weiter erhöht werden könnte.
Genauigkeit pro Bake 1 bis 2 Grad. Macht bei 10 m Entfernung eine Genauigkeit von ungefähr 20 cm.

Die Basic-Programme mit einigen Erläuterungen:
Baken:


$regfile = "m32def.dat"
$crystal = 8000000

Config Portb = Output

Dim I As Byte , Ii As Byte , Iii As Byte , Iiii As Byte , Imax As Long , Idiv As Long , Imin As Long , I4 As Long , I5 As Byte , I6 As Byte , I7 As Byte , Byt(14) As Byte
Config Portd = Output

Byt(1) = 0 'startbit
Byt(10) = 0 'stopbit
Byt(9) = 1 '0 für Bake A 1 für Bake B

Config Adc = Single , Prescaler = Auto , Reference = Internal

Imin = 700 : Imax = 100 'Startwerte um größten und kleinsten 'Ausschlag des Servos zu bestimmen

Do

For Ii = 1 To 10 'For Next für 10 Bits
'(Start,Winkel(1-128),Bakenkennung,Stop)
If Byt(ii) = 0 Then
I = 0
Do 'do-loop für 14 bursts mit 455 KHz
Toggle Portd.5 ' Übertragung von bit = 1
nop 'IR-LED an Portd.5
nop 'Zahl der nops bestimmt burst-Dauer
nop 'ausprobieren evtl 5 oder 6 besser
nop '4 und 4 nop gut für erste 4 und 3 für zweite Bake
Incr I
Toggle Portd.5
nop 'ausprobieren evtl. 4, 5 oder 6 besser
nop
nop
Loop Until I = 14
Else
I = 0
Do 'Do-loop für gleichlange Pause > bit =0
Toggle Portd.4 'an Portd.4 ist nichts angeschlossen
nop 'Anzahl nops wie oben
nop
nop
nop
Incr I
Toggle Portd.4
nop
nop
nop
End If
Loop Until I = 14
Next

Incr Iii
If Iii = 10 Then 'Alle 10 Bytes wird PWM für Servo erzeugt
Iii = 0
Portd.7 = 1 'Servo an portd.7
Waitms 1 ' Pwm Von 1ms Bis maximal 2ms
For I5 = 0 To I6
Waitus 10
Next
Portd.7 = 0
If I6 = 100 Then I7 = 1
If I6 = 0 Then I7 = 0 'PWM wird langsam erhöht, bzw. erniedrigt
If I7 = 0 Then I6 = I6 + 1 'Incr I6
If I7 = 1 Then I6 = I6 - 1 'Decr I6

Start Adc
I4 = Getadc(0) 'Stellung des Servos wird vom Poti des Servos abgeleitet
Stop Adc
If I4 > Imax And I4 < 1000 Then Imax = I4 'Maximaler ADC -
'Wert wird festgelegt
If I4 < Imin And I4 > 10 Then Imin = I4 'Minimaler ADC Wert wird
'festgelegt
I4 = I4 - Imin : Idiv = Imax : Idiv = Idiv -imin 'IDiv Schankungsbreite
'des ADC-Wertes
If Byt(9) = 0 Then I4 = Idiv -i4
I4 = I4 * 145 : I4 = I4 / Idiv '145 Grad Schwenkbereich des
'Servos (ausmessen und eintragen)
If I4 > 127 Then I4 = 127 'Maximal 127 Grad erlaubt
'128er bit codiert Servo A oder B
Byt(2) = I4 And 1
Byt(3) = I4 And 2
Byt(4) = I4 And 4
Byt(5) = I4 And 8
Byt(6) = I4 And 16
Byt(7) = I4 And 32
Byt(8) = I4 And 64

Else
Waitus 800 'Sendepause zwischen Bytes
End If

Loop


Empfänger:


$regfile = "m32def.dat"
$crystal = 16000000

Config Lcd = 16 * 2
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0

$baud = 10200 'ausprobiert, beste
'Übertragung ggf. anpassen
Echo Off
Dim Empf As Byte
Dim I As Word , I2 As Byte , I3 As Byte , I4 As Byte , I5 As Byte , I6 As Byte , Z As Long , Zalt As Long , S As Long , Erg As Long , Erga As Long , Ergb As Long , Ia As Byte , Ie As Byte , Idiv As Byte, D As Long , Tanx As Single , Tany As Single , Posx As Integer , Posy As Integer
D = 100 'Abstand zwischen den Barken in cm
' Goto Test

Config Serialin = Buffered , Size = 254
Enable Interrupts

Dim Twi_control As Byte 'für I2C Datenübertragung
Dim Twi_status As Byte 'Atmega als Slave eingerichtet
Dim Twi_data As Byte
Declare Sub Twi_init_slave
Twi_data = 0
Call Twi_init_slave

Do
If Ischarwaiting() = 1 Then
I5 = I4 : I4 = I3 : I3 = I2 : I2 = Inkey()
If I5 = I4 And I4 = I3 And I3 = I2 And I2 < 255 And I2 > 0 Then 'mind. 3 aufeinanderfolgende Bytes müssen übereinstimmen
Incr Z : S = S + I2 : Ie = I2 'Z = Zahl durchgehend
'empfangener Bytes ,S Summe der Bytes
If Z = 1 Then Ia = I2 'Ia erstes Byte, Ie letztes Byte einer Serie
End If
End If
Incr I

If I = 10000 And Z > 0 Then 'In kurzen Abständen Kontrolle ob Bytes
' empfangen wurden
If Zalt = Z Then 'Z hat sich kurzzeitig nicht mehr geändert.
'D.h. Serie zu Ende
If Z > 15 Then 'Serie wird ausgewertet wenn mindestens 15
' Bytes in einer Serie sind
If Ia > Ie Then
Idiv = Ia - Ie
Else
Idiv = Ie - Ia
End If
CLS: Erg = S / Z : Locate 1 , 13 : Lcd Erg : Locate 1 , 1 : Lcd Z : Locate 1 , 5 : Lcd Ia , : Locate 1 , 9 : Lcd Ie
If Idiv < 30 then 'erster und letzter gemessener Winkel dürfen
'sich max um 30 unterscheiden
If Erg < 128 Then
Erga = Erg 'Winkel von Bake 1
Else
Ergb = Erg - 128 'Winkel von Bake 2
End If
End If
Tanx = Erga : Tanx = 90 -tanx : Tanx = Deg2rad(tanx) : Tanx = Tan(tanx)
Tany = Ergb : Tany = 90 -tany : Tany = Deg2rad(tany) : Tany = Tan(tany)
Tany = Tanx + Tany : Tany = D / Tany : Posy = Tany 'Koordinaten
'errechnen
Tanx = Tany * Tanx : Posx = Tanx
Locate 2 , 1 : Lcd Posx : Locate 2 , 8 : Lcd Posy :
End If
Z = 0 : S = 0
End If
Zalt = Z : I = 0
End If


' Daten per I2C übermitteln schauen ob TWINT gesetzt ist
Twi_control = Twcr And &H80 ' Bit7 von Controlregister
If Twi_control = &H80 Then
Twi_status = Twsr And &HF8 ' Status
' will der Master ein Byte haben
If Twi_status = &HA8 Or Twi_status = &HB8 Then
Twdr = Low(posx)
End If
Twcr = &B11000100
Waitus 200 If Twi_status = &HA8 Or Twi_status = &HB8 Then
Twdr = High(posx)
End If
Twcr = &B11000100
Waitus 200 If Twi_status = &HA8 Or Twi_status = &HB8 Then
Twdr = Low(posy)
End If
Twcr = &B11000100
Waitus 200
If Twi_status = &HA8 Or Twi_status = &HB8 Then
Twdr = High(posy)
End If
' TWINT muss immer gelöscht werden, damit es auf dem Bus
'weiter geht
Twcr = &B11000100 ' TWINT löschen, mit ACK
End If
Loop


Sub Twi_init_slave
Twsr = 0 ' status und Prescaler auf 0
Twdr = &HFF ' default
Twar = &H68 ' Slaveadresse setzen
Twcr = &B01000100 ' TWI aktivieren, ACK einschalten
End Sub



Test: 'Testprogramm ob TSOP7000 überhaupt reagiert
Config Portd = Input
Do
If Pind.0 = 0 And I2 = 0 Then
Incr Erg : I2 = 1
End If
If Pind.0 = 1 Then I2 = 0
Locate 2 , 6 : Lcd Erg
Loop
Return
End



Soviel für Heute. Am Wochenende gibts Fotos. Batterie ist jetzt leider leer.

Ciao

Christian

Robotniks
26.06.2009, 09:29
Hallo Christian,

das System hört sich ja genial an!
Hast du mal ein paar Bilder oder Zeichnungen davon?

Grüße Ulli

steveLB
26.06.2009, 09:37
Interessiert mich auch, ein Bild oder Skizze vom Aufbau

Robotniks
26.06.2009, 11:55
Hi,

der Aufbau ist soweit schon logisch, jeder Servo "Scannt" den Bereich ab, trifft der IR-Strahl (da wäre ein IR-Laser wohl besser) auf den TSOP, weis die RX-Einheit ja welchen Winkel das Servo derzeit besitzt. Aus den beiden Winkel kann er die Position (Dreiecksberechnung) bestimmen.
Aber die Position könnte man auch ohne ADC-Anzapfung herleiten, den die Pulsweite zum stellen der Servos ist proportional zum Stellwinkel.

Im Anhang noch eine kleine Skizze....

uwegw
26.06.2009, 12:36
Hört sich gut an.
Das einzige, was man so nicht erfährt, ist die genaue Ausrichtung des Roboters, also in welche Richtung seine Vorderseite steht. Das könnte man aber so rausfinden wie bei GPS-Empfängern: man bildet während einer Bewegung die Differenz zwischen zwei Positionsmessungen und erhält so Geschwindigkeit und Richtung. Geht natürlich nicht wenn man längere Zeit steht, aber der Job des Botrs ist es ja schließlich, zu Fahren und nicht rumzustehen.

Wie viel Aufwand steckt in der Fehlerkorrektur/Erkennung? Es kommt ja schließlich öfters vor, dass beide Baken gleichzeitig senden...

Ist die Winkelauflösung und Linearität der Servos gut genug? Zumindestens bei billigen Servos hätt ich da so meine Zweifel, ich würde eher zu Schrittmotoren tendieren...

Michael
26.06.2009, 12:41
Hallo Christian H,

schönes Projekt hast du da am Laufen.
So ein Servo hat ja eine begrenzte Schwenkgeschwindigkeit. Die Baudrate ist auch begrenzt.
Wie lange dauert so ein Scan?

@uwegw:
der M32 steuert beide Servos und beide Sende-LEDs, Konflikte werden vermutlich duch das Nacheinander-Senden verhindert.

Bilder wären natürlich klasse ;)

Gruß, Michael

Christian H
27.06.2009, 11:21
Hallo,

hier ersten Fotos:

gesamtes Ortungssystem:
http://www.rasenrobo.de/Bake/IMPG2278.jpg

Fast nichts auf der Platine:
http://www.rasenrobo.de/Bake/IMPG2286.jpg

Empfänger:
http://www.rasenrobo.de/Bake/IMPG2279.jpg
http://www.rasenrobo.de/Bake/IMPG2280.jpg
Das Kabel am Empfänger ist der Anschluss zum I2C-Bus.

Video, allerdings nur von der Bake
[stream:b12e512b89]http://www.rasenrobo.de/Bake/IMPG2282.avi[/stream:b12e512b89]

Weiteres Video folgt hoffentlich heute abend.



Sicherlich könnte man statt der Servos Schrittmotoren nehmen. Übliche Schrittmotore haben aber nur 200 Schritte und eine Auflösung von 1,8 Grad. Wäre einen Versuch wert zu sehen womit man die besseren Ergebnisse erreicht.

@robotnics: Die PWM direkt zu senden liegt natürlich nahe. Aber der Servo hinkt der PWM-Vorgabe immer einige Grad hinterher. Hängt natürlich davon ab wie schnell der Servo dreht. Bei mir ergaben sich deutliche Differenzen in der Winkelangabe nach PWM, je nach dem ob der Servo rechts oder links rum gedreht hat. Greift man die Positon am Poti ab, ist diese Differenz zumindest weg.

Zum IR-Laser: Ein Laser überstreicht den Sensor innerhalb sehr kurzer Zeit. Nimmt man eine Laserstrahl- und Sensorbreite von 5 mm und 10 m Abstand und eine Drehdauer des Servo von etwa 1 sec an, strahlt der Laser nur etwa 100 bis 200 us auf den Sensor. Für einen sicheren Empfang eines einzigen Datenpaketes braucht man aber länger. 455 KHz bedeutet 1 burst dauert 2 us. 14 bursts braucht man um die maximale Empfindlichkeit des TSOP zu erreichen. D.h. es vergehen 28 us pro bit. Mit Laser möchte man natürlich auch eine bessere Auflösung als mit einer IR-LED, sagen wir 512. Hierfür braucht man 9 bit. Mit bit zur Kodierung des Servo , start und stopbit sind´s insgesamt also 12 bit. D.h. Pro Datenpaket vergehen 12 x 28 = bereits 330 us. Dann muss man den Fall bedenken, dass der Laser dummerweise dann den TSOP erreicht, wenn bereits das erste bit gesendet wurde. Zwischen 2 Datenpause braucht man eine Pause. Erst danach kommt evtl. ein vollständig übertragenes Datenpaket zustande. D.h. es braucht fast 1 ms um ein Paket sicher zu übertragen.
Ausserdem sind IR-Laser nicht ungefährlich. Man wird nicht geblendet und hat doch plötzlich nicht nur einen sondern zwei blinde Flecke im Auge. IR-Laser sind deshalb auch nur schwer zu bekommen. Würde ich mich selbst nicht rantrauen und schon gar nicht anderen eine Bauanleitung mit IR-Laser geben.


Zum Problem der Überschneidung der Datenpakete beider Baken beim Empfang: Eine Möglichkeit ist die Servos mit etwas unterschiedlicher Geschwindigkeit drehen zu lassen. Dann kann es nur gelegentlich zu fehlerhaften Datenpaketen kommen. Diese Ausreißer müßte man herausfiltern. Besser ist es die Servos abwechselnd senden zu lassen. D.h. Servo1 sendet z.B. nur beim Rechtsschwenk, Servo2 nur beim Linksschwenk. Beide Servos müssen dann zum gleichen Zeitpunkt gestartet werden. Natürlich verlangsamt sich dann die Aktualisierung der Positionsangeben.

Weiteres Video folgt.

Gruß

Christian

Christian H
27.06.2009, 11:24
sorry Leute,

habe zu früh auf absenden geschickt. Werde die Bilder noch anpassen

uwegw
27.06.2009, 12:12
OT: hast du bei embedit.de den Laden leergekauft? ;) Wollte mir eigentlich auch mal nen paar TSOP7000 zulegen, aber sie sind auf einmal ausverkauft...

Christian H
27.06.2009, 12:26
Die TSOP7000 und IR-LED habe ich über mercateo bestellt

http://www.mercateo.com/p/139-4913231/IR_RECEIVER_MODUL_455KHZ_Typ_TSOP7000.html?redirec tedFrom=tsop7000

http://www.mercateo.com/p/102-153767(2d)BP/IR_EMITTER_SFH480_2_TO_18_.html

Die haben so viele, dass sie sie auch verkaufen \:D/

Michael
27.06.2009, 14:16
Hallo Christian H,

ich dachte, die beiden Servos auf der Grundlinie werden von nur einem Controller gesteuert. Dann wäre ein versetztes Senden kein Problem mehr.
Die Geschwindigkeit der Servos geht direkt in die Wiederholrate des Empfangs ein.
Es wird wohl einmal pro Sekunde eine Positionsberechnung möglich sein.

Gruß, Michael

Christian H
27.06.2009, 15:41
Hallo Michael,

mit einem Mikrocontroller beide Servos ansteuern ist eine Möglichkeit. Dazu wäre halt eine Strippe zwischen beiden Baken notwendig. 2 Mikrocontroller braucht man wohl auf alle Fälle, da die 455 KHz sich nicht gut über mehrere m Kabel übertragen lassen.
Ich habe mir soeben überlegt, dass ich bei einer Bake einen TSOP anbringe. Beide Baken stehen eh in Sichtkontakt. Bake 1 gibt dann den Rhythmus vor. Trifft der IR-Strahl von Bake 1 auf den TSOP von Bake 2 weiß diese wann Bake 1 entlang der Grundlinie ausgerichtet ist. Dann kann ich den Strahl von Bake 2 etwas zeitversetzt hinter dem von Bake 1 schwenken. Überschneidungen gibts dann allenfalls am Rand des "Spielfelds".

Jepp, werde ich gleich ausprobieren. Kein Projekt ist je fertig.

Wenn die Servos den Anschlag erreichen wären trotzdem noch Sendepausen erforderlich die etwas Zeit kosten. :-k

Übertragungsfehler werden weitgehend ausgeschlossen, indem mindestes 3 aufeinanderfolgende Bytes gleich sein müssen. Ausserdem dürfen das erste und letzte Byte einer Serie sich nur wenig unterscheiden. Dann kann man davon ausgehen, dass sie nur von einer Bake stammen.


Grüße

Christian H
28.06.2009, 20:14
Hallo,

die Idee, die Servobewegung der beiden Baken aufeinander abzustimmen, habe ich wieder fallengelassen. Das würde das System wohl nur unnötig kompliziert machen.

Die Baken arbeiten jetzt mit etwas unterschiedlicher Geschwindigkeit der Servos, so dass Überschneidungen der IR-Strahlen beider Baken am Empfänger zwar vorkommen, aber nie mehrfach hintereinander auftreten.

Die durch Überschneidung fehlerhaften Datenpakete werden am Empfänger dadurch aussortiert, dass der größte und kleinste gemessene Winkel einer Serie maximal 20 Grad auseinanderliegen darf. Stammen die gemessenen Bytes aus einer Überlagerung von beiden Baken, ist die Streubreite wesentlich höher ( Mischmasch aus Bytes beider Baken).

Ausserdem müssen am Empfänger mindestens 3 Bytes mit gleichem Wert aufeinanderfolgen um als gültig durchzugehen.


Noch ein Video. Wegen dem -autozensiert-wetter nur innen aufgenommen.

Die Baken waren 3 m auseinander. Abstand zu den Baken ebenfalls etwa 3 m. Das Display ist auf dem Video leider nur schwer abzulesen. Die Messwerte in der oberen Reihe sind:
1. Zahl der Bytes in einer Serie
2. erstes Byte (Winkel) einer Serie
3. letzte Byte (Winkel) einer Serie
4. Der Mittelwert einer Serie, bzw. Winkel mit dem x uny y berechnet wird

Untere Reihe:
x und y in cm.

Man sieht eine Schwankungsbreite von x und y von einigen cm. Die gemessenen Winkel der beiden Baken sind etwa 62 und 172. Dazwischen kommen auch Falschmeldungen mit Winkel von z.B. 110, die aber an der großen Schwankungsbreite als solche erkannt werden.

Zwischendurch wird der Empfänger entlang x um 30 cm verschoben

Die Aktualisierungsrate läßt sicherlich zu wünschen übrig. Mein Rasenrobo ist ja auch kein Ferrari. Schnellere Schwenks müßte man mal ausprobieren.

Damnächst werde ich den Empfänger mal auf meinem Rasenrobo installieren. Nach einer Probefahrt wird das Projekt wohl wieder in der Versenkung verschwinden. Vielleicht findet sich jemand der noch Verbesserungen einbaut, z.B. Schrittmotor Blenden vor den LED ausprobiert etc.


[stream:caf9dd3465]http://www.rasenrobo.de/bake/IMGP2301.AVI[/stream:caf9dd3465]


Viele Grüße

Christian

Michael
28.06.2009, 22:06
Hallo Christian H,

ich finde das Video nicht?

Gruß, Michael

Christian H
28.06.2009, 22:43
Hi Michael,

Das Video starten bei mir automatisch wenn ich auf diese Seite gehe.


Die beiden Videos sind:
http://www.rasenrobo.de/Bake/IMPG2282.avi
http://www.rasenrobo.de/Bake/IMPG2301.avi


Avi kann aus Virenschutzgründen deaktiviert sein.
Unter Start Ausführen mit

Regsvr32.exe %WINDIR%/system32/quartz.dll
aktivieren

und mit

Regsvr32.exe /u %WINDIR%/system32/quartz.dll
deaktivieren


Gruß, Christian

uwegw
29.06.2009, 17:07
Ich denke, ich werde in den Semesterferien auch mal einen Versuch mit so einem Aufbau starten. Ich überlege gerade, welche LED ich nehme. Bei Reichelt gibt es die SFH484 mit 8° Winkel und die SFH4550 mit 3° Winkel. Du hast ja die SFH480 mit 6° Winkel. Was schätzt du: wäre ein größerer oder ein kleinerer Winkel besser?

Christian H
29.06.2009, 20:09
hi uwege,

3 Grad sind wohl besser als 5 oder 6 Grad. Wichtig ist auch, dass die LED ein hohe Stromstoßbelastung aushält. Da ist die SFH480 etwas besser.

3 Grad bedeutet ja, dass bei diesem Winkel die Intensität auf 50 % abgenommen hat. Der TSOP ist so empfindlich, dass er im Nahbereich über einen größeren Winkelbereich anspricht. Z.B. 20 Grad. Die Intensität ist aber so symmetrisch, dass man mit Mittelwertbildung auch dann die Richtung auf etwa 1 bis 2 Grad erfassen kann.

SFH480:
Abstrahlwinkel: ±6 °
Wellen-Länge: 880 nm
Stoßstrom 2,5 A

SFH4550
Wellenlänge,Typ: 850nm
Winkel,halb: 3°
Stoßstrom 1,5 A

Der TSOP7000 hat die höchste Empfindlichkeit um 870 nm. Diesbzgl. passen beide IR-LED.

Im Datenblatt vom TSOP ist angegeben, dass mit der IR-LED TSHF 5400 20 m Reichweite möglich sind. Die habe ich auch ausprobiert, die Reichweite war aber geringer als mit der SFH450.

Mit der 3 Grad LED muss man natürlich bei größeren Entfernungen auch auf die vertikale Ausrichtung der LED achten. Die LED kann dann über oder unter den Empfänger strahlen. Ggf. könnte man 2 solche LEDs übereinander, mit leicht unterschiedlicher vertikaler Ausrichtung, am Servo anbringen.

An deiner Stelle würde ich mir von beiden welche besorgen und ausprobieren.

Würde mich freuen, wenn Du den Aufbau erproben würdest. Man könnte sicherlich noch einiges verbessern.


Grüße

Christian

uwegw
30.06.2009, 12:14
Wenn die Reichweite zu gering ist, hatte ich sowieso vor, mehrere LEDs in Reihe zu schalten...

Mein Rasen hat etwa 8,4x13,9m, macht also 16,25m Diagonale. Ich bin mir aber noch nicht sicher, ob ich wirklich nen Mäher bauen werde. Erst mal werde ich wohl nur die Navigation alleine testen...
Ich könnte mir das System auch zur Navigation in Innenräumen vorstellen. Dazu würde ich dann die Sender etwas erhöht aufhängen, damit sie über kleinere Hindernisse hinwegstrahlen. Dazu bräuchte man dann mehrere LEDs, die auf einem Kreisbogen angeordnet sind. Dann würde gedanklich ein senkrecht stehendes Kreissegment durch den Raum schwenken. Auf den Fußboden projiziert bedeutet dass dann eine Linie...

Als Antrieb würde ich wohl auch erst mal mit Servos starten und eventuell später auf Schrittmotoren mir Microschritt-Ansteuerung wechlsen...

Christian H
28.07.2009, 00:41
Hallo,

erst Mal vielen Dank an uwegw mit dem Tip die IR-LED SFH4550 zu verwenden. Damit läßt sich die Reichweite deutlich erhöhen. Zur Zeit versuche ich die IR-Geschichte mit US-Entfernungsmessung zu kombinieren: https://www.roboternetz.de/phpBB2/viewtopic.php?t=49174



Zum Schluss dieses Threads noch folgender Hinweis für alle die ebenfalls mit der SFH4550 IR-LED experimentieren wollen:

Die SFH4550 hat ordentlich Power. Im Datenblatt steht folgender
Sicherheitshinweis:
Je nach Betriebsart emittieren dies Bauteile hochkonzentrierte, nicht sichtbare Infrarotstrahlung die gefährlich für das menschliche Auge sein kann. Produkte, die diese Bauteile enthalten müssen gemäß den Sicherheitsrichtlinien der IEC-Normen 60825-1 und 62471 behandelt werden.
Ganz wohl war mir bei den Experimenten nicht, zumal ich die LED ohne Vorwiderstand direkt über einen Darlington mit 5 V angesteuert habe. Die IR-LED hat dabei rot aufgeleuchtet. Sicherheitshalber habe ich beim Support von Osram zu möglichen Gefahren nachgefragt und folgende Antwort erhalten:

Da SFH4550 ein "Schmalstrahler" ist, kann die Schwelle von 4W/sr überschritten werden (bei höheren Strömen und kurzen Pulsen könnten Sie bis 9W/sr bekommen). Wir würden nicht empfehlen in die LED aus einer Entfernung kleiner als 0,5m reinzuschauen.
Leonid Moiseev,Customer Service Support

mausi_mick
18.08.2010, 07:28
Hallo Christian,

ich find das Projekt sehr interessant, hab nur mal eine Frage zu den
IR-Sensoren, die ja bei Dir wohl alle parallel geschaltet sind.

Besteht nicht - eine nicht zu aufwändige - Möglichkeit, die TSOPxx nacheinander (alle 200ms ?) einzeln zu aktivieren/pollen, um so eine Richtungsinformation zu bekommen.
Falls man das per µController machen könnte, würde ich wohl 8 TSOPxx
nehmen (für jeweils 45° Sektoren) und die Bereiche auch durch Blenden voneinander trennen. So hab ich immer Information , im welchen 45° Bereich sich die Bake befindet. Bei mehreren Baken (<=4) muss man die dann irgendwie über eine Codierung identifiziern können.

Es gibt zwar im Netz Beschreibungen, die den Sensor per Motor rotieren lassen, aber dass ist für meine Anwendung (Saugroboter) zu aufwändig
- auch vom Platzbedarf - und zu stromhungrig.

Gruss mausi_mick

oberallgeier
18.08.2010, 12:04
Hallo mausi_mick,

sorry daß ich mich dazu melde.

... Besteht nicht - eine nicht zu aufwändige - Möglichkeit, die TSOPxx nacheinander (alle 200ms ?) einzeln zu aktivieren/pollen ...Ich habe ja keine TSOPs sondern SFH5110er. Davon werden drei Stück (https://www.roboternetz.de/phpBB2/viewtopic.php?p=388755#388755) (3) rundum gepollt. Das Ganze läuft bei mir interruptgesteuert, siehe Übersicht der Teildiagramme (hier). (https://www.roboternetz.de/phpBB2/viewtopic.php?p=437897#437897) Es wird gecirpt à la Sternthaler (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=371678#371678) - alle drei Sensoren nacheinander, siehe diese Messtabelle. (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=381085#381085) Da der TSOP ähnlich funktionierte, dürfte diese Sache bei ihm auch laufen. Braucht halt für jeden IR-Empfänger einen Port. Aber das ist ja klar.

Natürlich hat das Pollen reihum nichts mit der CIRperei zu tun - das sind zwei verschiedene Paar Schuhe.

mausi_mick
18.08.2010, 12:43
hallo oberallgeier,

danke für die schnelle Info, werd mich mal da durcharbeiten. Aber immerhin scheint das ja im Prinzip zu gehen ...

Dachte mal , dass man das vielleicht ähnlich wie beim ASURO über die DA-Wandler macht, um nicht so viele Ports zu benötigen, war aber nur so ein Gedanke.


Gruss mausi_mick