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

Pengenalan Ucapan dengan Arduino dan Server BitVoicer

Komponen dan persediaan

Arduino Micro
× 1
Sparkfun Electret Microphone Breakout
× 1
Server BitVoicer
× 1
Server BitVoicer 1.0
× 1
LED (generik)
× 3
Resistor 330 ohm
× 3

Tentang proyek ini

Dalam posting ini saya akan menunjukkan cara menggunakan papan Arduino dan Server BitVoicer untuk mengontrol beberapa LED dengan perintah suara. Saya akan menggunakan Mikro Arduino dalam posting ini, tetapi Anda dapat menggunakan papan Arduino apa pun yang Anda miliki.

Prosedur berikut akan dijalankan untuk mengubah perintah suara menjadi aktivitas LED:


  • Gelombang audio akan ditangkap dan diperkuat oleh papan Breakout Sparkfun Electret;
  • Sinyal yang diperkuat akan didigitalkan dan di-buffer di Arduino menggunakan analog-to-digital converter (ADC);
  • Sampel audio akan dialirkan ke BitVoicer Server menggunakan serialport Arduino;
  • BitVoicerServer akan memproses aliran audio dan mengenali ucapan yang dikandungnya;
  • Ucapan yang dikenali akan dipetakan ke perintah yang telah ditentukan sebelumnya yang akan dikirim kembali ke Arduino;
  • Arduino akan mengidentifikasi perintah dan melakukan tindakan yang sesuai.

Video di atas menunjukkan hasil akhir dari posting ini. Perhatikan dalam video bahwa BitVoicer Server juga menyediakan umpan balik ucapan yang disintesis. Umpan balik ucapan ini didefinisikan di server dan direproduksi oleh adaptor audio server, tetapi audio yang disintesis juga dapat dikirim ke Arduino dan direproduksi menggunakan konverter digital-ke-analog (DAC). Dalam posting saya berikutnya, saya akan menunjukkan cara menggunakan Arduino DUE, satu amplifier dan satu speaker untuk mereproduksi pidato yang disintesis menggunakan Arduino itu sendiri.

Daftar Materi:


  • Arduino Micro (atau papan Arduino lainnya):~U$ 20.00
  • Sparkfun Electret Microphone Breakout:U$7,95
  • Server BitVoicer 1.0 :Rp 9,90
  • Papan tempat memotong roti:~U$ 10.00
  • 3 xLED:~U$ 1,00
  • Resistor 3 x330 Ohm:~U$ 0,75
  • Kabel jumper:~U$ 0,30


LANGKAH 1:Pengkabelan


Langkah pertama adalah menghubungkan Arduino dan papan tempat memotong roti dengan komponen seperti yang ditunjukkan pada gambar di bawah ini.

Detail terpenting di sini mengacu pada referensi analog yang diberikan ke ADC Arduino. Dalam pengujian saya, saya mendapatkan hasil yang lebih baik menggunakan 3.3V dengan Sparkfun Electret Breakout. Itulah sebabnya saya menambahkan jumper antara pin 3.3V dan pin AREF. Jika Anda memutuskan untuk menggunakan fungsi analogRead (untuk alasan apa pun) saat 3.3V diterapkan ke pin AREF, Anda HARUS memanggil analogReference(EXTERNAL) sebelum Anda menggunakan fungsi analogRead. Jika tidak, Anda akan memperpendek tegangan referensi aktif (dihasilkan secara internal) dan pin AREF, yang mungkin merusak mikrokontroler pada papan Arduino Anda.


LANGKAH 2: Mengupload kode ke Arduino


Sekarang Anda harus mengunggah kode di bawah ini ke Arduino Anda. Untuk kenyamanan, sketsa Arduino juga tersedia di bagian Lampiran di bagian bawah postingan ini. Sebelum mengupload kode, Anda harus menginstal library BitVoicer Server dengan benar ke Arduino IDE (Mengimpor Library .zip).

BVS_Demo1.ino

Sketsa ini memiliki empat bagian utama:


  • Referensi pustaka dan deklarasi variabel:Dua baris pertama menyertakan referensi ke pustaka BVSP dan BVSMic. Pustaka ini disediakan oleh BitSophia dan dapat ditemukan di folder instalasi BitVoicer Server. Baris lain mendeklarasikan konstanta dan variabel yang digunakan di seluruh sketsa. Kelas BVSP digunakan untuk berkomunikasi dengan BitVoicer Server dan kelas BVSMic digunakan untuk menangkap dan menyimpan sampel audio.
  • Fungsi penyetelan:Fungsi ini menginisialisasi komunikasi serial, kelas BVSP, kelas BVSMic, dan menyetel "penangan peristiwa" (sebenarnya adalah penunjuk fungsi) untuk peristiwa yang diterima frame.
  • Fungsi loop:Fungsi ini melakukan tiga tindakan penting:meminta status foto server (fungsi keepAlive()), memeriksa apakah server telah mengirim data dan memproses data yang diterima (fungsi receiver()), dan mengontrol perekaman dan pengiriman audio stream (fungsi isSREAvailable(), startRecording(),stopRecording() dan sendStream()).
  • BVSP_frameReceivedfunction:Fungsi ini dipanggil setiap kali fungsi accept() mengidentifikasi bahwa satu frame lengkap telah diterima. Di sini saya menjalankan perintah yang dikirim dari BitVoicer Server. Perintah berisi 2 byte. Byte pertama menunjukkan pin dan byte kedua menunjukkan nilai pin. Saya menggunakan fungsi analogWrite() untuk menyetel nilai yang sesuai ke pin.


LANGKAH 3:Mengimpor Objek Solusi Server BitVoicer


Sekarang Anda harus mengatur Server BitVoicer untuk bekerja dengan Arduino. BitVoicer Server memiliki empat objek solusi utama:Lokasi, Perangkat, BinaryData, dan Skema Suara.

Lokasi mewakili lokasi fisik tempat perangkat dipasang. Dalam kasus saya, saya membuat lokasi bernama Beranda.

Perangkat adalah klien Server BitVoicer. Saya membuat perangkat Campuran, menamakannya ArduinoMicro dan memasuki pengaturan komunikasi. CATATAN TENTANG MIKRO ARDUINO :menggunakan RTS dan DTR sehingga Anda harus mengaktifkan pengaturan ini di tab komunikasi. Saya juga membuat perangkat SystemSpeaker untuk mensintesis ucapan menggunakan adaptor audio server.

BinaryData adalah jenis perintah yang dapat dikirim oleh BitVoicer Server ke perangkat klien. Mereka sebenarnya adalah array byte yang dapat Anda tautkan ke perintah. Ketika BitVoicer Server mengenali ucapan yang terkait dengan perintah itu, ia mengirimkan array byte ke perangkat target. Saya membuat satu objek BinaryData untuk setiap nilai pin dan menamakannya ArduinoMicroGreenLedOn, ArduinoMicroGreenLedOff dan seterusnya. Saya berakhir dengan 18 objek BinaryData dalam solusi saya, jadi saya sarankan Anda mengunduh dan mengimpor objek dari VoiceSchema.sof file di bawah ini.

Skema Suara adalah tempat segala sesuatu menyatu. Mereka menentukan kalimat apa yang harus dikenali dan perintah apa yang harus dijalankan. Untuk setiap kalimat, Anda dapat menentukan perintah sebanyak yang Anda butuhkan dan urutan eksekusinya. Anda juga dapat menentukan penundaan antar perintah. Begitulah cara saya berhasil melakukan urutan tindakan yang Anda lihat di video.

Anda dapat mengimpor (Mengimpor Objek Solusi) semua objek solusi yang saya gunakan dalam posting ini dari file di bawah ini. Satu berisi Perangkat dan yang lainnya berisi Skema Suara dan Perintahnya.

Perangkat.sof


Skema Suara.sof

LANGKAH 4:Kesimpulan


Hanya itu saja! Saya harap Anda menyukainya.

Anda memiliki semua yang Anda butuhkan untuk menjalankan demo yang ditampilkan dalam video. Perhatikan bahwa dalam video saya mulai dengan mengaktifkan perangkat ArduinoMicro di BitVoicer Server Manager. Segera setelah diaktifkan, Arduino mengidentifikasi Mesin Pengenalan Suara yang tersedia dan mulai mengalirkan audio ke Server BitVoicer.

Anda dapat mengikuti hasil pengenalan di alat Monitor Server yang tersedia di Manajer Server BitVoicer.

Dalam posting saya berikutnya, saya akan menunjukkan bagaimana Anda dapat mereproduksi pidato yang disintesis menggunakan Arduino DUE.


Kode

  • BVS_Demo1.ino
BVS_Demo1.inoArduino
#include #include // Mendefinisikan pin Arduino yang akan digunakan untuk menangkap audio #define BVSM_AUDIO_INPUT 5// Mendefinisikan pin LED#define RED_LED_PIN 6#define YELLOW_LED_PIN 9#define GREEN_LED_PIN 10// Mendefinisikan konstanta yang akan diteruskan sebagai parameter ke // fungsi BVSP.beginconst unsigned long STATUS_REQUEST_TIMEOUT =1000;const unsigned long STATUS_REQUEST_INTERVAL =2000;// Mendefinisikan ukuran audio buffer const int AUDIO_BUFFER_SIZE =64;/ / Menentukan ukuran int bufferconst penerima RECEIVE_BUFFER_SIZE =2;// Menginisialisasi instans global baru dari kelas BVSP BVSP bvsp =BVSP();// Menginisialisasi instans global baru dari kelas BVSMic BVSMic bvsm =BVSMic();/ / Membuat buffer yang akan digunakan untuk membaca sampel yang direkam // dari kelas BVSMic byte audioBuffer[AUDIO_BUFFER_SIZE];// Membuat buffer yang akan digunakan untuk membaca perintah yang dikirim// dari BitVoicer Server.// Byte 0 =pin number// Byte 1 =pin valuebyte acceptBuffer[RECEIVE_BUFFER _SIZE];void setup() { // Mengatur mode pin pinMode(RED_LED_PIN, OUTPUT); pinMode(KUNING_LED_PIN, KELUARAN); pinMode(GREEN_LED_PIN, OUTPUT); // Memulai komunikasi serial pada 115200 bps Serial.begin(115200); // Mengatur port serial Arduino yang akan digunakan untuk // komunikasi, berapa lama waktu yang dibutuhkan sebelum permintaan status // habis dan seberapa sering permintaan status harus dikirim ke // Server BitVoicer. bvsp.begin(Serial, STATUS_REQUEST_TIMEOUT, STATUS_REQUEST_INTERVAL); // Mendefinisikan fungsi yang akan menangani frameReceived // event bvsp.frameReceived =BVSP_frameReceived; // Mempersiapkan timer kelas BVSMic bvsm.begin();}void loop() { // Memeriksa apakah interval permintaan status telah berlalu dan jika // telah, mengirimkan permintaan status ke Server BitVoicer bvsp.keepAlive(); // Memeriksa apakah ada data yang tersedia di buffer port serial // dan memproses kontennya sesuai dengan spesifikasi // Protokol Server BitVoicer bvsp.receive(); // Memeriksa apakah ada satu SRE yang tersedia. Jika ada, // mulai merekam. if (bvsp.isSREAvailable()) { // Jika kelas BVSMic tidak merekam, atur input audio // dan mulai merekam if (!bvsm.isRecording) { bvsm.setAudioInput(BVSM_AUDIO_INPUT, EXTERNAL); bvsm.startRecording(); } // Memeriksa apakah kelas BVSMic memiliki sampel yang tersedia if (bvsm.available) { // Memastikan mode masuk adalah STREAM_MODE sebelum // mentransmisikan aliran if (bvsp.inboundMode ==FRAMED_MODE) bvsp.setInboundMode(STREAM_MODE); // Membaca sampel audio dari kelas BVSMic int byteRead =bvsm.read(audioBuffer, AUDIO_BUFFER_SIZE); // Mengirim aliran audio ke BitVoicer Server bvsp.sendStream(audioBuffer, bytesRead); } } else { // Tidak ada SRE yang tersedia. Jika kelas BVSMic sedang merekam, // menghentikannya. if (bvsm.isRecording) bvsm.stopRecording(); }}// Menangani frameReceived event void BVSP_frameReceived(byte dataType, int payloadSize) { // Memeriksa apakah frame yang diterima berisi data biner // 0x07 =Data biner (byte array) if (dataType ==DATA_TYPE_BINARY) { // If 2 byte diterima, proses perintah. if (bvsp.getReceivedBytes(receiveBuffer, RECEIVE_BUFFER_SIZE) ==RECEIVE_BUFFER_SIZE) { analogWrite(receiveBuffer[0], acceptBuffer[1]); } }}

Skema


Proses manufaktur

  1. Sistem Kehadiran Menggunakan Arduino dan RFID dengan Python
  2. Sensor DHT11 dengan LED dan Speaker Piezo
  3. Suhu Arduino. Monitor Dan Jam Waktu Nyata Dengan Tampilan 3.2
  4. Mengontrol Robot Roomba Dengan Arduino Dan Perangkat Android
  5. Voltmeter DIY dengan Arduino dan Tampilan Nokia 5110
  6. Mengontrol Motor Servo dengan Arduino dan MPU6050
  7. u-blox LEA-6H 02 Modul GPS dengan Arduino dan Python
  8. Cara membaca suhu dan kelembaban di Blynk dengan DHT11
  9. Pengenalan dan Sintesis Ucapan dengan Arduino
  10. 4x4x4 LED cube dengan Arduino Uno dan 1sheeld