Hi,
ich hab mal ein paar Bilder gemacht:
Die Sensoren hab ich auf einer Lochrasterplatine festgeschraubt:
Bild hier
Die beiden Servos hab ich einfach mit Doppelklebeband verbunden:
Bild hier
Hier noch mal eine Aufnahme von oben:
Bild hier
------------------------------------------------------------------------------------
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:
Code:
' 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
Lesezeichen