Spisu treści:

Rejestrowanie danych w czasie rzeczywistym MPU-6050/A0 z Arduino i Androidem: 7 kroków (ze zdjęciami)
Rejestrowanie danych w czasie rzeczywistym MPU-6050/A0 z Arduino i Androidem: 7 kroków (ze zdjęciami)

Wideo: Rejestrowanie danych w czasie rzeczywistym MPU-6050/A0 z Arduino i Androidem: 7 kroków (ze zdjęciami)

Wideo: Rejestrowanie danych w czasie rzeczywistym MPU-6050/A0 z Arduino i Androidem: 7 kroków (ze zdjęciami)
Wideo: Jak zrobić interaktywne oświetlenie RGB longboarda 2024, Lipiec
Anonim
Rejestrowanie danych w czasie rzeczywistym MPU-6050/A0 z Arduino i Androidem
Rejestrowanie danych w czasie rzeczywistym MPU-6050/A0 z Arduino i Androidem

Byłem zainteresowany wykorzystaniem Arduino do uczenia maszynowego. Jako pierwszy krok chcę zbudować wyświetlacz i rejestrator danych w czasie rzeczywistym (lub całkiem blisko niego) za pomocą urządzenia z systemem Android. Chcę przechwycić dane akcelerometru z MPU-6050, więc zaprojektowałem kompilację do korzystania z HC-05 przy 115200 bodach. W tej konfiguracji 4 kanały danych mogą być przesyłane z szybkością 250 próbek na sekundę.

Kompilacja ma kilka kroków:

  • Zbuduj tarczę lub płytkę stykową
  • Zaprogramuj Arduino
  • Załaduj aplikację na Androida z Google Play lub rozgałęźdź GitHub i skompiluj ją samodzielnie
  • Podłącz MPU-6050 do czegoś ciekawego co wibruje (użyłem auta R/C)
  • Użyj urządzenia z systemem Android, aby połączyć się z Arduino
  • Wykreśl dane, zapisz, jeśli jesteś zainteresowany
  • Zaimportuj do Pythona (lub innej platformy) do dalszego użytku

Zacznijmy!

Krok 1: Zbuduj tarczę/płytkę chlebową

Zbuduj tarczę/płytkę chlebową
Zbuduj tarczę/płytkę chlebową
Zbuduj tarczę/płytkę chlebową
Zbuduj tarczę/płytkę chlebową

To jest schemat połączeń Arduino, HC-05 i MPU-6050. Oprócz MPU-6050 mam wejście analogowe A0 podłączone do czujnika światła, aby pokazać, że ADC działa. Do A0 ADC może być doprowadzony dowolny sygnał 0-5 V. Oto komponenty, których użyłem do budowy:

  • Arduino Uno
  • HC-05 (HC-06 też powinien działać, ale moja kompilacja była z HC-05)
  • MPU-6050
  • Fotorezystor Sparkfun
  • Rezystor 10kOhm (brązowo-czarno-pomarańczowy)

Większość modułów Bluetooth HC-05 domyślnie ma prędkość 9600 bodów. Aby dane mogły zostać pomyślnie przesłane, należy je przeprogramować na prędkość 115200 bodów. Istnieje dobry instruktaż poleceń HC-05/HC-06 AT, który wyjaśnia, jak to zrobić.

Krok 2: Zaprogramuj Arduino

Zaprogramuj Arduino
Zaprogramuj Arduino
Zaprogramuj Arduino
Zaprogramuj Arduino

Do programowania Arduino użyłem Arduino IDE w wersji 1.6.7. Kod można pobrać z linków w tym kroku lub z repozytorium GitHub. Dołączyłem trzy wersje: Firmware125.ino to wersja 125 Hz, Firmware250.ino to wersja 250 Hz, a Firmware500.ino to wersja 500 Hz. Aby Arduino pracowało z częstotliwością 500 Hz, A0 ADC nie jest zbierane.

Oprogramowanie układowe zawiera wyjście zegara na styku 9, którego użyłem do sprawdzenia taktowania. Wykres pokazuje, że czas cyklu wynosi 4 ms (odpowiednik 1/250 herca). Odkryłem, że w przypadku problemów z łączem szeregowym czas nie będzie jednolity.

Kod Arduino używa maskowania bitowego, aby dodać numer kanału do każdego pakietu, ponieważ próbki czasami przechodzą przez Bluetooth. Używam trzech najbardziej znaczących bitów do przechowywania numeru kanału. Dla liczb całkowitych ze znakiem najbardziej znaczący bit (MSB) jest zarezerwowany dla znaku. Ponieważ chcę użyć MSB dla mojego adresu, a nie znaku liczby całkowitej, muszę przekonwertować wszystkie wartości akcelerometru ze znakiem na liczby całkowite bez znaku. Robię to, dodając 32768 do każdej wartości (liczba ADC akcelerometru MPU wynosi od +32768 do -32768) i rzutuję jako liczby całkowite bez znaku:

(niepodpisany int)((długi)iAccelData+32767);

Numer kanału jest taki sam dla każdego akcelerometru i portu A0, dzięki czemu można wykryć upuszczony pakiet, jeśli numery kanałów są nieprawidłowe. W przypadku pakietów pochodzących z Bluetooth na Arduino wzór binarny to (znaki są przesuwane bitowo):

(xacc 3 bity adresu = 0x00, 13bit bez znaku) (yacc 3 bity adresu = 0x01, 13bit bez znaku) (zacc 3 bity adresu = 0x02, 13bit bez znaku) (3 bity adresu = 0x03, iadc13bit bez znaku)

(xacc 3 bity adresu = 0x00, 13bit bez znaku) (yacc 3 bity adresu = 0x01, 13bit bez znaku) (zacc 3 bity adresu = 0x02, 13bit bez znaku) (3 bity adresu = 0x03, iadc13bit bez znaku) (xacc 3 bity adresu = 0x00, 13bit bez znaku) (yacc 3 bity adresu = 0x01, 13bit bez znaku) (zacc 3 bity adresu = 0x02, 13bit bez znaku) (3 bity adresu = 0x03, iadc13bit bez znaku) …

Jeśli do odczytywania danych Bluetooth używasz czegoś innego niż aplikacja Accel Plot na Androida, oto kroki, aby wyodrębnić adres (używam nazw zmiennych z pliku Accel Plot Bluetooth.java z repozytorium GitHub):

- Przeczytaj w 16 niepodpisanych int

- Wyodrębnij wysoki bajt i zapisz go w btHigh.

- Wyodrębnij młodszy bajt i zapisz go w btLow.

- Pobierz adres z btHigh, używając: (btHigh >> 5) i 0x07. Ta instrukcja przesuwa btHigh o 5 bitów w prawo, przesuwając trzy bity adresu do trzech najniższych rejestrów. Znak & jest logicznym AND, które wymusza, aby bity 4 i wyższe miały wartość zero, a ostatnie trzy bity pasowały do bitów adresu. Wynikiem tego oświadczenia jest Twój adres.

Nie musisz się martwić o ekstrakcję adresu, jeśli używasz wykresu Accel.

Krok 3: Załaduj aplikację na Androida z Google Play lub rozgałęziaj GitHub

Załaduj aplikację na Androida z Google Play lub rozgałęźnik GitHub
Załaduj aplikację na Androida z Google Play lub rozgałęźnik GitHub

Masz kilka opcji ładowania aplikacji na Androida na swoje urządzenie. Jeśli chcesz uniknąć kodowania, możesz wyszukać „Accel Plot”, a aplikacja powinna pojawić się w sklepie Google Play. Postępuj zgodnie z instrukcjami sklepu dotyczącymi instalacji.

Moim pragnieniem z tym Instructable jest naprawdę zachęcenie innych do tworzenia projektów, więc opublikowałem również kod w repozytorium GitHub. Powinieneś być w stanie to rozgałęziać, budować i modyfikować według własnego uznania. Opublikowałem kod na licencji MIT, więc baw się dobrze!

Krok 4: Połącz się z Arduino z czymś interesującym (użyłem samochodu R/C)

Połącz się z Arduino, aby uzyskać coś ciekawego (użyłem samochodu R/C)
Połącz się z Arduino, aby uzyskać coś ciekawego (użyłem samochodu R/C)

Chcę ostatecznie użyć urządzenia do wykrywania nawierzchni drogi, więc pomyślałem, że odpowiedni będzie mały zdalnie sterowany samochód (R/C). Myślę, że pomaga w następnym kroku, jeśli przyspieszenia mogą być na czymś, co się porusza lub wibruje.

Krok 5: Użyj urządzenia z Androidem, aby połączyć się z Arduino

Użyj urządzenia Android, aby połączyć się z Arduino
Użyj urządzenia Android, aby połączyć się z Arduino
Użyj urządzenia Android, aby połączyć się z Arduino
Użyj urządzenia Android, aby połączyć się z Arduino
Użyj urządzenia Android, aby połączyć się z Arduino
Użyj urządzenia Android, aby połączyć się z Arduino

Jeśli jeszcze tego nie zrobiłeś, musisz najpierw sparować HC-05 z urządzeniem z Androidem. Uważam, że na większości urządzeń można to zrobić przechodząc do ustawień. Domyślny pin dla większości urządzeń HC-05 to 1234 lub 1111.

Otwórz aplikację AccelPlot na urządzeniu z systemem Android. Po otwarciu aplikacji, a przed połączeniem się z HC-05, możesz zmienić częstotliwość próbkowania (ustawia się ją w kodzie Arduino), skalę akcelerometru (również ustawianą w kodzie Arduino) oraz liczbę próbek do zapisania.

Po wprowadzeniu tych ustawień kliknij przycisk „Połącz”. Powinien wyświetlić urządzenia Bluetooth, a Twoje urządzenie powinno być wymienione. Wybierz go, a gdy kod nawiąże połączenie, zobaczysz wyskakujące okienko „Połączono”.

Użyj przycisku strzałki wstecz, aby powrócić do wykresu przyspieszenia. Dotknij przycisku „Rozpocznij transmisję”, aby wyświetlić dane z urządzenia HC-05. Powinieneś również dostępne przyciski do zapisywania danych lub odtwarzania treści z modulacją częstotliwości przez gniazdo audio.

Krok 6: Zdobądź i wykreśl dane

Image
Image
Importuj do Pythona (lub innej platformy) do dalszego użytku
Importuj do Pythona (lub innej platformy) do dalszego użytku

Przycisk „Rozpocznij transmisję” powinien być włączony. Dotknij go, aby rozpocząć przesyłanie strumieniowe danych na ekran.

Przycisk „Zapisz dane” zostanie również włączony, dotknij go, aby zapisać dane.

Accel Plot zawiera również opcję wyprowadzania modulowanego sygnału na kanały audio. 2 kanały w aplikacji Accel Plot odnoszą się do lewego i prawego kanału wyjścia audio w urządzeniu z systemem Android. Jest to przydatne, jeśli chcesz przenieść dane MPU-6050 do oddzielnego systemu rejestrowania danych, takiego jak National Instruments.

Film pokazuje przykład systemu zbierającego dane w samochodzie R/C.

Krok 7: Importuj do Pythona (lub innej platformy) do dalszego użytku

Importuj do Pythona (lub innej platformy) do dalszego użytku
Importuj do Pythona (lub innej platformy) do dalszego użytku

Pliki są zapisywane na urządzeniu z systemem Android. Pliki będą przechowywane w katalogu „AccelPlot” dla Android API 18 i starszych. Kod umieszcza pliki.dat w folderze „\Tablet\Documents\AccelPlot” dla interfejsu API 19 (KitKat 4.4) i nowszych. Miałem problem z niektórymi urządzeniami z Androidem, które wyświetlały pliki po podłączeniu przez USB. W niektórych przypadkach musiałem ponownie uruchomić urządzenie z Androidem, aby się pojawiły. Nie wiem, dlaczego tak jest, ale powinny być cztery pliki, po jednym dla każdego kanału. Można je skopiować do katalogu lokalnego w celu dodatkowej pracy.

Użyłem Anacondy/Pythona 2.7 do otwarcia plików i wyświetlenia danych. Plik „ExploratoryAnalysis.ipynb” zawiera plik Notatnika IPython, który otworzy wszystkie pliki danych i wykreśli przykładowe dane. Przykładowe pliki znajdują się w repozytorium GitHub. Dane są zapisywane jako big-endian 4 bajty zmiennoprzecinkowe ('>f'), więc każdy program analityczny powinien być w stanie je otworzyć.

Dołączyłem również prostszy plik o nazwie „ReadDataFiles.ipynb”, który pokazuje, jak czytać pojedynczy plik według nazwy.

Zalecana: