PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : .:Anfänger Frage zu Sensoren:.(Neu! Frage zu meinem 1. Progr



oceans94
03.05.2008, 10:42
Hallo zusammen,
Folgendes :
ich bin grad dabei ein Roboter zu Planen:
(Zur Info mit dem RN-Control 1.4 Mega32)

1. Linienverfolgung: Würde ich nach der Schaltung aufbauen:
Link: http://www.robotmaker.de/linie.html
mein roboter is vorne 150 mm breit. Wie viele von den CNY70 Bausteinen (bzw. wie viele von den ganzen Schaltungen) soll ich nebeneinander benutzen, es geht ja bereits mit einem aber 15cm?????
Und in der Beschreibung braucht man diesen IC TLC271. Bei Conrad hab ich den nicht gefunden(Nur TLC272)(wo is da der unterschied??), heißt der vielleicht anders??

2. Soll mein Roboter Hindernisse umfahren können . da kämen jetzt Ultraschall und Infrarot Kollisionssensoren (Entfernungssensoren) in Frage.
Das Problem is, dass ich wenig geld zur verfügung habe und die Frage is jetzt halt wie viele Sensoren ich brauche (150mm breite) und von welcher Art. Mir wurde gesagt, dass sich Ultraschallsensoren besser eignen aber z.B. vom SRF08 könnte ich mir nur einen Leisten, was aber glaub nicht reicht. Altenative (finanziell) wären z.B. 3 mal SRF02 aber ob das reicht??
Von den Infrarotsensoren könnte ich schon n Paar mehr kaufen aber warum sind die nicht so geeignet bzw. wie viele bräuchte ich davon??

Un bei den Infrarot sensoren, was braucht man den da für Kabel ans Board
Sind die dabei???

Danke im vorraus für Antworten....

ikarus_177
03.05.2008, 11:33
Hi,

also zu den IR-Sensoren:

da liegt bereits ein ca. 15 cm langes Anschlusskabel bei (3 polig). Also die Versorgungsspannung (+5V), GND sowie eine Signalleitung, die einfach an einen A/D Port angeschlossen wird.

Die IR-Sensoren haben den Nachteil, dass sie die Entferung zu einem Hinderniss nur punktförmig messen können, du musst also schon genau wissen, wo sich ein Hinderniss befindet. Zur großräumigen Hindernisserkennung würde sich ein Ultraschallsensor anbieten.
Ich verwende bei meinem Bot einen SRF05 Ultraschallsensor und einen Sharp GD2D12. Diese Sensoren kann ich mithilfe zweier Servos horizontal und vertikal schwenken, es ist also nur ein Sensor erforderlich, um einen großen Bereich abzudecken.

Bei den US-Sensoren würde ich eher zum SRF05 tendieren, da dieser nur ein wenig teurer ist als der SRF02, er soll aber um einiges genauer sein.

Bei mir erkennt der SRF05 so zuverlässig alle Hindernisse, dass der IR-Sensor bis jetzt noch nie im Einsatz war (nur bei dünnen Tischbeinen, etc. glaubt er manchmal, kein Hindernis zu erkennen).

Wenn es dich interessiert: Unter http://de.youtube.com/watch?v=SSTvQdfnAus findest du ein Video zum Hindernisserkennungsprogramm auf meinem Bot.


Viele Grüße
ikarus_177

oceans94
03.05.2008, 11:49
Danke für deine Antwort
Das mit den Servos hab ich mir auch schon überlegt aber ich weiß nicht wie man das Programmiert...

kannst du mir vieleicht mal ne kleine Skizze machen wie du das genau verbaut hast (mit den beiden Sensoren) bzw. mir erklären wie der Ultraschall- und der Infrarotsensor zusammen arbeiten...

ikarus_177
03.05.2008, 12:53
Hi,

ich hab mal ein paar Bilder gemacht:

Die Sensoren hab ich auf einer Lochrasterplatine festgeschraubt:

http://mitglied.lycos.de/ires/images/1.jpg


Die beiden Servos hab ich einfach mit Doppelklebeband verbunden:

http://mitglied.lycos.de/ires/images/2.jpg


Hier noch mal eine Aufnahme von oben:

http://mitglied.lycos.de/ires/images/3.jpg

------------------------------------------------------------------------------------

zur Software:

anfänglich hab ich mir das so vorgestellt, dass der US-Sensor einmal hin und herfährt und die Koordinaten, an denen sich ein Hindernis befindet, speichert. Danach soll der Servo zu diesen Positionen hinfahren und der IR-Sensor soll genaue Messungen vornehmen (eigentlich könnte der IR-Sensor auch gleich nach der Entdeckung des Objekts nachmessen).
Nach einem ersten Test stellte sich jedoch heraus, dass der US-Sensor so genau arbeitet, dass der IR-Sensor die meiste Zeit überflüssig ist (jedoch nicht immer).
Als Controllerboard verwende ich eine RN-Control, da dies mein erstes Projekt ist, und ich noch nicht so viel Erfahrung in sachen uCs hatte. Dieses Board steuert einerseits die beiden Servos und wertet andererseits die eingehenden Daten der Sensoren aus und bestimmt dann die Richtung, in der der Roboter ausweichen soll. Über den RS232 - Bus wird diese Information dann einem CCRP5 - Roboter von Conrad mitgeteilt, der das Fahrgestell bildet. Die CC1 am Roboter nimmt die Daten entgegen und führt das Ausweichmanöver aus.


Der Code am RN-Control sieht so aus:



' hier die nötigen Definitionen
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000

' Definition der beiden Servos/angeschlossen an PortA.0 bzw. PortA.1
Config Servos = 2 , Servo1 = Porta.0 , Servo2 = Porta.1 , Reload = 20
Config Adc = Single , Prescaler = Auto

Config Porta.0 = Output
Config Pinc.6 = Output
Config Pinc.7 = Output
Config Pind.4 = Output
'Ports für rechten Motor
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pind.5 = Output
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Pwm1a = 0
Pwm1b = 0
Tccr1b = Tccr1b Or &H02

Config Pina.2 = Input
Config Pina.3 = Output
Config Pina.4 = Input

Portd.4 = 0



Enable Interrupts


' Variablen definieren

Dim I As Byte
Dim Us As Byte
Dim X As Byte
Dim Status As Byte
Dim Zeitmessung As Word
Dim Entfernung As Word



' Hauptprogramm


Do

Gosub Usscan 'ruft Unterprogramm zur Messung durch US-Sensor auf

Loop

End





' Unterprogramme

Usscan:
' Scanschleife/zählt von 27 bis 85 und übermittelt den aktuellen Wert der Zählvariable den Servos, die sich an diese Position begeben
For I = 27 To 85
Servo(1) = I
Servo(2) = 50

'eigentlicher Messvorgang des US-Sensors
Pulseout Porta , 3 , 40
Pulsein Zeitmessung , Pina , 4 , 1
Zeitmessung = Zeitmessung * 10
Entfernung = Zeitmessung / 58

'Bestimmen der Ausweichrichtung
X = I
If Entfernung < 40 And I < 50 Then
Gosub Links
End If

If Entfernung < 40 And I > 50 Then
Gosub Rechts
End If


If Entfernung > 40 Then Gosub Gerade


Waitms 35
Next
Return

'Unterprogramme zur Übermittlung der Daten an CCRP5
Links:
Status = 0
Printbin Status
Servo(1) = X
Servo(2) = 50
Waitms 50
Return


Rechts:
Status = 1
Printbin Status
Servo(1) = X
Servo(2) = 50
Waitms 50
Return


Gerade:
Status = 2
Printbin Status
Return


Weitere Informationen zum Bot findest du auf meiner Website (www.ires.roboterbastler.de (befindet sich allerdings noch im Alpha-Stadium)) bzw. im Forum (dort sind auch weitere Programme zu finden).


Viele Grüße
ikarus_177

oceans94
03.05.2008, 14:54
Lieber ikarus_177,
vielen Dank für die Hilfreiche Antwort.......

Das is genau das was ich brauch so .
werd ichs machen.......
P.S was is des da auf dem 1. Bild rechts auf der Platine??

Weis sonst noch jemand was zu meiner 1. Frage (Linienverfolgung)????


Danke im vorraus....

oceans94

oceans94
03.05.2008, 18:57
Soll man Infrarot sensoren nicht vertikal anschrauben??

ikarus_177
03.05.2008, 19:09
Hi,

Das auf dem Bild ist eine superhelle LED mit einer Leistung von 1W.

Das mit dem vertikalen Montieren der IR-Sensoren hängt mit der Erkennung bewegter Objekte zusammen, z.B.: wenn sich der Roboter dreht. Da ich allerdings nur Messungen vornehme, wenn der Roboter stillsteht und es sich sonst mit der Platzaufteilung nicht ausgegangen wäre, habe ich den IR-Sensor horizontal festgeschraubt.


Viele Grüße
ikarus_177

oceans94
03.05.2008, 19:42
So was hab ich mir schon gedacht (mit der LED mein ich)....
Danke für deine Antwort........

Weiß noch jemand was bezüglich meiner 1. Frage???

Besserwessi
03.05.2008, 20:17
Mit nur einem Sensor geht das Linienverfolgen nur eher theoretisch. Wenn es nicht extra schnell sein soll und man ein paar extra Schlenker in kauf nimmt sollte man mit 2-3 Sensoren schon auskommen.

Der TLC271 ist ein einfach OP. Beim TLC272 sind 2 solche OPs drin, beim TLC274 sind es 4. Der TLC272 ist zwar schön, aber bei Conrad recht teuer.
Wenn man nicht ganz so hohe Ansprüche hat geht teilweise auch ein LM358/LM324, der ist deutlich billiger. Für die Schaltun goben sollte der reichen, wenn man den Widerstand am Ausgang nach +5V macht. Mit der Schaltung oben ist das Lienienverfolgen aber schon etwas schwieriger. Besser sollte man das Ausgangssignal der Lichtschranke per AD Wandler (im Controller) messen, dann kann man auch zwischen den Lichtschranken interpolieren.

oceans94
03.05.2008, 20:19
Noch eine Frage:

ikarus_177 schreibt die IR_Sensoren hätten ein Kabel dabei ......Die Ultraschallsensoren auch????

Gruß oceans94

ikarus_177
03.05.2008, 20:26
Hi,


nein, bei den Ultraschallsensoren sind einfach (ich glaube 5) Lötaugen, an denen ganz einfach Drähte eingelötet werden können. Die genaue Anschlussbezeichnung findet man in der Dokumentation.


Viele Grüße
ikarus_177

oceans94
03.05.2008, 20:30
Danke ihr beiden........

oceans94
03.05.2008, 20:45
Besserwessi:
Hab mal ne Frage:
Ich bin ein bisschen unerfahren und kann mit deiner antwort nur teilweise etwas anfangen aber is es nicht möglich diese Schaltung

Link: http://www.robotmaker.de/linie.html

einfach 3 mal zu bauen???

Weiste ich bau halt am anfang lieber nach anleitung....

oceans94
04.05.2008, 16:59
Hallo zusammen.................
Noch mal zur betonung ich bin absoluter Neuling also nich Lachen [-X [-X [-X [-X

Ich weiß das es eigendlich nicht hierher gehört aber ich wollte nicht schon wieder einen neuen Thread wegen so was lächerlichem Aufmachen............


Ich hab mal ein erstes Programm geschrieben (Mein erstes überhaupt in Bascom) und ich weiß das da noch viele viele Fehler drinn sind...........



( ehrlichgesagt wundert mich das auch nicht, da ich einfach mal drauf los geschrieben habe)

Zur Info: Ich hab das RN-Control 1.4 Mega32

Ne normale servo zur steuerung und ein 12V Getriebemotor als Antrieb(Ich glaub aber, dass er (so wie ich ihn angeschlossen habe) nur 5V bekommt)

Und für die Sensorik 3*CNY70 mit der Schaltung nach

Link: http://www.robotmaker.de/linie.html


Es ist kein komplettes Programm sondern erst mal nur zur Linienverfolgung........




'Programm zur Linienverfolgung mit 3 CNY70 IR-SENSOREN



'Lenkservo:
Config Servos = 1 , Servo1 = Portd.4 , Reload 20
Config Adc = Single , Prescaler = Auto ' Nicht Sicher

'Lenkservo-Port
Config Portd.4 = Output
Portd.4 = Y

'Motor:
Config Pind.5 = Output
Portd.5 = X

'CNY70 links
Config Porta.1 = Input
Porta.1 = Links

'CNY70 mitte
Config Porta.2 = Input
Porta.2 = Mitte

'CNY70 rechts
Config Porta.3 = Input
Porta.3 = Rechts



Enable Interrupts

Dim X As Integer
Dim Y As Integer
Dim Links As Integer
Dim Mitte As Integer
Dim Rechts As Integer




' Voreinstellungen:
'-Motor aus
'-Servo Mittelstellung



X = 0
Y = 100





'Taster an portA.0
'Warten bis Taster gesetzt:

Bitwait Pina.0 , Set

'Motor ein:

X = 1

Do


If Links = 1 And Mitte = 0 And Rechts = 1 Then
Goto Gerade


If Links = 1 And Mitte = 1 And Rechts = 0 Then
Goto Rechts


If Links = 0 And Mitte = 1 And Rechts = 1 Then
Goto Links


If Links = 0 And Mitte = 0 And Rechts = 1 Then
Goto Halblinks


If Links = 1 And Mitte = 0 And Rechts = 0 Then
Goto Halbrechts

End If


Loop Until Pina.0 , Reset




Gerade:

Y = 100



Rechts:

Y = 150


Links:

Y = 50


Halblinks:

Y = 75


Halbrechts:

Y = 125




Gruß oceans94


P.S. bitte nicht Lachen...

oceans94
04.05.2008, 18:57
Ich hab den Code noch mal geupdatet :-& :-& :-&

'Programm zur Linienverfolgung mit 3 CNY70 IR-SENSOREN



'Lenkservo:
Config Servos = 1 , Servo1 = Portd.4 , Reload 20
Config Adc = Single , Prescaler = Auto ' Nicht Sicher

'Lenkservo-Port
Config Portd.4 = Output
Portd.4 = Y

'Motor:
Config Pind.5 = Output
Portd.5 = X

'CNY70 links
Config Porta.1 = Input
Porta.1 = Links

'CNY70 mitte
Config Porta.2 = Input
Porta.2 = Mitte

'CNY70 rechts
Config Porta.3 = Input
Porta.3 = Rechts



Enable Interrupts

Dim X As Bit
Dim Y As Integer
Dim Links As Integer
Dim Mitte As Integer
Dim Rechts As Integer




' Voreinstellungen:
'-Motor aus
'-Servo Mittelstellung



X = 0
Y = 100





'Taster an portA.0
'Warten bis Taster gesetzt:

Bitwait Pina.0 , Set

'Motor ein:

X = 1

Do


If Links = 1 And Mitte = 0 And Rechts = 1 Then
Goto Gerade


If Links = 1 And Mitte = 1 And Rechts = 0 Then
Goto Rechts


If Links = 0 And Mitte = 1 And Rechts = 1 Then
Goto Links


If Links = 0 And Mitte = 0 And Rechts = 1 Then
Goto Halblinks


If Links = 1 And Mitte = 0 And Rechts = 0 Then
Goto Halbrechts

End If


Loop Until Pina.0 , Reset




Gerade:

Y = 100



Rechts:

Y = 150


Links:

Y = 50


Halblinks:

Y = 75


Halbrechts:

Y = 125

oceans94
04.05.2008, 20:37
Hab mal noch eine Frage:

Was mach ich wenn er gar keine linie findet.
und wie kann ich programmieren das er wenn er z.b nach links weg ist das erkennt un dann nach rechts fährt um wieder nach der Linie zu suchen???

Freu mich über antworten..

Gruß oceans94

Besserwessi
04.05.2008, 21:06
Wenn man wirklich die Schaltung verwenden will, müßte man sie 3 mal aufbauen (z.B. mit 3/4 vom LM324). Ich würde allerdings emfehlen analog eingänge zu benutzen, da kriegt man wesenlich mehr Informationen und man braucht im Prinzip auch gar keinen OP. Am besten sollte man die IR LEDs der Sensoren abschaltbar machen. Das wird z.B. beim Asuro so mit 2 Lichtschranken so gemacht.

Bis man erst mal die Linie findet muß man halt suchen. Eine Möglichkeit wäre es z.B. eine Spiralbahn zu fahren. Ist halt ein Kreis mit zunehmenden Durchmesser.

oceans94
04.05.2008, 21:21
Danke für die Antwort.

Danke für die Info mit dem Liniefinden , aber gibt es auch eine Möglichkeit der Wiederfindung, dass gespeichert wird in welche richtung die linie entwischte und in die wird dann gesteuert....(WIE PROGRAMMIEREN??????????)

Und was meint ihr zu meinem Programm????????

Oder ist es so schlecht, dass ihr um mir zu helfen ein komplett neues schreiben müsstet?

Danke im vorraus

oceans94

oceans94
05.05.2008, 12:20
Will mir wirklich niemand helfen????

Vielleicht muss ich doch einen neuen thread aufmachen aber das wär mir irgendwie peinlich....wenn ihr versteht was ich meine.....

Besserwessi
05.05.2008, 17:33
Ganz so wird das Programm noch nicht funktionieren. Die Aufrufe links, rechts, gerade usw. müßten eher unterprogramme sein die per Gosub aufgerufen werden. Eventuell könnte man die Werte für die Lenkung auch direkt in den IF statemants machen.

Das ist eine ganz grobe Regelung, könnte aber sonst funktionieren.

Im Prinzip wird im Programm (bis auf den oben erwähnten Fehler) schon die richtung gespeichert in die die Linie entwischt ist. Die letzte Servoposition von der Lenkung sollte noch entsprechend der Letzen Information über die Richtung enthalten. Selbst wenn also die Linie Verloren wird, sollte der Bot weiter in die richtige Richtung Fahren und dann hoffentlich spätestens nach einem ganzen Kreis die Linie wiederfinden. Um das Widerfinden etwas zu verbessern könntem man nach einiger zeit (etwa für einen 3/4-kreis) den Lenkeinschalg etwas reduzieren. Dadurch sollte man dann ziehmlich sicher wieder die Linie finden, denn man beginnt dann einen Kreis der den Punkt einschließt an dem man die Linie verloren hat. Das Problem könnte höchstens sein wenn man die Line unter einem zu steilen Winkel wiederfindet und dann fast zwangläufig wieder verliert.

oceans94
05.05.2008, 17:56
hey,
vielen dank für deine Antwort .
aber so sachen wie interne Pullups ( was auch immer das ist, die man aber glaub ich braucht) hab ich ja nicht drinnen (zumindest nicht absichtlich).
und z.b. wie ich meine Variablen dimensioniert habe (habe ich auch nur geraten....) und was ENABLE INTERRUPRS heißt weiß ich auch nicht..........

du meinst also, dass wenn ich die Fehler behebe, die du angesprochen hast würde es gehen???


Kann ich mir zwar nicht vorstellen aber das wär einfach nur geil!!

Gruß oceans94

oceans94
05.05.2008, 18:04
Hab jetzt statt GOTO einfach den befehl nach then (in die nächste Linie halt) gechrieben........

Ich weiß aber nicht wie ich das mit einem 3/4 Kreis realisieren soll....
vielleicht so:

ELSE
Waitms x(wieviele?)

Noch eine Frage ist das richtig, dass bei der servo 150 ein anschlag, 100 mitte, 50 anderer anschlag ist, oder Variiert das?

Dirk
06.05.2008, 06:54
@oceans94:

Noch 'mal zur Hardware Seite:
Wenn du nicht viel Schaltungsaufwand mit dem CNY70 haben willst und ihn am Analogeingang (ADC) des AVR betreiben willst, brauchst du kein IC.
Es reicht ein einfacher Widerstand 10kOhm am CNY70 Kollektor nach +5V. Damit sind auch feine Helligkeitsunterschiede prima zu erkennen.

Gruß Dirk