Realizacja pomiaru odległości może się odbywać na różne sposoby. Najprostsza metoda wykorzystuje promieniowanie podczerwone IR. Pomiar polega na mierzeniu siły sygnału odbitego, który jest proporcjonalny do mierzonej odległości. Niestety, poziom sygnału odbitego może silnie zależeć od współczynnika odbicia powierzchni przedmiotu. Powoduje to wiele problemów z pomiarem odległości od różnych powierzchni i konieczność skomplikowanej kalibracji dla osiągnięcia zadanej dokładności.
Takiej wady nie mają czujniki pracujące w oparciu na zasadzie pomiaru czasu przejścia wiązki światła od źródła do detektora. Ogólną zasadę pomiaru pokazano na rysunku 1. Zmierzoną odległość można wyliczyć z zależności odległość = (czas przelotu wiązki fotonów /2)×prędkość światła. Ta metoda wymaga mierzenia bardzo krótkiego czasu. Na przykład, jeśli przedmiot jest w odległości 1 cm od czujnika, światło musi przebyć dystans 2 cm (od nadajnika do przeszkody i od przeszkody do odbiornika), czyli 0,02 m. Czas na to potrzebny to ok. 0,02 m/300000000 m/s= 67 ps. Pomiar tak krótkiego czasu, nawet bardzo szybkim mikrokontrolerem ogólnego przeznaczenia, jest praktycznie nie do zrealizowania. Do takich celów są wykorzystywane specjalizowane układy scalone. Jednym z nich jest VL53L1X produkowany przez firmę STMicroelectronics. Jest to układ z rodziny będącej nową generacją czujników zbliżeniowych opartych na technologii FlightSense, bazującej na zasadzie działania Time-of-Flight (ToF).
Schemat blokowy układu VL53L1X pokazano na rysunku 2. Zawiera on między innymi:
- Macierz detektorów SPAD (Single Photon Avalanche Diode).
- Nadajnik laserowy ze sterownikiem i driverem będący źródłem światła o długości 940 nm.
- Specjalizowany blok funkcjonalny służący do obliczania odległości.
- Mikrokontroler z interfejsem I2C.
Długość fali światła laserowego jest spoza zakresu fal widzialnych (bliska podczerwień). Pozwala to w połączeniu z filtrami podczerwieni na wyeliminowanie zaburzeń spowodowanych światłem widzialnym. Aby czujnik mógł być bezpiecznie eksploatowany nawet przez nieprzeszkolony personel, zastosowano laser VCESL klasy 1. Klasa 1 definiuje takie parametry źródła światła laserowego, że jest ono bezpieczne dla oczu w każdych warunkach eksploatacyjnych.
Czujnik VL53L1X został zaprojektowany z myślą o bardzo małym poborze mocy i z tego powodu dobrze nadaje się do zastosowań bezprzewodowych i Internetu Rzeczy. Zastosowano w nim specjalne algorytmy oraz bloki funkcjonalne pozwalające na pomiar odległości pomiędzy czujnikiem a obiektem w zakresie od 0 do 4000 mm z rozdzielczością 1 mm. Pomiar jest możliwy nawet w trudnych warunkach środowiskowych i jak już wspomniałem jest w szerokim zakresie niezależny od rodzaju powierzchni mierzonego przedmiotu.
Teoretycznie światło laserowe powinno rozchodzić się w postaci wiązki o bardzo dużym skupieniu. Jednak w wypadku lasera zastosowanego w tym sensorze wiązka nie jest równoległa i im dalej od emitera światła, tym średnica plamki światła jest większa. Jak pokazano na rysunku 3, przy odległości 4 m średnica plamki wynosi 192 cm. Trzeba to uwzględnić przy pomiarach odległości od małych przedmiotów. Na rysunku 4 pokazano typowy układ pomiarowy wykorzystujący metodę pomiaru czasu przejścia promienia światła.
Czujnik w rzeczywistych warunkach eksploatacyjnych powinien być chroniony przed zabrudzeniem spowodowanym na przykład zapyleniem powietrza. Najprostszą barierą dla zanieczyszczeń jest ochronna płytka szklana. Jednak zanieczyszczenia osiadające na powierzchni szkła powodują, że część światła lasera się od nich odbija, co generuje problemy z prawidłowym pomiarem. Ten problem można stosunkowo łatwo rozwiązać, stosując specjalną obudowę czujnika chroniącą przed przenikaniem odbitych promieni z lasera do detektora (rysunek 4). Sensor VL53L1X jest umieszczony w obudowie do montażu powierzchniowego, którą pokazano na rysunku 5.
Producent czujnika zadbał o pełne wsparcie dla potencjalnych konstruktorów i użytkowników tego elementu. Jednym z elementów tego wsparcia jest zestaw ewaluacyjny X-NUCLEO-53L1A1. Wykonany zgodnie ze standardem Arduino Uno Ver.3. X-NUCLEO-53L1A1, jest przeznaczony do połączenia z firmowym modułem Nucleo-F401RE (fotografia 6). Oczywiście, standard Arduino pozwala na sprzętowe połączenie z dowolnym modułem mikrokontrolera zgodnym z Arduino, ale zastosowanie Nucleo-F401RE umożliwia testowanie czujnika za pomocą oprogramowania dostarczonego przez firmę STM.
Na płytce modułu umieszczono czujnik VL53L1X z plastikową osłoną, na którą można zakładać szkło ochronne. Czujnik odległości jest zasilany napięciem +2,5 V. Na płytce zamontowano stabilizator napięcia +2,5 V oraz układy dostosowujące poziomy logiczne czujnika (+2,5 V) i mikrokontrolera (+3,3 V). Oprócz modułu ewaluacyjnego w skład zestawu wchodzą dwie dodatkowe płytki z czujnikami VL53L1X. Te płytki można połączyć z modułem ewaluacyjnym za pomocą złączy IDC, jak to zostało pokazane na fotografii 7. Można je również wykorzystać we własnych autonomicznych aplikacjach, pamiętając o napięciu zasilania i napięciach poziomów logicznych. Konfiguracja sprzętowa z dwoma lub trzema czujnikami może być przydatna do testowania funkcji wykrywania gestów. W zestawie są też 3 ramki (elementy dystansowe) o grubościach: 0,25 mm, 0,5 mm i 1 mm symulujące różne szczeliny powietrzne pomiędzy szkłem ochronnym i czujnikiem, oraz dwa różne szkła osłonowe.
Testy rozpoczynamy od pobrania ze strony producenta oprogramowania testowego umieszczonego w spakowanym pliku en.STSW-IMG008.rar. Żeby to zrobić, trzeba mieć aktywne konto użytkownika i się na nie zalogować. W spakowanym pliku en.STSW-IMG008 jest umieszczona instrukcja obsługi aplikacji testowej VL53L1X GUI w formacie pdf i plik instalacyjny aplikacji VL53L1X_Setup.exe. Instalacja aplikacji przebiega typowo i obejmuje również niezbędną do działania instalację driverów USB.
STSW-IMG008 jest graficzną aplikacją użytkownika (GUI) pracującą pod kontrolą systemów Windows 7 (min. SP1 pack), Windows 8 i Windows 10. Jest przeznaczona do współpracy z zestawem P-NUCLEO-53L1A1 połączonym z komputerem za pomocą złącza USB. Standardowo STSW-IMG008 współpracuje z czujnikiem umieszczonym na płytce modułu X-NUCLEO-53L1A1, ale możliwa jest też współpraca z jednym z dodatkowych czujników dołączonych do płytki głównej.
Pakiet STSW-IMG008 zapewnia:
- Wyświetlanie on-line odległości w centymetrach przedmiotu od czujnika.
- Wyświetlanie on-line siły odbitego sygnału.
- Ustawienia wybranego obszaru na matrycy czujnika. Rozmiar i położenie tego obszaru na matrycy jest określane programowo.
- Możliwość wykonania procedur kalibracji.
- Zapisywanie danych wyjściowych do pliku (logi).
- Zapisywanie przebiegu transmisji danych przez interfejs I2C.
Pierwszą czynnością po uruchomieniu będzie wgranie firmware'u sterującego do modułu mikrokontrolera Nucleo-F401RE. W tym celu należy podłączyć moduł mikrokontrolera łączem USB z komputerem, wybrać zakładkę About i kliknąć na Flash Fw, jak na rysunku 8. Jeżeli wszystko jest sprawne i poprawnie połączone, to program sterujący zestawem zostanie automatycznie wgrany do pamięci mikrokontrolera i moduł jest gotowy do pracy. Po zaprogramowaniu pamięci zestaw powinien zostać wykryty i zidentyfikowany. Można to również zobaczyć w zakładce About (rysunek 9).
Komputer z uruchomionym GUI jest hostem sterującym pracą czujnika VL53L1X. Host wysyła do czujnika komendy przez wirtualny port szeregowy Virtual COM. Oprogramowanie uruchomione na mikrokontrolerze „tłumaczy” te komendy na polecenia wysyłane do czujnika magistralą I2C. Mikrokontroler następnie odczytuje magistralą I2C dane z czujnika i odsyła je wirtualnym portem szeregowym do hosta.
Przed użyciem czujnika można go skalibrować lub użyć domyślnych danych kalibracyjnych. Kalibrowanie wykonuje się w zakładce Calibration przez kliknięcie na CalRefSpads, CalOffset i Cal X-Talk (rysunek 10).
Kalibracja SPAD dostosowuje czułość detektora do poziomu sygnału laserowego. Jest wykonywana po to, żeby uwzględnić rodzaj szkła chroniącego czujnik. Powinna być wykonywana dla każdego nowego czujnika dołączonego do GUI. W wyniku kalibracji są ustawiane 2 parametry: Ref SPAD Location i Number of Ref Spads. Po poprawnie wykonanej kalibracji Calibration Status powinien mieć wartość 0.
Kalibracja Offsetu wprowadza stała wartość wyrażoną w mm, która jest dodawana do każdego zakresu pomiaru. Wprowadzenie kalibracji offsetu pomaga uzyskać dużą wymaganą dokładność pomiaru. W trakcie kalibracji offsetu odległość od mierzonego przedmiotu domyślnie wynosi 140 mm, ale można ją zmienić w oknie Call Height. Zaleca się, aby do dokładnej kalibracji użyć przedmiotu odbijającego światło w minimum 88%. Ja wykonałem próbę kalibracji dla sufitu oddalonego ok 1,5 m od powierzchni stołu (przy Call Heigt 140 mm) i uzyskałem wartość Offset Value –1514 mm (rysunek 11). Oczywiście, pomiary po takiej kalibracji nie będą wiarygodne.
Kalibracja X-Talk (Cross Talk Compensation Factor) ma za zadanie dodatkowe skompensowanie przesłuchów pomiędzy sygnałem nadawanym i odbieranym przez detektor spowodowanym stosowaniem szkła ochronnego. Alternatywnie można skutecznie redukować przesłuchy, stosując specjalną obudowę, jak pokazano na rysunku 4. W naszym module szyba ochronna nie jest przedzielona przesłoną i przesłuchy mogą wystąpić w mniejszym lub większym natężeniu. Przed uruchomieniem kalibracji należy w odległości 6 cm (określana programowalnym polem Call Height) umieścić czarny lub szary przedmiot o niskim współczynniku odbicia. Na próbę wywoływałem tę kalibrację bez spełniania koniecznych warunków układowych. To oczywiście powodowało, że układ po takim kalibrowaniu dział nieprawidłowo. W każdej chwili można jednak kliknąć na przycisk Reset, żeby przywrócić domyślne ustawienia kalibracji zapisane w aplikacji STSW-IMG008. Jeśli jednak kalibracja została przeprowadzona rzetelnie, to jej wynik można zapisać w pliku o dowolnej nazwie, klikając na przycisk Save i ponownie wczytać. Kliknięcie na przycisk Load powoduje wczytanie pliku z danymi kalibracji do bufora, a kliknięcie na Write powoduje fizyczne wczytanie kalibracji do czujnika.
Przy wstępnym testowaniu działania czujnika kalibracje możemy pominąć i zdać się na domyślne ustawienia oferowane przez STSW-IMG008. Warto jednak wiedzieć, jak ją wykonać, by uzyskać lepszą dokładność pomiaru w docelowym układzie pomiarowym.
W podstawowej zakładce programu STSW-IMG008, czyli w Low-Power Autonomous, są wyświetlane dane pomiarowe w czasie rzeczywistym w formatach: graficznym i numerycznym. Oprócz tego umieszczono tam elementy sterujące pomiarami. W oknie Range jest wyświetlany wykres odległości od przedmiotu mierzonej przez czujnik w czasie rzeczywistym. Dolne okno Signal Rate pokazuje również w czasie rzeczywistym pomiar siły sygnału w umownych jednostkach Mega Counts Per Seconds.
Środkowe okno wyświetla dodatkowe informacje w postaci numerycznej:
- Status – informuje o prawidłowości zakresu pomiarowego. Każda inna wartość niż 0 oznacza błąd (kody błędów opisane są w instrukcji do aplikacji STSW-IMG008).
- Range jest mierzoną odległością od przedmiotu.
- Signal Rate (mcps) określa siłę sygnału w mcps.
- Ambient Rate – określa siłę sygnału zakłócającego pomiar w mcps (siłę sygnału światła otoczenia).
Okno z prawej strony zawiera szereg ustawień wykorzystywanych do zmiany parametrów pomiarów. Wszystkie one są dokładnie opisane w instrukcji programu STSW-IMG008. Najciekawsze z nich to Distance mode i Threshold Selection.
Zakres pomiaru Distance mode można ustawić w trzech wartościach:
- Long – pełny zakres pomiarowy do 4 m.
- Medium – średni zakres pomiarowy do 2,8 m.
- Short – najniższy zakres pomiarowy do 1,4 m.
Przy ustawieniu największego zakresu pomiarowego trzeba się liczyć z większym wpływem światła otoczenia na pomiar odległości. W pewnych sytuacjach może to powodować problemy z prawidłowym pomiarem. Ustawianie zakresu short jest rekomendowane do pomiarów na zewnątrz budynków, gdzie światło słoneczne może stanowić czynnik zakłócający pomiar.
Thereshold selection filtruje mierzone dane zależnie od zmierzonej odległości. Można tu wybrać opcje:
- Below – pomiar jest wyświetlany, kiedy odległość jest mniejsza od wartości min (domyślnie 500 mm).
- Above – pomiar jest wyświetlany, kiedy odległość jest większa od wartości max (domyślnie 1000 mm).
- Outside – pomiar jest wyświetlany, kiedy odległość jest mniejsza od wartości min (domyślnie 500 mm) lub większa od wartości max (domyślnie 1000 mm).
- Inside p– omiar jest wyświetlany, kiedy odległość jest pomiędzy wartością minimalną (domyślnie 500 mm) i maksymalną (domyślnie 1000 mm).
Na rysunku 12 pokazano ekran zakładki Low-Power Autonomous dla pomiaru w trybie wyzwalania Inside.
Krótkie testy praktyczne zestawu ewaluacyjnego potwierdziły prawidłowe działanie czujników. Trzeba jednak zdawać sobie sprawę, że praca w układzie docelowym może wymagać dostosowania parametrów pomiarów do środowiska pomiarowego. Bardzo dużym ułatwieniem jest możliwość przeprowadzenia prób w docelowym układzie pomiarowym, używając do tego celu jednej płytek rozszerzeń pokazanych na rysunku 10 połączonych przewodami z płytką X-NUCLEO-53L1A1 Duże możliwości kalibracji, ustawień parametrów pomiaru i w końcu samego pomiaru programu STSW-IMG008 pozwalają ocenić przydatność czujnika we własnej aplikacji bez konieczności budowania swojej platformy sprzętowej i pisania oprogramowania testowego.
Tomasz Jabłoński, EP