Pengenalan Gerak dengan ESP32 dan Akselerometer Arduino 101 – Tutorial DIY Mudah
Komponen dan Perlengkapan
Arduino 101 – 1 unit (Termasuk akselerometer bawaan, jadi tidak diperlukan komponen atau rangkaian tambahan.)
Arduino UNO – 1 unit (Anda dapat menggunakan Arduino Uno (atau Arduino lain) sebagai gantinya, tetapi Anda juga membutuhkan akselerometer.)
Adafruit Analog Accelerometer: ADXL335 – 1 unit (Gunakan ini (atau setara SparkFun) jika Anda menggunakan Arduino selain Arduino 101 (yang memiliki akselerometer bawaan).)
SparkFun Triple Axis Accelerometer Breakout - ADXL335 – 1 unit (Gunakan ini (atau setara Adafruit) jika Anda menggunakan Arduino selain Arduino 101 (yang memiliki akselerometer bawaan).)
Tentang Proyek Ini
Gambaran Umum
Tutorial ini menunjukkan cara Anda dapat mengintegrasikan pengenalan gerak dasar ke dalam proyek Arduino Anda menggunakan sistem ESP. Misalnya, Anda mungkin mengenali gerakan tenis berbeda seperti forehand, backhand, dan serve; elemen rutinitas tari; gerakan pembeban beban; dll. Gerakan dirasakan menggunakan akselerometer dan dikirim ke aplikasi ESP yang berjalan di komputer Anda. ESP menggunakan algoritma pembelajaran mesin sederhana untuk mencocokkan data akselerometer langsung dengan contoh yang direkam dari berbagai gerakan, mengirim pesan kembali ke Arduino ketika mengenali gerakan yang mirip dengan salah satu contoh. Sistem hanya mengenali kejadian individual dari gerakan diskrit; tidak memberikan informasi tentang bagaimana gerakan dilakukan. Namun, dapat digunakan untuk berbagai aplikasi interaktif.
Unduh aplikasi pengenalan gerak ESP:
Mac: ESP-Gestures-Mac-20161028.zip
Windows: ESP-Gestures-Win-20161028.zip. Anda mungkin juga memerlukan Visual C++ Redistributable (Update 3) dari Microsoft.
Ubuntu: ESP-Gestures-Ubuntu-20161028.tar.gz
Contoh Gerakan: ForehandBackhandServe.grt
Langkah 1. Hubungkan akselerometer Anda.
Jika Anda menggunakan Arduino 101, yang memiliki akselerometer bawaan, Anda dapat melewati langkah ini. Sebaliknya, Anda perlu menghubungkan akselerometer Anda. Untuk melakukannya, pertama-tama solder pin header pria pada papan breakout, jika Anda belum melakukannya. Kemudian Anda akan memasang kabel akselerometer ke Arduino.
Sebagai pintasan, Anda dapat memasukkan papan breakout akselerometer secara langsung ke pin input analog Arduino Uno (atau Arduino lain dengan bentuk yang sama). Kemudian dalam kode Arduino, Anda dapat mengonfigurasi pin yang sesuai untuk menyediakan daya dan ground ke akselerometer.
Secara alternatif, Anda dapat memasukkan akselerometer Anda ke dalam breadboard dan memasangnya ke Arduino, menghubungkan pin daya dan ground ke pin 5V dan GND Arduino, dan pin sumbu X-, Y-, dan Z- ke tiga input analog papan Arduino.
Langkah 2. Unggah kode Arduino.
Anda dapat menggunakan salah satu program Arduino di bawah ini untuk membaca data dari akselerometer dan mengirimkannya melalui serial (USB) ke komputer. Pertama, periksa apakah pin yang ditentukan dalam program Arduino cocok dengan cara Anda memasang akselerometer (misalnya, bahwa xpin sesuai dengan pin input analog yang terhubung ke pin sumbu X akselerometer Anda). (Ini tidak berlaku jika Anda menggunakan Arduino 101, di mana akselerometer terhubung secara internal.) Kemudian pilih papan dan port serial yang sesuai dari menu alat Arduino dan unggah sketsa Arduino.
Langkah 3. Periksa data di serial monitor.
Buka serial monitor Arduino, atur ke 9600 baud, dan periksa apakah Anda mendapatkan data akselerometer dari Arduino Anda. Anda harus melihat tiga kolom angka yang berubah saat Anda memindahkan akselerometer. Gunakan plot serial Arduino untuk melihat grafik dari angka-angka ini.
Pastikan untuk menutup serial monitor dan plot serial sebelum melanjutkan, karena jika tidak, mereka akan memblokir aplikasi ESP dari berkomunikasi dengan Arduino Anda.
Langkah 4. Jalankan aplikasi pengenalan gerak ESP dan pilih port serial Anda.
Unduh aplikasi pengenalan gerak ESP:
Mac: ESP-Gestures-Mac-20160812.zip
Windows: ESP-Gestures-Win-20160812.zip
Pilih port serial yang sesuai dengan papan Arduino Anda dari menu konfigurasi. (Klik heading "Select a serial port" untuk membuka daftar port.)
Anda harus melihat data langsung streaming di plot "Raw Data". Tiga garis pada plot sesuai dengan tiga sumbu akselerometer Anda: garis merah sesuai dengan sumbu X, hijau ke sumbu Y, dan biru ke sumbu Z.
Langkah 5. Rekam sampel kalibrasi.
Untuk memungkinkan aplikasi ESP memahami rentang nilai yang diharapkan dari akselerometer dan Arduino Anda, Anda perlu merekam sampel kalibrasi. Letakkan akselerometer Anda pada permukaan datar, dengan sumbu Z menghadap ke atas. Tekan dan tahan tombol "1" selama sekitar satu detik untuk merekam sampel kalibrasi "Upright". Anda harus melihat plot sampel muncul. Kemudian, balikkan akselerometer Anda terbalik dan, sambil menjaganya datar dan diam, tahan tombol "2" untuk merekam sampel kalibrasi terbalik. Sistem ESP menggunakan data ini untuk menentukan nilai numerik mana yang sesuai dengan 0 g percepatan (pada sumbu X dan Y) dan mana yang sesuai dengan 1 g percepatan (pada sumbu Z).
Langkah 6. Rekam contoh gerakan.
Lanjutkan ke tab "Training" dari aplikasi ESP dengan mengkliknya atau mengetik huruf besar "T". Tab ini memungkinkan Anda untuk merekam atau memuat contoh gerakan yang ingin Anda kenalkan oleh sistem ESP. Anda dapat merekam contoh hingga sembilan gerakan berbeda.
Untuk merekam contoh gerakan, lakukan gerakan sambil menekan tombol yang sesuai dengan label yang ingin Anda hubungkan dengan gerakan. Misalnya, untuk merekam gerakan dengan label 1, tahan tombol "1" pada keyboard Anda sambil melakukan gerakan. (Secara alternatif, Anda dapat memuat contoh gerakan tenis di ForehandBackhandServe.grt.)
Pastikan untuk merekam contoh gerakan dengan akselerometer dalam konfigurasi yang sama seperti yang akan digunakan nanti, saat Anda ingin sistem mengenali gerakan. Misalnya, Anda mungkin memegang akselerometer di tangan Anda dengan orientasi tertentu, atau melampirkannya ke objek yang akan Anda pegang dengan orientasi tertentu.
Sampel yang baik berisi data yang sesuai dengan seluruh gerakan, tetapi tanpa banyak data dasar tambahan di awal atau akhir. Artinya, sampel harus dimulai dan berakhir dengan periode garis datar yang relatif pendek, tidak terlalu panjang atau hilang sama sekali. Selain itu, jika gerakan Anda berakhir di tempat yang berbeda dari tempat awalnya, pastikan tidak untuk merekam waktu saat Anda membawa akselerometer kembali ke posisi awal. Misalnya, jika Anda merekam gerakan geser ke kanan, Anda akan ingin merekam hanya bagian gerakan ketika tangan Anda bergerak dari kiri ke kanan, bukan waktu saat tangan Anda kembali ke posisi awalnya.
Setiap contoh tambahan yang Anda catat adalah sampel lain yang dapat dicocokkan oleh algoritma pembelajaran mesin saat mengenali gerakan. Artinya, jika Anda ingin sistem mengenali berbagai variasi gerakan (misalnya, berbagai cara dilakukan oleh orang yang berbeda), mungkin akan membantu untuk merekam sampel dari setiap variasi. Di sisi lain, jika Anda memiliki sampel buruk, mereka mungkin membingungkan sistem; lebih banyak sampel tidak selalu lebih baik. Secara umum, kami telah berhasil merekam sekitar 5 hingga 10 sampel untuk setiap gerakan, meskipun sekali lagi, kualitas sampel individual lebih penting daripada kuantitasnya.
Jika Anda tidak suka dengan sampel (misalnya karena Anda menekan tombol pada waktu yang salah dan melewatkan data yang sesuai dengan bagian gerakan), Anda dapat menghapusnya dengan mengklik kotak di samping kata "delete" di bawah sampel. Anda dapat memotong sampel dengan mengklik dan menyeret pada plot sampel untuk memilih bagian sampel yang ingin Anda simpan, kemudian mengklik kotak yang berlabel "trim". Anda dapat menavigasi di antara berbagai sampel dalam sebuah kelas dengan mengklik ikon panah di bawah plot untuk sampel. Jika Anda merekam sampel di kelas yang salah, Anda dapat memindahkannya dengan mengklik tombol "re-label" dan kemudian menekan tombol yang sesuai dengan label yang ingin Anda berikan pada sampel. Untuk memberi nama pada gerakan, klik tombol "rename", ketik nama dan tekan enter.
Langkah 7. Latih sistem untuk mengenali gerakan.
Setelah Anda merekam beberapa contoh gerakan, Anda dapat melatih sistem ESP untuk mengenali gerakan tersebut dari contoh Anda. Tekan tombol "t" pada keyboard Anda untuk melatih sistem. Anda harus melihat pesan "training successful" muncul di bagian bawah jendela. Sekarang, saat Anda melakukan gerakan yang mirip dengan salah satu contoh yang direkam, Anda harus melihat namanya muncul pada plot data sensor langsung.
Sistem mungkin tidak akan bekerja dengan baik saat pertama kali Anda melatihnya. Berguna untuk melatih dan menguji sistem sering saat Anda merekam contoh gerakan Anda, sehingga Anda dapat merasakan bagaimana perilakunya.
Secara khusus, jika sistem tidak mengenali gerakan yang menurut Anda seharusnya, Anda mungkin ingin merekam contoh tambahan dari gerakan tersebut. Jika sistem mengenali gerakan saat tidak seharusnya, Anda mungkin ingin menghapus atau memotong contoh yang terlihat berbeda dari yang lain, atau yang berisi periode garis datar yang relatif panjang. Pastikan untuk menekan "t" setelah Anda memodifikasi contoh Anda untuk melatih ulang sistem.
Langkah 8. Sesuaikan konfigurasi sistem sesuai kebutuhan.
Saat memodifikasi contoh pelatihan Anda mungkin merupakan cara terpenting untuk membantu sistem bekerja dengan benar, ESP juga memungkinkan Anda untuk mengonfigurasi beberapa parameter sistem dasar. Untuk melakukannya, klik label "click to open configuration". Anda harus melihat dua parameter: variabilitas dan timeout. Perhatikan bahwa setelah mengubah parameter ini, Anda perlu melatih ulang sistem dengan menekan "t".
Parameter variabilitas mengontrol seberapa berbeda sebuah gerakan dapat berada dari salah satu contoh yang direkam dan masih dikenali. Semakin tinggi angkanya, semakin berbeda itu bisa. Jika sistem sepertinya mengharuskan gerakan Anda untuk terlalu mirip dengan contoh yang direkam, Anda dapat mencoba meningkatkan angka ini. (Anda juga dapat mencoba merekam contoh tambahan.) Jika sistem mengenali gerakan palsu, Anda dapat mencoba menurunkan angka ini, meskipun Anda juga dapat mencoba menghapus contoh pelatihan yang buruk.
Parameter timeout mengontrol berapa lama sistem menunggu setelah mengenali gerakan sebelum mengenali yang baru. Diukur dalam milidetik (seribu bagian detik). Jika sistem sepertinya melewatkan gerakan yang dilakukan beruntun dengan gerakan lain, coba turunkan angka ini. Hati-hati, karena jika Anda membuat angka ini terlalu rendah, sistem mungkin mengenali satu gerakan beberapa kali. Jika sistem sepertinya mengenali beberapa gerakan saat Anda hanya melakukan satu gerakan (misalnya, jika ia melihat forehand diikuti backhand saat Anda hanya melakukan forehand), Anda mungkin ingin meningkatkan parameter ini.
Langkah 9. Integrasikan pengenalan gerak ke dalam proyek Arduino Anda.
Saat sistem ESP membuat prediksi, itu mengirim pesan ke Arduino Anda dengan nomor gerakan yang dikenali (sebagai teks ASCII diikuti oleh baris baru, misalnya "1\n"). Dengan membaca prediksi ini pada port serial, Anda dapat membuat Arduino merespons gerakan dengan berbagai cara.
Prediksi juga dikirim melalui TCP ke server yang berjalan di localhost port 5204 (dalam format yang sama dengan ke Arduino). Misalnya, ini bisa menjadi game yang ditulis dalam Processing atau perangkat lunak lainnya. Pastikan server TCP berjalan sebelum memulai aplikasi ESP.
Cara Kerja
Aplikasi ESP khusus ini menggunakan algoritma yang disebut Dynamic Time Warping (atau DTW). Algoritma ini merubah sinyal sensor langsung dengan menghapus atau menggandakan pembacaan individual, menghasilkan array variasi dan memeriksa seberapa mirip mereka dengan sampel yang direkam. Algoritma mencari sampel pelatihan yang paling dekat dengan data sensor langsung. Jika selisih antara keduanya kurang dari ambang batas tertentu, ia menganggap itu cocok dan mengeluarkan prediksi yang sesuai dengan kelas pelatihan yang berisi sampel tersebut. Anda dapat menyesuaikan jarak yang diperlukan menggunakan parameter "variability" di menu dropdown konfigurasi.
Pengenalan gerak hanyalah satu domain yang dapat diterapkan sistem ESP. ESP dibangun di atas Gesture Recognition Toolkit (GRT), yang, meskipun namanya, sebenarnya berisi berbagai algoritma pembelajaran mesin yang dapat diterapkan pada berbagai aplikasi sensori waktu nyata. ESP mengambil kode untuk aplikasi tertentu dan menerjemahkannya menjadi antarmuka pengguna khusus untuk bekerja dengan pipeline pembelajaran mesin tersebut. Program khusus aplikasi ini mencakup pipeline pembelajaran mesin GRT, spesifikasi input sensor, definisi proses kalibrasi, dan spesifikasi parameter yang dapat disesuaikan. Kami telah membuat contoh ESP untuk sensori warna, deteksi pose menggunakan akselerometer, dan pengenalan audio sederhana. Lihat GitHub ESP untuk informasi lebih lanjut.
Kode
Arduino ADXL335 Code
Kode ini membaca dari ADXL335 yang terhubung ke Arduino: pin sumbu X akselerometer harus terhubung ke pin A5 Arduino, sumbu Y ke A4, dan sumbu Z ke A3. Pembacaan dikirim melalui port serial (USB) pada 9600 baud, sebagai data ASCII yang dipisahkan tab dan diakhiri baris baru.
Arduino 101 Accelerometer Code
Membaca data akselerometer dari akselerometer bawaan pada Arduino 101. Pembacaan dikirim melalui port serial (USB) pada 9600 sebagai data ASCII yang diakhiri baris baru dan dipisahkan tab.