Spisu treści:
- Krok 1: Wymagany sprzęt:
- Krok 2: Podłączenie sprzętu:
- Krok 3: Kod do śledzenia ruchu:
- Krok 4: Aplikacje:
Wideo: Śledzenie ruchu za pomocą MPU-6000 i Particle Photon: 4 kroki
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:27
MPU-6000 to 6-osiowy czujnik śledzenia ruchu, który ma wbudowany 3-osiowy akcelerometr i 3-osiowy żyroskop. Ten czujnik jest w stanie skutecznie śledzić dokładne położenie i położenie obiektu w płaszczyźnie trójwymiarowej. Może być stosowany w systemach wymagających analizy położenia z najwyższą precyzją.
W tym samouczku zilustrowano interfejs modułu czujnika MPU-6000 z fotonem cząstek. Aby odczytać wartości przyspieszenia i kąta obrotu, użyliśmy cząstki z adapterem I2c. Ten adapter I2C sprawia, że połączenie z modułem czujnika jest łatwe i bardziej niezawodne.
Krok 1: Wymagany sprzęt:
Materiały wymagane do wykonania naszego zadania to wymienione poniżej komponenty sprzętowe:
1. MPU-6000
2. Cząsteczkowy foton
3. Kabel I2C
4. Tarcza I2C dla fotonu cząsteczkowego
Krok 2: Podłączenie sprzętu:
Sekcja dotycząca podłączania sprzętu zasadniczo wyjaśnia połączenia przewodów wymagane między czujnikiem a fotonem cząstek. 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:
MPU-6000 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 3: Kod do śledzenia ruchu:
Zacznijmy teraz od kodu cząstek.
Korzystając z modułu czujnika z arduino, dołączamy bibliotekę application.h oraz spark_wiring_i2c.h. Biblioteka "application.h" oraz spark_wiring_i2c.h zawiera funkcje ułatwiające komunikację i2c pomiędzy czujnikiem a cząsteczką.
Cały kod cząstek podano poniżej dla wygody użytkownika:
#include#include // MPU-6000 I2C adres to 0x68(104) #define Addr 0x68 int xGyro = 0, yGyro = 0, zGyro = 0, xAccl = 0, yAccl = 0, zAccl = 0; void setup() { // Ustaw zmienną Particle.variable("i2cdevice", "MPU-6000"); Cząstka.zmienna("xAccl", xAccl); Particle.variable("yAccl", yAccl); Cząstka.zmienna("zAccl", zAccl); Particle.variable("xGyro", xGyro); Particle.variable("yGyro", yGyro); Particle.variable("zGyro", zGyro); // Zainicjuj komunikację I2C jako Master Wire.begin(); // Zainicjuj komunikację szeregową, ustaw szybkość transmisji = 9600 Serial.begin(9600); // Rozpocznij transmisję I2C Wire.beginTransmission(Addr); // Wybór rejestru konfiguracji żyroskopu Wire.write(0x1B); // Pełny zakres skali = 2000 dps Wire.write(0x18); // Zatrzymaj transmisję I2C Wire.endTransmission(); // Rozpocznij transmisję I2C Wire.beginTransmission(Addr); // Wybierz rejestr konfiguracji akcelerometru Wire.write(0x1C); // Pełny zakres skali = +/-16g Wire.write(0x18); // Zatrzymaj transmisję I2C Wire.endTransmission(); // Rozpocznij transmisję I2C Wire.beginTransmission(Addr); // Wybierz rejestr zarządzania energią Wire.write(0x6B); // PLL z referencją xGyro Wire.write(0x01); // Zatrzymaj transmisję I2C Wire.endTransmission(); opóźnienie(300); } void loop() { unsigned int data[6]; // Rozpocznij transmisję I2C Wire.beginTransmission(Addr); // Wybierz rejestr danych Wire.write(0x3B); // Zatrzymaj transmisję I2C Wire.endTransmission(); // Żądanie 6 bajtów danych Wire.requestFrom(Addr, 6); // Odczytaj 6 bajtów danych if (Wire.available() == 6) { data[0] = Wire.read(); 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(800); // Konwertuj dane xAccl = ((data[1] * 256) + data[0]); jeśli (xAccl > 32767) { xAccl -= 65536; } yAccl = ((dane[3] * 256) + dane[2]); jeśli (yAccl > 32767) {yAccl -= 65536; } zAccl = ((dane[5] * 256) + dane[4]); jeśli (zAccl > 32767) { zAccl -= 65536; } opóźnienie(800); // Rozpocznij transmisję I2C Wire.beginTransmission(Addr); // Wybierz rejestr danych Wire.write(0x43); // Zatrzymaj transmisję I2C Wire.endTransmission(); // Żądaj 6 bajtów danych Wire.requestFrom(Addr, 6); // Odczytaj 6 bajtów danych if (Wire.available() == 6) { data[0] = Wire.read(); dane[1] = Drut.odczyt(); dane[2] = Przewód.odczyt(); dane[3] = Przewód.odczyt(); dane[4] = Przewód.odczyt(); dane[5] = Wire.read(); } // Konwersja danych xGyro = ((data[1] * 256) + data[0]); jeśli (xGyro > 32767) { xGyro -= 65536; } yGyro = ((dane[3] * 256) + dane[2]); jeśli (yGyro > 32767) { yGyro -= 65536; } zGyro = ((dane[5] * 256) + dane[4]); jeśli (zGyro > 32767) { zGyro -= 65536; } // Dane wyjściowe do pulpitu nawigacyjnego Particle.publish("Przyspieszenie w osi X: ", String(xAccl)); opóźnienie (1000); Particle.publish("Przyspieszenie w osi Y: ", String(yAccl)); opóźnienie (1000); Particle.publish("Przyspieszenie w osi Z: ", String(zAccl)); opóźnienie (1000); Particle.publish("Oś obrotu X: ", String(xGyro)); opóźnienie (1000); Particle.publish("Oś obrotu Y: ", Ciąg(yGyro)); opóźnienie (1000); Particle.publish("Oś obrotu Z: ", String(zGyro)); opóźnienie (1000); }
Funkcja Particle.variable() tworzy zmienne do przechowywania danych wyjściowych czujnika, a funkcja Particle.publish() wyświetla dane wyjściowe na pulpicie nawigacyjnym witryny.
Wyjście czujnika pokazano na powyższym obrazku w celach informacyjnych.
Krok 4: Aplikacje:
MPU-6000 to czujnik śledzenia ruchu, który znajduje zastosowanie w interfejsie ruchu smartfonów i tabletów. W smartfonach czujniki te mogą być wykorzystywane w takich aplikacjach, jak polecenia gestami do aplikacji i sterowania telefonem, ulepszone gry, rozszerzona rzeczywistość, przechwytywanie i przeglądanie zdjęć panoramicznych oraz nawigacja piesza i samochodowa. Technologia MotionTracking może przekształcić telefony i tablety w potężne, inteligentne urządzenia 3D, które mogą być wykorzystywane w różnych aplikacjach, od monitorowania zdrowia i kondycji po usługi oparte na lokalizacji.
Zalecana:
Śledzenie ruchu ludzkiego oka: 6 kroków
Śledzenie ruchu ludzkiego oka: Ten projekt ma na celu uchwycenie ruchu ludzkiego oka i wyświetlenie jego ruchu na zestawie świateł LED umieszczonych w kształcie oka. Ten rodzaj projektu może potencjalnie mieć wiele zastosowań w dziedzinie robotyki, a konkretnie huma
QeMotion - śledzenie ruchu dla każdego zestawu słuchawkowego!: 5 kroków (ze zdjęciami)
QeMotion - śledzenie ruchu dla każdego zestawu słuchawkowego!: Omówienie: To urządzenie umożliwia wykorzystanie ruchu głowy do wyzwalania zdarzeń w praktycznie każdej grze wideo. Działa poprzez śledzenie ruchu głowy (lub zestawu słuchawkowego) i wyzwalanie naciśnięć klawiatury dla określonych ruchów. Więc twój komp
Śledzenie zmian przyspieszenia za pomocą Raspberry Pi i MMA7455 za pomocą Pythona: 6 kroków
Śledzenie zmian akceleracji za pomocą Raspberry Pi i MMA7455 przy użyciu Pythona: nie potknąłem się, testowałem grawitację. Nadal działa… Reprezentacja przyspieszającego wahadłowca kosmicznego wyjaśniała, że zegar w najwyższym punkcie wahadłowca wybierałby szybszy niż zegar u podstawy z powodu grawitacyjnego rozszerzania się czasu. Trochę
Śledzenie ruchu oka za pomocą czujnika podczerwieni: 5 kroków
Śledzenie ruchu oczu za pomocą czujnika podczerwieni: Użyłem czujnika podczerwieni do wykrywania ruchów oczu i sterowania diodą LED. Zrobiłem gałki oczne za pomocą taśmy LED NeoPixel
Śledzenie ruchu Tfcd 3D poprzez wykrywanie pojemnościowe i wyjście LED: 6 kroków (ze zdjęciami)
Śledzenie ruchu Tfcd 3D poprzez wykrywanie pojemnościowe i wyjście LED: W tej instrukcji wyjaśniono, w jaki sposób można śledzić ruch ręki w przestrzeni 3D przy użyciu zasady wykrywania pojemnościowego. Zmieniając odległość między naładowaną folią aluminiową a ręką, pojemność kondensatora będzie się zmieniać