Talaan ng mga Nilalaman:

Realtime MPU-6050 / A0 Pag-log ng Data Sa Arduino at Android: 7 Mga Hakbang (na may Mga Larawan)
Realtime MPU-6050 / A0 Pag-log ng Data Sa Arduino at Android: 7 Mga Hakbang (na may Mga Larawan)

Video: Realtime MPU-6050 / A0 Pag-log ng Data Sa Arduino at Android: 7 Mga Hakbang (na may Mga Larawan)

Video: Realtime MPU-6050 / A0 Pag-log ng Data Sa Arduino at Android: 7 Mga Hakbang (na may Mga Larawan)
Video: Unique gloves translate sign language into speech or text. 2024, Hulyo
Anonim
Realtime MPU-6050 / A0 Pag-log ng Data Sa Arduino at Android
Realtime MPU-6050 / A0 Pag-log ng Data Sa Arduino at Android

Naging interesado ako sa paggamit ng Arduino para sa pag-aaral ng makina. Bilang unang hakbang, nais kong bumuo ng isang realtime (o medyo malapit dito) pagpapakita ng data at pag-logger sa isang Android device. Nais kong makuha ang data ng accelerometer mula sa MPU-6050 kaya dinisenyo ko ang build upang magamit ang HC-05 sa 115200 baud. Sa pagsasaayos na ito 4 na mga channel ng data ay maaaring mailipat sa 250 mga sample bawat segundo.

Ang build ay mayroong ilang mga hakbang:

  • Buuin ang kalasag o breadboard
  • Program ang Arduino
  • I-load ang Android app mula sa Google Play o i-branch ang GitHub at i-compile ito mismo
  • Ikonekta ang MPU-6050 sa isang bagay na kagiliw-giliw na nag-vibrate (Gumamit ako ng R / C car)
  • Gamitin ang Android device upang kumonekta sa Arduino
  • I-plot ang data, i-save kung interesado
  • I-import sa Python (o iba pang platform) para sa karagdagang paggamit

Magsimula na tayo!

Hakbang 1: Buuin ang Shield / breadboard

Buuin ang Shield / breadboard
Buuin ang Shield / breadboard
Buuin ang Shield / breadboard
Buuin ang Shield / breadboard

Ito ang diagram ng mga kable para sa Arduino, HC-05, at sa MPU-6050. Bilang karagdagan sa MPU-6050 Mayroon akong analog input A0 na naka-wire sa isang light sensor upang maipakita na gumagana ang ADC. Anumang 0-5 volt signal ay maaaring dalhin sa A0 ADC. Ito ang mga sangkap na ginamit ko para sa pagbuo:

  • Arduino Uno
  • HC-05 (Ang HC-06 ay dapat ding gumana, ngunit ang aking pagbuo ay kasama ang HC-05)
  • MPU-6050
  • Sparkfun photoresistor
  • 10kOhm risistor (kayumanggi-itim-kahel)

Karamihan sa mga HC-05 Bluetooth module ay default sa 9600 baud. Para sa data na matagumpay na maipadala, kakailanganin mong i-program muli ito para sa isang rate ng 115200 baud. Mayroong isang mahusay na HC-05 / HC-06 AT Command Instructable na nagpapaliwanag kung paano ito gawin.

Hakbang 2: I-program ang Arduino

Program ang Arduino
Program ang Arduino
Program ang Arduino
Program ang Arduino

Ginamit ko ang Arduino IDE na naglabas ng 1.6.7 upang mai-program ang Arduino. Maaaring mai-download ang code mula sa mga link sa hakbang na ito o mula sa GitHub repo. Nagsama ako ng tatlong bersyon: Ang Firmware125.ino ay ang 125 hertz na bersyon, ang Firmware250.ino ay ang 250 hertz na bersyon, at ang Firmware500.ino ay ang 500 hertz na bersyon. Upang makuha ang Arduino upang umikot sa 500 hertz, ang A0 ADC ay hindi nakolekta.

Kasama sa firmware ang isang orasan sa Pin 9 na ginamit ko upang suriin ang tiyempo. Ipinapakita ng bakas ang oras ng pag-ikot ay 4 ms (katumbas ng 1/250 hertz). Nalaman ko na kung may mga problema sa serial link ang tiyempo ay hindi magiging pareho.

Gumagamit ang Arduino code ng bit masking upang magdagdag ng isang numero ng channel sa bawat packet dahil kung minsan ay nahuhulog ang mga sample sa Bluetooth. Ginagamit ko ang tatlong pinaka-makabuluhang mga piraso upang mag-imbak ng isang numero ng channel. Para sa mga naka-sign integer ang pinaka-makabuluhang bit (MSB) ay nakalaan para sa pag-sign. Dahil nais kong gamitin ang MSB para sa aking address, sa halip na ang pag-sign ng integer, kailangan kong i-convert ang lahat ng mga naka-sign na halaga ng accelerometer sa mga unsigned integer. Ginagawa ko ito sa pamamagitan ng pagdaragdag ng 32768 sa bawat halaga (ang bilang ng MPU accelerometer ADC ay +32768 hanggang -32768) at itinapon bilang mga unsigned integer:

(unsigned int) ((haba) iAccelData + 32767);

Ang numero ng channel ay pareho para sa bawat accelerometer at sa A0 port upang ang isang nahulog na packet ay maaaring makita kung ang mga numero ng channel ay wala sa order. Para sa mga packet na nagmumula sa Bluetooth sa Arduino, ang binary pattern ay (ang mga palatandaan ay medyo matalino sa paglilipat):

(xacc 3 address bits = 0x00, 13bit unsigned) (yacc 3 address bits = 0x01, 13bit unsigned) (zacc 3 address bits = 0x02, 13bit unsigned) (3 address bits = 0x03, iadc13bit unsigned)

(xacc 3 address bits = 0x00, 13bit unsigned) (yacc 3 address bits = 0x01, 13bit unsigned) (zacc 3 address bits = 0x02, 13bit unsigned) (3 address bits = 0x03, iadc13bit unsigned) (xacc 3 address bits = 0x00, 13bit unsigned) (yacc 3 address bits = 0x01, 13bit unsigned) (zacc 3 address bits = 0x02, 13bit unsigned) (3 address bits = 0x03, iadc13bit unsigned)…

Kung gumagamit ng ibang bagay maliban sa Accel Plot Android app upang basahin ang data ng Bluetooth, narito ang mga hakbang upang makuha ang address (Gumagamit ako ng mga variable na pangalan mula sa file ng Accel Plot Bluetooth.java mula sa GitHub repo):

- Basahin sa 16 unsigned int

- I-extract ang mataas na byte at i-save ito sa btHigh.

- I-extract ang mababang byte at i-save ito sa btLow.

- Kunin ang address mula sa btHigh gamit ang: (btHigh >> 5) & 0x07. Inililipat ng pahayag na ito ang btHigh 5 bits sa kanang paglipat ng tatlong mga address bit sa pinakamababang tatlong rehistro. Ang & sign ay isang lohikal AT na pinipilit ang mga bits na 4 at mas mataas na maging zero at ang huling tatlong piraso upang tumugma sa mga address bit. Ang resulta ng pahayag na ito ay ang iyong address.

Hindi mo kailangang magalala tungkol sa pagkuha ng address kung gumagamit ka ng Accel Plot.

Hakbang 3: I-load ang Android App Mula sa Google Play o I-branch ang GitHub

I-load ang Android App Mula sa Google Play o I-branch ang GitHub
I-load ang Android App Mula sa Google Play o I-branch ang GitHub

Mayroon kang ilang mga pagpipilian para sa pag-load ng Android app sa iyong aparato. Kung nais mong iwasan ang pag-coding, maaari kang maghanap para sa "Accel Plot" at dapat na lumabas ang app sa Google Play store. Sundin ang mga tagubilin sa tindahan para sa pag-install.

Ang aking hangarin sa Instructable na ito ay talagang hikayatin ang iba na magtayo ng mga proyekto kaya nai-publish ko rin ang code sa isang GitHub repo. Dapat mong mai-branch ito, buuin ito, at baguhin ito ayon sa iyong nababagay. Nai-publish ko ang code sa ilalim ng MIT Lisensya kaya magsaya ka!

Hakbang 4: Kumonekta sa Arduino sa Isang bagay na Kawili-wili (Gumamit ako ng R / C Car)

Kumonekta sa Arduino sa Isang bagay na Kawili-wili (Gumamit ako ng R / C Car)
Kumonekta sa Arduino sa Isang bagay na Kawili-wili (Gumamit ako ng R / C Car)

Nais kong magamit sa huli ang aparato para sa pagtuklas sa kalsada kaya naisip ko na ang isang maliit na remote control (R / C) na kotse ay angkop. Sa palagay ko nakakatulong ito sa susunod na hakbang kung ang mga accel ay maaaring maging sa isang bagay na gumagalaw o nanginginig.

Hakbang 5: Gamitin ang Android Device upang Kumonekta sa Arduino

Gamitin ang Android Device upang Kumonekta sa Arduino
Gamitin ang Android Device upang Kumonekta sa Arduino
Gamitin ang Android Device upang Kumonekta sa Arduino
Gamitin ang Android Device upang Kumonekta sa Arduino
Gamitin ang Android Device upang Kumonekta sa Arduino
Gamitin ang Android Device upang Kumonekta sa Arduino

Kung hindi mo pa nagagawa ito, kakailanganin mong ipares muna ang HC-05 sa iyong Android device. Naniniwala ako na sa karamihan ng mga aparato magagawa mo ito sa pamamagitan ng pagpunta sa mga setting. Ang default na pin para sa karamihan ng mga aparatong HC-05 ay magiging 1234 o 1111.

Buksan ang AccelPlot app sa Android device. Kapag bumukas ang app, at bago ka kumonekta sa HC-05, maaari mong baguhin ang rate ng pag-sample (nakalagay ito sa Arduino code), mga sukat ng accelerometer (nakatakda rin sa Arduino code), at ang bilang ng mga sample na nai-save.

Kapag nagawa ang mga setting na ito mag-click sa pindutang "Kumonekta". Dapat itong ilabas ang mga aparatong Bluetooth at dapat nakalista ang iyong aparato. Piliin ito at sa sandaling maitatatag ng code ang koneksyon makikita mo ang isang "Nakakonekta" na toast na pop up.

Gamitin ang back arrow button upang bumalik sa Accel Plot. I-tap ang pindutang "Start Stream" upang maipakita ang data mula sa aparatong HC-05. Dapat mo ring magamit ang mga pindutan upang mai-save ang data o i-play ang dalas ng modulated na nilalaman sa pamamagitan ng audio jack.

Hakbang 6: Kunin at I-plot ang Data

Image
Image
I-import Sa Python (o Ibang Platform) para sa Karagdagang Paggamit
I-import Sa Python (o Ibang Platform) para sa Karagdagang Paggamit

Dapat paganahin ang pindutang "Start Stream". I-tap ito upang simulang mag-streaming ng data sa screen.

Ang pindutang "I-save ang Data" ay paganahin din, i-tap ito upang maimbak ang data.

Kasama rin sa Accel Plot ang isang pagpipilian upang mag-output ng isang modulated signal sa mga audio channel. Ang 2 mga channel sa Accel Plot app ay tumutukoy sa kaliwa at kanang mga channel ng audio out jack sa Android device. Kapaki-pakinabang ito kung nais mong dalhin ang data ng MPU-6050 sa isang hiwalay na system ng pag-log ng data, tulad ng isang National Instruments.

Ipinapakita ng video ang isang halimbawa ng system ng pagkolekta ng data sa isang R / C na kotse.

Hakbang 7: I-import Sa Python (o Ibang Platform) para sa Karagdagang Paggamit

I-import Sa Python (o Ibang Platform) para sa Karagdagang Paggamit
I-import Sa Python (o Ibang Platform) para sa Karagdagang Paggamit

Ang mga file ay nai-save sa Android aparato. Itatago ang mga file sa ilalim ng direktoryo ng "AccelPlot" para sa Android API 18 at mas bago. Inilalagay ng code ang mga.dat file sa folder na "\ Tablet / Documents / AccelPlot" para sa API 19 (KitKat 4.4) at mas mataas. Nagkaproblema ako sa ilang mga Android device na ipinapakita ang mga file kapag nakakonekta sa pamamagitan ng USB. Sa ilang mga kaso kinailangan kong i-reboot ang Android device upang maipakita ang mga ito. Hindi sigurado kung bakit ito, ngunit dapat mayroong apat na mga file, isa para sa bawat channel. Maaari silang makopya sa isang lokal na direktoryo para sa karagdagang trabaho.

Ginamit ko ang Anaconda / Python 2.7 upang buksan ang mga file at ipakita ang data. Ang file na "ExploratoryAnalysis.ipynb" ay may file na IPython Notebook na magbubukas sa lahat ng mga file ng data at lalagyan ang sample ng data. Ang mga sample na file ay kasama sa repo ng GitHub. Ang data ay nai-save bilang big-endian 4 byte floats ('> f') kaya dapat buksan sila ng anumang programa sa pagtatasa.

Nagsama rin ako ng isang mas simpleng file na tinatawag na "ReadDataFiles.ipynb" na nagpapakita kung paano basahin sa isang solong file ang pangalan.

Inirerekumendang: