Isi kandungan:

Log Data Realtime MPU-6050 / A0 Dengan Arduino dan Android: 7 Langkah (dengan Gambar)
Log Data Realtime MPU-6050 / A0 Dengan Arduino dan Android: 7 Langkah (dengan Gambar)

Video: Log Data Realtime MPU-6050 / A0 Dengan Arduino dan Android: 7 Langkah (dengan Gambar)

Video: Log Data Realtime MPU-6050 / A0 Dengan Arduino dan Android: 7 Langkah (dengan Gambar)
Video: DIY Radar With Ultrasonic Sensor And Chat-GPT Generated Arduino Code | Coders Cafe 2024, Julai
Anonim
Log Data Realtime MPU-6050 / A0 Dengan Arduino dan Android
Log Data Realtime MPU-6050 / A0 Dengan Arduino dan Android

Saya berminat untuk menggunakan Arduino untuk pembelajaran mesin. Sebagai langkah pertama, saya ingin membina paparan data dan logger masa nyata (atau cukup dekat dengannya) dengan peranti Android. Saya ingin menangkap data pecutan dari MPU-6050 jadi saya merancang binaannya untuk menggunakan HC-05 pada 115200 baud. Dengan konfigurasi ini, 4 saluran data dapat dihantar pada 250 sampel sesaat.

Binaannya mempunyai beberapa langkah:

  • Bina perisai atau papan roti
  • Atur cara Arduino
  • Muatkan aplikasi Android dari Google Play atau cabang GitHub dan susun sendiri
  • Sambungkan MPU-6050 ke sesuatu yang menarik yang bergetar (saya menggunakan kereta R / C)
  • Gunakan peranti Android untuk menyambung ke Arduino
  • Petak data, simpan jika berminat
  • Import ke Python (atau platform lain) untuk penggunaan selanjutnya

Mari kita mulakan!

Langkah 1: Bina perisai / papan roti

Bina perisai / papan roti
Bina perisai / papan roti
Bina perisai / papan roti
Bina perisai / papan roti

Ini adalah rajah pendawaian untuk Arduino, HC-05, dan MPU-6050. Sebagai tambahan kepada MPU-6050, saya mempunyai input analog A0 yang disambungkan ke sensor cahaya untuk menunjukkan bahawa ADC berfungsi. Sebarang isyarat 0-5 volt boleh dibawa ke A0 ADC. Ini adalah komponen yang saya gunakan untuk membina:

  • Arduino Uno
  • HC-05 (HC-06 harus berfungsi juga, tetapi bangunan saya adalah dengan HC-05)
  • MPU-6050
  • Fotoresistor Sparkfun
  • Perintang 10kOhm (coklat-hitam-oren)

Sebilangan besar modul Bluetooth HC-05 lalai ke 9600 baud. Agar data berjaya dihantar, anda perlu memprogramkannya semula dengan kadar baud 115200. Terdapat Arahan Perintah HC-05 / HC-06 AT yang baik yang menerangkan cara melakukannya.

Langkah 2: Program Arduino

Atur cara Arduino
Atur cara Arduino
Atur cara Arduino
Atur cara Arduino

Saya menggunakan Arduino IDE keluaran 1.6.7 untuk memprogram Arduino. Kod boleh dimuat turun dari pautan dalam langkah ini atau dari repo GitHub. Saya telah memasukkan tiga versi: Firmware125.ino adalah versi 125 hertz, Firmware250.ino adalah versi 250 hertz, dan Firmware500.ino adalah versi 500 hertz. Untuk menjadikan Arduino berpusing pada 500 hertz, A0 ADC tidak dikumpulkan.

Firmware termasuk jam keluar pada Pin 9 yang saya gunakan untuk memeriksa waktunya. Jejak menunjukkan masa kitaran adalah 4 ms (bersamaan dengan 1/250 hertz). Saya dapati bahawa jika terdapat masalah pautan bersiri, waktunya tidak akan seragam.

Kod Arduino menggunakan bit masking untuk menambahkan nombor saluran ke setiap paket kerana kadangkala sampel jatuh melalui Bluetooth. Saya menggunakan tiga bit paling ketara untuk menyimpan nombor saluran. Untuk bilangan bulat yang ditandatangani, bit yang paling ketara (MSB) dikhaskan untuk tanda. Oleh kerana saya ingin menggunakan MSB untuk alamat saya, dan bukannya tanda bilangan bulat, saya harus menukar semua nilai pecutan yang ditandatangani menjadi bilangan bulat yang tidak ditandatangani. Saya melakukan ini dengan menambahkan 32768 ke setiap nilai (kiraan ADC pecutan MPU adalah +32768 hingga -32768) dan dilemparkan sebagai bilangan bulat yang tidak ditandatangani:

(int tidak bertanda tangan) ((panjang) iAccelData + 32767);

Nombor saluran adalah sama untuk setiap akselerometer dan port A0 sehingga paket yang dijatuhkan dapat dikesan jika nombor saluran tidak teratur. Untuk paket yang berasal dari Bluetooth di Arduino, corak binari adalah (tanda-tanda berubah sedikit):

(bit alamat xacc 3 = 0x00, 13bit tidak ditandatangani) (bit alamat yacc 3 = 0x01, 13bit tidak ditandatangani) (bit alamat zacc 3 = 0x02, 13bit tidak ditandatangani) (3 bit alamat = 0x03, iadc13bit tidak ditandatangani)

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

Sekiranya menggunakan sesuatu selain aplikasi Android Accel Plot untuk membaca data Bluetooth, berikut adalah langkah-langkah untuk mengekstrak alamat (saya menggunakan nama pemboleh ubah dari fail Accel Plot Bluetooth.java dari repo GitHub):

- Baca di 16 int yang tidak ditandatangani

- Ekstrak byte tinggi dan simpan ke btHigh.

- Ekstrak bait rendah dan simpan ke btLow.

- Dapatkan semula alamat dari btHigh menggunakan: (btHigh >> 5) & 0x07. Pernyataan ini mengalihkan btHigh 5 bit ke kanan memindahkan tiga bit alamat ke tiga register terendah. Tanda & adalah logik DAN yang memaksa bit 4 dan lebih tinggi menjadi sifar dan tiga bit terakhir untuk dipadankan dengan bit alamat. Hasil penyataan ini adalah alamat anda.

Anda tidak perlu risau tentang pengekstrakan alamat jika anda menggunakan Accel Plot.

Langkah 3: Muatkan Aplikasi Android Dari Google Play atau Cawangan GitHub

Muatkan Aplikasi Android Dari Google Play atau Cabang GitHub
Muatkan Aplikasi Android Dari Google Play atau Cabang GitHub

Anda mempunyai beberapa pilihan untuk memuatkan aplikasi Android pada peranti anda. Sekiranya anda ingin mengelakkan pengekodan, anda dapat mencari "Accel Plot" dan aplikasinya akan muncul di gedung Google Play. Ikut arahan kedai untuk pemasangan.

Keinginan saya dengan Instructable ini adalah benar-benar mendorong orang lain untuk membina projek jadi saya juga telah menerbitkan kodnya di repo GitHub. Anda seharusnya dapat mencabut ini, membinanya, dan mengubahnya mengikut kesesuaian anda. Saya menerbitkan kod di bawah Lesen MIT jadi bersenang-senang!

Langkah 4: Sambungkan ke Arduino ke Sesuatu yang Menarik (Saya Menggunakan Kereta R / C)

Sambung ke Arduino ke Sesuatu yang Menarik (Saya Menggunakan Kereta R / C)
Sambung ke Arduino ke Sesuatu yang Menarik (Saya Menggunakan Kereta R / C)

Saya mahu akhirnya menggunakan peranti ini untuk mengesan permukaan jalan jadi saya fikir sebuah kereta kawalan jauh (R / C) kecil akan sesuai. Saya rasa ia akan membantu dalam langkah seterusnya jika accels dapat pada sesuatu yang bergerak atau bergetar.

Langkah 5: Gunakan Peranti Android untuk Menyambung ke Arduino

Gunakan Peranti Android untuk Menyambung ke Arduino
Gunakan Peranti Android untuk Menyambung ke Arduino
Gunakan Peranti Android untuk Menyambung ke Arduino
Gunakan Peranti Android untuk Menyambung ke Arduino
Gunakan Peranti Android untuk Menyambung ke Arduino
Gunakan Peranti Android untuk Menyambung ke Arduino

Sekiranya anda belum melakukannya, anda perlu memasangkan HC-05 terlebih dahulu ke peranti Android anda. Saya percaya bahawa pada kebanyakan peranti anda boleh melakukan ini dengan pergi ke tetapan. Pin lalai untuk kebanyakan peranti HC-05 ialah 1234 atau 1111.

Buka aplikasi AccelPlot pada peranti Android. Apabila aplikasi dibuka, dan sebelum anda menyambung ke HC-05, anda dapat mengubah kadar pensampelan (ini ditetapkan dalam kod Arduino), skala akselerometer (juga ditetapkan dalam kod Arduino), dan jumlah sampel yang akan disimpan.

Setelah tetapan ini dibuat klik pada butang "Sambung". Ia mesti memunculkan peranti Bluetooth dan peranti anda harus disenaraikan. Pilihnya dan setelah kod membuat sambungan, anda akan melihat roti bakar "Bersambung" muncul.

Gunakan butang anak panah belakang untuk kembali ke Accel Plot. Ketuk butang "Mula Aliran" untuk memaparkan data dari peranti HC-05. Anda juga harus menyediakan butang untuk menyimpan data atau memainkan kandungan modulasi frekuensi melalui bicu audio.

Langkah 6: Dapatkan dan Petak Data

Image
Image
Import Ke Python (atau Platform Lain) untuk Kegunaan Lebih Lanjut
Import Ke Python (atau Platform Lain) untuk Kegunaan Lebih Lanjut

Butang "Mula Aliran" harus diaktifkan. Ketuk untuk memulakan streaming data ke skrin.

Butang "Simpan Data" juga akan diaktifkan, ketuk untuk menyimpan data.

Accel Plot juga menyertakan pilihan untuk mengeluarkan isyarat termodulasi pada saluran audio. 2 saluran di aplikasi Accel Plot merujuk ke saluran kiri dan kanan jack keluar audio pada peranti Android. Ini berguna jika anda ingin memasukkan data MPU-6050 ke dalam sistem log data yang berasingan, seperti Instrumen Nasional.

Video menunjukkan contoh sistem mengumpulkan data pada kereta R / C.

Langkah 7: Import Ke Python (atau Platform Lain) untuk Penggunaan Lebih Lanjut

Import Ke Python (atau Platform Lain) untuk Kegunaan Lebih Lanjut
Import Ke Python (atau Platform Lain) untuk Kegunaan Lebih Lanjut

Fail disimpan ke peranti Android. Fail akan disimpan di bawah direktori "AccelPlot" untuk Android API 18 ke atas. Kod meletakkan fail.dat dalam folder "\ Tablet / Documents / AccelPlot" untuk API 19 (KitKat 4.4) dan lebih tinggi. Saya menghadapi masalah dengan beberapa peranti Android yang menunjukkan fail ketika disambungkan melalui USB. Dalam beberapa kes, saya terpaksa menghidupkan semula peranti Android untuk memunculkannya. Tidak pasti mengapa ini berlaku, tetapi harus ada empat fail, satu untuk setiap saluran. Mereka boleh disalin ke direktori tempatan untuk pekerjaan tambahan.

Saya menggunakan Anaconda / Python 2.7 untuk membuka fail dan memaparkan data. Fail "ExploratoryAnalysis.ipynb" mempunyai fail Notebook IPython yang akan membuka semua fail data dan memplot data sampel. Fail contoh disertakan di repo GitHub. Data disimpan sebagai pelampung 4 byte endian besar ('> f') sehingga setiap program analisis harus dapat membukanya.

Saya juga menyertakan fail yang lebih ringkas yang disebut "ReadDataFiles.ipynb" yang menunjukkan cara membaca dalam satu fail dengan nama.

Disyorkan: