Hallo Petop,
wenn es darum geht solch einen Sensor an den PC anzubinden, ist ein kleiner Controller sicherlich das Mittel der Wahl. Es gibt mit den I2C-Interfaces auch Alternativen, ist halt Geschmacksache.
Der SRF08 wird über I2C abgefragt, man braucht also einen Controller mit I2C-Möglichkeiten.
Eine einfache Möglichkeit dafür sind sicherlich die PICAXE.
Man benötigt den Controller (wegen I2C den PICAXE-18X (8,70EUR)), 2 Widerstände für das Programmierinterface, was man auch gleich zur Wertausgabe an den PC verwenden kann und 2 PullUp-Widerstände für den I2C-Bus. Die Programmiersoftware gibts frei zum Download.
Natürlich kann man auch alles (samt Leiterplatte, Programmierkabel und CD) als Starterkit kaufen.
Folgendes einfache Programm funktioniert:
Code:
symbol range = w0 ' 16 bit variable for range (b0, b1)
init:
i2cslave $e0,i2cfast,i2cbyte ' Define I2C slave address for SRF08
main:
writei2c 0,(81) ' Start measure, result in cm
pause 70
readi2c 2,(b1,b0) ' Read Range Value
sertxd ("Range: ",#range,13,10) ' Display Values in serial Terminal (via Programming interface, 4800bps)
pause 100
goto main
Sofern man auf die erweiterten Fähigkeiten des SRF08 (Reichweite, Mehrfachechos) verzichten kann, kommt man an dieser Stelle auch mit einem SRF04 klar.
Zur Anbindung reicht dann der PICAXE-08M (4,06EUR) aus. Die oben beschriebene Schaltung reduziert sich nochmal um 2 Widerstände. Das PICAXE-08M Starterkit ist mit unter 17EUR auch nicht zu teuer und es ist alles drin, was man braucht.
Folgendes Programm funktioniert für den SRF04:
Code:
symbol trig = 0 ' Define output pin 0 for Trigger pulse
symbol echo = 3 ' Define input pin 3 for Echo pulse
symbol range = w0 ' 16 bit variable for range (b0, b1)
init:
pause 50 ' Wait for stabilizing power
main:
pulsout trig,2 ' produces about 20uS pulse (must be minimum of 10uS)
pulsin echo,1,range ' measures the range in 10uS steps
pause 10 ' SRF04 mandatory 10mS recharge period after ranging completes
' now convert range to cm (divide by 6.2) or inches (divide by 14.9)
' as picaxe cannot use fractions, multiply by 10 then divide by full number
' e.g. range x 10 then / 62 is the same as range / 6.2
range = range * 10 / 62 ' multiply by 10 then divide by 62
sertxd ("Range: ",#range,13,10) ' Display Values in serial Terminal (via Programming interface, 4800bps)
goto main ' and around forever
HTH und Viele Grüße
Jörg
Lesezeichen