Docs - dálkoměr VL53L0X¤
K robůtkovi lze připojit dálkoměr VL53L0X, který umožňuje opticky měřit vzdálenost. S dálkoměrem se komunikuje skrze I2C sběrnici. Protože je protokol pro ovládání dálkoměru složitý1, použijeme ke komunikaci knihovnu VL53L0X.ts
2.
Import knihovny¤
Nejprve si musíme knihovnu importovat. Zároveň budeme také potřebovat importovat modul i2c
pro komunikaci přes I2C sběrnici. To uděláme pomocí příkazu import
:
import { I2C1 } from "i2c"
import { VL53L0X } from "./libs/VL53L0X.js"
Konfigurace dálkoměru¤
Po naimportování knihovny získáme konstruktor třídy VL53L0X
, kterým můžeme vytvořit nový objekt dálkoměru. Také získáme objekt I2C1
, který slouží k ovládání I2C sběrnice. Sběrnici musíme nejprve nakonfigurovat a následně můžeme vytvořit objekt dálkoměru.
// Konfigurace I2C sběrnice na pinu 17 pro SDA a 9 pro SCL
I2C1.setup({sda: 17, scl: 9, bitrate: 400000});
// Vytvoření objektu dálkoměru
const vl = new VL53L0X(I2C1);
Dostupné rozhraní¤
Po vytvoření objektu dálkoměru můžeme začít s měřením vzdálenosti. K dispozici máme pouze jednu metodu:
async read(): Promise<Measurement>
- zahájí měření vzdálenosti a vrátí naměřenou hodnotu v milimetrech. Měření vzdálenosti chvíli trvá, funkce je tedy asynchronní a je potřeba použítawait
. Funkce na konci měření vrací objekt typuMeasurement
, který obsahuje naměřenou hodnotu a informace o výsledku měření.
Příklad použití¤
Nyní si ukážeme, jak můžeme měřit vzdálenost pomocí dálkoměru VL53L0X. Následující program bude každou vteřinu měřit vzdálenost a vypisovat informace o měření do monitoru.
import { I2C1 } from "i2c";
import { VL53L0X } from "./libs/VL53L0X.js"
import { stdout } from "stdio";
I2C1.setup({sda: 17, scl: 9, bitrate: 400000});
const vl = new VL53L0X(I2C1);
async function main() {
while (true) {
const m = await vl.read();
console.log("Distance: " + m.distance + " mm \tSignal: " + m.signalRate + "\tAmb: " + m.ambientRate + "\tSPAD: " + m.effectiveSpadRtnCount);
}
}
main().catch(console.error);
Výpis potom může vypadat například takto:
Distance: 203 mm Signal: 10.671875 Amb: 1.265625 SPAD: 177
Distance: 199 mm Signal: 11.265625 Amb: 1.203125 SPAD: 177
Distance: 203 mm Signal: 10.9765625 Amb: 1.234375 SPAD: 177
- proměnná
m.distance
obsahuje naměřenou vzdálenost v milimetrech, - proměnná
m.signalRate
obsahuje informaci o kvalitě signálu, - proměnná
m.ambientRate
obsahuje informaci o okolním šumu, - proměnná
m.effectiveSpadRtnCount
obsahuje informaci o počtu aktivních pixelů (z těch se skládá senzor a zapíná je podle toho, jakou vzdálenost a v jakém prostředí měří).
-
Podle výrobce dokonce tak složitý, že k němu nelze dobře sepsat specifikaci (ve skutečnosti to bude nejspíš pouze neschopnost výrobce ať už kvůli špatnému návrhu protokolu, nebo neochotě sepsat dokumentaci). ↩
-
Dodávaná knihovna je upravenou verzí knihovny VL53L0X.js od Espruino tak, aby fungovala v Jaculu ↩