Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
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 Arduino Nano.
Sprzęt, którego będziesz potrzebować do tego celu, to:
1. BMG160
2. Arduino Nano
3. Kabel I2C
4. Tarcza I2C dla Arduino Nano
Krok 1: Przegląd BMG160:
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…
Materiały, których potrzebujemy do realizacji naszego celu, obejmują następujące komponenty sprzętowe:
1. BMG160
2. Arduino Nano
3. Kabel I2C
4. I2C Shield dla Arduino Nano
Krok 3: Podłączenie sprzętu:
Sekcja podłączenia sprzętu zasadniczo wyjaśnia połączenia okablowania wymagane między czujnikiem a Arduino. 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 Kod Arduino:
Zacznijmy teraz od kodu arduino.
Korzystając z modułu czujnika z arduino, dołączamy bibliotekę Wire.h. Biblioteka "Wire" zawiera funkcje ułatwiające komunikację i2c pomiędzy czujnikiem a płytką arduino.
Cały kod arduino podano poniżej dla wygody użytkownika:
#include// BMG160 I2C adres to 0x68(104)
#define Addr 0x68
pusta konfiguracja()
{
// Zainicjuj komunikację I2C jako MASTER
Wire.początek();
// Zainicjuj komunikację szeregową, ustaw szybkość transmisji = 9600
Serial.początek(9600);
// Rozpocznij transmisję I2C
Wire.beginTransmisja(Addr);
// Wybierz rejestr zakresu
Wire.write(0x0F);
// Skonfiguruj pełny zakres skali 2000 dps
Wire.write(0x80);
// Zatrzymaj transmisję I2C
Wire.endTransmission();
// Rozpocznij transmisję I2C
Wire.beginTransmisja(Addr);
// Wybierz rejestr przepustowości
Wire.write(0x10);
// Ustaw przepustowość = 200 Hz
Wire.write(0x04);
// Zatrzymaj transmisję I2C
Wire.endTransmission();
opóźnienie(300);
}
pusta pętla()
{
dane int bez znaku[6];
// Rozpocznij transmisję I2C
Wire.beginTransmisja(Addr);
// Wybierz rejestr danych żyrometru
Wire.write(0x02);
// Zatrzymaj transmisję I2C
Wire.endTransmission();
// Żądaj 6 bajtów danych
Wire.requestFrom(Addr, 6);
// Odczytaj 6 bajtów danych
// xGyro lsb, xGyro msb, yGyro lsb, yGyro msb, zGyro lsb, zGyro msb
if(Przewód.dostępny() == 6)
{
dane[0] = Przewód.odczyt();
dane[1] = Drut.odczyt();
dane[2] = Przewód.odczyt();
dane[3] = Przewód.odczyt();
dane[4] = Przewód.odczyt();
dane[5] = Wire.read();
}
opóźnienie(300);
// Konwertuj dane
int xGyro = ((dane[1] * 256) + dane[0]);
int yro = ((dane[3] * 256) + dane[2]);
int zGyro = ((dane[5] * 256) + dane[4]);
// Dane wyjściowe do monitora szeregowego
Serial.print("Oś obrotu X: ");
Serial.println(xGyro); Serial.print("Oś obrotu Y: ");
Serial.println(yGyro); Serial.print("Oś obrotu Z: ");
Serial.println(zGyro);
opóźnienie (500);
}
Krok 5: 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.