Files
| Filesdocsv2robotExtensionsblokMaze | |
|---|---|
| .. | |
| assets | |
| gpio-adv.md | |
| gpio.md | |
| index.md | |
| logic.md | |
| tof.md |
tof.mdSenzor vzdálenosti 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.ts2.Import knihovny
Nejprve si musíme knihovnu importovat. Zároveň budeme také potřebovat importovat modul
i2cpro komunikaci přes I2C sběrnici. To uděláme pomocí příkazuimport:
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 objektI2C1, 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 správných pinech. I2C1.setup({sda: robutek.Pins.SDA, scl: robutek.Pins.SCL, 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";
import { createRobutek } from "./libs/robutek.js"
const robutek = createRobutek("V2");; // ovládání motorů
I2C1.setup({sda: robutek.Pins.SDA, scl: robutek.Pins.SCL, 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); await sleep(10); } }
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.distanceobsahuje naměřenou vzdálenost v milimetrech, - proměnná
m.signalRateobsahuje informaci o kvalitě signálu, - proměnná
m.ambientRateobsahuje informaci o okolním šumu, - proměnná
m.effectiveSpadRtnCountobsahuje 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ěří).
3. Pohled na logiku procházení
-
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 ↩︎