Kontrol Lampu RGB dengan Deteksi Kata Kunci TinyML
Komponen dan Perlengkapan
Arduino Nano 33 BLE Sense – 1 unit
Aplikasi dan Layanan Online
Edge Impulse Studio
Tentang Proyek Ini
Premis
Pembelajaran mesin di tepi sangat berguna untuk membuat perangkat yang dapat menyelesaikan tugas "cerdas" dengan jauh lebih sedikit pemrograman dan diagram alur logika dibandingkan kode tradisional. Itulah sebabnya saya ingin mengintegrasikan deteksi kata kunci di tepi yang dapat mengenali kata-kata tertentu dan kemudian melakukan tugas berdasarkan apa yang dikatakan.
Hardware
Proyek ini hanya memiliki satu komponen: Arduino Nano 33 BLE Sense. Keajaiban sebenarnya terjadi dalam model pembelajaran mesin. Arduino Nano 33 BLE Sense penuh dengan sensor, termasuk mikrofon, IMU 9-sumbu, sensor lingkungan, dan sensor gerak/dekat/warna/cahaya lingkungan (APDS-9960). Mikrokontroler padanya adalah nRF52840 yang berjalan pada 64MHz dan memiliki memori flash 1MB dan RAM 256KB. Proyek ini juga menggunakan LED RGB papannya untuk menampilkan warna saat ini.
Menyiapkan Edge Impulse
Saya memulai dengan membuat proyek baru di Edge Impulse dan kemudian menginstal alat CLI Edge Impulse. Untuk instruksi lebih lanjut cara melakukannya, kunjungi halaman instruksi pemasangan. Ini memungkinkan Arduino Nano berkomunikasi dengan layanan cloud untuk menerima perintah dan mengirim data sensor secara otomatis. Saya mengunduh firmware Edge Impulse terbaru dan memflashnya ke papan dengan double-klik tombol reset untuk membuatnya memasuki mode bootloader. Lalu saya menjalankan flash_windows.bat untuk mentransfernya.
Di command prompt saya menjalankan edge-impulse-daemon dan mengikuti wizard untuk menyiapkannya. Sekarang Nano muncul dalam daftar perangkat proyek, yang memungkinkan sampel diambil dan diunggah sebagai bagian dari dataset pelatihan/pengujian.
Mengumpulkan Sampel
Pelatihan model pembelajaran mesin membutuhkan data, dan cukup banyak. Saya ingin memiliki mode berikut untuk strip LED RGB:
Nyalakan
Matikan
Merah
Hijau
Biru
Saya mendapat sekitar 1 menit suara untuk setiap mode di mana saya berulang kali mengucapkan kata pada interval 1-2 detik dan memisahkannya.
Namun hanya memiliki sampel ini tidak cukup, karena kebisingan latar belakang dan kata-kata lain akan menghasilkan pembacaan palsu. Untungnya, Edge Impulse sudah menyediakan dataset bawaan untuk kebisingan dan kata 'tidak diketahui', jadi saya menggunakan alat "Upload Existing Data" mereka untuk mengunggah file audio ini ke data pelatihan.
Terakhir, saya menyeimbangkan kembali dataset untuk memiliki pembagian 80-20 yang direkomendasikan untuk data pelatihan dan pengujian, masing-masing.
Melatih Model
Sekarang dengan satu jam data pelatihan dan banyak label, saatnya melatih model. Impulse yang saya desain mengambil suara sebagai data time-series dengan ukuran jendela 1 detik dan peningkatan jendela 500ms. Kemudian melalui blok MFCC ke dalam blok jaringan saraf Keras.
Blok MFCC memungkinkan Anda mengonfigurasi bagaimana audio akan diproses, beserta spektrogram yang menunjukkan frekuensi secara visual.
Saya membiarkan pengaturan jaringan saraf sebagian besar default, tetapi melakukan beberapa modifikasi. Pertama, saya mengubah ambang kepercayaan minimum dari 0.80 menjadi 0.70, dan menambahkan augmentasi data dalam bentuk kebisingan tambahan dan masking pita waktu. Ini membantu NN untuk menghindari overfitting model, karena memiliki data yang lebih bervariasi untuk bekerja.
Meluncurkan pada Arduino Nano 33 BLE Sense
Arduino Nano 33 BLE Sense bertindak sebagai mikrofon selalu aktif yang terus-menerus mengambil sampel audio dan mendeteksi apakah salah satu kata kunci telah diucapkan. Setelah satu ditemukan, kata kunci dikonversi menjadi indeks yang digunakan untuk mengdekode warna yang diinginkan. Untuk kata kunci nyala atau mati, LED diatur menjadi hitam atau abu-abu terang.
Saya mengunduh model sebagai library dan menambahkannya ke Arduino IDE, lalu mengompilasi dan memflash kode ke Nano.