Spisu treści:

Interfejs 3-osiowego czujnika żyroskopowego BMG160 z Raspberry Pi: 5 kroków
Interfejs 3-osiowego czujnika żyroskopowego BMG160 z Raspberry Pi: 5 kroków

Wideo: Interfejs 3-osiowego czujnika żyroskopowego BMG160 z Raspberry Pi: 5 kroków

Wideo: Interfejs 3-osiowego czujnika żyroskopowego BMG160 z Raspberry Pi: 5 kroków
Wideo: Moduł akcelerometru z odczytem analogowym - ADXL335 Arduino - ABC-RC.PL 2024, Lipiec
Anonim
Image
Image

W dzisiejszym świecie ponad połowa młodzieży i dzieci lubi gry, a wszyscy ci, którzy je lubią, zafascynowani technicznymi aspektami gier, wiedzą, jak ważne jest wykrywanie ruchu w tej dziedzinie. Byliśmy również zdumieni tym samym i żeby wprowadzić to na tablice, pomyśleliśmy o pracy nad czujnikiem żyroskopowym, który może mierzyć prędkość kątową dowolnego obiektu. Tak więc sensor, którym się podjęliśmy, to BMG160. BMG160 to 16-bitowy, cyfrowy, trójosiowy czujnik żyroskopowy, który może mierzyć prędkość kątową w trzech prostopadłych wymiarach pomieszczenia.

W tym samouczku zademonstrujemy działanie BMG160 z Raspberry pi, używając Javy jako języka programowania.

Sprzęt, którego będziesz potrzebować do tego celu, to:

1. BMG160

2. Raspberry Pi

3. Kabel I2C

4. Osłona I2C dla Raspberry Pi

5. Kabel Ethernet

Krok 1: Przegląd BMG160:

Czego potrzebujesz..!!
Czego potrzebujesz..!!

Przede wszystkim chcielibyśmy zapoznać Państwa z podstawowymi cechami modułu czujnika jakim jest BMG160 oraz protokołem komunikacyjnym na którym pracuje.

BMG160 to w zasadzie 16-bitowy, cyfrowy, trójosiowy czujnik żyroskopowy, który może mierzyć prędkości kątowe. Jest w stanie obliczać prędkości kątowe w trzech prostopadłych wymiarach pomieszczenia, osi x, y i z oraz dostarczać odpowiednie sygnały wyjściowe. Może komunikować się z płytą raspberry pi za pomocą protokołu komunikacyjnego I2C. Ten konkretny moduł został zaprojektowany w celu spełnienia wymagań aplikacji konsumenckich, jak również zastosowań przemysłowych.

Protokół komunikacyjny na którym pracuje czujnik to I2C. I2C oznacza układ scalony. Jest to protokół komunikacyjny, w którym komunikacja odbywa się za pośrednictwem linii SDA (dane szeregowe) i SCL (zegar szeregowy). Umożliwia podłączenie wielu urządzeń jednocześnie. Jest to jeden z najprostszych i najbardziej wydajnych protokołów komunikacyjnych.

Krok 2: Czego potrzebujesz…

Czego potrzebujesz..!!
Czego potrzebujesz..!!
Czego potrzebujesz..!!
Czego potrzebujesz..!!
Czego potrzebujesz..!!
Czego potrzebujesz..!!

Materiały, których potrzebujemy do realizacji naszego celu, obejmują następujące komponenty sprzętowe:

1. BMG160

2. Raspberry Pi

3. Kabel I2C

4. Osłona I2C dla Raspberry Pi

5. Kabel Ethernet

Krok 3: Podłączenie sprzętu:

Podłączenie sprzętu
Podłączenie sprzętu
Podłączenie sprzętu
Podłączenie sprzętu

Sekcja dotycząca podłączania sprzętu zasadniczo wyjaśnia połączenia okablowania wymagane między czujnikiem a raspberry pi. Zapewnienie prawidłowych połączeń jest podstawową koniecznością podczas pracy na dowolnym systemie o pożądanej mocy. Tak więc wymagane połączenia są następujące:

BMG160 będzie pracował przez I2C. Oto przykładowy schemat okablowania, pokazujący, jak okablować każdy interfejs czujnika.

Po wyjęciu z pudełka, płyta jest skonfigurowana do interfejsu I2C, dlatego zalecamy korzystanie z tego podłączenia, jeśli jesteś agnostykiem. Wszystko czego potrzebujesz to cztery przewody!

Wymagane są tylko cztery połączenia Vcc, Gnd, SCL i SDA, które są połączone za pomocą kabla I2C.

Połączenia te są pokazane na powyższych zdjęciach.

Krok 4: 3-osiowy pomiar żyroskopu za pomocą kodu Java:

Pomiar żyroskopu 3-osiowego za pomocą kodu Java
Pomiar żyroskopu 3-osiowego za pomocą kodu Java
Pomiar żyroskopu 3-osiowego za pomocą kodu Java
Pomiar żyroskopu 3-osiowego za pomocą kodu Java

Zaletą korzystania z raspberry pi jest to, że zapewnia elastyczność języka programowania, w którym chcesz zaprogramować płytkę w celu połączenia z nią czujnika. Wykorzystując tę zaletę tej płyty, demonstrujemy tutaj jej programowanie w Javie. Kod Java dla BMG160 można pobrać z naszej społeczności github, czyli Dcube Store Community.

Oprócz ułatwienia użytkownikom wyjaśniamy również kod tutaj: Jako pierwszy krok kodowania musisz pobrać bibliotekę pi4j w przypadku java, ponieważ ta biblioteka obsługuje funkcje używane w kodzie. Aby pobrać bibliotekę, możesz odwiedzić poniższy link:

pi4j.com/install.html

Możesz skopiować działający kod java dla tego czujnika również stąd:

importuj com.pi4j.io.i2c. I2CBus;

importuj com.pi4j.io.i2c. I2CDurządzenie;

importuj com.pi4j.io.i2c. I2CFabryka;

import java.io. IOException;

klasa publiczna BMG160

{

public static void main(String args) wyrzuca Wyjątek

{

// Utwórz magistralę I2C

Magistrala I2CBus = I2CFactory.getInstance(I2CBus. BUS_1);

// Pobierz urządzenie I2C, adres BMG160 I2C to 0x68(104)

Urządzenie I2CDevice = bus.getDevice(0x68);

// Wybierz rejestr zakresu

// Skonfiguruj pełny zakres skali, 2000 dps

urządzenie.write(0x0F, (bajt)0x80);

// Wybierz rejestr przepustowości

// Pasmo 200 Hz

urządzenie.write(0x10, (bajt)0x04);

Wątek.sen(500);

// Odczytaj 6 bajtów danych

// xGyro lsb, xGyro msb, yGyro lsb, yGyro msb, zGyro lsb, zGyro msb

bajt dane = nowy bajt[6];

urządzenie.odczyt(0x02, dane, 0, 6);

// Konwertuj dane

int xGyro = ((dane[1] i 0xFF) * 256 + (dane[0] i 0xFF));

if(xGyro > 32767)

{

xŻyroskop -= 65536;

}

int yro = ((dane[3] i 0xFF) * 256 + (dane[2] i 0xFF));

if(yGyro > 32767)

{

yGyro -= 65536;

}

int zGyro = ((dane[5] i 0xFF) * 256 + (dane[4] i 0xFF));

if(zGyro > 32767)

{

zGyro -= 65536;

}

// Prześlij dane na ekran

System.out.printf("Oś obrotu X: %d %n", xGyro);

System.out.printf("Oś obrotu Y: %d %n", yGyro);

System.out.printf("Oś obrotu Z: %d %n", zGyro);

}

}

Biblioteka, która ułatwia komunikację i2c między czujnikiem a płytą to pi4j, jej różne pakiety I2CBus, I2CDevice i I2CFactory pomagają w nawiązaniu połączenia.

importuj com.pi4j.io.i2c. I2CBus; importuj com.pi4j.io.i2c. I2CDurządzenie; importuj com.pi4j.io.i2c. I2CFabryka; import java.io. IOException;

Ta część kodu powoduje, że czujnik mierzy prędkość kątową, zapisując odpowiednie polecenia za pomocą funkcji write(), a następnie dane są odczytywane za pomocą funkcji read().

// Wybierz rejestr zakresu // Skonfiguruj pełny zakres skali, 2000 dps device.write(0x0F, (byte)0x80); // Wybierz rejestr przepustowości // Przepustowość 200 Hz device.write(0x10, (byte)0x04); Wątek.sen(500);

// Odczytaj 6 bajtów danych

// xGyro lsb, xGyro msb, yGyro lsb, yGyro msb, zGyro lsb, zGyro msb byte data = new byte[6]; urządzenie.odczyt(0x02, dane, 0, 6);

Dane otrzymane z czujnika są konwertowane do odpowiedniego formatu przy użyciu następujących metod:

int xGyro = ((dane[1] i 0xFF) * 256 + (dane[0] i 0xFF)); if(xGyro > 32767) { xGyro -= 65536; } int yGyro = ((dane[3] i 0xFF) * 256 + (dane[2] i 0xFF)); if(yGyro > 32767) { yGyro -= 65536; } int zGyro = ((dane[5] i 0xFF) * 256 + (dane[4] i 0xFF)); if(zGyro > 32767) { zGyro -= 65536; }

Dane wyjściowe są drukowane przy użyciu funkcji System.out.println() w następującym formacie.

System.out.println("Oś obrotu X: %d %n", xGyro); System.out.println("Oś obrotu Y: %d %n", yGyro); System.out.println("Oś obrotu Z: %d %n", zGyro);

Wyjście czujnika pokazano na powyższym obrazku.

Krok 5: Aplikacje:

Aplikacje
Aplikacje

BMG160 ma zróżnicowaną liczbę zastosowań w urządzeniach takich jak telefony komórkowe, urządzenia interfejsu człowiek-maszyna. Ten moduł czujnika został zaprojektowany, aby spełnić wymagania zastosowań konsumenckich, takich jak stabilizacja obrazu (DSC i aparat-telefon), urządzenia do gier i urządzenia wskazujące. Stosowany jest również w systemach wymagających rozpoznawania gestów oraz systemach stosowanych w nawigacji wewnętrznej.

Zalecana: