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)
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 dizajnirao konstrukciju za korištenje HC-05 na 115200 bauda. S ovom konfiguracijom mogu se prenijeti 4 kanala podataka brzinom od 250 uzoraka u sekundi.

Konstrukcija ima nekoliko koraka:

  • Napravite š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, sačuvajte ako ste zainteresovani
  • Uvezite u Python (ili drugu platformu) za daljnju upotrebu

Hajde da počnemo!

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

Napravite štit/matičnu ploču
Napravite štit/matičnu ploču
Napravite štit/matičnu ploču
Napravite štit/matičnu ploču

Ovo je dijagram ožičenja za Arduino, HC-05 i MPU-6050. Osim MPU-6050, analogni ulaz A0 je povezan sa svjetlosnim senzorom 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
  • Otpor 10kOhm (smeđe-crno-narančasta)

Većina HC-05 Bluetooth modula zadano ima 9600 bauda. Da bi se podaci uspješno prenijeli, morat ćete ih reprogramirati za brzinu 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 sa 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. Da bi se Arduino pokrenuo 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. Koristim tri najznačajnija bita za spremanje broja kanala. 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 potpisane vrijednosti akcelerometra u cjelovite bez znaka. To činim dodavanjem 32768 svakoj vrijednosti (broj ADC -ova u MPU akcelerometru je +32768 do -32768) i emitiran kao cijeli broj bez znaka:

(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 bita adrese = 0x00, 13 bita bez potpisa) (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 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 bez potpisa) (yacc 3 bita adrese = 0x01, 13 bita bez znaka) (zacc 3 bita adrese = 0x02, 13 bita bez potpisa) (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 koristeći: (btHigh >> 5) & 0x07. Ova naredba pomiče btHigh 5 bita udesno pomjerajući tri bita adrese u tri najniža registra. Znak & logičko je AND koje prisiljava bitove 4 i više da budu nula, a posljednja tri bita da se podudaraju s adresama. 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 potražiti "Accel Plot" i aplikacija bi se trebala pojaviti u trgovini Google Play. Slijedite upute u trgovini za instalaciju.

Moja želja s ovim Instructable -om je zaista potaknuti druge na izgradnju projekata, pa sam također objavio kod u GitHub repo -u. Trebali biste ovo 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 kreće ili vibrira.

Korak 5: 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 za povezivanje s Arduinom
Upotrijebite Android uređaj za povezivanje s Arduinom

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 HC-05 uređaja bit će 1234 ili 1111.

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

Kada se ove postavke izvrše, kliknite na dugme "Poveži se". Trebao bi prikazati Bluetooth uređaje i vaš uređaj bi trebao biti naveden. Odaberite ga i nakon što kôd uspostavi vezu, vidjet ćete tost "Povezano".

Pomoću dugmeta sa strelicom za povratak vratite se na Accel Plot. Dodirnite dugme "Pokreni tok" za prikaz podataka sa uređaja HC-05. Također biste trebali imati dostupne gumbe za spremanje podataka ili reprodukciju frekvencijski moduliranog sadržaja putem audio priključka.

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

Dugme "Pokreni tok" treba biti omogućeno. Dodirnite ga za početak prijenosa podataka na ekran.

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

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

Video prikazuje primjer sistema 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 ponovo pokrenuti Android uređaj da bi se pojavio. Nisam siguran zašto je to tako, ali trebalo 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 datoteke s podacima i iscrtati uzorke podataka. Primjeri datoteka uključeni su u GitHub repo. Podaci se spremaju kao big-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čuje se: