Isi kandungan:
- Langkah 1: Kes Penggunaan: Melicinkan Pengukuran ADC
- Langkah 2: Kes Penggunaan: Mengukur Komponen DC Isyarat Mikrofon
- Langkah 3: Pengiraan
- Langkah 4: Kodnya
- Langkah 5: Ekstra
- Langkah 6: Kesimpulannya
Video: Purata Menjalankan untuk Projek Mikrokontroler Anda: 6 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:07
Dalam arahan ini saya akan menerangkan apa itu rata-rata berjalan dan mengapa anda harus mempedulikannya, dan juga menunjukkan kepada anda bagaimana ia harus dilaksanakan untuk kecekapan komputasi maksimum (jangan bimbang tentang kerumitan, sangat mudah difahami dan saya akan menyediakan perpustakaan yang mudah digunakan untuk projek arduino anda juga:)
Rata-rata berjalan, juga biasa disebut sebagai rata-rata bergerak, rata-rata bergerak atau rata-rata berjalan, adalah istilah yang digunakan untuk menggambarkan nilai rata-rata nilai N terakhir dalam rangkaian data. Ini boleh dikira sama rata-rata normal atau anda boleh menggunakan tipuan untuk menjadikannya memberi kesan minimum terhadap prestasi kod anda.
Langkah 1: Kes Penggunaan: Melicinkan Pengukuran ADC
Arduino mempunyai 10 bit ADC yang baik dengan sedikit bunyi. Semasa mengukur nilai pada sensor seperti potensiometer, photoresistor atau komponen kebisingan tinggi yang lain, sukar untuk dipercayai bahawa pengukuran itu betul.
Salah satu penyelesaiannya adalah dengan melakukan beberapa pengukuran setiap kali anda ingin membaca sensor anda dan menghitungnya. Dalam beberapa kes, ini adalah penyelesaian yang boleh dilaksanakan tetapi tidak selalu. Sekiranya anda ingin membaca ADC 1000 kali sesaat, anda harus 10 000 jika anda mengambil purata 10 ukuran. Membazirkan banyak masa pengiraan.
Penyelesaian yang saya cadangkan adalah melakukan pengukuran 1000 kali sesaat, mengemas kini rata-rata berjalan setiap kali dan menggunakannya sebagai nilai semasa. Kaedah ini memperkenalkan beberapa kependaman tetapi mengurangkan kerumitan komputasi aplikasi anda, memberi anda lebih banyak masa untuk pemprosesan tambahan.
Dalam gambar di atas, saya menggunakan rata-rata 32 pengukuran terakhir. Anda akan melihat bahawa kaedah ini tidak 100% gagal tetapi akan meningkatkan ketepatan dengan ketara (tidak lebih buruk daripada rata-rata 32 sampel setiap kali). Sekiranya anda ingin mengira purata 32 pengukuran setiap kali, ini akan memakan masa lebih dari 0.25 ms di Arduino UNO untuk pengukuran sahaja!
Langkah 2: Kes Penggunaan: Mengukur Komponen DC Isyarat Mikrofon
Arduino dapat mengukur voltan antara 0 dan Vcc (biasanya 5 V). Isyarat audio benar-benar AC dan jika anda ingin mengukurnya pada mikrokontroler, anda harus bias sekitar 1/2 Vcc. Dalam projek Arduino UNO yang bermaksud kira-kira 2.5 V (DC) + isyarat audio (AC). Apabila menggunakan bekalan kuasa 10 bit ADC dan 5 V, bias 2.5 V harus sama dengan pengukuran 512. Jadi untuk mendapatkan nilai isyarat AC, 512 harus dikurangkan dari pengukuran ADC dan hanya itu, bukan?
Dalam dunia yang ideal, itu benar. Sayangnya kehidupan nyata lebih rumit dan kecenderungan isyarat kita cenderung melayang. Kebiasaan adalah kebisingan 50 Hz (60 Hz jika anda tinggal di AS) dari rangkaian elektrik. Biasanya tidak terlalu bermasalah tetapi ada baiknya mengetahui bahawa ia wujud. Lebih bermasalah ialah peralihan linear dari pemanasan komponen. Anda dengan berhati-hati menetapkan pembetulan offset DC pada permulaan dan perlahan-lahan melayang semasa aplikasi anda sedang berjalan.
Saya akan menerangkan masalah ini dengan alat muzik (music) beat detector. Anda menetapkan penghapusan berat sebelah dan rentak jelas (gambar 2). Selepas beberapa waktu, pergerakan dan rentak bias DC hampir tidak dapat dilihat oleh pengawal mikro (gambar 3). Algoritma pengesanan rentak akan diterokai secara mendalam pada masa akan datang yang dapat diarahkan kerana ia melebihi ruang lingkup artikel ini.
Nasib baik ada cara untuk terus mengira ofset DC audio. Tidak mengejutkan bahawa rata-rata berjalan, topik yang boleh dipesan ini, memberikan penyelesaian.
Kami tahu bahawa nilai purata bagi sebarang isyarat AC adalah 0. Dengan menggunakan pengetahuan ini, kita dapat menolak bahawa nilai purata isyarat AC + DC adalah bias DC. Untuk menghapusnya, kita dapat mengambil nilai rata-rata beberapa nilai terakhir dan mengurangkannya dari bacaan ADC semasa. Perhatikan bahawa anda perlu menggunakan jangka masa yang cukup lama. Untuk audio, sepersepuluh saat (bilangan sampel bergantung pada kadar sampel anda) sudah mencukupi tetapi ketahuilah bahawa purata lebih lama berfungsi lebih baik. Pada gambar pertama, anda dapat melihat contoh pengiraan bias DC sebenar dengan rata-rata berjalan dengan 64 elemen pada kadar sampel 1 kHz (kurang daripada yang saya sarankan tetapi masih berfungsi).
Langkah 3: Pengiraan
Anda boleh bayangkan rata-rata berjalan sebagai purata berat badan orang di ruang menunggu doktor. Doktor selesai memeriksa seorang pesakit dan serentak yang baru masuk ke ruang menunggu.
Untuk mengetahui berat rata-rata semua pesakit yang menunggu di ruang menunggu, perawat kemudian dapat bertanya kepada setiap pesakit mengenai berat badan mereka, menambahkan angka tersebut dan membagi dengan jumlah pesakit. Setiap kali doktor menerima pesakit baru, jururawat akan mengulangi keseluruhan proses.
Anda mungkin berfikir: "Ini tidak terdengar terlalu efisien … Pasti ada cara yang lebih baik untuk melakukan ini." Dan anda pasti betul.
Untuk mengoptimumkan proses ini, jururawat dapat menyimpan catatan jumlah berat kumpulan pesakit semasa. Setelah doktor memanggil pesakit baru, jururawat akan bertanya kepadanya tentang berat badannya dan mengurangkannya dari jumlah kumpulan dan membiarkannya pergi. Jururawat kemudian akan bertanya kepada pesakit yang baru saja memasuki ruang menunggu mengenai berat badannya dan menambahkannya kepada jumlah keseluruhan. Berat rata-rata pesakit selepas setiap shift adalah jumlah berat dibahagi dengan jumlah pesakit (ya, sama seperti sebelumnya tetapi sekarang jururawat hanya bertanya kepada dua orang mengenai berat badan mereka dan bukannya semuanya). Saya sedar perenggan ini mungkin agak membingungkan, jadi sila lihat ilustrasi di atas untuk penjelasan tambahan (atau ajukan soalan dalam komen).
Tetapi walaupun anda tidak menemui perenggan terakhir yang membingungkan, anda mungkin mempunyai soalan seperti apa yang seharusnya ada pada penumpuk pada awalnya, bagaimana cara memasukkan apa yang baru saya baca dalam kod C yang sebenarnya? Itu akan ditangani pada langkah seterusnya, di mana anda juga akan mendapatkan kod sumber saya.
Langkah 4: Kodnya
Untuk mengira purata berjalan, pertama anda memerlukan kaedah untuk menyimpan nilai N terakhir. anda mungkin mempunyai susunan dengan elemen N dan memindahkan keseluruhan kandungan ke satu tempat setiap kali anda menambahkan elemen (jangan lakukan ini), atau anda boleh menimpa satu elemen lama dan menyesuaikan penunjuk ke elemen seterusnya yang akan dibuang (sila lakukan ini:)
Akumulator harus mula diinisialisasi ke 0, sama berlaku untuk semua elemen dalam garis tunda. Dalam kes lain, rata-rata berjalan anda akan selalu salah. Anda akan melihat bahawa delayLine_init menguruskan memulakan garis kelewatan, anda harus mengurus penumpuk sendiri.
menambahkan elemen ke garis penundaan semudah pengurangan indeks elemen terbaru dengan 1, memastikan ia tidak menunjukkan sisi larik garis penundaan. setelah pengurangan indeks ketika 0, ia akan berubah menjadi 255 (kerana ia adalah bilangan bulat 8 bit yang tidak ditandatangani). Operator modulo (%) dengan ukuran susunan garis kelewatan akan memastikan indeks akan menunjukkan elemen yang sah.
Mengira purata berjalan semestinya mudah difahami jika anda mengikuti analogi saya pada langkah sebelumnya. Kurangkan elemen tertua dari penumpuk, tambahkan nilai terbaru ke penumpuk, tolak nilai terbaru ke garis penundaan, kembalikan pengumpul dibahagi dengan bilangan elemen.
Mudah, bukan?
Jangan ragu untuk bereksperimen dengan menggunakan kod yang dilampirkan untuk lebih memahami bagaimana semua ini berfungsi. Seperti sekarang, arduino membaca nilai analog pada pin analog A0 dan mencetak "[nilai ADC], [rata-rata berjalan]" pada port bersiri pada kadar baud 115200. Sekiranya anda membuka plotter bersiri arduino pada kadar baud yang betul, anda akan melihat dua baris: nilai ADC (biru) dan nilai halus (merah).
Langkah 5: Ekstra
Terdapat beberapa perkara yang anda tidak semestinya perlu tahu untuk menggunakan rata-rata berjalan dalam projek anda dan tidak ada salahnya untuk mengetahui.
kelewatan: Saya akan mulakan dengan membincangkan ilustrasi langkah ini. Anda akan melihat bahawa rata-rata berjalan lebih banyak elemen memperkenalkan kelewatan yang lebih besar. Sekiranya masa tindak balas anda untuk mengubah nilai adalah penting, anda mungkin ingin menggunakan purata berjalan yang lebih pendek atau meningkatkan kadar sampel (ukuran lebih kerap).
Melangkah terus.
inisialisasi: Semasa saya bercakap tentang memulakan elemen penumpuk dan penundaan, saya katakan anda harus menginisialisasi semuanya menjadi 0. Sebagai alternatif, anda boleh menginisialisasi garis tunda ke apa sahaja yang anda suka tetapi penumpuk harus bermula sebagai jumlah elemen N terbaru dalam garis tunda (di mana N ialah bilangan elemen dalam purata berjalan anda). Sekiranya penumpuk bermula seperti nilai lain, purata yang dikira akan salah - sama ada terlalu rendah atau terlalu tinggi, selalu dengan jumlah yang sama (dengan andaian keadaan awal yang sama). Saya cadangkan anda cuba mengetahui mengapa ini berlaku dengan menggunakan beberapa "simulasi pen dan kertas".
ukuran penumpuk: Anda juga harus perhatikan bahawa penumpuk harus cukup besar untuk menyimpan jumlah semua elemen dalam garis kelewatan jika semuanya positif atau negatif maksimum. Secara praktikal itu bermaksud penumpuk harus satu jenis data yang lebih besar daripada elemen garis tunda dan ditandatangani, jika elemen garis tunda ditandatangani.
silap mata: Garis penangguhan panjang memerlukan banyak memori. Itu boleh menjadi masalah dengan cepat. Sekiranya memori anda terhad dan tidak terlalu mementingkan ketepatan, anda boleh mengira purata berjalan dengan menghilangkan penangguhan sepenuhnya dan melakukannya: tolak 1 / N * penumpuk dari penumpuk dan tambahkan nilai baru (contohnya 8 rata-rata jangka panjang: penumpuk = penumpuk * 7/8 + Nilai baru). Kaedah ini memberikan hasil yang salah tetapi ini adalah kaedah yang baik untuk mengira purata berjalan ketika anda kehabisan memori.
linguistik: "rata-rata berjalan / rata-rata" biasanya digunakan ketika merujuk pada rata-rata waktu nyata sementara "rata-rata bergerak / rata-rata" biasanya bermaksud algoritma berjalan pada set data statik seperti spreadsheet excel.
Langkah 6: Kesimpulannya
Saya harap pengajaran ini cukup mudah difahami dan ia dapat membantu anda dalam projek masa depan anda. Jangan ragu untuk menghantar soalan di komen di bawah jika ada perkara yang tidak jelas.
Disyorkan:
Cara Membuat RADAR Menggunakan Arduino untuk Projek Sains - Projek Arduino Terbaik: 5 Langkah
Cara Membuat RADAR Menggunakan Arduino untuk Projek Sains | Projek Arduino Terbaik: Hai rakan-rakan, dalam pengajaran ini saya akan menunjukkan kepada anda bagaimana membuat sistem radar yang menakjubkan yang dibina menggunakan arduino nano projek ini sangat sesuai untuk projek sains dan anda boleh membuatnya dengan pelaburan dan peluang yang sangat rendah jika memenangi hadiah adalah bagus untuk
Purata Berat CP2 Excel: 14 Langkah
Purata Berat CP2 Excel: Arahan tentang cara mengira purata berwajaran dalam Excel. Dalam contoh ini fungsi SUMPRODUCT dan SUM akan digunakan dalam Excel. Purata berwajaran berguna untuk mengira keseluruhan gred bagi satu kelas
10 Projek Arduino Asas untuk Pemula! Buat sekurang-kurangnya 15 Projek Dengan Papan Tunggal !: 6 Langkah
10 Projek Arduino Asas untuk Pemula! Buat sekurang-kurangnya 15 Projek Dengan Papan Tunggal !: Projek Arduino & Lembaga Tutorial; Termasuk 10 projek asas Arduino. Semua kod sumber, fail Gerber dan banyak lagi. Tiada SMD! Pematerian mudah untuk semua orang. Komponen yang mudah ditanggalkan dan diganti. Anda boleh membuat sekurang-kurangnya 15 projek dengan satu
Panduan Pengaturcaraan Menarik untuk Pereka - Menjalankan Gambar Anda (Bahagian Satu): 16 Langkah
Panduan Pengaturcaraan Menarik untuk Pereka - Menjalankan Gambar Anda (Bahagian Satu): Lari! Lari! Jalankan! Pengaturcaraan tidak begitu sukar. Perkara utama adalah mencari irama anda dan melakukannya satu persatu. Sebelum membaca bab ini, saya harap anda sudah biasa dengan kaedah menggambar fungsi asas, atau anda akan merasa pening dan keliru
Tambahkan Video & Audio ke Projek Mikrokontroler Anda: 7 Langkah
Tambahkan Video & Audio ke Projek Mikrokontroler Anda: Paparan 7 Segmen LED berguna untuk memaparkan nombor dan bitmap LCD boleh melakukan grafik mudah, tetapi kadang-kadang output video warna yang nyata adalah cara termudah untuk pergi: Video komposit (aka, RCA Jack) adalah di mana-mana, dan berfungsi dengan 3 " - 60 & q