VL53L0X.jpg
Den VL53L0X Time-of-Flight Distanz-Sensor gibt es beim freundlichen Chinesen schon fertig aufgebaut mit einer kleinen Platine und Spannungsregler für etwa 4-6 Euro.
Time-of-flight heißt, der Sensor misst die Zeit, die ein Infrarot-Lichtstrahl bis zum Zielobjekt und zurück braucht und berechnet daraus die Entfernung.
So wie bei einer Ultraschall Entfernungsmessung.
Das Board hat nur 25x12mm Fläche und ist damit deulich kleiner als ein GP2D120.
st.com/content/st_com/en/produ…mity-sensors/vl53l0x.html
Leider hat es ST nicht so mit den Datenblättern, es gibt lediglich eine API, eine anständige Registermap gibt es nicht.
Ich habe im Netz eine Weile gesucht und ein funktionierendes Programm gefunden und nach Bascom übersetzt.
protonbasic.co.uk/content.php/…185773b4824f20f06f0665fd9
Die angesprochenen Register werden nicht erklärt, aber zumindest funktioniert der Sensor so und liefert tatsächlich die Entfernung in Millimetern.
Eigentlich ein idealer Sensor für kleine Roboterchen
Alles anzeigen
Timeofflight.jpg
Den VL53L0X Time-of-Flight Distanz-Sensor gibt es beim freundlichen Chinesen schon fertig aufgebaut mit einer kleinen Platine und Spannungsregler für etwa 4-6 Euro.
Time-of-flight heißt, der Sensor misst die Zeit, die ein Infrarot-Lichtstrahl bis zum Zielobjekt und zurück braucht und berechnet daraus die Entfernung.
So wie bei einer Ultraschall Entfernungsmessung.
Das Board hat nur 25x12mm Fläche und ist damit deulich kleiner als ein GP2D120.
st.com/content/st_com/en/produ…mity-sensors/vl53l0x.html
Leider hat es ST nicht so mit den Datenblättern, es gibt lediglich eine API, eine anständige Registermap gibt es nicht.
Ich habe im Netz eine Weile gesucht und ein funktionierendes Programm gefunden und nach Bascom übersetzt.
protonbasic.co.uk/content.php/…185773b4824f20f06f0665fd9
Die angesprochenen Register werden nicht erklärt, aber zumindest funktioniert der Sensor so und liefert tatsächlich die Entfernung in Millimetern.
Eigentlich ein idealer Sensor für kleine Roboterchen
BASCOM-Quellcode: VL53L0X.BAS
- $regfile = "m328pdef.dat"
- $crystal = 16000000
- $hwstack = 32
- $swstack = 32
- $framesize = 24
- $baud = 38400
- Config Scl = Portc.5
- Config Sda = Portc.4
- I2cinit
- Const Cjvl53_write = &H52
- Const Cjvl53_read = &H53
- Led Alias Portb.5
- Ddrb.5 = 1
- Led = 1
- Xshut Alias Portd.2
- Ddrd.2 = 1
- Xshut = 0
- Waitms 100
- Xshut = 1
- Waitms 100
- Led = 0
- Dim I As Byte
- Dim Erg As Word
- Dim Daten(12) As Byte
- For I = 0 To 254 Step 2
- I2cstart
- I2cwbyte I
- If Err = 0 Then
- Print "I2C Adresse = " ; I
- End If
- Next
- Do
- Led = 1
- Gosub Sensorlesen
- Gosub Auswerten
- Gosub Ergebnis
- Led = 0
- Waitms 900
- Loop
- Sensorlesen:
- I2cstart
- I2cwbyte Cjvl53_write
- I2cwbyte &H00
- I2cwbyte &H01
- I2cstop
- Waitms 5
- I2cstart
- I2cwbyte Cjvl53_write
- I2cwbyte &H14
- Waitms 5
- I2crepstart
- I2cwbyte Cjvl53_read
- For I = 1 To 11
- I2crbyte Daten(i) , Ack
- Next
- I2crbyte Daten(12) , Nack
- I2cstop
- Return
- Auswerten:
- I = Daten(1) And &H78
- I = I / 8
- Select Case I
- Case $00 : Print "Data OK!"
- Case $01 : Print "VCSEL CONTINUITY TEST FAILURE!"
- Case $02 : Print "VCSEL WATCHDOG TEST FAILURE!"
- Case $03 : Print "NO VHV VALUE FOUND!"
- Case $04 : Print "MSRC NO TARGET!"
- Case $05 : Print "SNR CHECK!"
- Case $06 : Print "RANGE PHASE CHECK!"
- Case $07 : Print "SIGMA THRESHOLD CHECK!"
- Case $08 : Print "TCC!"
- Case $09 : Print "PHASE CONSISTENCY!"
- Case $0a : Print "MIN CLIP!"
- Case $0b : Print "RANGE COMPLETE!"
- Case $0c : Print "ALGO UNDERFLOW!"
- Case $0d : Print "ALGO OVERFLOW!"
- Case $0e : Print "RANGE IGNORE THRESHOLD!"
- Case Else Print "Hurz " ; Hex(i)
- End Select
- Return
- Ergebnis:
- Erg = Daten(11) * 256
- Erg = Erg + Daten(12)
- ' For I = 1 To 12
- ' Print Hex(daten(i)) ; " " ;
- ' Next
- Print "Ergebnis: " ; Erg ; " "
- Return