Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Detektor Bahasa TinyML Berbasis Edge Impulse &Arduino

Komponen dan persediaan

Arduino Nano 33 BLE Sense
× 1
Perangkat Kontrol Nasional PCA9685 8-Channel 8W 12V FET Driver Proportional Valve Pengontrol dengan Antarmuka I2C
× 1
Motor servo mikro SG90
× 3
Klip Baterai 9V
× 1

Alat dan mesin yang diperlukan

Printer 3D (generik)
Besi solder (generik)

Aplikasi dan layanan online

Edge Impulse Studio
Arduino IDE
Autodesk Fusion 360

Tentang proyek ini

Ikhtisar

Ide di balik proyek ini adalah untuk membuat klasifikasi bahasa, menggunakan jaringan saraf/pembelajaran dalam yang diimplementasikan dalam mikrokontroler. Perangkat akan mengidentifikasi satu kata untuk bahasa Italia, Inggris, dan Prancis. Kata-kata yang harus dikenali adalah "si " untuk orang Italia, "oui " untuk Prancis, dan "ya " untuk bahasa Inggris. Perangkat mendengarkan terus menerus dan setelah salah satu dari 3 kata dikenali, perangkat akan menampilkan bendera bahasa terkait.

Proyek ini didasarkan pada dua komponen utama mikrokontroler Arduino Nano 33 BLE Sense dan platform pengembangan Edge Impulse Studio.

Implementasi proyek mengikuti langkah-langkah berikut:

  • Mengambil sampel/membuat kumpulan data
  • Desain model
  • Melatih model
  • Menguji model
  • Sesuaikan untuk perangkat keras
  • Penerapan model dan penyesuaiannya
  • Bangun perangkat terakhir (perangkat keras di sekitar model).

Pengambilan Sampel/Membuat Kumpulan Data

Dataset terdiri dari rekaman 3 kata (oui, si, yes) secara global yang berlangsung sekitar 30 menit (10 menit untuk setiap kata).

Untuk setiap kata dibuat file suara terus menerus, dimana kata yang sama diulang terus menerus, kemudian menggunakan aplikasi Audacity file tersebut dipecah menjadi beberapa file masing-masing berdurasi satu detik. Setiap file berisi contoh kata.

File-file ini kemudian diunggah ke edge impuls dan diberi label sesuai dengan kata.

Selain file-file ini, satu set file rekaman berdurasi 1 detik telah diunggah dan diberi label sebagai kebisingan latar belakang.

Secara global, data Pelatihan terdiri dari 33 menit (10 menit untuk setiap kata dan 3 menit untuk kebisingan latar belakang)

Desain modelnya

Model tersebut diimplementasikan dengan memanfaatkan platform impuls tepi, di mana sebagian besar algoritme yang diperlukan yang sudah didefinisikan telah diimplementasi.

Langkah pertama untuk membuat model adalah mengubah suara menjadi deret waktu. Kemudian deret waktu dipartisi dengan ukuran jendela waktu yang telah ditentukan.

(Transformasi pertama ini ditunjukkan pada sisi merah dari gambar di bawah).

Langkah kedua adalah menggunakan teknik pemrosesan sinyal, dalam hal ini MFCC (Mel Frequency Cepstral Coefficients), untuk mengekstrak fitur dari deret waktu yang paling mencirikan masing-masing dari 4 kelas (3 kata + latar belakang).

Di bawah ini adalah contoh transformasi MFCC dan koefisiennya.

Konvolusi deret waktu dan koefisien digunakan untuk memberi makan jaringan saraf. Terakhir, output dari jaringan saraf memberikan kemungkinan kepemilikan untuk setiap kelas.

Di bawah ini ikhtisar implementasi jaringan saraf dan kinerja klasifikasinya.

Pelatihan - Sesuaikan untuk Arduino Nano 33 BLE Sense

Untuk pelatihan dan penyesuaian model akhir, opsi baru tersedia di Edge Impulse Studio yang disebut "EON Tuner ". Memungkinkan untuk memilih arsitektur yang optimal untuk aplikasi pembelajaran mesin yang disematkan.

Ini menjalankan banyak contoh model yang mungkin secara paralel, setiap contoh dengan konfigurasi berbeda (teknik digital sinyal berbeda dan arsitektur jaringan saraf berbeda).

Opsi ini hanya memerlukan beberapa informasi untuk dijalankan:

  • "Target " yang mewakili jenis model (dalam hal ini "Penemuan Kata Kunci ")
  • Perangkat keras tempat aplikasi berjalan (dalam hal ini "Arduino Nano 33 BLE Sense (Cortex-M4F 64MHz) ".

Untuk setiap instance, ini memberikan beberapa metrik kinerja klasifikasi, waktu yang diperlukan untuk komputasi, jumlah ram, dan ruang sistem file yang digunakan pada sistem file mikrokontroler.

Untuk proyek ini kami memilih 5 contoh terbaik untuk akurasi klasifikasi dan dari mereka dipilih yang tercepat.

Pengujian

Pengujian dilakukan dengan mengumpulkan satu set file perekam baru dan memeriksa kualitas klasifikasi.

Setelah itu memverifikasi bahwa klasifikasi itu akurat. Kami pindah ke langkah implementasi berikutnya, penerapan terakhir.

Penerapan

Penerapannya berkat studio edge-impulse cukup mudah.

Itu dipilih opsi perpustakaan Arduino dari opsi penyebaran. Itu memberikan file model arduino C standar, yang dapat disesuaikan untuk kebutuhan kita.

Setelah bangunan ditutup oleh edge-impulse, file zip dibuat dan diunduh di mesin lokal, dan file tersebut hanya perlu diimpor ke Arduino Ide untuk penyesuaian akhir.

Kode

Kode tersedia di tautan. Kode ini didasarkan pada kode yang diunduh dari edge-impulse dengan beberapa penyesuaian, tercantum di bawah ini.

1. Itu menambahkan perpustakaan Adafruit_PWMServoDriver.h untuk menggerakkan servo yang terpasang pada flag.

2. Itu didefinisikan sebagai fungsi servos_selector untuk mengoordinasikan servos sesuai dengan hasil klasifikasi.

void servos_selector(int iter){
time_now =millis();
delta=time_now - time_was;
if (delta> 2000){
time_was=time_now;
switch (iter) {
case 0:
pwm.setPWM(0, 0, 350);
delay(500);
pwm.setPWM( 0, 0, 200);
pwm.setPWM(1, 0, 200);
pwm.setPWM(2, 0, 200);
break;
kasus 1:
pwm.setPWM(1, 0, 350);
Serial.println("2222");
delay(500);
pwm.setPWM(0, 0, 200 );
pwm.setPWM(1, 0, 200);
pwm.setPWM(2, 0, 200);
break;
kasus 2:
pwm .setPWM(2, 0, 350);
Serial.println("333");
delay(500);
pwm.setPWM(0, 0, 200);
pwm.setPWM(1, 0, 200);
pwm.setPWM(2, 0, 200);
break;
}
}
}

3. Terakhir, ditambahkan kondisi IF yang memanggil servos_select fungsi berdasarkan "result.classification " objek.

for (size_t ix =0; ix ei_printf(" %s:%.5f\n", result.classification[ix].label,
result.classification[ix].value);
}

#if EI_CLASSIFIER_HAS_ANOMALY ==1
ei_printf(" skor anomali:%.3f\n", result.anomaly);
#endif
print_results =0;
}
if (result.classification[1].value> 0.80){
servos_selector(0);
}
else if (result.classification[2].value> 0.80){
servos_selector(1);
}
else if (result.classification[3].value> 0.80){
servos_selector(2);
}
}

Sirkuit Listrik

Rangkaian listrik ini didasarkan pada mikrokontroler Arduino Nano 33 BLE Sense mikrokontroler dan menggunakan PCA9685 untuk menggerakkan 3 servos.

Beban kerja PCA9685 didukung oleh baterai eksternal 9v.

Itu saja.

Kode

kode
https://github.com/EnzoCalogero/Tensorflow_Lite_embeded/tree/main/nano_sense_EdgeImpulse/language_detection/nano_ble33_sense_microphone_continuous

Suku cadang dan penutup khusus

Skema

languagedetection_9RxXhRX5sj.fzz

Proses manufaktur

  1. Game Arduino Gyroscope dengan MPU-6050
  2. Arduino Digital Dice
  3. Iron Man
  4. Temukan Saya
  5. Kontrol Humidifier Arduino
  6. Sonar menggunakan arduino dan ditampilkan pada pemrosesan IDE
  7. MobBob:Robot Arduino DIY Dikendalikan oleh Smartphone Android
  8. Lampu Meja Reaktif Audio Arduino
  9. NeoMatrix Arduino Pong
  10. Arduino Joystick