![Sentuhan Kapasitif Dengan Mikrokontroler PIC16F886: 3 Langkah Sentuhan Kapasitif Dengan Mikrokontroler PIC16F886: 3 Langkah](https://i.howwhatproduce.com/images/001/image-210-79-j.webp)
2025 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2025-01-23 15:01
![Sentuhan Kapasitif Dengan Mikrokontroler PIC16F886 Sentuhan Kapasitif Dengan Mikrokontroler PIC16F886](https://i.howwhatproduce.com/images/001/image-210-80-j.webp)
Dalam tutorial ini kita akan membahas bagaimana anda dapat menggunakan mikrokontroler PIC16F886 untuk mengesan perbezaan kapasitansi, ini kemudian dapat digunakan untuk mengetahui apakah pad sentuhan sedang ditekan. Ada baiknya kita mengenal mikrokontroler pic sebelum membuat projek ini.
Langkah 1: Kabelkan Litar Anda
![Kabelkan Litar Anda Kabelkan Litar Anda](https://i.howwhatproduce.com/images/001/image-210-81-j.webp)
Pertama, mari kita mulakan dengan memasang litar mengikut skema di atas. Untuk membuat pad sentuh, anda boleh melipat aluminium foil menjadi kotak dan pita pada wayar. Anda boleh bereksperimen dengan nilai yang berbeza untuk perintang 100k, saya dapati 100k berfungsi dengan baik untuk saya.
Pin RC4 digunakan untuk mulai mengisi / melepaskan kapasitansi yang akan diukur. C12IN0 disambungkan ke - sisi pembanding dalaman dan pin C1IN disambungkan ke sisi + pembanding yang sama. Mikrokontroler melihat kapasitansi sebagai terisi penuh apabila voltan C12IN0 mencapai di atas voltan C1IN. Pembahagi voltan resistif memastikan C1IN mendekati 5 volt.
Oleh kerana pad sentuh bergantung pada kapasitansi yang signifikan antara anda dan tanah litar, ada kemungkinan bateri mungkin tidak berfungsi.
Langkah 2: Fail Header
![Fail Pengepala Fail Pengepala](https://i.howwhatproduce.com/images/001/image-210-82-j.webp)
Selesai dengan semua sambungan? Bagus, kami akan meneruskan fail header. Kami akan menggunakan penyusun XC8 dan seperti yang dicadangkan oleh judul anda sekarang anda harus membuat fail tajuk baru dalam projek anda dan menyalin-tampal kod berikut. Anda juga boleh menyalin-paste di atas kod utama anda tanpa fail tajuk.
#tentukan CALIBRATION_SAMPLE 20 # tentukan TOUCH_SAMPLE 10 # tentukan DISCHARGE_TIME 5
kiraan int;
int calibrationValue, maxCalibrationValue, minCalibrationValue;
int getChargeTime () {
int timerCount = 0; int overflowCount = 0; // kapasitansi pelepasan yang akan diukur RC4 = 0; _delay_ms (DISCHARGE_TIME); // beri kelewatan yang cukup untuk sepenuhnya (hampir sepenuhnya benar) melepaskan "kapasitor" // membersihkan bendera limpahan pemasa T0IF = 0; // tunggu pemasa meluap, mulakan kiraan dari 0 sementara (! T0IF); T0IF = 0; // mulakan pengisian kapasitansi yang akan diukur RC4 = 1; // tunggu kapasitansi untuk mengecas voltan rujukan sementara (C1OUT) {timerCount = TMR0; jika (T0IF) {overflowCount ++; T0IF = 0; }} kiraan = (256 * overflowCount) + timerCount; // reset timerCount timerCount = 0; overflowCount = 0; kiraan pulangan; }
int isTouching (toleransi int) {
// purata pelbagai sampel purata berganda = 0; untuk (int i = 0; i calibrationValue + toleransi) purata ++; } purata / = TOUCH_SAMPLE; // purata akan menjadi nombor antara 0 dan 1 jika (purata> 0,2) pulangan 1; pulangan 0; }
kalibrasi tidak sah () {
rata-rata int = 0; contoh int [CALIBRATION_SAMPLE]; // dapatkan nilai purata untuk (int i = 0; i <CALIBRATION_SAMPLE; i ++) {samples = getChargeTime (); purata + = sampel ; } purata / = CALIBRATION_SAMPLE; calibrationValue = purata; // dapatkan nilai max / min maxCalibrationValue = sampel [0]; minCalibrationValue = sampel [0]; untuk (int i = 0; i maxCalibrationValue) maxCalibrationValue = sampel ; jika (sampel <minCalibrationValue) minCalibrationValue = sampel ; }}
batal persediaanCapacitiveTouch () {
// menetapkan pin cas / pelepasan sebagai output, dalam kes ini ia adalah RC4 TRISCbits. TRISC4 = 0; // menetapkan pemasa0 T0CS = 0; PSA = 1; // menetapkan pembanding C1CH0 = 0; C1CH1 = 0; C1R = 0; C1ON = 1; C1POL = 0; // mengosongkan nilai nilai kiraan = 0; // membersihkan nilai penentukuran calibrationValue = 0; maxCalibrationValue = 0; minCalibrationValue = 0; // jalankan penentukuran pada permulaan kalibrasi (); }
Langkah 3: Menulis Kod Utama
Bermula dengan kod utama, anda perlu memasukkan fail tajuk yang dibuat pada langkah sebelumnya. Kod berikut adalah contoh bagaimana anda boleh menggunakan fungsi isTouching sebagai suis. Dalam kes saya, saya memberi tajuk tajuk capacitiveTouch.h.
#sertakan
#masuk "capacitiveTouch.h"
// pemboleh ubah ini memberitahu sama ada butang sudah atau belum ditekan
int lastState = 0;
kekosongan utama () {
// menetapkan RC5 sebagai output TRISCbits. TRISC5 = 0; // anda perlu memanggil fungsi ini pada permulaan program setupCapacitiveTouch (); _delay_ms (1000); // calibrate setelah penyediaan tepat anda calibrate (); sementara (1) {// memeriksa apakah butang ditekan jika (isTouching (15) && lastState == 0) {if (RC5) RC5 = 0; lain-lain RC5 = 1; LastState = 1; } // memeriksa sama ada butang dilepaskan jika lain (lastState == 1 &&! isTouching (15)) lastState = 0; _delay_ms (20); }}
menentukur:
Apabila fungsi ini dipanggil pemboleh ubah calibrationValue, maxCalibrationValue dan minCalibrationValue akan dikemas kini. calibrationValue digunakan oleh fungsi isTouching. Perlu diingat bahawa pad sentuh harus ditinggalkan sendiri semasa penentukuran.
persediaanCapacitiveTouch:
Perlu dipanggil pada awal program anda. Ia menetapkan bit yang diperlukan yang digunakan oleh fungsi lain. Ia juga menjalankan kalibrasi. Walau bagaimanapun, saya mendapat keputusan yang lebih baik dengan menunggu sebentar dan menjalankan penentukuran sekali lagi secara berasingan.
ialah Menyentuh:
Fungsi ini mengembalikan 1 jika mengesan peningkatan kapasitansi pada C12IN0 dan mengembalikan 0 jika kapasitansi mendekati fungsi yang berlaku semasa penentukuran. Secara sederhana, jika seseorang menyentuh pad, fungsi isTouching akan kembali 1. Fungsi ini juga mahu parameter sebagai input, inilah toleransi untuk mencetuskannya. Semakin tinggi nilai toleransi semakin kurang sensitif. Dalam persediaan saya, saya dapati 15 berfungsi dengan baik, tetapi kerana ini bergantung pada frekuensi ocsillator dan berapa kapasitansi yang ditambahkan semasa anda menekannya, anda harus bereksperimen dengan nilai ini sehingga anda menemui sesuatu yang sesuai untuk anda.
getChargeTime:
Apabila anda ingin mengetahui berapa lama masa yang diperlukan untuk mengisi kapasitans ke voltan CVREF, fungsi ini akan mengujinya dan mengembalikan bilangan bulat. Untuk mendapatkan masa dalam beberapa saat, anda menggunakan formula ini: (4 * getChargeTime) / oscillatorFrequency = chargeTimeInSeconds Formula ini juga dapat digunakan untuk mendapatkan input toleransi dari fungsi isTouching hingga detik.
Disyorkan:
Cara Membuat Piano Kapasitif Sentuhan Murah: 5 Langkah
![Cara Membuat Piano Kapasitif Sentuhan Murah: 5 Langkah Cara Membuat Piano Kapasitif Sentuhan Murah: 5 Langkah](https://i.howwhatproduce.com/images/011/image-32597-j.webp)
Cara Membuat Piano Kapasitif Sentuhan yang Murah: Saya peminat teknologi dan muzik, dan saya memutuskan untuk membuatnya selepas saya mendapat inspirasi dari kehidupan saya dahulu sebagai pelajar piano. Bagaimanapun … Dalam pelajaran ini, saya akan menunjukkan kepada anda cara membuat piano sentuh kapasitif yang murah menggunakan Arduino, pembesar suara dan kertas. Saya
Anda Boleh Melakukannya Dengan Sentuhan KIndle ?: 15 Langkah (dengan Gambar)
![Anda Boleh Melakukannya Dengan Sentuhan KIndle ?: 15 Langkah (dengan Gambar) Anda Boleh Melakukannya Dengan Sentuhan KIndle ?: 15 Langkah (dengan Gambar)](https://i.howwhatproduce.com/images/004/image-9956-23-j.webp)
Anda Boleh Melakukannya Dengan Sentuhan KIndle?: Saya tidak pernah faham mengapa ada orang yang ingin memiliki e-Reader. Kemudian anak-anak saya yang dewasa membesarkan saya Kindle Touch dan saya telah menemui kaedah untuk membuatnya seperti apa yang dilakukan oleh telefon pintar atau iPad untuk orang lain. Suatu hari ia akan menggantikan penuaan saya
Lancarkan Tayangan Tayangan Gambar Percutian Anda Dengan Sentuhan Sihir!: 9 Langkah (dengan Gambar)
![Lancarkan Tayangan Tayangan Gambar Percutian Anda Dengan Sentuhan Sihir!: 9 Langkah (dengan Gambar) Lancarkan Tayangan Tayangan Gambar Percutian Anda Dengan Sentuhan Sihir!: 9 Langkah (dengan Gambar)](https://i.howwhatproduce.com/images/004/image-10827-4-j.webp)
Lancarkan Tayangan Tayangan Gambar Percutian Anda Dengan Sentuhan Sihir!: Selama bertahun-tahun, saya telah membiasakan diri untuk mengambil patung kecil dengan saya semasa dalam perjalanan: Saya sering membeli artoy kosong (seperti gambar dalam gambar) dan cat ia sesuai dengan bendera dan tema negara yang saya lawati (dalam kes ini, Sisilia). T
Konfigurasi Fuse Bits Mikrokontroler AVR. Membuat dan Memuat naik dalam Memory Flash Mikrokontroler Program Berkelip LED: 5 Langkah
![Konfigurasi Fuse Bits Mikrokontroler AVR. Membuat dan Memuat naik dalam Memory Flash Mikrokontroler Program Berkelip LED: 5 Langkah Konfigurasi Fuse Bits Mikrokontroler AVR. Membuat dan Memuat naik dalam Memory Flash Mikrokontroler Program Berkelip LED: 5 Langkah](https://i.howwhatproduce.com/images/001/image-689-71-j.webp)
Konfigurasi Fuse Bits Mikrokontroler AVR. Membuat dan Memuat Naik dalam Memori Flash Mikrokontroler Program Berkelip LED: Dalam kes ini, kita akan membuat program sederhana dalam kod C dan membakarnya ke dalam memori mikrokontroler. Kami akan menulis program kami sendiri dan menyusun fail hex, menggunakan Atmel Studio sebagai platform pembangunan bersepadu. Kami akan mengkonfigurasi fius bi
Mood Sentuhan Kapasitif / Ambilight: 8 Langkah
![Mood Sentuhan Kapasitif / Ambilight: 8 Langkah Mood Sentuhan Kapasitif / Ambilight: 8 Langkah](https://i.howwhatproduce.com/preview/how-and-what-to-produce/11125539-capacitive-touch-moodambilight-8-steps-j.webp)
Capacitive Touch Mood / Ambilight: Instruksional ini adalah penulisan ringkas dari pengalaman saya dalam mewujudkan suasana hati pelbagai fungsi. Sebilangan pengetahuan asas mengenai litar elektronik diharapkan. Projek ini belum selesai, ada yang menambahkan fungsi dan tweak mesti dilakukan tetapi saya