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

Panduan Setup Perangkat Lunak Rekaman Audio ISD1700 dan Arduino yang Efisien

Komponen dan Perlengkapan

Aplikasi dan Layanan Online

Tentang Proyek Ini

Dalam salah satu proyek terbaru saya, saya perlu menambahkan suara untuk pesan teks singkat. Shield seperti modul MP3 dengan kartu SD terlalu berlebihan menurut saya, dan "mengajarkan" Arduino untuk mereproduksi ucapan manusia akan menghabiskan semua sumber daya mikrokontroler hanya untuk tugas ini, yang sebenarnya merupakan tugas tambahan. Selain itu, saya akan kehabisan memori dalam setiap kasus.

Pencarian singkat mengungkapkan chip rekaman dan pemutaran suara dari seri ISD1700, dikontrol SPI, yang mampu menyimpan pesan hingga beberapa menit.

Pesan suara telah disiapkan sebelumnya dalam bentuk file terpisah. Pertanyaan satu-satunya yang tersisa adalah cara merekamnya ke memori IC. Programmer untuk ISD1700 tidak banyak tersebar dan harganya jauh lebih mahal daripada chip itu sendiri. Ada beberapa informasi tentang cara membangun satu (https://laserwar.ru/sound_lasertag.html), tetapi saya adalah programmer bukan radio amatir, jadi saya ingin menggunakan perangkat keras standar - papan Arduino sangat cocok untuk peran itu.

Setelah datasheet («ISD1700Design Guide») dipelajari, saya menyadari ada input analog yang melalui file-file dapat direkam. Dan untuk otomatisasi proses, saya memutuskan untuk menulis perangkat lunak khusus - ISD1700 Record Tool.

ISD1700 Record Tool memungkinkan Anda merekam serangkaian file audio ke ISD1700 melalui papan Arduino. Perangkat lunak ini terdiri dari dua bagian: skets untuk papan Arduino (ISD1700.ino) dan aplikasi Windows mandiri (ISD1700.exe).

Skets dalam ISD1700.ino ditulis untuk papan ARDUINO berbasis ATMega328P (diuji pada Arduino Uno dan Arduino Nano), tetapi kemungkinan juga dapat bekerja pada papan lain.

Daftar ISD1700 yang didukung:

Aplikasi Windows didasarkan pada pustaka audio BASS, yang mendukung format yang paling banyak digunakan: MP3, WAV, OGG, dan sebagainya.

1. Koneksi Hardware

Selama pengembangan perangkat lunak, saya menggunakan modul rekaman jadi daripada IC ISD1700 terpisah. Sebelum mencoba variasi koneksi lain, saya sangat menyarankan untuk membaca datasheet asli ISD1700.

Gambar 1-5 menunjukkan set hardware saya. ARDUINO NANO digunakan dalam kasus ini.

Panduan Setup Perangkat Lunak Rekaman Audio ISD1700 dan Arduino yang Efisien

Pada breadboard kecil saya menempatkan dua soket 3.5mm (Gambar 2) untuk input audio (kiri) dan headset (kanan).

Panduan Setup Perangkat Lunak Rekaman Audio ISD1700 dan Arduino yang Efisien
Panduan Setup Perangkat Lunak Rekaman Audio ISD1700 dan Arduino yang Efisien

Saya merekomendasikan menggunakan unit pengganti daya tambahan daripada menganjurkan semua komponen melalui output 5V Arduino karena saya mengalami banyak error koneksi tanpa sumber daya eksternal. Namun, ini mungkin disebabkan oleh kualitas koneksi kabel yang buruk atau hal lain.

Panduan Setup Perangkat Lunak Rekaman Audio ISD1700 dan Arduino yang Efisien
Panduan Setup Perangkat Lunak Rekaman Audio ISD1700 dan Arduino yang Efisien

2. Memflash Arduino

Hubungkan papan Arduino ke PC Anda melalui USB, buka ISD1700.ino di ADUINO IDE dan unggah skets seperti biasa (Gambar 6).

Panduan Setup Perangkat Lunak Rekaman Audio ISD1700 dan Arduino yang Efisien

3. Antarmuka Pengguna Aplikasi

Jalankan ISD1700.exe. Deskripsi setiap elemen kontrol ditunjukkan pada Gambar 7.

Panduan Setup Perangkat Lunak Rekaman Audio ISD1700 dan Arduino yang Efisien

4. Urutan Operasi Tipikal

Gambar 8 menunjukkan urutan operasi tipikal dalam aplikasi Windows.

Panduan Setup Perangkat Lunak Rekaman Audio ISD1700 dan Arduino yang Efisien

Deskripsi:

  1. Buka file audio yang ingin Anda rekam ke ISD1700. Urutkan dengan menyeret mouse, atau hapus file yang tidak diinginkan (setelah memeriksa sebelumnya) jika diperlukan. Anda juga dapat memutar setiap file dan menyesuaikan tingkat volume.
  2. Pilih port COM tempat papan ARDUINO terhubung (Gambar 9).
  3. Tekan tombol “Detect ISD1700” dan pastikan model ISD1700 ditampilkan dalam kotak di kanan.
  4. Pastikan total durasi semua file audio lebih kecil dari kapasitas ISD1700 dalam detik; jika tidak, Anda tidak akan dapat memulai rekaman.
  5. Tekan tombol “Start record”. Anda dapat melihat progres pada bar. Tekan “Stop record” jika diperlukan.
  6. Setelah proses selesai, Anda dapat menyalin alamat semua salinan ke papan klip. Gambar 10 menunjukkan perbedaan antara dua opsi.
Panduan Setup Perangkat Lunak Rekaman Audio ISD1700 dan Arduino yang Efisien

Penggunaan modul rekaman ISD1700 memungkinkan memutar file audio segera setelah proses rekaman selesai dengan bantuan headset dan tombol papan.

Kode

ISD1700 ARDUINO codeC/C++
// Arduino code for ISD1700 Record Tool // Tested: Arduino Uno, Arduino Nano (ATMega328P) // Copyright: Anton Tsaritsynskyy, August 2019 // E-mail: tsaritsynskyy.a.a@gmail.com // // This software is provided "as is" without any warranties. // Author is not responsible for any undesired effects caused by using this software. // Commercial distribution of this software is not permitted. // Third-party libraries and components are properties of their respective developers. #include <SPI.h> const unsigned int ISD_ERASE_OK = 3002; const unsigned int ISD_REC_OK = 3003; const unsigned int ISD_STOP_OK = 3004; const unsigned int ISD_RESET_OK = 3005; const unsigned int ISD_CANCEL_OK = 3006; const unsigned int ISD_FULL = 3007; const byte ISD_SS_PIN = 8; boolean isdIsUp = false; boolean isdNotifyIfFull = true; boolean isdPowerUp(void) { byte SR0B1 = 1; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, LOW); SR0B1 = SPI.transfer(0x01); SPI.transfer(0x00); digitalWrite(ISD_SS_PIN, HIGH); SPI.endTransaction(); return (SR0B1 & 1) != 1; } boolean isdPowerDown(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, LOW); SPI.transfer(0x07); SPI.transfer(0x00); digitalWrite(ISD_SS_PIN, HIGH); SPI.endTransaction(); } boolean isdReset(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, LOW); SPI.transfer(0x03); SPI.transfer(0x00); digitalWrite(ISD_SS_PIN, HIGH); SPI.endTransaction(); delay(20); } void isdClrInt(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, LOW); SPI.transfer(0x04); SPI.transfer(0x00); digitalWrite(ISD_SS_PIN, HIGH); SPI.endTransaction(); } boolean isdIsReady(void) { byte SR1 = 0; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, LOW); SPI.transfer(0x05); SPI.transfer(0x00); SR1 = SPI.transfer(0x00); digitalWrite(ISD_SS_PIN, HIGH); SPI.endTransaction(); return (~SR1 & 1) != 1; } void isdEnableAnaIn(void) { byte APC[2]; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, LOW); SPI.transfer(0x44); SPI.transfer(0x00); APC[0] = SPI.transfer(0x00); APC[1] = SPI.transfer(0x00); digitalWrite(ISD_SS_PIN, HIGH); SPI.endTransaction(); APC[0] &= ~B01010000; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, LOW); SPI.transfer(0x45); SPI.transfer(APC[0]); SPI.transfer(APC[1]); digitalWrite(ISD_SS_PIN, HIGH); SPI.endTransaction(); } byte isdDeviceID(void) { byte ID; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, LOW); SPI.transfer(0x09); SPI.transfer(0x00); ID = SPI.transfer(0x00); digitalWrite(ISD_SS_PIN, HIGH); SPI.endTransaction(); return ID; } boolean isdIsFull(void) { byte SR0B1 = 2; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, LOW); SR0B1 = SPI.transfer(0x05); SPI.transfer(0x00); SPI.transfer(0x00); digitalWrite(ISD_SS_PIN, HIGH); SPI.endTransaction(); return (SR0B1 & 2) == 2; } void isdRec(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, LOW); SPI.transfer(0x41); SPI.transfer(0x00); digitalWrite(ISD_SS_PIN, HIGH); SPI.endTransaction(); delay(40); } void isdStop(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, LOW); SPI.transfer(0x02); SPI.transfer(0x00); digitalWrite(ISD_SS_PIN, HIGH); SPI.endTransaction(); delay(100); } void isdErase(void) { SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, LOW); SPI.transfer(0x43); SPI.transfer(0x00); digitalWrite(ISD_SS_PIN, HIGH); SPI.endTransaction(); while ( !isdIsReady() ) {} } unsigned int isdReadRecordPointer(void) { byte DB[2]; SPI.beginTransaction(SPISettings(1000000, LSBFIRST, SPI_MODE3)); digitalWrite(ISD_SS_PIN, LOW); SPI.transfer(0x08); SPI.transfer(0x00); DB[0] = SPI.transfer(0x00); DB[1] = SPI.transfer(0x00); digitalWrite(ISD_SS_PIN, HIGH); SPI.endTransaction(); return (DB[1] << 8) | DB[0]; } unsigned int isdInit(void) { while ( !isdPowerUp() ) {} delay(100); isdClrInt(); while ( !isdIsReady() ) {} isdEnableAnaIn(); return 3000+isdDeviceID(); } void setup() { pinMode(ISD_SS_PIN, OUTPUT); digitalWrite(ISD_SS_PIN, HIGH); Serial.begin(9600); SPI.begin(); } char cmd; void loop() { if (Serial.available()) { cmd = Serial.read(); switch (cmd) { case 'D': Serial.print( isdInit() ); isdPowerDown(); isdIsUp = false; break; case 'E': isdInit(); isdErase(); Serial.print(ISD_ERASE_OK); isdIsUp = true; isdNotifyIfFull = true; break; case 'R': isdRec(); Serial.print(ISD_REC_OK); break; case 'S': isdStop(); Serial.print( isdReadRecordPointer() ); break; case 'X': isdReset(); Serial.print(ISD_RESET_OK); isdIsUp = false; break; case 'C': if (isdIsUp) { isdStop(); isdReset(); Serial.print(ISD_CANCEL_OK); isdIsUp = false; } break; } } if (isdNotifyIfFull && isdIsUp) { if (isdIsFull()) { isdReset(); isdIsUp = false; Serial.print(ISD_FULL); isdNotifyIfFull = false; } } } 

Skematik

Panduan Setup Perangkat Lunak Rekaman Audio ISD1700 dan Arduino yang Efisien

Proses manufaktur

  1. Mencapai Sertifikasi ISO 26262 untuk Komponen Perangkat Lunak Otomotif
  2. Target Legako Tungsten-Titanium Berkinerja Tinggi untuk Chip Semikonduktor Lanjutan
  3. Target Tungsten Murni Tinggi: Kunci untuk Tipis Semikonduktor Lanjutan
  4. Startup Chip AI Mencapai Platou saat Fokus Indústri Berpindah ke Solusi Internal
  5. Oksimetri Nadi Portabel untuk Penggunaan Darurat Selama COVID-19
  6. Membuat Lampu Meja Reaktif Audio dengan Arduino Nano
  7. Pemantauan Cuaca Real-Time dengan Arduino & ThingSpeak IoT
  8. Pemaut Otomatis untuk Penemuan Arah Radio – Presisi, Kemudahan, dan Keandalan
  9. Health Band: Asisten Wearable Cerdas Terpercaya untuk Lansia
  10. Hexion Inc. Ajukan Konkordat Chapter 11 di Tengah Upaya Restrukturisasi