PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem bei Auswertung eines Ping))) Ultraschall Sensors



daviid
25.08.2010, 22:13
Hallöchen,

Ich hab seite heute folgenden US-Sensor:
http://www.watterott.com/de/Parallax-PING-Ultrashall-Entfernungsmesser
Hier das Datenblatt: http://www.pololu.com/file/0J214/PING_documentation.pdf

Hört sich alles nich so schwer an, es gibt auch einen ähnlichen Sensor, den Srf05 über den es einen Artikel im RN-Wissen zur Auswertung gibt:
http://www.rn-wissen.de/index.php/Ultraschall_SRF05_an_RN-MiniControl

Hab den Code teilweise übernommen, so sieht er aus:


$regfile = "m8def.dat"
$crystal = 4000000
$hwstack = 100
$swstack = 100
$framesize = 100
$baud = 19200





Declare Sub Serial0charmatch()

Config Serialin = Buffered , Size = 30 , Bytematch = 13
Enable Interrupts

Const Cmconstant = 2260
Dim Cmdistance As Word
Dim Zeitmessung As Word

Config Portd.2 = Output


Print "Startup"

'Hauptschleife
Do

Portd.2 = 0 'Port Low
Pulseout Portd , 2 , 20 'Min. 10uS Impuls senden
Pulsein Zeitmessung , Pind , 2 , 1
'Zeitmessung = Zeitmessung * 10 'mal 10 da Pulsein in 10uS Einheiten Ergebnis ermittelt
Cmdistance = Zeitmessung * Cmconstant 'Umrechnen in Zentimeter
Print "Zeit: " ; Zeitmessung ; " Entfernung: " ; Cmdistance ; " cm"
Portd.2 = 0
Wait 1

Loop
End


Sub Serial0charmatch()
Local Incoming_data As String * 30

'Daten vom Buffer auslesen
Input Incoming_data
'Ausgelesene Daten zurück schicken
Print Incoming_data
End Sub


Sollte nach meinem Verständnis eigentlich funktionieren, nur was mir nicht klar ist, in was für einer Einheit Pulsin das Ergebnis liefert.

Aber das ist auchmal egal, hauptsache es sollte überhaupt was gemessen werden.

Allerdings funktioniert die Messung ein einziges mal, und danach kommt auf der RS232 Schnittstelle immer nurnoch 0 an.

Hat jemand ne Idee warum das nur einmal geht, und die Zeit ändert sich auch und wird kleiner je näher ich was an den Sensor ranstell.

Und vor allem wie muss ich vom Pulsin Ergebnis in CM umrechnen würde mich interresieren.

Gruß

Richard
26.08.2010, 16:46
Do

Portd.2 = 0 'Port Low
Pulseout Portd , 2 , 20 'Min. 10uS Impuls senden
Pulsein Zeitmessung , Pind , 2 , 1
'Zeitmessung = Zeitmessung * 10 'mal 10 da Pulsein in 10uS Einheiten Ergebnis ermittelt
Cmdistance = Zeitmessung * Cmconstant 'Umrechnen in Zentimeter
Print "Zeit: " ; Zeitmessung ; " Entfernung: " ; Cmdistance ; " cm"
Portd.2 = 0
Wait 1

Loop

[/code]



vor pulsein musst Du mit "pordd.2 = 1" auch auf Eingang schalten. :-)
Ich (vermute) Das Ergebnis wird in µs angezeigt. Solche sender/Empfänger
brauchen Zeit! das Wait sollte (?) größer sein.

Gruß Richard



[/quote]

daviid
26.08.2010, 17:09
Ok danke für die Antwort, hat geholfen.

Nene das mit dem Wait geht in Ordnung, als maximaler Zeitraum zwischen zwei Messungen sind 200ms angegeben.