[PROJEKT] KAmodVL6180X i KAmduino UNO
Nowością w dziedzinie czujników pomiaru odległości są sensory wykorzystujące technologię Time of Flight. Technologia ta została opracowana przez firmę STMicroelectronics i pozwala na precyzyjny pomiar odległości od sensora bez względu na warunki w jakich pracuje. Na odczyt odległości nie wpływa barwa i materiał powierzchni ani oświetlenie pochodzące z otoczenia. Czujniki te są w stanie mierzyć również natężenie oświetlenia otoczenia.
Moduł KAmodVL6180X bazuje na sensorze VL6180X działającym właśnie w tej technologii. Prezentowany czujnik ma możliwość wykonywania pomiarów w zakresie od 0 do 100 mm. Moduł został wyposażony w stabilizator napięcia oraz konwerter poziomów logicznych dzięki czemu może być zasilany napięciem 2,8..5,5 V oraz być bez problemu użyty w aplikacjach zasilanych napięciem 5 V jak i 3,3 V. Komunikacja z czujnikiem odbywa się z wykorzystaniem magistrali I2C. Na płytce modułu zostały wyprowadzone dwie linie GPIO wychodzące z czujnika odległości.
W przykładzie posłużymy się gotową biblioteką od SparkFun do obsługi tego czujnika. Proponuję pobrać bibliotekę poprzez polecenie „Zarządzaj bibliotekami…” w menu „Szkic” -> „Dołącz bibliotekę”, programu Arduino (Rysunek 1).
Następnie w menedżerze bibliotek w prawej górnej części ekranu wpisujemy „VL6180”, oraz wybieramy „SparkFun VL6180 Sensor” i klikamy przycisk „Instaluj”.
Obsługa czujnika w Arduino jest niezwykle prosta i ogranicza się do utworzenia obiektu VL6180x z podaniem jako argument adresu czujnika. Odczytu parametru odległości dokonujemy poprzez użycie funkcji getDistance(). Odczyt parametru natężenia oświetlenia otoczenia wymaga podania argumentu, którym jest wzmocnienie brane do przeliczania wyniku pomiaru. Wynik pomiaru zwracany jest w luxach.
Dostępne w bibliotece są następujące definicje wzmocnień:
const float GAIN_1_25 = 1.28; // Actual ALS Gain of 1.28 const float GAIN_1_67 = 1.72; // Actual ALS Gain of 1.72 const float GAIN_2_5 = 2.6; // Actual ALS Gain of 2.60 const float GAIN_5 = 5.21; // Actual ALS Gain of 5.21 const float GAIN_10 = 10.32; // Actual ALS Gain of 10.32 const float GAIN_20 = 20; // Actual ALS Gain of 20 const float GAIN_40 = 40; // Actual ALS Gain of 40
Pisanie programu rozpoczynamy od dołączenia bibliotek SparkFun_VL6180X oraz Wire (do obsługi interfejsu I2C) do naszego programu.
#include <Wire.h> #include <SparkFun_VL6180X.h>
Kolejnym krokiem jest utworzenie obiektu „sensor”
VL6180x sensor(0x29);
W funkcji setup() ustawiamy parametry transmisji interfejsu UART, uruchamiamy interfejs I2C oraz ustawiamy domyślne parametry czujnika VL6180X.
void setup() { // put your setup code here, to run once: Serial.begin(115200); Wire.begin(); delay(100); sensor.VL6180xDefautSettings(); delay(1000); }
Ostatnim krokiem jest odczytanie zmierzonych przez sensor wartości i wyświetlenie ich w terminalu.
void loop() { // put your main code here, to run repeatedly: Serial.print("Natezenie oswietlenia (Lux) = "); Serial.println( sensor.getAmbientLight(GAIN_1) ); Serial.print("Dystans (mm) = "); Serial.println( sensor.getDistance() ); delay(500); }
Wyniki działania programu przedstawiają poniższe zrzuty ekranu. Rysunek 3 przedstawia nie ruchome położenie czujnika przy zmianie natężenia światła (różne tryby świecenia lampki biurowej, zmiana temperatury barwowej światła), zaś rysunek 4 przedstawia zmianę dystansu między czujnikiem, a obiektem przed nim.