EDIT : Saya telah menyelidiki masalah ini selama beberapa waktu. Ternyata itu menjadi proyek yang jauh lebih sulit daripada yang saya pikirkan dan bukan sesuatu untuk pemula. Ini membutuhkan perangkat keras yang mahal (mikrofon & amplifier) dan beberapa analisis audio yang canggih pada mikrokontroler. Bahkan mikrofon lengkap dengan sirkuit amplyfier tidak memberikan hasil yang diinginkan (sesuai dengan komentar pada produk ini)
Saya sepenuhnya baru di Arduino (tapi saya akrab dengan pemrograman). Untuk membangun VU meter , saya ingin meletakkan mikrofon ke pin 0 analog Arduino dan menampilkan nilai melalui koneksi serial.
Saya mencari di Google dan menemukan sirkuit ini:
... dan saya mencoba membangunnya dengan hasil ini:
(Saya sekarang menggunakan sirkuit yang disarankan oleh Oli Glaser dalam jawabannya)
Nilai pada monitor serial tidak berubah tergantung pada volume musik.
Apa cara termudah untuk mengukur volume pada input analog Arduino?
Juga, saya punya TDA2822M , tapi saya tidak tahu apakah ini berguna untuk proyek ini. Keterangan pada mikrofon bertuliskan XF-18D .
Sunting: Kode Arduino saya:
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(analogRead(0));
delay(300);
}
Output serial: 1023 1022 1022 1022 1022 1023 1022 dan seterusnya
Bagaimana saya bisa mengecek apakah mikrofon berfungsi sama sekali? Apakah itu directional?
Sunting: Saya sekarang menggunakan transistor S9014. ADC dan kerja koneksi serial (saya mengujinya dengan potensiometer).
Output serial sekarang sekitar 57.
Juga, saya tidak punya multimeter atau osiloskop.
Saya memiliki multimeter sekarang.
sumber
Jawaban:
Cara "termudah" adalah dengan menerapkan sinyal dan sampel dengan ADC. Simpan hasil dalam buffer kemudian tampilkan sesuai keinginan (dalam kasus Anda kirim ke PC melalui RS232)
Jika Anda ingin tingkat sinyal RMS maka Anda perlu menghitung ini di beberapa titik, baik sebelum mengirim ke PC atau sesudahnya.
Sirkuit penguatan Anda seperti yang ditunjukkan tidak ideal, tetapi harus bekerja secara wajar untuk VU meter dasar. EDIT - Saya baru saja melihat C2, hapus ini karena akan memblokir bias DC dari transistor, dan sinyal akan berayun di bawah tanah.
EDIT - inilah rangkaian yang lebih baik untuk transistor yang memperkuat:
Ini seharusnya tidak terlalu peduli dengan transistor yang digunakan, bias output harus sekitar 2.5V.
Nilai tepat untuk pembagi input (R3 dan R4) tidak terlalu penting, rasio 1: 4 yang lebih penting. Jadi, Anda dapat menggunakan misalnya 400k dan 100k, atau 40k dan 10k, dll (cobalah untuk tidak pergi di atas atau di bawah nilai-nilai ini masing-masing). C2 harus> 10uF. C1 harus> 1uF (menggantikan C1 dalam skema Anda)
R1 dan R2 memang perlu nilai-nilai ini.
Yang Anda butuhkan adalah electret dengan resistor bias itu (R1 dalam skema Anda)
Satu hal yang menjadi perhatian adalah garis Arduino 3.3V dan 5V tampaknya saling terkait - Saya berasumsi ini adalah kesalahan skematik, tetapi jika ini yang terjadi pada rangkaian aktual, ia tidak akan berfungsi, dan dapat merusak sesuatu.
Untuk menunjukkan masalah, akan membantu untuk melihat kode Anda, dan apa yang Anda lihat di sisi PC. Transistor apa yang Anda gunakan?
Jika Anda memiliki osiloskop, maka Anda dapat memeriksa untuk melihat apakah mic / transistor Anda berfungsi dengan benar. Jika tidak, maka multimeter dapat digunakan untuk melakukan beberapa tes yang lebih mendasar (mis. Konfirmasi + 5V hadir, konfirmasi basis transistor berada pada ~ 0,6V, uji pengumpul untuk memastikan itu tidak disematkan ke + 5V atau ground tanpa ada sinyal)
Anda juga perlu memastikan RS232 bekerja dengan benar, jadi menulis beberapa kode sederhana untuk mengirim beberapa nilai tes akan menjadi ide yang bagus.
Jika Anda dapat memberikan info yang diminta, dan beri tahu kami alat apa yang tersedia, bantuan lebih spesifik dapat diberikan.
EDIT - jika Anda mengambil sampel dengan sangat lambat, maka Anda akan memerlukan rangkaian pendeteksi puncak seperti ini:
Anda akan meletakkan sirkuit ini di antara transistor dan pin Arduino (minus C2)
Dioda dapat berupa hampir semua dioda. Nilai cap dan resistor hanyalah panduan, mereka dapat diubah sedikit. Nilai mereka menentukan berapa lama tegangan akan berubah dengan tingkat sinyal. Anda dapat menghitung ini menggunakan konstanta RC (yaitu R * C - dalam contoh di atas, konstanta RC adalah 1e-6 * 10e3 = 10ms. Tegangan akan memakan waktu sekitar 2,3 konstanta waktu untuk turun hingga 90% dari nilai aslinya, jadi dalam contoh di atas jika tegangan dimulai pada 1V dan Anda menghapus sinyal, itu akan turun menjadi 0,1V sekitar 23 ms nanti.
EDIT - oke, saya pikir saya menemukan masalah besar. Transistor S9012 Anda adalah transistor PNP (seperti halnya S9015), Anda memerlukan transistor NPN untuk sirkuit ini. The S9014 adalah transistor NPN, sehingga Anda akan harus menggunakan yang satu ini.
Kapasitor bertanda "104" hampir pasti 0,1uF kapasitor keramik. Nilai (dalam pF) adalah 2 angka pertama diikuti oleh angka nol yang ditetapkan oleh angka terakhir. Jadi untuk 104, nilainya 10 + 4 nol, atau 100.000pF. 100.000pF adalah 100nF atau 0,1 uF.
EDIT - Tidak memiliki ruang lingkup atau multimeter membuat hidup sangat sulit di sini (Anda harus mendapatkan satu atau keduanya sesegera mungkin)
Namun, ada beberapa osiloskop kartu suara PC dasar yang dapat digunakan untuk menguji rangkaian electret / transistor Anda. Visual Analyzer adalah contoh yang cukup bagus:
Jika Anda mengganti C2 (tidak sepenuhnya diperlukan tetapi ide yang baik), Anda harus dapat memberi makan sinyal ke PC secara langsung dan mengamati dalam perangkat lunak untuk melihat apakah mikrofon dan amplifikasi berfungsi dengan benar. Jika PC Anda menggunakan saluran itu, tetapi input mikrofon biasanya baik untuk 2V IIRC. Anda juga dapat menguji electret secara langsung - cukup lepaskan bit transistor dan simpan R1 dan C1, ambil sinyal dari sisi lain C1.
Perhatikan bahwa metode ini tidak akan menguji level DC, hanya AC (karena tutup pemblokiran DC pada input souncard) tetapi sinyal AC (audio) adalah yang Anda minati di sini.
Jika Anda mencoba ini, poskan tangkapan layar agar kami dapat mengetahui apa yang terjadi.
sumber
EDIT
blok dan mengeditnya sehingga dapat dipahami tanpa membaca utas komentar? Saya juga seorang pemula dan saya tidak mengerti bagaimana masalah itu diselesaikan dan apakah saya dapat menggunakan sirkuit yang Anda pasang apa adanya.Dengan asumsi sirkuit Anda berfungsi, sinyal audio berada dalam kisaran kHz sedangkan Arduino memiliki ADC yang cocok untuk level DC. Komponen DC pada sinyal Anda adalah nol yang artinya mengapung di atas tegangan tetap. Adalah tegangan tetap yang dibaca ADC Anda.
Untuk memperbaikinya Anda akan meletakkan dioda secara seri dengan output Anda menghubungkan ke ADC dan ke kapasitor dan resistor.
Tutup akan mengisi ke nilai puncak yang diterima sementara resistor akan melepaskan tutup ketika sinyal mati.
Sunting: Input ADC sebenarnya mengambang karena tidak memiliki bias apa pun karena kapasitor seri. Jika Anda akan mencoba solusi saya hapus C2.
sumber
When using single-ended mode, the ADC bandwidth is limited by the ADC clock speed. Since one conversion takes 13 ADC clock cycles, a maximum ADC clock of 1 MHz means approximately 77k samples per second. This limits the bandwidth in single-ended mode to 38.5 kHz, according to the Nyquist sampling theorem.
Bacaan Anda 1022, 1023 pada dasarnya skala penuh pada ADC Arduino. Dengan asumsi Anda memasang kapasitor seri non-salah seperti yang ditunjukkan pada diagram Anda, level ini tidak dapat berasal dari rangkaian mikrofon yang Anda buat, karena itu hanya dapat mengubah tegangan beberapa (yaitu, AC).
Akibatnya, saya menduga Anda membaca arus bocor di dalam ATMEGA itu sendiri - Anda mungkin akan mendapatkan hasil yang sama pada pin analog (tidak terhubung) lainnya.
Coba buat pembagi tegangan yang sangat "ringan" dengan beberapa resistor bernilai tinggi (antara 10K dan 100K) dan gunakan ini untuk membuat bias input analog menjadi setengah dari tegangan referensi (Anda juga bisa menggunakan potensiometer, yang memberi Anda beberapa kemampuan pengujian tambahan). Maka bacaan Anda tanpa input harus berada di lingkungan 512.
Setelah Anda memiliki input ADC yang bias, Anda dapat mulai mencoba melihat apakah Anda mendapatkan variasi melalui itu. Anda mungkin menggarisbawahi bandwidth Anda beberapa, yang berarti Anda akan mendapatkan alias komponen frekuensi tinggi, tetapi jika semua yang Anda coba lakukan adalah memperkirakan volume keseluruhan yang seharusnya tidak terlalu banyak masalah.
sumber