Time of Flight-sensor
Een Time of Flight (TOF) sensor meet afstand met een lichtstraal. Hij is preciezer dan een ultrasone sensor en werkt ook bij geluid. De TOF praat over I2C, dus via de pinnen SDA en SCL.
Materiaal
- Nano op het shieldArduino Nano RP2040 Connect op het Leaphy Murphy Shield
- Time of Flight-sensorMet de pinnen SDA, SCL, VCC en GND
- SDA/SCL-moduleEen multiplexer, alleen nodig bij twee of meer TOF-sensoren
Controlevraag
Waarom heb je een multiplexer nodig bij meerdere TOF-sensoren?
Antwoord
Alle TOF-sensoren hebben hetzelfde I2C-adres. De microcontroller zou ze niet uit elkaar kunnen houden. Met een multiplexer geef je elke sensor een eigen channel, zodat je ze los kunt aanspreken.
Eén TOF zonder multiplexer
Aansluiten

- SDA van de TOF aan de pin A4 (binnenste rij; op het shield A4/D18/SDA)
- SCL van de TOF aan de pin A5 (binnenste rij; A5/D19/SCL)
- VCC aan 3V3 (middelste rij) en GND aan GND (buitenste rij), allebei op het rijtje van A4
In het schema kruisen twee draden elkaar: op de TOF zit SDA links van SCL, maar de draad van SDA moet het verst opzij.
Op een nieuwe TOF zit vaak een doorzichtig plastic stickertje. Trek dat er voorzichtig af voor een betere meting.
Code
from leaphymicropython.sensors.tof import TimeOfFlight
from time import sleep
tof = TimeOfFlight()
while True:
afstand = tof.get_distance()
print(afstand)
sleep(1)
Uitleg
TimeOfFlight()maakt een sensor aan op het standaard I2C-adres.tof.get_distance()geeft de afstand in millimeters.
Controlevraag
Wat krijg je terug als er niets voor de sensor staat?
Antwoord
Het getal 8191. Dat betekent: geen geldige meting. Je krijgt het ook als een object te ver weg is of juist te dichtbij (onder ongeveer 5 cm). De TOF meet betrouwbaar tussen ongeveer 5 cm en 200 cm.
Alleen geldige metingen
Soms staat er niets voor de sensor, of zit een object buiten bereik. Dan krijg je een hoog getal terug. De regel is simpel: alles boven 8090 is geen echte afstand.
from leaphymicropython.sensors.tof import TimeOfFlight
from time import sleep
tof = TimeOfFlight()
while True:
afstand = tof.get_distance()
if afstand > 8090:
print("geen geldige meting")
else:
print(afstand)
sleep(1)
- Alles tot en met 8090 noemt de bibliotheek een afstand, in millimeters. Betrouwbaar meet de sensor tussen ongeveer 50 en 2000 mm (5 cm tot 2 m). Daarbuiten krijg je soms nog een getal, maar reken er niet op.
- Is het getal groter dan 8090? Dan is er geen geldige meting:
- 8191: de sensor antwoordt, maar ziet niets binnen bereik (te ver, te dichtbij of niets ervoor);
- boven 9000: de sensor antwoordt niet, bijvoorbeeld door een losse SDA-
of SCL-draad of een verkeerd
channel. Zie Er gaat iets mis.
Controlevraag
Wat zie je in de Shell als je je hand vlak (minder dan 5 cm) voor de sensor houdt?
Antwoord
geen geldige meting. Onder ongeveer 5 cm geeft de TOF 8191, en dat is groter dan 8090.
Eén TOF met multiplexer
Met de SDA/SCL-module kun je tot acht I2C-apparaten aansluiten op channels 0 t/m 7. Elke sensor krijgt zo zijn eigen kanaal.
Aansluiten

In dit voorbeeld zit de TOF op channel 7 van de multiplexer. Het cijfer staat boven het stel pinnen waarin je de sensor steekt. Op een channel staan vier pinnen onder elkaar: SDA, SCL, VCC en GND. Elke draad van de TOF gaat naar de pin met dezelfde naam.
Code
from leaphymicropython.sensors.tof import TimeOfFlight
from time import sleep
tof = TimeOfFlight(channel=7)
while True:
print(tof.get_distance())
sleep(1)
Uitleg
TimeOfFlight(channel=7)
Met channel=7 vertel je de bibliotheek op welk kanaal van de multiplexer de sensor zit. Vergeet niet dit aan te passen als je de sensor in een ander kanaal steekt.
Controlevraag
Welk getal vul je in bij channel= als je de sensor in het stel pinnen onder 0 steekt?
Antwoord
channel=0. Het cijfer boven het stel pinnen op de multiplexer is precies het kanaal dat je in je code invult.
Twee of meer TOFs met multiplexer
Heb je twee TOFs nodig (bijvoorbeeld om links en rechts te meten)? Dan steek je ze in twee verschillende channels van de multiplexer.
Aansluiten

In dit voorbeeld:
- TOF 1 op channel 0
- TOF 2 op channel 7
Bij channel 0 tot en met 3 (bovenaan de multiplexer) staan de pinnen andersom: GND bovenaan en SDA onderaan. Daarom kruisen de draden van TOF 1 in het schema. Steek ook hier elke draad op de pin met dezelfde naam.
Code
from leaphymicropython.sensors.tof import TimeOfFlight
from time import sleep
tof_0 = TimeOfFlight(channel=0)
tof_7 = TimeOfFlight(channel=7)
while True:
afstand_0 = tof_0.get_distance()
afstand_7 = tof_7.get_distance()
print(afstand_0, afstand_7)
sleep(1)
In de Shell zie je nu twee getallen naast elkaar: de afstand voor sensor 0 en sensor 7.
Opdracht: drie sensoren
Voeg een derde TOF toe op channel 3 en print ook die waarde mee.
Oplossing
from leaphymicropython.sensors.tof import TimeOfFlight
from time import sleep
tof_0 = TimeOfFlight(channel=0)
tof_3 = TimeOfFlight(channel=3)
tof_7 = TimeOfFlight(channel=7)
while True:
print(tof_0.get_distance(), tof_3.get_distance(), tof_7.get_distance())
sleep(1)