Obsah:

Protokolování dat MPU-6050/A0 v reálném čase pomocí Arduina a Androidu: 7 kroků (s obrázky)
Protokolování dat MPU-6050/A0 v reálném čase pomocí Arduina a Androidu: 7 kroků (s obrázky)

Video: Protokolování dat MPU-6050/A0 v reálném čase pomocí Arduina a Androidu: 7 kroků (s obrázky)

Video: Protokolování dat MPU-6050/A0 v reálném čase pomocí Arduina a Androidu: 7 kroků (s obrázky)
Video: Logování dat na EmonCMS 2024, Červenec
Anonim
Protokolování dat MPU-6050/A0 v reálném čase pomocí Arduina a Androidu
Protokolování dat MPU-6050/A0 v reálném čase pomocí Arduina a Androidu

Zajímalo mě používání Arduina pro strojové učení. Jako první krok chci vybudovat zobrazení dat a záznamník dat v reálném čase (nebo docela blízko) pomocí zařízení Android. Chci zachytit data z akcelerometru z MPU-6050, takže jsem navrhl sestavu tak, aby používala HC-05 při 115200 baudech. S touto konfigurací lze přenášet 4 kanály dat rychlostí 250 vzorků za sekundu.

Sestavení má několik kroků:

  • Postavte štít nebo prkénko
  • Naprogramujte Arduino
  • Načtěte aplikaci pro Android ze služby Google Play nebo rozbalte GitHub a zkompilujte ji sami
  • Připojte MPU-6050 k něčemu zajímavému, co vibruje (použil jsem auto R/C)
  • K připojení k Arduinu použijte zařízení Android
  • Vykreslete data, v případě zájmu uložte
  • Importujte do Pythonu (nebo jiné platformy) pro další použití

Začněme!

Krok 1: Postavte štít/prkénko

Postavte štít/prkénko
Postavte štít/prkénko
Postavte štít/prkénko
Postavte štít/prkénko

Toto je schéma zapojení pro Arduino, HC-05 a MPU-6050. Kromě MPU-6050 mám analogový vstup A0 připojený ke světelnému senzoru, který ukazuje, že ADC funguje. Do A0 ADC lze přivést jakýkoli signál 0-5 voltů. Toto jsou komponenty, které jsem použil pro stavbu:

  • Arduino Uno
  • HC-05 (HC-06 by měl také fungovat, ale moje konstrukce byla s HC-05)
  • MPU-6050
  • Sparkfun fotorezistor
  • Rezistor 10 kOhm (hnědo-černo-oranžový)

Většina modulů Bluetooth HC-05 má výchozí hodnotu 9600 baudů. Aby byla data úspěšně přenášena, budete je muset přeprogramovat na přenosovou rychlost 115200 baudů. Existuje dobrý instrukční příkaz HC-05/HC-06 AT, který vysvětluje, jak to udělat.

Krok 2: Naprogramujte Arduino

Naprogramujte Arduino
Naprogramujte Arduino
Naprogramujte Arduino
Naprogramujte Arduino

K programování Arduina jsem použil vydání Arduino IDE 1.6.7. Kód lze stáhnout z odkazů v tomto kroku nebo z úložiště GitHub. Zahrnul jsem tři verze: Firmware125.ino je verze 125 hertzů, Firmware250.ino je verze 250 hertz a Firmware500.ino je verze 500 hertz. Aby se Arduino dostalo do cyklu 500 hertzů, A0 ADC není shromažďováno.

Firmware obsahuje hodiny na Pin 9, které jsem použil ke kontrole načasování. Trasování ukazuje, že doba cyklu je 4 ms (ekvivalent 1/250 hertzů). Zjistil jsem, že pokud dojde k problémům se sériovým propojením, načasování nebude jednotné.

Kód Arduino používá bit maskování k přidání čísla kanálu do každého paketu, protože vzorky někdy přes Bluetooth procházejí. K uložení čísla kanálu používám tři nejvýznamnější bity. Pro celá čísla se znaménkem je pro znaménko vyhrazen nejvýznamnější bit (MSB). Protože chci pro svou adresu použít MSB, nikoli znak celého čísla, musím převést všechny hodnoty podepsaného akcelerometru na celá čísla bez znaménka. Dělám to tak, že ke každé hodnotě přidám 32768 (počty ADC akcelerometru MPU jsou +32768 až -32768) a přetypuji jako celá čísla bez znaménka:

(nepodepsaný int) ((dlouhý) iAccelData+32767);

Číslo kanálu je stejné pro každý akcelerometr a port A0, takže je možné detekovat spadlý paket, pokud jsou čísla kanálů mimo provoz. U paketů pocházejících z Bluetooth na Arduinu je binární vzorec (znaky se bitově mění):

(xacc 3 adresové bity = 0x00, 13bit bez znaménka) (yacc 3 adresové bity = 0x01, 13bit bez znaménka) (zacc 3 adresové bity = 0x02, 13bit bez znaménka) (3 adresové bity = 0x03, iadc13bit bez znaménka)

(xacc 3 adresové bity = 0x00, 13bit bez znaménka) (yacc 3 adresové bity = 0x01, 13bit bez znaménka) (zacc 3 adresové bity = 0x02, 13bit bez znaménka) (3 adresové bity = 0x03, iadc13bit bez znaménka) (xacc 3 adresové bity = 0x00, 13bit bez znaménka (yacc 3 adresové bity = 0x01, 13bit bez znaménka) (zacc 3 adresové bity = 0x02, 13bit bez znaménka) (3 adresové bity = 0x03, iadc13bit bez znaménka)…

Pokud ke čtení dat Bluetooth používáte něco jiného než aplikaci Accel Plot pro Android, zde jsou kroky k extrahování adresy (používám názvy proměnných ze souboru Accel Plot Bluetooth.java z úložiště GitHub):

- Přečtěte si 16 int bez znaménka

- Extrahujte vysoký bajt a uložte jej do btHigh.

- Extrahujte nízký bajt a uložte jej do btLow.

- Načtěte adresu z btHigh pomocí: (btHigh >> 5) & 0x07. Toto prohlášení posune btHigh o 5 bitů doprava a přesune tři adresové bity do nejnižších tří registrů. Znaménko & je logické A, které nutí bity 4 a vyšší být nulové a poslední tři bity odpovídají bitům adresy. Výsledkem tohoto prohlášení je vaše adresa.

Pokud používáte Accel Plot, nemusíte si dělat starosti s extrakcí adresy.

Krok 3: Načtěte aplikaci pro Android z Google Play nebo pobočku GitHub

Načtěte si aplikaci pro Android z Google Play nebo použijte GitHub
Načtěte si aplikaci pro Android z Google Play nebo použijte GitHub

Pro načtení aplikace pro Android do zařízení máte několik možností. Pokud se chcete vyhnout kódování, můžete vyhledat „Accel Plot“a aplikace by se měla objevit v obchodě Google Play. Při instalaci postupujte podle pokynů v obchodě.

Mým přáním s tímto Instructable je opravdu povzbudit ostatní k vytváření projektů, takže jsem také publikoval kód v repo GitHubu. Měli byste to umět větvit, stavět a upravovat, jak uznáte za vhodné. Kód jsem zveřejnil pod licencí MIT, tak se bavte!

Krok 4: Připojte se k Arduinu k něčemu zajímavému (použil jsem auto R/C)

Připojte se k Arduinu k něčemu zajímavému (použil jsem auto R/C)
Připojte se k Arduinu k něčemu zajímavému (použil jsem auto R/C)

Chci nakonec použít zařízení pro detekci povrchu vozovky, takže jsem si myslel, že by bylo vhodné malé dálkově ovládané (R/C) auto. Myslím si, že v dalším kroku pomůže, pokud mohou být accesly na něčem, co se pohybuje nebo vibruje.

Krok 5: K připojení k Arduinu použijte zařízení Android

K připojení k Arduinu použijte zařízení Android
K připojení k Arduinu použijte zařízení Android
K připojení k Arduinu použijte zařízení Android
K připojení k Arduinu použijte zařízení Android
K připojení k Arduinu použijte zařízení Android
K připojení k Arduinu použijte zařízení Android

Pokud jste tak ještě neučinili, budete muset nejprve spárovat HC-05 se zařízením Android. Věřím, že na většině zařízení to můžete provést v nastavení. Výchozí pin pro většinu zařízení HC-05 bude 1234 nebo 1111.

Otevřete na zařízení Android aplikaci AccelPlot. Když se aplikace otevře a než se připojíte k HC-05, můžete změnit vzorkovací frekvenci (ta je nastavena v kódu Arduino), měřítka akcelerometru (také nastavená v kódu Arduino) a počet vzorků, které se mají uložit.

Jakmile jsou tato nastavení provedena, klikněte na tlačítko „Připojit“. Mělo by se zobrazit zařízení Bluetooth a vaše zařízení by mělo být uvedeno. Vyberte jej a jakmile kód naváže připojení, zobrazí se vyskakovací okno „Připojeno“.

Pomocí tlačítka se šipkou zpět se vraťte do Accel Plot. Klepnutím na tlačítko „Spustit stream“zobrazíte data ze zařízení HC-05. Měli byste také mít k dispozici tlačítka pro uložení dat nebo přehrávání frekvenčně modulovaného obsahu prostřednictvím zvukového konektoru.

Krok 6: Získání a vykreslení dat

Image
Image
Importujte do Pythonu (nebo jiné platformy) pro další použití
Importujte do Pythonu (nebo jiné platformy) pro další použití

Mělo by být povoleno tlačítko „Spustit stream“. Klepnutím na něj zahájíte streamování dat na obrazovku.

Aktivováno bude také tlačítko „Uložit data“, klepnutím na něj uložíte data.

Accel Plot také obsahuje možnost výstupu modulovaného signálu na zvukové kanály. 2 kanály v aplikaci Accel Plot odkazují na levý a pravý kanál konektoru výstupu zvuku na zařízení Android. To je užitečné, pokud chcete přenést data MPU-6050 do samostatného systému protokolování dat, jako jsou národní nástroje.

Video ukazuje příklad systému, který shromažďuje data na vozidle R/C.

Krok 7: Import do Pythonu (nebo jiné platformy) pro další použití

Importujte do Pythonu (nebo jiné platformy) pro další použití
Importujte do Pythonu (nebo jiné platformy) pro další použití

Soubory se ukládají do zařízení Android. Soubory budou uloženy v adresáři „AccelPlot“pro Android API 18 a starší. Kód umístí soubory.dat do složky "\ Tablet / Documents / AccelPlot" pro API 19 (KitKat 4.4) a vyšší. Měl jsem potíže s některými zařízeními Android, které zobrazovaly soubory při připojení přes USB. V některých případech jsem musel restartovat zařízení Android, aby se zobrazily. Nejste si jisti, proč tomu tak je, ale měly by existovat čtyři soubory, jeden pro každý kanál. Lze je zkopírovat do místního adresáře pro další práci.

K otevření souborů a zobrazení dat jsem použil Anaconda/Python 2.7. Soubor "ExploratoryAnalysis.ipynb" obsahuje soubor IPython Notebook, který otevře všechny datové soubory a vykreslí ukázková data. Ukázkové soubory jsou součástí úložiště GitHub. Data jsou uložena jako big-endian 4 byte floats ('> f'), takže by je měl mít možnost otevřít jakýkoli analytický program.

Zahrnul jsem také jednodušší soubor s názvem „ReadDataFiles.ipynb“, který ukazuje, jak číst v jednom souboru podle názvu.

Doporučuje: