Sadržaj:

Zapis podataka MPU-6050/A0 u stvarnom vremenu s Arduinom i Androidom: 7 koraka (sa slikama)
Zapis podataka MPU-6050/A0 u stvarnom vremenu s Arduinom i Androidom: 7 koraka (sa slikama)

Video: Zapis podataka MPU-6050/A0 u stvarnom vremenu s Arduinom i Androidom: 7 koraka (sa slikama)

Video: Zapis podataka MPU-6050/A0 u stvarnom vremenu s Arduinom i Androidom: 7 koraka (sa slikama)
Video: Informatika 1.r SŠ - Izravna pretvorba i zapis podataka 2024, Studeni
Anonim
Zapis podataka MPU-6050/A0 u stvarnom vremenu s Arduinom i Androidom
Zapis podataka MPU-6050/A0 u stvarnom vremenu s Arduinom i Androidom

Zanimalo me korištenje Arduina za strojno učenje. Kao prvi korak, želim izgraditi prikaz podataka i zapisnik podataka u stvarnom vremenu (ili prilično blizu njega) s Android uređajem. Želim snimiti podatke akcelerometra s MPU-6050 pa sam konstruirao konstrukciju za korištenje HC-05 na 115200 bauda. S ovom konfiguracijom mogu se prenijeti 4 kanala podataka brzinom od 250 uzoraka u sekundi.

Izrada ima nekoliko koraka:

  • Izgradite štit ili ploču
  • Programirajte Arduino
  • Učitajte Android aplikaciju s Google Playa ili podružite GitHub i sastavite je sami
  • Spojite MPU-6050 na nešto zanimljivo što vibrira (koristio sam automobil s klimom)
  • Za povezivanje s Arduinom upotrijebite Android uređaj
  • Iscrtajte podatke, spremite ako ste zainteresirani
  • Uvezite u Python (ili drugu platformu) za daljnju upotrebu

Započnimo!

Korak 1: Izgradite štit/matičnu ploču

Izgradite štit/ploču za kruh
Izgradite štit/ploču za kruh
Izgradite štit/ploču za kruh
Izgradite štit/ploču za kruh

Ovo je dijagram ožičenja za Arduino, HC-05 i MPU-6050. Osim MPU-6050, analogni ulaz A0 ožičen je na svjetlosni senzor kako bi pokazao da ADC radi. Bilo koji signal 0-5 volti mogao bi se unijeti u A0 ADC. Ovo su komponente koje sam koristio za izradu:

  • Arduino Uno
  • HC-05 (HC-06 bi također trebao raditi, ali moja je konstrukcija bila s HC-05)
  • MPU-6050
  • Sparkfun fotootpornik
  • 10kOhm otpornik (smeđe-crno-narančasta)

Većina Bluetooth-modula HC-05 zadano ima 9600 bauda. Za uspješan prijenos podataka morat ćete ih reprogramirati za brzinu prijenosa od 115200 bauda. Postoji dobar HC-05/HC-06 AT Command Instructable koji objašnjava kako to učiniti.

Korak 2: Programirajte Arduino

Programirajte Arduino
Programirajte Arduino
Programirajte Arduino
Programirajte Arduino

Koristio sam Arduino IDE izdanje 1.6.7 za programiranje Arduina. Kôd se može preuzeti s veza u ovom koraku ili iz GitHub repoa. Uključio sam tri verzije: Firmware125.ino je verzija od 125 herca, Firmware250.ino je verzija od 250 herca, a Firmware500.ino je verzija od 500 herca. Kako bi Arduino radio na 500 herca, A0 ADC se ne prikuplja.

Firmver uključuje sat na Pin 9 koji sam koristio za provjeru vremena. Trag pokazuje da je vrijeme ciklusa 4 ms (ekvivalent 1/250 herca). Otkrio sam da ako postoje problemi sa serijskom vezom, vrijeme neće biti jednolično.

Arduino kôd koristi maskiranje bitova za dodavanje broja kanala svakom paketu jer uzorci ponekad padaju preko Bluetootha. Za pohranu broja kanala koristim tri najvažnija bita. Za cijele znakove najznačajniji bit (MSB) rezerviran je za znak. Budući da želim koristiti MSB za svoju adresu, a ne znak cijelog broja, moram pretvoriti sve vrijednosti akcelerometra sa predznakom u bezznačne cijele brojeve. To činim dodavanjem 32768 svakoj vrijednosti (broj ADC -ova za MPU akcelerometar je od +32768 do -32768) i emitiran kao cijeli broj bez potpisa:

(nepotpisani int) ((dugačak) iAccelData+32767);

Broj kanala je isti za svaki mjerač ubrzanja i A0 port, tako da se ispušteni paket može otkriti ako brojevi kanala nisu u redu. Za pakete koji dolaze s Bluetootha na Arduinu, binarni uzorak je (znakovi se bitovno mijenjaju):

(xacc 3 adresna bita = 0x00, 13 bitna oznaka) (yacc 3 adresna bita = 0x01, 13bitnaznačna) (zacc 3 adresna bita = 0x02, 13bitnaznačna)

(xacc 3 adresna bita = 0x00, 13 bita bez znaka) (yacc 3 bita adrese = 0x01, 13 bita bez znaka) (zacc 3 bita adrese = 0x02, 13 bita bez znaka) (3 bita adrese = 0x03, iadc13bit bez znaka) (xacc 3 bita adrese = 0x00, 13 -bitni bezznak) (yacc 3 adresna bita = 0x01, 13 -bitni bezznak) (zacc 3 bita adrese = 0x02, 13 -bitni bezznak) (3 bita adrese = 0x03, iadc13bit bez potpisa) …

Ako za čitanje Bluetooth podataka koristite nešto drugo osim Android aplikacije Accel Plot, evo koraka za izdvajanje adrese (koristim nazive varijabli iz datoteke Accel Plot Bluetooth.java iz GitHub repoa):

- Pročitajte u 16 nepotpisanih int

- Izdvojite visoki bajt i spremite ga na btHigh.

- Izdvojite niži bajt i spremite ga u btLow.

- Dohvatite adresu s btHigh pomoću: (btHigh >> 5) & 0x07. Ova izjava pomiče btHigh 5 bita udesno pomičući tri bita adrese u tri najniža registra. Znak & logičko je AND koje prisiljava bitove 4 i više na nulu, a posljednja tri bita na adresne bitove. Rezultat ove izjave je vaša adresa.

Ne morate brinuti o izdvajanju adrese ako koristite Accel Plot.

Korak 3: Učitajte Android aplikaciju s Google Playa ili podružite GitHub

Učitajte Android aplikaciju s Google Playa ili podružite GitHub
Učitajte Android aplikaciju s Google Playa ili podružite GitHub

Imate nekoliko mogućnosti za učitavanje Android aplikacije na svoj uređaj. Ako želite izbjeći kodiranje, možete tražiti "Accel Plot" i aplikacija bi se trebala pojaviti u trgovini Google Play. Slijedite upute trgovine za instalaciju.

Moja želja s ovim Instructableom je zaista potaknuti druge na izgradnju projekata, pa sam također objavio kod u GitHub repo -u. Trebali biste to moći razgranati, izgraditi i izmijeniti kako smatrate prikladnim. Objavio sam kôd pod MIT licencom pa se zabavite!

Korak 4: Povežite se s Arduinom na nešto zanimljivo (koristio sam R/C automobil)

Povežite se s Arduinom na nešto zanimljivo (koristio sam R/C automobil)
Povežite se s Arduinom na nešto zanimljivo (koristio sam R/C automobil)

Želim na kraju koristiti uređaj za otkrivanje površine ceste pa sam mislio da bi bio prikladan mali automobil na daljinsko upravljanje (R/C). Mislim da će u sljedećem koraku pomoći ako akceli mogu biti na nečemu što se pomiče ili vibrira.

Korak 5: Upotrijebite Android uređaj za povezivanje s Arduinom

Za povezivanje s Arduinom upotrijebite Android uređaj
Za povezivanje s Arduinom upotrijebite Android uređaj
Za povezivanje s Arduinom upotrijebite Android uređaj
Za povezivanje s Arduinom upotrijebite Android uređaj
Za povezivanje s Arduinom upotrijebite Android uređaj
Za povezivanje s Arduinom upotrijebite Android uređaj

Ako to već niste učinili, morat ćete prvo upariti HC-05 sa svojim Android uređajem. Vjerujem da na većini uređaja to možete učiniti odlaskom na postavke. Zadani pin za većinu uređaja HC-05 bit će 1234 ili 1111.

Otvorite aplikaciju AccelPlot na Android uređaju. Kad se aplikacija otvori i prije nego što se povežete s HC-05, možete promijeniti brzinu uzorkovanja (to je postavljeno u Arduino kodu), ljestvice akcelerometra (također postavljene u Arduino kodu) i broj uzoraka za spremanje.

Nakon što ste izvršili ove postavke, kliknite gumb "Poveži se". Trebao bi prikazati Bluetooth uređaje, a vaš uređaj trebao bi biti naveden. Odaberite ga i kad kôd uspostavi vezu, vidjet ćete skočni tost.

Pomoću gumba sa strelicom natrag vratite se na Accel Plot. Dodirnite gumb "Pokreni stream" za prikaz podataka s uređaja HC-05. Također biste trebali imati dostupne gumbe za spremanje podataka ili reprodukciju frekvencijski moduliranog sadržaja kroz audio priključnicu.

Korak 6: Prikupite i iscrtajte podatke

Image
Image
Uvezite u Python (ili drugu platformu) za daljnju upotrebu
Uvezite u Python (ili drugu platformu) za daljnju upotrebu

Gumb "Pokreni stream" trebao bi biti omogućen. Dodirnite ga za početak strujanja podataka na zaslon.

Također će biti omogućen gumb "Spremi podatke", dodirnite ga za spremanje podataka.

Accel Plot također uključuje opciju za izlaz moduliranog signala na audio kanalima. Dva kanala u aplikaciji Accel Plot odnose se na lijevi i desni kanal utičnice za audio izlaz na Android uređaju. Ovo je korisno ako želite unijeti podatke MPU-6050 u zaseban sustav evidentiranja podataka, poput National Instruments.

Video prikazuje primjer sustava koji prikuplja podatke o R/C automobilu.

Korak 7: Uvezite u Python (ili drugu platformu) za daljnju upotrebu

Uvezite u Python (ili drugu platformu) za daljnju upotrebu
Uvezite u Python (ili drugu platformu) za daljnju upotrebu

Datoteke se spremaju na Android uređaj. Datoteke će biti pohranjene u direktoriju "AccelPlot" za Android API 18 i starije. Kod postavlja datoteke.dat u mapu "\ Tablet / Documents / AccelPlot" za API 19 (KitKat 4.4) i novije verzije. Imao sam problema s nekim Android uređajima koji prikazuju datoteke kada su povezani putem USB -a. U nekim slučajevima morao sam ponovno pokrenuti Android uređaj kako bi se pojavili. Nisam siguran zašto je to tako, ali trebale bi postojati četiri datoteke, po jedna za svaki kanal. Mogu se kopirati u lokalni direktorij radi dodatnog rada.

Koristio sam Anacondu/Python 2.7 za otvaranje datoteka i prikaz podataka. Datoteka "ExploratoryAnalysis.ipynb" ima datoteku IPython Notebook koja će otvoriti sve podatkovne datoteke i iscrtati uzorke podataka. Primjeri datoteka uključeni su u GitHub repo. Podaci se spremaju kao veliki endian 4-bajtni float ('> f') pa bi ih svaki program za analizu trebao moći otvoriti.

Uključio sam i jednostavniju datoteku pod nazivom "ReadDataFiles.ipynb" koja pokazuje kako čitati u jednoj datoteci po imenu.

Preporučeni: